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

View File

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

View File

@ -4,9 +4,16 @@ bricks.key_selectable_stack = [];
bricks.Layout = class extends bricks.JsWidget { bricks.Layout = class extends bricks.JsWidget {
constructor(options){ constructor(options){
if (! options){
options = {};
}
super(options); super(options);
this._container = true; this._container = true;
this.keyselectable = options.keyselectable || false;
this.children = []; this.children = [];
if (this.use_key_select){
this.enable_key_select();
}
} }
build_title(){ build_title(){
if (this.title){ if (this.title){
@ -28,7 +35,6 @@ bricks.Layout = class extends bricks.JsWidget {
enable_key_select(){ enable_key_select(){
this.keyselectable = true; this.keyselectable = true;
this.set_key_select_items(); this.set_key_select_items();
this.selected_children = null;
bricks.app.bind('keydown', this.key_handler.bind(this)); bricks.app.bind('keydown', this.key_handler.bind(this));
bricks.key_selectable_stack.push(this) bricks.key_selectable_stack.push(this)
this.select_default_item(); this.select_default_item();
@ -101,25 +107,31 @@ bricks.Layout = class extends bricks.JsWidget {
} }
down_level(){ down_level(){
this.set_key_select_items(); this.set_key_select_items();
for (var i=0;i<this.key_select_items.length;i++){ var w = this.selected_item;
var w = this.key_select_items[i]; if (! w) return;
if(w.keyselectable){ if (! w.keyselectable){
w = w.find_first_keyselectable_child();
if (! w) return;
}
bricks.key_selectable_stack.push(this);
this.disable_key_select();
w.enable_key_select(); w.enable_key_select();
return true;
} }
try { find_first_keyselectable_child(){
if (w.down_level()){ for (var i=0;i<this.children;i++){
return true; if (this.children[i].keyselectable){
return this.children[i];
} }
} catch (e){ var sw = this.children[i].find_first_keyselectable_child();
; if (sw) return sw;
} }
} return null
return false;
} }
enter_handler(){ enter_handler(){
if (! this.selected_item) {
return;
}
this.selected_item.dispatch('click'); this.selected_item.dispatch('click');
this.down_level();
} }
key_handler(event){ key_handler(event){
if (!this.is_currkeyselectable()){ 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(){ auto_play(){
return; schedule_once(this._auto_play.bind(this), 0.8);
schedule_once(this._auto_play.bind(this), 0.5);
} }
_auto_play(){ _auto_play(){
console.log('video ready, auto_playing ....'); var play_btn = this.findVideoButtonByClass('vjs-big-play-button');
schedule_once(this.disable_captions.bind(this), 2); if (!play_btn){
this.hidedbtn.dispatch('click'); 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 ....');
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(){ play(){
console.log('Video:play() called....'); console.log('Video:play() called....');
this.player.play(); 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(){ create_player(){
if(this.url){ if(this.url){
this.player = videojs(this.video_body.dom_element, { this.player = videojs(this.video_body.dom_element, {
@ -125,6 +163,12 @@ bricks.Video = class extends bricks.Layout {
} }
this.play_status = 'playok'; this.play_status = 'playok';
console.log(this.video_body.cur_url, 'play ok'); 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}); this.dispatch('play_ok', {src:this.video_body.cur_url,type:this.video_body.cur_vtype});
} }
report_error(){ report_error(){
@ -150,6 +194,8 @@ bricks.Video = class extends bricks.Layout {
vtype = 'application/x-mpegURL'; vtype = 'application/x-mpegURL';
} else if (t.endsWith('.mp4')){ } else if (t.endsWith('.mp4')){
vtype = 'video/mp4'; vtype = 'video/mp4';
} else if (t.endsWith('.avi')){
vtype = 'video/avi';
} else if (t.endsWith('.webm')){ } else if (t.endsWith('.webm')){
vtype = 'video/webm'; vtype = 'video/webm';
} else { } else {
@ -192,6 +238,7 @@ bricks.Iptv = class extends bricks.VBox {
console.log('this.user_data =', this.user_data); console.log('this.user_data =', this.user_data);
this.video = new bricks.Video({ this.video = new bricks.Video({
autoplay:true, autoplay:true,
autounmute:this.autounmute,
url:this.user_data.url url:this.user_data.url
}); });
this.title_w = new bricks.Text({text:this.user_data.tv_name, wrap:false}); 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); super(opts);
schedule_once(this.open.bind(this), 0.5); schedule_once(this.open.bind(this), 0.5);
} }
charsize_sizing(){
var cs = bricks.app.charsize;
this.term.setOption('fontSize', cs);
}
async open(){ async open(){
var term = new Terminal(); var term_options = this.term_options || {};
var term = new Terminal(term_options);
this.term = term; this.term = term;
term.open(this.dom_element); term.open(this.dom_element);
var ws = new WebSocket(this.opts.ws_url); var ws = new WebSocket(this.opts.ws_url);
bricks.debug('FitAddon=', FitAddon);
this.fitAddon = new FitAddon.FitAddon() this.fitAddon = new FitAddon.FitAddon()
term.loadAddon(this.fitAddon) term.loadAddon(this.fitAddon)
// this.fitAddon.fit() this.fitAddon.fit();
this.charsize_sizing();
this.bind('resize', this.term_resize.bind(this)) this.bind('resize', this.term_resize.bind(this))
ws.onmessage = msg => { ws.onmessage = msg => {
term.write(JSON.parse(msg.data).data); term.write(JSON.parse(msg.data).data);
}; };
ws.onopen = function(){
term.paste('ls -l\n')
};
term.onData(function(key) { term.onData(function(key) {
//Enter //Enter
let msg = { let msg = {
@ -35,13 +42,12 @@ bricks.Wterm = class extends bricks.JsWidget {
ws.send(key); ws.send(key);
}); });
term.focus(); term.focus();
term.paste("ls -l\n");
} }
term_resize(){ term_resize(){
try { try {
this.fitAddon.fit(); this.fitAddon.fit();
} catch(e){ } catch(e){
bricks.debug('resize error', e); console.log('resize error', e);
} }
} }
} }