1 line
No EOL
4.2 KiB
JavaScript
1 line
No EOL
4.2 KiB
JavaScript
!function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(p){"use strict";var h="CodeMirror-lint-markers";function u(t){t.parentNode&&t.parentNode.removeChild(t)}function g(t,e,n,o){var r,i=(t=t,e=e,n=n,(r=document.createElement("div")).className="CodeMirror-lint-tooltip cm-s-"+t.options.theme,r.appendChild(n.cloneNode(!0)),(t.state.lint.options.selfContain?t.getWrapperElement():document.body).appendChild(r),p.on(document,"mousemove",a),a(e),null!=r.style.opacity&&(r.style.opacity=1),r);function a(t){if(!r.parentNode)return p.off(document,"mousemove",a);r.style.top=Math.max(0,t.clientY-r.offsetHeight-5)+"px",r.style.left=t.clientX+5+"px"}function s(){var t;p.off(o,"mouseout",s),i&&((t=i).parentNode&&(null==t.style.opacity&&u(t),t.style.opacity=0,setTimeout(function(){u(t)},600)),i=null)}var l=setInterval(function(){if(i)for(var t=o;;t=t.parentNode){if(t&&11==t.nodeType&&(t=t.host),t==document.body)return;if(!t){s();break}}if(!i)return clearInterval(l)},400);p.on(o,"mouseout",s)}function a(e,t,n){this.marked=[],this.options=t,this.timeout=null,this.hasGutter=n,this.onMouseOver=function(t){!function(t,e){var n=e.target||e.srcElement;if(!/\bCodeMirror-lint-mark-/.test(n.className))return;for(var o=n.getBoundingClientRect(),n=(o.left+o.right)/2,o=(o.top+o.bottom)/2,r=t.findMarksAt(t.coordsChar({left:n,top:o},"client")),i=[],a=0;a<r.length;++a){var s=r[a].__annotation;s&&i.push(s)}i.length&&function(t,e,n){for(var o=n.target||n.srcElement,r=document.createDocumentFragment(),i=0;i<e.length;i++){var a=e[i];r.appendChild(C(a))}g(t,n,r,o)}(t,i,e)}(e,t)},this.waitingFor=0}function v(t){var e=t.state.lint;e.hasGutter&&t.clearGutter(h);for(var n=0;n<e.marked.length;++n)e.marked[n].clear();e.marked.length=0}function C(t){var e=(e=t.severity)||"error",n=document.createElement("div");return n.className="CodeMirror-lint-message CodeMirror-lint-message-"+e,void 0!==t.messageHTML?n.innerHTML=t.messageHTML:n.appendChild(document.createTextNode(t.message)),n}function s(e){var t,n,o,r,i,a=e.state.lint.options,s=a.options||a,l=a.getAnnotations||e.getHelper(p.Pos(0,0),"lint");function u(){i=-1,n.off("change",u)}l&&(a.async||l.async?(o=l,a=s,r=(n=e).state.lint,i=++r.waitingFor,n.on("change",u),o(n.getValue(),function(t,e){n.off("change",u),r.waitingFor==i&&(e&&t instanceof p&&(t=e),n.operation(function(){c(n,t)}))},a,n)):(t=l(e.getValue(),s,e))&&(t.then?t.then(function(t){e.operation(function(){c(e,t)})}):e.operation(function(){c(e,t)})))}function c(t,e){v(t);for(var n,o,r=t.state.lint,i=r.options,a=function(t){for(var e=[],n=0;n<t.length;++n){var o=t[n],r=o.from.line;(e[r]||(e[r]=[])).push(o)}return e}(e),s=0;s<a.length;++s){var l=a[s];if(l){for(var u=null,c=r.hasGutter&&document.createDocumentFragment(),m=0;m<l.length;++m){var f=l[m],d=f.severity;o=d=d||"error",u="error"==(n=u)?n:o,i.formatAnnotation&&(f=i.formatAnnotation(f)),r.hasGutter&&c.appendChild(C(f)),f.to&&r.marked.push(t.markText(f.from,f.to,{className:"CodeMirror-lint-mark CodeMirror-lint-mark-"+d,__annotation:f}))}r.hasGutter&&t.setGutterMarker(s,h,function(e,n,t,o,r){var i=document.createElement("div"),a=i;return i.className="CodeMirror-lint-marker CodeMirror-lint-marker-"+t,o&&((a=i.appendChild(document.createElement("div"))).className="CodeMirror-lint-marker CodeMirror-lint-marker-multiple"),0!=r&&p.on(a,"mouseover",function(t){g(e,t,n,a)}),i}(t,c,u,1<l.length,r.options.tooltips))}}i.onUpdateLinting&&i.onUpdateLinting(e,a,t)}function l(t){var e=t.state.lint;e&&(clearTimeout(e.timeout),e.timeout=setTimeout(function(){s(t)},e.options.delay||500))}p.defineOption("lint",!1,function(t,e,n){if(n&&n!=p.Init&&(v(t),!1!==t.state.lint.options.lintOnChange&&t.off("change",l),p.off(t.getWrapperElement(),"mouseover",t.state.lint.onMouseOver),clearTimeout(t.state.lint.timeout),delete t.state.lint),e){for(var o=t.getOption("gutters"),r=!1,i=0;i<o.length;++i)o[i]==h&&(r=!0);e=t.state.lint=new a(t,(e=e)instanceof Function?{getAnnotations:e}:(e&&!0!==e||(e={}),e),r);!1!==e.options.lintOnChange&&t.on("change",l),0!=e.options.tooltips&&"gutter"!=e.options.tooltips&&p.on(t.getWrapperElement(),"mouseover",e.onMouseOver),s(t)}}),p.defineExtension("performLint",function(){this.state.lint&&s(this)})}); |