Skip to content
This repository has been archived by the owner on Jan 6, 2023. It is now read-only.

增加Tab键的反向操作功能,Shift+Tab快捷键删除行前的空格(或Tab快捷键产生的类似空格的内容) #3256

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"ignore": [
"dist/utf8-php/ueditor.all.js"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,4 @@ pip-log.txt
# Mac crap
.DS_Store
/node_modules
/package-lock.json
6 changes: 3 additions & 3 deletions _parse/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
head.removeChild(node)
}
},
domReady : function (onready) {
domReady : function ADXL(onready) {
var doc = window.document;
if (doc.readyState === "complete") {
onready();
Expand All @@ -74,7 +74,7 @@
try {
doc.documentElement.doScroll("left");
} catch (error) {
setTimeout(arguments.callee, 0);
setTimeout(ADXL, 0);
return;
}
onready();
Expand All @@ -84,7 +84,7 @@
});
} else {
doc.addEventListener("DOMContentLoaded", function () {
doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
doc.removeEventListener("DOMContentLoaded", ADXL, false);
onready();
}, false);
window.addEventListener('load', function(){onready()}, false);
Expand Down
4 changes: 2 additions & 2 deletions _src/adapter/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
var editor = this.editor,
me = this;

editor.addListener('ready', function () {
editor.addListener('ready', function ADXL() {
//提供getDialog方法
editor.getDialog = function (name) {
return editor.ui._dialogs[name + "Dialog"];
Expand All @@ -44,7 +44,7 @@
if (editor.options.wordCount) {
function countFn() {
setCount(editor,me);
domUtils.un(editor.document, "click", arguments.callee);
domUtils.un(editor.document, "click", ADXL);
}
domUtils.on(editor.document, "click", countFn);
editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
Expand Down
34 changes: 33 additions & 1 deletion _src/core/domUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -2408,6 +2408,38 @@ var domUtils = dom.domUtils = {
}
return true;
},
fillHtml : browser.ie11below ? '&nbsp;' : '<br/>'
fillHtml : browser.ie11below ? '&nbsp;' : '<br/>',

/**
* add by ading 2020年4月1日10:20:17
* 删除节点前部的Tab键产生的空格,即tab键的shift+tab反向效果
* @method deleteTabspace
* @param { Node } delNode 需要删除tab空格的节点
* @param { Number } spaceCount 需要查询位置关系的节点B
* @return { Boolean } 是否有删除
* @example
*/
deleteTabspace: function(delNode, spaceCount){
var bearkFlag = false;
var reg1 = new RegExp('^[ , ]','g'); //创建正则RegExp对象 
var reg2 = new RegExp('^​','g'); //创建正则RegExp对象 
// 循环所有子元素寻找第一个不为空的子元素进行删除tab空格
this.getChildCount( delNode, function ( node ) {
if(!bearkFlag) {
if(!(node.id && node.id.indexOf('baidu_bookmark')>0)){
if((node.textContent && node.textContent.length>0) || (node.data && node.data.length>0)){
if(node.data && node.data.length>0){
var newData = node.data;
for( i = 0; i < spaceCount; i++ ) newData = newData.replace(reg1, '');
newData = newData.replace(reg2,'');
node.replaceWith(newData);
}
bearkFlag = true;
}
}
}
});
return bearkFlag;
}
};
var fillCharReg = new RegExp(domUtils.fillChar, 'g');
42 changes: 21 additions & 21 deletions _src/core/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@ var utils = UE.utils = {
}
}

return function (onready, win) {
return function ADXL(onready, win) {
win = win || window;
var doc = win.document;
onready && fnArr.push(onready);
Expand All @@ -856,7 +856,7 @@ var utils = UE.utils = {
try {
doc.documentElement.doScroll("left");
} catch (error) {
setTimeout(arguments.callee, 0);
setTimeout(ADXL, 0);
return;
}
doReady(doc);
Expand All @@ -866,7 +866,7 @@ var utils = UE.utils = {
});
} else {
doc.addEventListener("DOMContentLoaded", function () {
doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
doc.removeEventListener("DOMContentLoaded", ADXL, false);
doReady(doc);
}, false);
win.addEventListener('load', function () {
Expand Down Expand Up @@ -1146,44 +1146,44 @@ var utils = UE.utils = {
};
/**
* 判断给定的对象是否是字符串
* @method isString
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是字符串
* method isString
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是字符串
*/

/**
* 判断给定的对象是否是数组
* @method isArray
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是数组
* method isArray
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是数组
*/

/**
* 判断给定的对象是否是一个Function
* @method isFunction
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是Function
* method isFunction
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是Function
*/

/**
* 判断给定的对象是否是Number
* @method isNumber
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是Number
* method isNumber
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是Number
*/

/**
* 判断给定的对象是否是一个正则表达式
* @method isRegExp
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是正则表达式
* method isRegExp
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是正则表达式
*/

/**
* 判断给定的对象是否是一个普通对象
* @method isObject
* @param { * } object 需要判断的对象
* @return { Boolean } 给定的对象是否是普通对象
* method isObject
* param { * } object 需要判断的对象
* return { Boolean } 给定的对象是否是普通对象
*/
utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object', 'Date'], function (v) {
UE.utils['is' + v] = function (obj) {
Expand Down
8 changes: 4 additions & 4 deletions _src/plugins/autosubmit.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

/**
* 提交表单
* @command autosubmit
* @method execCommand
* @param { String } cmd 命令字符串
* @example
* command autosubmit
* method execCommand
* param { String } cmd 命令字符串
* example
* ```javascript
* editor.execCommand( 'autosubmit' );
* ```
Expand Down
23 changes: 20 additions & 3 deletions _src/plugins/keystrokes.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,17 @@ UE.plugins['keystrokes'] = function() {
var span = me.document.createElement('span');
span.innerHTML = txt + domUtils.fillChar;
if (range.collapsed) {
range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
// change by ading 2020年4月1日11:16:25 单行`Tab`快捷键增加支持 `shift+Tab`反向操作
if(evt.shiftKey){
var bookmark = range.createBookmark();
range.enlarge(true);
var bookmark2 = range.createBookmark(),
current = domUtils.getNextDomNode(bookmark2.start, false, filterFn);
domUtils.deleteTabspace(current, tabSize);
range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select();
} else {
range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
}
} else {
var filterFn = function(node) {
return domUtils.isBlockElm(node) && !excludeTagNameForTabKey[node.tagName.toLowerCase()]
Expand All @@ -130,8 +140,15 @@ UE.plugins['keystrokes'] = function() {
var bookmark2 = range.createBookmark(),
current = domUtils.getNextDomNode(bookmark2.start, false, filterFn);
while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) {
current.insertBefore(span.cloneNode(true).firstChild, current.firstChild);
current = domUtils.getNextDomNode(current, false, filterFn);
// change by ading 2020年4月1日11:18:52 多行`Tab`快捷键增加支持 `shift+Tab`反向操作
if(evt.shiftKey){
var nextN = domUtils.getNextDomNode(current, false, filterFn);
domUtils.deleteTabspace(current, tabSize);
current = nextN;
}else{
current.insertBefore(span.cloneNode(true).firstChild, current.firstChild);
current = domUtils.getNextDomNode(current, false, filterFn);
}
}
range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select();
}
Expand Down
12 changes: 6 additions & 6 deletions _src/plugins/webapp.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@

/**
* 插入百度应用
* @command webapp
* @method execCommand
* @remind 需要百度APPKey
* @remind 百度应用主页: <a href="http://app.baidu.com/" target="_blank">http://app.baidu.com/</a>
* @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度,
* command webapp
* method execCommand
* remind 需要百度APPKey
* remind 百度应用主页: <a href="http://app.baidu.com/" target="_blank">http://app.baidu.com/</a>
* param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度,
* height=>应用容器高度,logo=>应用logo,url=>应用地址
* @example
* example
* ```javascript
* //editor是编辑器实例
* //在编辑器里插入一个“植物大战僵尸”的APP
Expand Down