Merge branch 'main' of git.kaiyuancloud.cn:yumoqing/bricks

This commit is contained in:
yumoqing 2025-02-05 10:56:33 +08:00
commit a645b11f59
5 changed files with 106 additions and 40 deletions

View File

@ -74,19 +74,20 @@ bricks.Cols = class extends bricks.VBox {
if (!data){
return;
}
if (! this.loader.is_max_page(page)){
var rev = ! this.loader.is_max_page(page);
if (rev){
data.reverse();
}
for (var i=0;i<data.length;i++){
var d = data[i];
var w = await bricks.widgetBuild(this.record_view, this.main, d);
w.user_data = d;
var r = data[i];
var w = await bricks.widgetBuild(this.record_view, this.main, r);
w.user_data = r;
w.bind('click', this.handle_click.bind(this, w));
w.set_attribute('data-page', page);
if (this.loader.is_max_page(page)){
this.main.add_widget(w);
} else {
if (rev){
this.main.add_widget(w, 0);
} else {
this.main.add_widget(w);
}
}
if (d.delete_page){
@ -97,7 +98,7 @@ bricks.Cols = class extends bricks.VBox {
var items = this.dom_element.querySelectorAll('[data-page="' + page + '"]');
for (var i=0;i<items.length;i++) {
var w = items[i].bricks_widget;
this.container.remove_widget(w);
this.main.remove_widget(w);
}
}
async load_first_page(params){
@ -123,7 +124,7 @@ bricks.Cols = class extends bricks.VBox {
if (d){
this.dataHandle(d);
var total = this.container.dom_element.scrollHeight - this.container.dom_element.clientHeight;
this.container.dom_element.scrollTop = d.pos_rate * total;
// this.container.dom_element.scrollTop = d.pos_rate * total;
} else {
bricks.debug(this.loader, 'load previous page error');
}
@ -167,12 +168,12 @@ bricks.Cols = class extends bricks.VBox {
if (d){
this.dataHandle(d);
var total = this.container.dom_element.scrollHeight - this.container.dom_element.clientHeight;
this.container.dom_element.scrollTop = d.pos_rate * total;
// this.container.dom_element.scrollTop = d.pos_rate * total;
} else {
bricks.debug(this.loader, 'load next page error');
console.log(this.loader, 'load next page error');
}
} catch (e){
bricks.debug('error happened', e);
console.log('error happened', e);
}
this.loading = false;
running.dismiss();

View File

@ -325,8 +325,8 @@ bricks.DataViewer = class extends bricks.VBox {
var d = await this.loader.loadNextPage();
if (d){
this.dataHandle(d);
var total = this.scrollpanel.dom_element.scrollHeight - this.scrollpanel.dom_element.clientHeight;
this.scrollpanel.dom_element.scrollTop = d.pos_rate * total;
// var total = this.scrollpanel.dom_element.scrollHeight - this.scrollpanel.dom_element.clientHeight;
// this.scrollpanel.dom_element.scrollTop = d.pos_rate * total;
} else {
bricks.debug(this.loader, 'load next page error');
}

View File

@ -4,9 +4,16 @@ bricks.key_selectable_stack = [];
bricks.Layout = class extends bricks.JsWidget {
constructor(options){
if (! options){
options = {};
}
super(options);
this._container = true;
this.keyselectable = options.keyselectable || false;
this.children = [];
if (this.use_key_select){
this.enable_key_select();
}
}
build_title(){
if (this.title){
@ -28,7 +35,6 @@ bricks.Layout = class extends bricks.JsWidget {
enable_key_select(){
this.keyselectable = true;
this.set_key_select_items();
this.selected_children = null;
bricks.app.bind('keydown', this.key_handler.bind(this));
bricks.key_selectable_stack.push(this)
this.select_default_item();
@ -101,25 +107,31 @@ bricks.Layout = class extends bricks.JsWidget {
}
down_level(){
this.set_key_select_items();
for (var i=0;i<this.key_select_items.length;i++){
var w = this.key_select_items[i];
if(w.keyselectable){
w.enable_key_select();
return true;
}
try {
if (w.down_level()){
return true;
}
} catch (e){
;
}
var w = this.selected_item;
if (! w) return;
if (! w.keyselectable){
w = w.find_first_keyselectable_child();
if (! w) return;
}
return false;
bricks.key_selectable_stack.push(this);
this.disable_key_select();
w.enable_key_select();
}
find_first_keyselectable_child(){
for (var i=0;i<this.children;i++){
if (this.children[i].keyselectable){
return this.children[i];
}
var sw = this.children[i].find_first_keyselectable_child();
if (sw) return sw;
}
return null
}
enter_handler(){
if (! this.selected_item) {
return;
}
this.selected_item.dispatch('click');
this.down_level();
}
key_handler(event){
if (!this.is_currkeyselectable()){

View File

@ -63,15 +63,37 @@ bricks.Video = class extends bricks.Layout {
}
}
}
findVideoButtonByClass(cls){
var e = this.dom_element;
return e.querySelector('.' + cls);
}
auto_play(){
return;
schedule_once(this._auto_play.bind(this), 0.5);
schedule_once(this._auto_play.bind(this), 0.8);
}
_auto_play(){
var play_btn = this.findVideoButtonByClass('vjs-big-play-button');
if (!play_btn){
console.log('vjs-big-play-button not found');
return;
}
if (play_btn.style.display == 'none'){
console.log('playing .............already');
return;
}
console.log('video ready, auto_playing ....');
schedule_once(this.disable_captions.bind(this), 2);
this.hidedbtn.dispatch('click');
var clickevent = new MouseEvent('click', {
'bubbles': true, // 事件是否冒泡
'cancelable': true // 事件是否可取消
});
play_btn.dispatchEvent(clickevent);
/*
if (this.autounmute && this.player.muted){
schedule_once(this.dispatch_mute.bind(this), 1);
}
*/
}
play(){
console.log('Video:play() called....');
this.player.play();
@ -91,6 +113,22 @@ bricks.Video = class extends bricks.Layout {
}
}
}
dispatch_mute(){
var mute_btn = this.findVideoButtonByClass("vjs-mute-control");
if (!mute_btn){
bricks.test_element = e;
console.log(e, 'there is not mute button found')
return;
}
var clickevent = new MouseEvent('click', {
'bubbles': true, // 事件是否冒泡
'cancelable': true // 事件是否可取消
});
if (this.player.muted && this.autounmute){
mute_btn.dispatchEvent(clickevent);
}
}
create_player(){
if(this.url){
this.player = videojs(this.video_body.dom_element, {
@ -125,6 +163,12 @@ bricks.Video = class extends bricks.Layout {
}
this.play_status = 'playok';
console.log(this.video_body.cur_url, 'play ok');
if (this.autounmute && this.player.muted){
schedule_once(this.dispatch_mute.bind(this), 1.5);
console.log('mute btn clicked');
} else {
console.log(this.autounmute, 'player.muted=', this.player.muted);
}
this.dispatch('play_ok', {src:this.video_body.cur_url,type:this.video_body.cur_vtype});
}
report_error(){
@ -150,6 +194,8 @@ bricks.Video = class extends bricks.Layout {
vtype = 'application/x-mpegURL';
} else if (t.endsWith('.mp4')){
vtype = 'video/mp4';
} else if (t.endsWith('.avi')){
vtype = 'video/avi';
} else if (t.endsWith('.webm')){
vtype = 'video/webm';
} else {
@ -192,6 +238,7 @@ bricks.Iptv = class extends bricks.VBox {
console.log('this.user_data =', this.user_data);
this.video = new bricks.Video({
autoplay:true,
autounmute:this.autounmute,
url:this.user_data.url
});
this.title_w = new bricks.Text({text:this.user_data.tv_name, wrap:false});

View File

@ -12,20 +12,27 @@ bricks.Wterm = class extends bricks.JsWidget {
super(opts);
schedule_once(this.open.bind(this), 0.5);
}
charsize_sizing(){
var cs = bricks.app.charsize;
this.term.setOption('fontSize', cs);
}
async open(){
var term = new Terminal();
var term_options = this.term_options || {};
var term = new Terminal(term_options);
this.term = term;
term.open(this.dom_element);
var ws = new WebSocket(this.opts.ws_url);
bricks.debug('FitAddon=', FitAddon);
this.fitAddon = new FitAddon.FitAddon()
term.loadAddon(this.fitAddon)
// this.fitAddon.fit()
this.fitAddon.fit();
this.charsize_sizing();
this.bind('resize', this.term_resize.bind(this))
ws.onmessage = msg => {
term.write(JSON.parse(msg.data).data);
};
ws.onopen = function(){
term.paste('ls -l\n')
};
term.onData(function(key) {
//Enter
let msg = {
@ -35,13 +42,12 @@ bricks.Wterm = class extends bricks.JsWidget {
ws.send(key);
});
term.focus();
term.paste("ls -l\n");
}
term_resize(){
try {
this.fitAddon.fit();
} catch(e){
bricks.debug('resize error', e);
console.log('resize error', e);
}
}
}