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