bugfix
This commit is contained in:
parent
446b78b0f6
commit
70ce70dbd6
@ -338,6 +338,7 @@ bricks.Form = class extends bricks.FormBase {
|
|||||||
height:"100%",
|
height:"100%",
|
||||||
value:f.value
|
value:f.value
|
||||||
});
|
});
|
||||||
|
txtw.bind('active', txtw.focus.bind(txtw));
|
||||||
tp_options.items.push({
|
tp_options.items.push({
|
||||||
name:f.name,
|
name:f.name,
|
||||||
label:f.label,
|
label:f.label,
|
||||||
|
@ -856,12 +856,19 @@ bricks.UiText =class extends bricks.UiType {
|
|||||||
this.handle_tab_indent(erase);
|
this.handle_tab_indent(erase);
|
||||||
break;
|
break;
|
||||||
case 'Enter':
|
case 'Enter':
|
||||||
e.preventDefault(); // 阻止默认Tab行为
|
e.preventDefault(); // 阻止默认行为
|
||||||
this.handle_enter();
|
this.handle_enter();
|
||||||
|
break;
|
||||||
|
case 'ArrowUp':
|
||||||
|
case 'ArrowDown':
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
set_editor_focus(editor, pos){
|
||||||
|
editor.selectionStart = editor.selectionEnd = pos;
|
||||||
|
editor.focus();
|
||||||
|
}
|
||||||
handle_enter(){
|
handle_enter(){
|
||||||
var editor = this.dom_element;
|
var editor = this.dom_element;
|
||||||
const cursorPos = editor.selectionStart;
|
const cursorPos = editor.selectionStart;
|
||||||
@ -870,6 +877,8 @@ bricks.UiText =class extends bricks.UiType {
|
|||||||
const after = value.substring(cursorPos);
|
const after = value.substring(cursorPos);
|
||||||
editor.value = before + '\n' + after;
|
editor.value = before + '\n' + after;
|
||||||
editor.selectionStart = editor.selectionEnd = cursorPos + 1;
|
editor.selectionStart = editor.selectionEnd = cursorPos + 1;
|
||||||
|
editor.focus();
|
||||||
|
schedule_once(this.set_editor_focus.bind(this, editor, cursorPos+1), 0.5);
|
||||||
}
|
}
|
||||||
handle_tab_indent(erase){
|
handle_tab_indent(erase){
|
||||||
/* erase == true : delete tabspace
|
/* erase == true : delete tabspace
|
||||||
@ -877,6 +886,7 @@ bricks.UiText =class extends bricks.UiType {
|
|||||||
add tabspace
|
add tabspace
|
||||||
*/
|
*/
|
||||||
var editor = this.dom_element;
|
var editor = this.dom_element;
|
||||||
|
var indent_cnt;
|
||||||
const cursorPos = editor.selectionStart;
|
const cursorPos = editor.selectionStart;
|
||||||
const value = editor.value;
|
const value = editor.value;
|
||||||
|
|
||||||
@ -884,49 +894,30 @@ bricks.UiText =class extends bricks.UiType {
|
|||||||
const beforeCursor = value.substring(0, cursorPos);
|
const beforeCursor = value.substring(0, cursorPos);
|
||||||
const lastLineStart = beforeCursor.lastIndexOf("\n") + 1; // 上一行的结束位置
|
const lastLineStart = beforeCursor.lastIndexOf("\n") + 1; // 上一行的结束位置
|
||||||
const currentLineStart = lastLineStart; // 当前行的开始位置
|
const currentLineStart = lastLineStart; // 当前行的开始位置
|
||||||
|
const cur_col = cursorPos - currentLineStart;
|
||||||
// 获取当前行的文本
|
var pos;
|
||||||
const currentLine = value.substring(currentLineStart, value.indexOf("\n", currentLineStart) !== -1 ? value.indexOf("\n", currentLineStart) : undefined);
|
|
||||||
|
|
||||||
// 判断当前行的缩进(获取行首的空格数)
|
|
||||||
const leadingSpaces = currentLine.match(/^\s*/)[0];
|
|
||||||
const spacesCount = leadingSpaces.length;
|
|
||||||
|
|
||||||
// 设置插入的空格数量(确保每次按Tab后光标前总是4个空格的缩进)
|
|
||||||
let indentationCount = 0;
|
|
||||||
if (spacesCount % 4 === 0) {
|
|
||||||
indentationCount = 4; // 如果已经是4的倍数,插入4个空格
|
|
||||||
} else if (spacesCount % 4 === 1) {
|
|
||||||
indentationCount = 3; // 如果有1个空格,插入3个空格
|
|
||||||
} else if (spacesCount % 4 === 2) {
|
|
||||||
indentationCount = 2; // 如果有2个空格,插入2个空格
|
|
||||||
} else if (spacesCount % 4 === 3) {
|
|
||||||
indentationCount = 1; // 如果有3个空格,插入1个空格
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理Tab键按下
|
|
||||||
if (!erase){
|
if (!erase){
|
||||||
|
indent_cnt = 4 - cur_col % 4;
|
||||||
|
if (indent_cnt == 0) indent_cnt = 4;
|
||||||
// 根据光标前的空格数动态插入合适数量的空格
|
// 根据光标前的空格数动态插入合适数量的空格
|
||||||
const before = value.substring(0, cursorPos);
|
const before = value.substring(0, cursorPos);
|
||||||
const after = value.substring(cursorPos);
|
const after = value.substring(cursorPos);
|
||||||
|
const indentation = ' '.repeat(indent_cnt); // 生成合适数量的空格
|
||||||
const indentation = ' '.repeat(indentationCount); // 生成合适数量的空格
|
|
||||||
|
|
||||||
// 更新文本框的值,插入缩进
|
|
||||||
editor.value = before + indentation + after;
|
editor.value = before + indentation + after;
|
||||||
|
|
||||||
// 更新光标位置(将光标移到插入的缩进后面)
|
// 更新光标位置(将光标移到插入的缩进后面)
|
||||||
editor.selectionStart = editor.selectionEnd = cursorPos + indentationCount;
|
pos = cursorPos + indent_cnt;
|
||||||
|
editor.selectionStart = editor.selectionEnd = cursorPos + indent_cnt;
|
||||||
} else {
|
} else {
|
||||||
// 处理Shift + Tab(减少缩进)
|
indent_cnt = cur_col % 4;
|
||||||
// 如果当前行有4个空格的缩进,删除它
|
if (indent_cnt == 0) indent_cnt = 4;
|
||||||
if (spacesCount >= 4) {
|
const before = value.substring(0, cursorPos - indent_cnt);
|
||||||
const before = value.substring(0, cursorPos - 4);
|
const after = value.substring(cursorPos);
|
||||||
const after = value.substring(cursorPos);
|
editor.value = before + after;
|
||||||
editor.value = before + after;
|
pos = cursorPos - indent_cnt;
|
||||||
editor.selectionStart = editor.selectionEnd = cursorPos - 4;
|
editor.selectionStart = editor.selectionEnd = cursorPos - indent_cnt;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
editor.focus();
|
||||||
|
schedule_once(this.set_editor_focus.bind(this, editor, pos), 0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,13 @@ bricks.TabPanel = class extends bricks.Layout {
|
|||||||
tab-button-active
|
tab-button-active
|
||||||
tab-button-hover
|
tab-button-hover
|
||||||
tab-content
|
tab-content
|
||||||
|
|
||||||
|
events:
|
||||||
|
switch: fired when switch content
|
||||||
|
event data: actived content widget
|
||||||
|
|
||||||
|
content wedget event:
|
||||||
|
active: fired when the content event is switch to show
|
||||||
*/
|
*/
|
||||||
constructor(options){
|
constructor(options){
|
||||||
super(options);
|
super(options);
|
||||||
@ -87,9 +94,8 @@ bricks.TabPanel = class extends bricks.Layout {
|
|||||||
if (tdesc.name == items[i].name){
|
if (tdesc.name == items[i].name){
|
||||||
var w = objget(this.content_buffer, tdesc.name);
|
var w = objget(this.content_buffer, tdesc.name);
|
||||||
if (w && ! items[i].refresh){
|
if (w && ! items[i].refresh){
|
||||||
this.content_container.clear_widgets();
|
|
||||||
this.content_container.add_widget(w);
|
|
||||||
this.cur_tab_name = name;
|
this.cur_tab_name = name;
|
||||||
|
this.switch_content(w);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -103,9 +109,8 @@ bricks.TabPanel = class extends bricks.Layout {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.content_buffer[tdesc.name] = w;
|
this.content_buffer[tdesc.name] = w;
|
||||||
this.content_container.clear_widgets();
|
|
||||||
this.content_container.add_widget(w);
|
|
||||||
this.cur_tab_name = tdesc.name;
|
this.cur_tab_name = tdesc.name;
|
||||||
|
this.switch_content(w);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
@ -115,6 +120,12 @@ bricks.TabPanel = class extends bricks.Layout {
|
|||||||
}
|
}
|
||||||
bricks.debug('TabPanel(): click event handled but noting to do', tdesc)
|
bricks.debug('TabPanel(): click event handled but noting to do', tdesc)
|
||||||
}
|
}
|
||||||
|
switch_content(w){
|
||||||
|
this.content_container.clear_widgets();
|
||||||
|
this.content_container.add_widget(w);
|
||||||
|
this.dispatch('switch', w);
|
||||||
|
w.dispatch('active');
|
||||||
|
}
|
||||||
add_tab(desc){
|
add_tab(desc){
|
||||||
var item = this.toolbar.createTool(desc);
|
var item = this.toolbar.createTool(desc);
|
||||||
if (desc.removable){
|
if (desc.removable){
|
||||||
|
Loading…
Reference in New Issue
Block a user