Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
		
							parent
							
								
									4571708c55
								
							
						
					
					
						commit
						bb7c7d3e3e
					
				
							
								
								
									
										109
									
								
								js/ui/webui/codemirror/codemirror.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								js/ui/webui/codemirror/codemirror.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,109 @@ | |||
| webix.protoUI({ | ||||
| 	name:"codemirror-editor", | ||||
| 	defaults:{ | ||||
| 		mode:"javascript", | ||||
| 		lineNumbers:true, | ||||
| 		matchBrackets:true, | ||||
|                 //electricChars:false,
 | ||||
|                 //smartIndent:false,
 | ||||
|                 indentUnit:2, | ||||
| 		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