-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathInlineWidgetHelper.js
More file actions
1 lines (1 loc) · 4.96 KB
/
InlineWidgetHelper.js
File metadata and controls
1 lines (1 loc) · 4.96 KB
1
define(function(require,exports,module){const AnimationUtils=require("utils/AnimationUtils"),Async=require("utils/Async"),CodeMirror=require("thirdparty/CodeMirror/lib/codemirror");function addInlineWidget(pos,inlineWidget,scrollLineIntoView){let self=this,queue=self._inlineWidgetQueues[pos.line],deferred=new $.Deferred;return queue||(queue=new Async.PromiseQueue,self._inlineWidgetQueues[pos.line]=queue),queue.add(function(){return self._addInlineWidgetInternal(pos,inlineWidget,scrollLineIntoView,deferred),deferred.promise()}),deferred.promise()}function _addInlineWidgetInternal(pos,inlineWidget,scrollLineIntoView,deferred){let self=this;self.removeAllInlineWidgetsForLine(pos.line).done(function(){void 0===scrollLineIntoView&&(scrollLineIntoView=!0),scrollLineIntoView&&self._codeMirror.scrollIntoView(pos),inlineWidget.info=self._codeMirror.addLineWidget(pos.line,inlineWidget.htmlContent,{coverGutter:!0,noHScroll:!0}),CodeMirror.on(inlineWidget.info.line,"delete",function(){self._removeInlineWidgetInternal(inlineWidget)}),self._inlineWidgets.push(inlineWidget),inlineWidget.$htmlContent.height(0),AnimationUtils.animateUsingClass(inlineWidget.htmlContent,"animating").done(function(){deferred.resolve()}),inlineWidget.onAdded()})}function removeAllInlineWidgets(){let self=this,widgets=[].concat(this.getInlineWidgets());return Async.doInParallel(widgets,this.removeInlineWidget.bind(this))}function removeInlineWidget(inlineWidget){let self=this,deferred=new $.Deferred;function finishRemoving(){self._codeMirror.removeLineWidget(inlineWidget.info),self._removeInlineWidgetInternal(inlineWidget),deferred.resolve()}return inlineWidget.closePromise||(self._removeInlineWidgetFromList(inlineWidget),self.isFullyVisible()?(AnimationUtils.animateUsingClass(inlineWidget.htmlContent,"animating").done(finishRemoving),inlineWidget.$htmlContent.height(0)):finishRemoving(),inlineWidget.closePromise=deferred.promise()),inlineWidget.closePromise}function removeAllInlineWidgetsForLine(lineNum){let self=this,lineInfo=self._codeMirror.lineInfo(lineNum),widgetInfos=lineInfo&&lineInfo.widgets?[].concat(lineInfo.widgets):null;if(widgetInfos&&widgetInfos.length){let inlineWidget,allWidgetInfos=self._inlineWidgets.map(function(w){return w.info});return Async.doInParallel(widgetInfos,function(info){return(inlineWidget=self._inlineWidgets[allWidgetInfos.indexOf(info)])?self.removeInlineWidget(inlineWidget):(new $.Deferred).resolve().promise()})}return(new $.Deferred).resolve().promise()}function getAllInlineWidgetsForLine(lineNum){let self=this,lineInfo=this._codeMirror.lineInfo(lineNum),widgetInfos;return lineInfo&&lineInfo.widgets?[].concat(lineInfo.widgets):null}function _removeInlineWidgetFromList(inlineWidget){let self=this,l=self._inlineWidgets.length,i;for(i=0;i<l;i++)if(self._inlineWidgets[i]===inlineWidget){self._inlineWidgets.splice(i,1);break}}function _removeInlineWidgetInternal(inlineWidget){let self=this;inlineWidget.isClosed||(self._removeInlineWidgetFromList(inlineWidget),inlineWidget.onClosed(),inlineWidget.isClosed=!0)}function getInlineWidgets(){let self=this;return this._inlineWidgets}function getFocusedInlineWidget(){let self=this,result=null;return this.getInlineWidgets().forEach(function(widget){widget.hasFocus()&&(result=widget)}),result}function setInlineWidgetHeight(inlineWidget,height,ensureVisible){let self=this,node=inlineWidget.htmlContent,oldHeight,changed=(node&&$(node).height()||0)!==height,isAttached=void 0!==inlineWidget.info;function updateHeight(){isAttached&&inlineWidget.info.changed()}function setOuterHeight(){function finishAnimating(e){e.target===node&&(updateHeight(),$(node).off("webkitTransitionEnd",finishAnimating))}$(node).height(height),$(node).hasClass("animating")?$(node).on("webkitTransitionEnd",finishAnimating):updateHeight()}if(!changed&&node.style.height||($(node).hasClass("animating")?window.setTimeout(setOuterHeight,0):setOuterHeight()),ensureVisible&&isAttached){let offset=$(node).offset(),position=$(node).position(),scrollerTop=self.getVirtualScrollAreaTop();self._codeMirror.scrollIntoView({left:position.left,top:offset.top-scrollerTop,right:position.left,bottom:offset.top+height-scrollerTop})}}function _getInlineWidgetLineNumber(inlineWidget){let self=this;return this._codeMirror.getLineNumber(inlineWidget.info.line)}function addHelpers(Editor){Editor.prototype._addInlineWidgetInternal=_addInlineWidgetInternal,Editor.prototype._removeInlineWidgetFromList=_removeInlineWidgetFromList,Editor.prototype._removeInlineWidgetInternal=_removeInlineWidgetInternal,Editor.prototype._getInlineWidgetLineNumber=_getInlineWidgetLineNumber}exports.addHelpers=addHelpers,exports.addInlineWidget=addInlineWidget,exports.removeAllInlineWidgets=removeAllInlineWidgets,exports.removeInlineWidget=removeInlineWidget,exports.removeAllInlineWidgetsForLine=removeAllInlineWidgetsForLine,exports.getAllInlineWidgetsForLine=getAllInlineWidgetsForLine,exports.getInlineWidgets=getInlineWidgets,exports.getFocusedInlineWidget=getFocusedInlineWidget,exports.setInlineWidgetHeight=setInlineWidgetHeight});