forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathInlineTimingFunctionEditor.js
More file actions
1 lines (1 loc) · 4.31 KB
/
Copy pathInlineTimingFunctionEditor.js
File metadata and controls
1 lines (1 loc) · 4.31 KB
1
define(function(require,exports,module){var InlineWidget=brackets.getModule("editor/InlineWidget").InlineWidget,BezierCurveEditor=require("BezierCurveEditor").BezierCurveEditor,StepEditor=require("StepEditor").StepEditor,TimingFunctionUtils=require("TimingFunctionUtils"),lastOriginId=1;function InlineTimingFunctionEditor(timingFunction,startBookmark,endBookmark){this._timingFunction=timingFunction,this._startBookmark=startBookmark,this._endBookmark=endBookmark,this._isOwnChange=!1,this._isHostChange=!1,this._origin="+InlineTimingFunctionEditor_"+lastOriginId++,this._handleTimingFunctionChange=this._handleTimingFunctionChange.bind(this),this._handleHostDocumentChange=this._handleHostDocumentChange.bind(this),InlineWidget.call(this)}InlineTimingFunctionEditor.prototype=Object.create(InlineWidget.prototype),InlineTimingFunctionEditor.prototype.constructor=InlineTimingFunctionEditor,InlineTimingFunctionEditor.prototype.parentClass=InlineWidget.prototype,InlineTimingFunctionEditor.prototype.timingFunctionEditor=null,InlineTimingFunctionEditor.prototype._timingFunction=null,InlineTimingFunctionEditor.prototype._startBookmark=null,InlineTimingFunctionEditor.prototype._endBookmark=null,InlineTimingFunctionEditor.prototype._isOwnChange=null,InlineTimingFunctionEditor.prototype._isHostChange=null,InlineTimingFunctionEditor.prototype._origin=null,InlineTimingFunctionEditor.prototype.getCurrentRange=function(){var start,end;if(!(start=this._startBookmark.find()))return null;(end=this._endBookmark.find())||(end={line:start.line});var line=this.hostEditor.document.getLine(start.line),matches=TimingFunctionUtils.timingFunctionMatch(line.substr(start.ch),!0),originalLength;return matches?(originalLength=matches.originalString&&matches.originalString.length||matches[0].length,void 0!==end.ch&&end.ch-start.ch===originalLength||(end.ch=start.ch+originalLength,this._endBookmark.clear(),this._endBookmark=this.hostEditor._codeMirror.setBookmark(end)),void 0===end.ch?null:{start:start,end:end,match:matches,originalLength:originalLength}):null},InlineTimingFunctionEditor.prototype._handleTimingFunctionChange=function(timingFunctionString){var self=this,timingFunctionMatch=TimingFunctionUtils.timingFunctionMatch(timingFunctionString,!0);if(timingFunctionMatch!==this._timingFunction){var range=this.getCurrentRange();if(!range)return;this._isHostChange||(this._isOwnChange=!0,this.hostEditor.document.batchOperation(function(){self.hostEditor.document.replaceRange(timingFunctionString,range.start,range.end,self._origin);var newEnd={line:range.start.line,ch:range.start.ch+timingFunctionString.length};self.hostEditor.setSelection(range.start,newEnd,!1,0,self._origin)}),this._isOwnChange=!1),this._timingFunction=timingFunctionMatch}},InlineTimingFunctionEditor.prototype.load=function(hostEditor){InlineTimingFunctionEditor.prototype.parentClass.load.apply(this,arguments),this._timingFunction.isBezier?this.timingFunctionEditor=new BezierCurveEditor(this.$htmlContent,this._timingFunction,this._handleTimingFunctionChange):this._timingFunction.isStep?this.timingFunctionEditor=new StepEditor(this.$htmlContent,this._timingFunction,this._handleTimingFunctionChange):window.console.log("InlineTimingFunctionEditor.load tried to load an unkown timing function type")},InlineTimingFunctionEditor.prototype.onAdded=function(){InlineTimingFunctionEditor.prototype.parentClass.onAdded.apply(this,arguments);var doc=this.hostEditor.document;doc.addRef(),doc.on("change",this._handleHostDocumentChange),this.hostEditor.setInlineWidgetHeight(this,this.timingFunctionEditor.getRootElement().outerHeight(),!0),this.timingFunctionEditor.focus()},InlineTimingFunctionEditor.prototype.onClosed=function(){InlineTimingFunctionEditor.prototype.parentClass.onClosed.apply(this,arguments),this.timingFunctionEditor.destroy(),this._startBookmark&&this._startBookmark.clear(),this._endBookmark&&this._endBookmark.clear();var doc=this.hostEditor.document;doc.off("change",this._handleHostDocumentChange),doc.releaseRef()},InlineTimingFunctionEditor.prototype._handleHostDocumentChange=function(){if(!this._isOwnChange){var range=this.getCurrentRange();range?range.match!==this._timingFunction&&(this._isHostChange=!0,this._isHostChange=!1,this._timingFunction=range.match,this.timingFunctionEditor.handleExternalUpdate(range.match)):this.close()}},exports.InlineTimingFunctionEditor=InlineTimingFunctionEditor});