(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(e){var i="CodeMirror-hint";var h="CodeMirror-hint-active";e.showHint=function(q,r,s){if(!r){return q.showHint(s)}if(s&&s.async){r.async=true}var t={hint:r};if(s){for(var u in s){t[u]=s[u]}}return q.showHint(t)};e.defineExtension("showHint",function(r){r=o(this,this.getCursor("start"),r);var t=this.listSelections();if(t.length>1){return}if(this.somethingSelected()){if(!r.hint.supportsSelection){return}for(var s=0;s0&&r.to.ch-r.from.ch!=q.to.ch-q.from.ch}function o(q,v,s){var t=q.options.hintOptions;var r={};for(var u in c){r[u]=c[u]}if(t){for(var u in t){if(t[u]!==undefined){r[u]=t[u]}}}if(s){for(var u in s){if(s[u]!==undefined){r[u]=s[u]}}}if(r.hint.resolve){r.hint=r.hint.resolve(q,v)}return r}function p(q){if(typeof q=="string"){return q}else{return q.text}}function d(u,x){var r={Up:function(){x.moveFocus(-1)},Down:function(){x.moveFocus(1)},PageUp:function(){x.moveFocus(-x.menuSize()+1,true)},PageDown:function(){x.moveFocus(x.menuSize()-1,true)},Home:function(){x.setFocus(0)},End:function(){x.setFocus(x.length-1)},Enter:x.pick,Tab:x.pick,Esc:x.close};var w=u.options.customKeys;var t=w?{}:r;function s(y,A){var z;if(typeof A!="string"){z=function(B){return A(B,x)}}else{if(r.hasOwnProperty(A)){z=r[A]}else{z=A}}t[y]=z}if(w){for(var v in w){if(w.hasOwnProperty(v)){s(v,w[v])}}}var q=u.options.extraKeys;if(q){for(var v in q){if(q.hasOwnProperty(v)){s(v,q[v])}}}return t}function m(r,q){while(q&&q!=r){if(q.nodeName.toUpperCase()==="LI"&&q.parentNode==r){return q}q=q.parentNode}}function n(E,P){this.completion=E;this.data=P;this.picked=false;var v=this,A=E.cm;var M=this.hints=document.createElement("ul");M.className="CodeMirror-hints";this.selectedHint=P.selectedHint||0;var z=P.list;for(var O=0;OM.clientHeight+1;var H=A.getScrollInfo();if(D>0){var J=C.bottom-C.top,q=y.top-(y.bottom-C.top);if(q-J>0){M.style.top=(I=y.top-J)+"px";G=false}else{if(J>N){M.style.height=(N-5)+"px";M.style.top=(I=y.bottom-C.top)+"px";var x=A.getCursor();if(P.from.ch!=x.ch){y=A.cursorCoords(x);M.style.left=(w=y.left)+"px";C=M.getBoundingClientRect()}}}}var F=C.right-B;if(F>0){if(C.right-C.left>B){M.style.width=(B-5)+"px";F-=(C.right-C.left)-B}M.style.left=(w=y.left-F)+"px"}if(r){for(var L=M.firstChild;L;L=L.nextSibling){L.style.paddingRight=A.display.nativeBarWidth+"px"}}A.addKeyMap(this.keyMap=d(E,{moveFocus:function(R,Q){v.changeActive(v.selectedHint+R,Q)},setFocus:function(Q){v.changeActive(Q)},menuSize:function(){return v.screenAmount()},length:z.length,close:function(){E.close()},pick:function(){v.pick()},data:P}));if(E.options.closeOnUnfocus){var K;A.on("blur",this.onBlur=function(){K=setTimeout(function(){E.close()},100)});A.on("focus",this.onFocus=function(){clearTimeout(K)})}A.on("scroll",this.onScroll=function(){var T=A.getScrollInfo(),S=A.getWrapperElement().getBoundingClientRect();var R=I+H.top-T.top;var Q=R-(window.pageYOffset||(document.documentElement||document.body).scrollTop);if(!G){Q+=M.offsetHeight}if(Q<=S.top||Q>=S.bottom){return E.close()}M.style.top=R+"px";M.style.left=(w+H.left-T.left)+"px"});e.on(M,"dblclick",function(R){var Q=m(M,R.target||R.srcElement);if(Q&&Q.hintId!=null){v.changeActive(Q.hintId);v.pick()}});e.on(M,"click",function(R){var Q=m(M,R.target||R.srcElement);if(Q&&Q.hintId!=null){v.changeActive(Q.hintId);if(E.options.completeOnSingleClick){v.pick()}}});e.on(M,"mousedown",function(){setTimeout(function(){A.focus()},20)});e.signal(P,"select",z[0],M.firstChild);return true}n.prototype={close:function(){if(this.completion.widget!=this){return}this.completion.widget=null;this.hints.parentNode.removeChild(this.hints);this.completion.cm.removeKeyMap(this.keyMap);var q=this.completion.cm;if(this.completion.options.closeOnUnfocus){q.off("blur",this.onBlur);q.off("focus",this.onFocus)}q.off("scroll",this.onScroll)},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var q=this;this.keyMap={Enter:function(){q.picked=true}};this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(q,s){if(q>=this.data.list.length){q=s?this.data.list.length-1:0}else{if(q<0){q=s?0:this.data.list.length-1}}if(this.selectedHint==q){return}var r=this.hints.childNodes[this.selectedHint];r.className=r.className.replace(" "+h,"");r=this.hints.childNodes[this.selectedHint=q];r.className+=" "+h;if(r.offsetTopthis.hints.scrollTop+this.hints.clientHeight){this.hints.scrollTop=r.offsetTop+r.offsetHeight-this.hints.clientHeight+3}}e.signal(this.data,"select",this.data.list[this.selectedHint],r)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}};function k(r,t){if(!r.somethingSelected()){return t}var q=[];for(var s=0;s0){z(B)}else{x(A+1)}})}x(0)};r.async=true;r.supportsSelection=true;return r}else{if(t=q.getHelper(q.getCursor(),"hintWords")){return function(v){return e.hint.fromList(v,{words:t})}}else{if(e.hint.anyword){return function(v,w){return e.hint.anyword(v,w)}}else{return function(){}}}}}e.registerHelper("hint","auto",{resolve:a});e.registerHelper("hint","fromList",function(w,z){var x=w.getCursor(),r=w.getTokenAt(x);var u=e.Pos(x.line,r.end);if(r.string&&/\w/.test(r.string[r.string.length-1])){var s=r.string,v=e.Pos(x.line,r.start)}else{var s="",v=u}var y=[];for(var t=0;t,]/,closeOnUnfocus:true,completeOnSingleClick:true,container:null,customKeys:null,extraKeys:null};e.defineOption("hintOptions",null)});