Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
5c37944f78
commit
fec5026c43
106
js/web/codemirror/codemirror.js
Normal file
106
js/web/codemirror/codemirror.js
Normal file
|
@ -0,0 +1,106 @@
|
|||
webix.protoUI({
|
||||
name:"codemirror-editor",
|
||||
defaults:{
|
||||
mode:"javascript",
|
||||
lineNumbers:true,
|
||||
matchBrackets:true,
|
||||
theme:"default"
|
||||
},
|
||||
$init:function(config){
|
||||
this.$view.innerHTML = "<textarea style='width:100%;height:100%;'></textarea>";
|
||||
this.$ready.push(this._render_cm_editor);
|
||||
},
|
||||
_render_cm_editor:function(){
|
||||
webix.require("codemirror/lib/codemirror.css");
|
||||
var deps = [
|
||||
"codemirror/lib/codemirror.js"
|
||||
];
|
||||
|
||||
if (this.config.mode == "htmlmixed"){
|
||||
deps.push("codemirror/mode/xml/xml.js");
|
||||
deps.push("codemirror/mode/css/css.js");
|
||||
deps.push("codemirror/mode/javascript/javascript.js");
|
||||
}
|
||||
|
||||
deps.push("codemirror/mode/"+this.config.mode+"/"+this.config.mode+".js");
|
||||
webix.require(deps, this._render_when_ready, this);
|
||||
},
|
||||
|
||||
_render_when_ready:function(){
|
||||
this.editor = CodeMirror.fromTextArea(this.$view.firstChild, {
|
||||
mode: this.config.mode,
|
||||
lineNumbers: this.config.lineNumbers,
|
||||
matchBrackets: this.config.matchBrackets,
|
||||
theme: this.config.theme
|
||||
});
|
||||
|
||||
this.setValue(this.config.value);
|
||||
if (this._focus_await)
|
||||
this.focus();
|
||||
},
|
||||
|
||||
_set_inner_size:function(){
|
||||
if (!this.editor || !this.$width) return;
|
||||
|
||||
this._updateScrollSize();
|
||||
this.editor.scrollTo(0,0); //force repaint, mandatory for IE
|
||||
},
|
||||
_updateScrollSize:function(){
|
||||
var box = this.editor.getWrapperElement();
|
||||
var height = (this.$height || 0) + "px";
|
||||
|
||||
box.style.height = height;
|
||||
box.style.width = (this.$width || 0) + "px";
|
||||
|
||||
var scroll = this.editor.getScrollerElement();
|
||||
if (scroll.style.height != height){
|
||||
scroll.style.height = height;
|
||||
this.editor.refresh();
|
||||
}
|
||||
},
|
||||
$setSize:function(x,y){
|
||||
if (webix.ui.view.prototype.$setSize.call(this, x, y)){
|
||||
this._set_inner_size();
|
||||
}
|
||||
},
|
||||
|
||||
setValue:function(value){
|
||||
if(!value && value !== 0)
|
||||
value = "";
|
||||
|
||||
this.config.value = value;
|
||||
if(this.editor){
|
||||
this.editor.setValue(value);
|
||||
//by default - clear editor's undo history when setting new value
|
||||
if(!this.config.preserveUndoHistory)
|
||||
this.editor.clearHistory();
|
||||
this._updateScrollSize();
|
||||
}
|
||||
},
|
||||
|
||||
getValue:function(){
|
||||
return this.editor?this.editor.getValue():this.config.value;
|
||||
},
|
||||
|
||||
focus:function(){
|
||||
this._focus_await = true;
|
||||
if (this.editor)
|
||||
this.editor.focus();
|
||||
},
|
||||
|
||||
getEditor:function(){
|
||||
return this.editor;
|
||||
},
|
||||
|
||||
|
||||
//undo, redo, etc
|
||||
undo:function(){
|
||||
this.editor.undo();
|
||||
},
|
||||
redo:function(){
|
||||
this.editor.redo();
|
||||
},
|
||||
undoLength:function(){
|
||||
return this.editor.historySize().undo;
|
||||
}
|
||||
}, webix.ui.view);
|
Loading…
Reference in New Issue
Block a user