forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathChangeHelper.js
More file actions
1 lines (1 loc) · 6.12 KB
/
ChangeHelper.js
File metadata and controls
1 lines (1 loc) · 6.12 KB
1
define(function(require,exports,module){let _cutInterceptor=null,_copyInterceptor=null,_pasteInterceptor=null,_keyEventInterceptor=null;const CodeMirror=require("thirdparty/CodeMirror/lib/codemirror"),Menus=require("command/Menus");function _applyChanges(changeList){let self=this;if(!self._visibleRange||null!==self._visibleRange.startLine&&null!==self._visibleRange.endLine){var cm=self._codeMirror;cm.operation(function(){var change,newText,i;for(i=0;i<changeList.length;i++)newText=(change=changeList[i]).text.join("\n"),change.from&&change.to?cm.replaceRange(newText,change.from,change.to,change.origin):((change.from||change.to)&&console.error("Change record received with only one end undefined--replacing entire text"),cm.setValue(newText))}),self._updateHiddenLines()}else self.trigger("lostContent")}function _handleEditorChange(changeList){let self=this;self._duringSync||(self.document._ensureMasterEditor(),self.document._masterEditor!==self&&(self._duringSync=!0,self.document._masterEditor._applyChanges(changeList),self._duringSync=!1,self._updateHiddenLines()),self.trigger("editorChange",self,changeList))}function _handleDocumentChange(event,doc,changeList){let self=this;self._duringSync||self.document._masterEditor!==self&&(self._duringSync=!0,self._applyChanges(changeList),self._duringSync=!1)}function _handleDocumentDeleted(event){self.trigger("lostContent",event)}function _handleDocumentLanguageChanged(event){let self=this;this._codeMirror.setOption("mode",this._getModeFromDocument())}function _installEditorListeners(){let self=this;function _onKeyEvent(instance,event){if(_keyEventInterceptor)try{if(_keyEventInterceptor(self,self._codeMirror,event))return}catch(e){logger.reportError(e,"Error in key event interceptor")}return self.trigger("keyEvent",self,event),self.trigger(event.type,self,event),event.defaultPrevented}self._codeMirror.on("keydown",_onKeyEvent),self._codeMirror.on("keypress",_onKeyEvent),self._codeMirror.on("keyup",_onKeyEvent),self._codeMirror.on("changes",function(instance,changeList){self.trigger("change",self,changeList)}),self._codeMirror.on("viewportChange",function(instance,from,to){self.trigger("viewportChange",self,from,to)}),self._codeMirror.on("beforeChange",function(instance,changeObj){self.trigger("beforeChange",self,changeObj)}),self._codeMirror.on("cursorActivity",function(instance){self.trigger("cursorActivity",self)}),self._codeMirror.on("beforeSelectionChange",function(instance,selectionObj){self.trigger("beforeSelectionChange",selectionObj,self)}),self._codeMirror.on("scroll",function(instance){!self._shouldNotDismissPopupsOnScroll&&self.isFullyVisible()&&Menus.closeAll(),self.trigger("scroll",self)}),self._codeMirror.on("focus",function(){self._focused=!0,self.trigger("focus",self)}),self._codeMirror.on("blur",function(){self._focused=!1,self.trigger("blur",self)}),self._codeMirror.on("update",function(instance){self.trigger("update",self)}),self._codeMirror.on("overwriteToggle",function(instance,newstate){self.trigger("overwriteToggle",self,newstate)}),self._codeMirror.on("drop",function(cm,event){var files=event.dataTransfer.files;files&&files.length&&event.preventDefault()}),self._codeMirror.on("renderLine",function(cm,line,elt){var charWidth=self._codeMirror.defaultCharWidth(),off=CodeMirror.countColumn(line.text,null,cm.getOption("tabSize"))*charWidth;elt.style.textIndent="-"+off+"px",elt.style.paddingLeft=off+"px"}),self._codeMirror.on("cut",function(cm,e){if(_cutInterceptor)try{return _cutInterceptor(self,cm,e)}catch(e){logger.reportError(e,"Error in cut interceptor")}}),self._codeMirror.on("copy",function(cm,e){if(_copyInterceptor)try{return _copyInterceptor(self,cm,e)}catch(e){logger.reportError(e,"Error in copy interceptor")}}),self._codeMirror.on("paste",function(cm,e){if(_pasteInterceptor)try{return _pasteInterceptor(self,cm,e)}catch(e){logger.reportError(e,"Error in paste interceptor")}})}function _dontDismissPopupOnScroll(timeoutMs=500){const self=this;self._shouldNotDismissPopupsOnScroll&&clearTimeout(self._shouldNotDismissPopupsOnScroll),self._shouldNotDismissPopupsOnScroll=setTimeout(()=>{self._shouldNotDismissPopupsOnScroll=!1},timeoutMs)}function addHelpers(Editor){Editor.prototype._applyChanges=_applyChanges,Editor.prototype._handleEditorChange=_handleEditorChange,Editor.prototype._handleDocumentChange=_handleDocumentChange,Editor.prototype._handleDocumentDeleted=_handleDocumentDeleted,Editor.prototype._handleDocumentLanguageChanged=_handleDocumentLanguageChanged,Editor.prototype._installEditorListeners=_installEditorListeners,Editor.prototype._dontDismissPopupOnScroll=_dontDismissPopupOnScroll}let _undoInterceptor=null,_redoInterceptor=null,_saveInterceptor=null;function _onBeforeSave(docBeingSaved){if(!_saveInterceptor)return!1;try{return _saveInterceptor(docBeingSaved)}catch(e){return logger.reportError(e,"Error in save interceptor"),!1}}function _onBeforeUndo(editor,codeMirror,event){if(!_undoInterceptor)return!1;try{return _undoInterceptor(editor,codeMirror,event)}catch(e){return logger.reportError(e,"Error in undo interceptor"),!1}}function _onBeforeRedo(editor,codeMirror,event){if(!_redoInterceptor)return!1;try{return _redoInterceptor(editor,codeMirror,event)}catch(e){return logger.reportError(e,"Error in redo interceptor"),!1}}function setUndoInterceptor(interceptor){_undoInterceptor=interceptor}function setRedoInterceptor(interceptor){_redoInterceptor=interceptor}function setCutInterceptor(interceptor){_cutInterceptor=interceptor}function setCopyInterceptor(interceptor){_copyInterceptor=interceptor}function setPasteInterceptor(interceptor){_pasteInterceptor=interceptor}function setKeyEventInterceptor(interceptor){_keyEventInterceptor=interceptor}function setSaveInterceptor(interceptor){_saveInterceptor=interceptor}exports._onBeforeUndo=_onBeforeUndo,exports._onBeforeRedo=_onBeforeRedo,exports._onBeforeSave=_onBeforeSave,exports.addHelpers=addHelpers,exports.setUndoInterceptor=setUndoInterceptor,exports.setRedoInterceptor=setRedoInterceptor,exports.setCutInterceptor=setCutInterceptor,exports.setCopyInterceptor=setCopyInterceptor,exports.setPasteInterceptor=setPasteInterceptor,exports.setKeyEventInterceptor=setKeyEventInterceptor,exports.setSaveInterceptor=setSaveInterceptor});