fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

97 lines
2.7 KiB

/**
*
* Created by GUY on 2017/09/18.
* @class BI.RichEditorParamAction
* @extends BI.Widget
*/
BI.RichEditorParamAction = BI.inherit(BI.RichEditorAction, {
_defaultConfig: function () {
return BI.extend(BI.RichEditorParamAction.superclass._defaultConfig.apply(this, arguments), {});
},
_init: function () {
BI.RichEditorParamAction.superclass._init.apply(this, arguments);
},
_isParam: function (sel) {
return sel.attr("data-type") === "param";
},
_createBlankNode: function () {
return $("<span>").html("&nbsp;");
},
_addBlank: function ($param) {
var o = this.options;
var instance = o.editor.selectedInstance;
var next = $param.next();
if (next.length === 0 || this._isParam(next)) {
var node = this._createBlankNode();
$param.after(node);
instance.setFocus(node[0]);
} else {
instance.setFocus(next[0]);
}
},
_get$Sel: function () {
var o = this.options;
var instance = o.editor.selectedInstance;
var sel = $(instance.selElm());
if (sel[0].nodeType === 3 && this._isParam(sel.parent())) {
sel = sel.parent();
}
return sel;
},
addParam: function (param) {
var o = this.options;
var sel = this._get$Sel();
var $param = $("<span>").attr({
"data-type": "param",
"data-value": param
}).css({
color: "white",
backgroundColor: "#009de3",
padding: "0 5px"
}).text(param).mousedown(function (e) {
e.stopEvent();
return false;
});
var wrapper = o.editor.instance.getElm().element;
if (wrapper.find(sel).length <= 0) {
wrapper.append($param);
} else {
sel.after($param);
}
this._addBlank($param);
},
keydown: function (e) {
var o = this.options;
var sel = this._get$Sel();
if (e.keyCode === 229) {//中文输入法
if (this._isParam(sel)) {
this._addBlank(sel);
e.stopEvent();
return false;
}
}
if (BI.Key[e.keyCode] || e.keyCode === BI.KeyCode.TAB || e.keyCode === BI.KeyCode.ENTER || e.keyCode === BI.KeyCode.SPACE) {
if (this._isParam(sel)) {
e.stopEvent();
return false;
}
}
if (e.keyCode === BI.KeyCode.BACKSPACE) {
if (this._isParam(sel)) {
sel.destroy();
e.preventDefault();
return false;
}
}
},
key: function (e) {
}
});