Permalink
Please sign in to comment.
Showing
with
87 additions
and 85,689 deletions.
- +4 −2 bower.json
- +4 −4 client/commonFramework.js
- +72 −2 gulpfile.js
- +7 −0 package.json
- +0 −6 public/js/lib/bootstrap.min.js
- +0 −231 public/js/lib/chai/chai-jquery.js
- +0 −4,800 public/js/lib/chai/chai.js
- +0 −1 public/js/lib/codemirror-accessible/.gitignore
- +0 −3 public/js/lib/codemirror-accessible/README.md
- +0 −80 public/js/lib/codemirror-accessible/accessible.js
- +0 −5,828 public/js/lib/codemirror-accessible/codemirror-accessible.js
- +0 −5,848 public/js/lib/codemirror-accessible/codemirror-accessible2.js
- +0 −5,799 public/js/lib/codemirror-accessible/codemirror-original.js
- +0 −258 public/js/lib/codemirror-accessible/codemirror.css
- +0 −9,941 public/js/lib/codemirror-accessible/index.html
- +0 −482 public/js/lib/codemirror-accessible/javascript.js
- +0 −749 public/js/lib/codemirror-accessible/stress.html
- +0 −8 public/js/lib/codemirror/.gitattributes
- +0 −8 public/js/lib/codemirror/.gitignore
- +0 −3 public/js/lib/codemirror/.travis.yml
- +0 −423 public/js/lib/codemirror/AUTHORS
- +0 −76 public/js/lib/codemirror/CONTRIBUTING.md
- +0 −19 public/js/lib/codemirror/LICENSE
- +0 −11 public/js/lib/codemirror/README.md
- +0 −183 public/js/lib/codemirror/addon/comment/comment.js
- +0 −85 public/js/lib/codemirror/addon/comment/continuecomment.js
- +0 −32 public/js/lib/codemirror/addon/dialog/dialog.css
- +0 −155 public/js/lib/codemirror/addon/dialog/dialog.js
- +0 −6 public/js/lib/codemirror/addon/display/fullscreen.css
- +0 −41 public/js/lib/codemirror/addon/display/fullscreen.js
- +0 −94 public/js/lib/codemirror/addon/display/panel.js
- +0 −58 public/js/lib/codemirror/addon/display/placeholder.js
- +0 −64 public/js/lib/codemirror/addon/display/rulers.js
- +0 −159 public/js/lib/codemirror/addon/edit/closebrackets.js
- +0 −159 public/js/lib/codemirror/addon/edit/closetag.js
- +0 −51 public/js/lib/codemirror/addon/edit/continuelist.js
- +0 −120 public/js/lib/codemirror/addon/edit/matchbrackets.js
- +0 −66 public/js/lib/codemirror/addon/edit/matchtags.js
- +0 −27 public/js/lib/codemirror/addon/edit/trailingspace.js
- +0 −43,080 public/js/lib/codemirror/addon/emmet/emmet.js
- +0 −105 public/js/lib/codemirror/addon/fold/brace-fold.js
- +0 −57 public/js/lib/codemirror/addon/fold/comment-fold.js
- +0 −145 public/js/lib/codemirror/addon/fold/foldcode.js
- +0 −20 public/js/lib/codemirror/addon/fold/foldgutter.css
- +0 −134 public/js/lib/codemirror/addon/fold/foldgutter.js
- +0 −44 public/js/lib/codemirror/addon/fold/indent-fold.js
- +0 −49 public/js/lib/codemirror/addon/fold/markdown-fold.js
- +0 −182 public/js/lib/codemirror/addon/fold/xml-fold.js
- +0 −41 public/js/lib/codemirror/addon/hint/anyword-hint.js
- +0 −56 public/js/lib/codemirror/addon/hint/css-hint.js
- +0 −348 public/js/lib/codemirror/addon/hint/html-hint.js
- +0 −146 public/js/lib/codemirror/addon/hint/javascript-hint.js
- +0 −38 public/js/lib/codemirror/addon/hint/show-hint.css
- +0 −389 public/js/lib/codemirror/addon/hint/show-hint.js
- +0 −197 public/js/lib/codemirror/addon/hint/sql-hint.js
- +0 −110 public/js/lib/codemirror/addon/hint/xml-hint.js
- +0 −41 public/js/lib/codemirror/addon/lint/coffeescript-lint.js
- +0 −35 public/js/lib/codemirror/addon/lint/css-lint.js
- +0 −136 public/js/lib/codemirror/addon/lint/javascript-lint.js
- +0 −31 public/js/lib/codemirror/addon/lint/json-lint.js
- +0 −73 public/js/lib/codemirror/addon/lint/lint.css
- +0 −204 public/js/lib/codemirror/addon/lint/lint.js
- +0 −28 public/js/lib/codemirror/addon/lint/yaml-lint.js
- +0 −112 public/js/lib/codemirror/addon/merge/merge.css
- +0 −643 public/js/lib/codemirror/addon/merge/merge.js
- +0 −64 public/js/lib/codemirror/addon/mode/loadmode.js
- +0 −118 public/js/lib/codemirror/addon/mode/multiplex.js
- +0 −33 public/js/lib/codemirror/addon/mode/multiplex_test.js
- +0 −85 public/js/lib/codemirror/addon/mode/overlay.js
- +0 −213 public/js/lib/codemirror/addon/mode/simple.js
- +0 −40 public/js/lib/codemirror/addon/runmode/colorize.js
- +0 −157 public/js/lib/codemirror/addon/runmode/runmode-standalone.js
- +0 −72 public/js/lib/codemirror/addon/runmode/runmode.js
- +0 −120 public/js/lib/codemirror/addon/runmode/runmode.node.js
- +0 −76 public/js/lib/codemirror/addon/scroll/annotatescrollbar.js
- +0 −46 public/js/lib/codemirror/addon/scroll/scrollpastend.js
- +0 −66 public/js/lib/codemirror/addon/scroll/simplescrollbars.css
- +0 −139 public/js/lib/codemirror/addon/scroll/simplescrollbars.js
- +0 −128 public/js/lib/codemirror/addon/search/match-highlighter.js
- +0 −8 public/js/lib/codemirror/addon/search/matchesonscrollbar.css
- +0 −90 public/js/lib/codemirror/addon/search/matchesonscrollbar.js
- +0 −164 public/js/lib/codemirror/addon/search/search.js
- +0 −189 public/js/lib/codemirror/addon/search/searchcursor.js
- +0 −71 public/js/lib/codemirror/addon/selection/active-line.js
- +0 −118 public/js/lib/codemirror/addon/selection/mark-selection.js
- +0 −86 public/js/lib/codemirror/addon/tern/tern.css
- +0 −670 public/js/lib/codemirror/addon/tern/tern.js
- +0 −44 public/js/lib/codemirror/addon/tern/worker.js
- +0 −139 public/js/lib/codemirror/addon/wrap/hardwrap.js
- +0 −6 public/js/lib/codemirror/bin/authors.sh
- +0 −92 public/js/lib/codemirror/bin/compress
- +0 −16 public/js/lib/codemirror/bin/lint
- +0 −46 public/js/lib/codemirror/bin/release
- +0 −51 public/js/lib/codemirror/bin/source-highlight
- +0 −16 public/js/lib/codemirror/bower.json
- +0 −200 public/js/lib/codemirror/index.html
6
bower.json
8
client/commonFramework.js
74
gulpfile.js
7
package.json
6
public/js/lib/bootstrap.min.js
| @@ -1,6 +0,0 @@ | ||
| -/*! | ||
| - * Bootstrap v3.1.0 (http://getbootstrap.com) | ||
| - * Copyright 2011-2014 Twitter, Inc. | ||
| - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| - */ | ||
| -if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); |
231
public/js/lib/chai/chai-jquery.js
| @@ -1,231 +0,0 @@ | ||
| -(function (chaiJquery) { | ||
| - // Module systems magic dance. | ||
| - if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { | ||
| - // NodeJS | ||
| - module.exports = chaiJquery; | ||
| - } else if (typeof define === "function" && define.amd) { | ||
| - // AMD | ||
| - define(['jquery'], function ($) { | ||
| - return function (chai, utils) { | ||
| - return chaiJquery(chai, utils, $); | ||
| - }; | ||
| - }); | ||
| - } else { | ||
| - // Other environment (usually <script> tag): plug in to global chai instance directly. | ||
| - chai.use(function (chai, utils) { | ||
| - return chaiJquery(chai, utils, jQuery); | ||
| - }); | ||
| - } | ||
| -}(function (chai, utils, $) { | ||
| - var inspect = utils.inspect, | ||
| - flag = utils.flag; | ||
| - $ = $ || jQuery; | ||
| - | ||
| - var setPrototypeOf = '__proto__' in Object ? | ||
| - function (object, prototype) { | ||
| - object.__proto__ = prototype; | ||
| - } : | ||
| - function (object, prototype) { | ||
| - var excludeNames = /^(?:length|name|arguments|caller)$/; | ||
| - | ||
| - function copyProperties(dst, src) { | ||
| - Object.getOwnPropertyNames(src).forEach(function (name) { | ||
| - if (!excludeNames.test(name)) { | ||
| - Object.defineProperty(dst, name, | ||
| - Object.getOwnPropertyDescriptor(src, name)); | ||
| - } | ||
| - }); | ||
| - } | ||
| - | ||
| - copyProperties(object, prototype); | ||
| - copyProperties(object, Object.getPrototypeOf(prototype)); | ||
| - }; | ||
| - | ||
| - $.fn.inspect = function (depth) { | ||
| - var el = $('<div />').append(this.clone()); | ||
| - if (depth !== undefined) { | ||
| - var children = el.children(); | ||
| - while (depth-- > 0) | ||
| - children = children.children(); | ||
| - children.html('...'); | ||
| - } | ||
| - return el.html(); | ||
| - }; | ||
| - | ||
| - var props = {attr: 'attribute', css: 'CSS property', prop: 'property'}; | ||
| - for (var prop in props) { | ||
| - (function (prop, description) { | ||
| - chai.Assertion.addMethod(prop, function (name, val) { | ||
| - var actual = flag(this, 'object')[prop](name); | ||
| - | ||
| - if (!flag(this, 'negate') || undefined === val) { | ||
| - this.assert( | ||
| - undefined !== actual | ||
| - , 'expected #{this} to have a #{exp} ' + description | ||
| - , 'expected #{this} not to have a #{exp} ' + description | ||
| - , name | ||
| - ); | ||
| - } | ||
| - | ||
| - if (undefined !== val) { | ||
| - this.assert( | ||
| - val === actual | ||
| - , 'expected #{this} to have a ' + inspect(name) + ' ' + description + ' with the value #{exp}, but the value was #{act}' | ||
| - , 'expected #{this} not to have a ' + inspect(name) + ' ' + description + ' with the value #{act}' | ||
| - , val | ||
| - , actual | ||
| - ); | ||
| - } | ||
| - | ||
| - flag(this, 'object', actual); | ||
| - }); | ||
| - })(prop, props[prop]); | ||
| - } | ||
| - | ||
| - chai.Assertion.addMethod('data', function (name, val) { | ||
| - // Work around a chai bug (https://github.com/logicalparadox/chai/issues/16) | ||
| - if (flag(this, 'negate') && undefined !== val && undefined === flag(this, 'object').data(name)) { | ||
| - return; | ||
| - } | ||
| - | ||
| - var assertion = new chai.Assertion(flag(this, 'object').data()); | ||
| - if (flag(this, 'negate')) | ||
| - assertion = assertion.not; | ||
| - return assertion.property(name, val); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('class', function (className) { | ||
| - this.assert( | ||
| - flag(this, 'object').hasClass(className) | ||
| - , 'expected #{this} to have class #{exp}' | ||
| - , 'expected #{this} not to have class #{exp}' | ||
| - , className | ||
| - ); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('id', function (id) { | ||
| - this.assert( | ||
| - flag(this, 'object').attr('id') === id | ||
| - , 'expected #{this} to have id #{exp}' | ||
| - , 'expected #{this} not to have id #{exp}' | ||
| - , id | ||
| - ); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('html', function (html) { | ||
| - var actual = flag(this, 'object').html(); | ||
| - this.assert( | ||
| - actual === html | ||
| - , 'expected #{this} to have HTML #{exp}, but the HTML was #{act}' | ||
| - , 'expected #{this} not to have HTML #{exp}' | ||
| - , html | ||
| - , actual | ||
| - ); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('text', function (text) { | ||
| - var actual = flag(this, 'object').text(); | ||
| - this.assert( | ||
| - actual === text | ||
| - , 'expected #{this} to have text #{exp}, but the text was #{act}' | ||
| - , 'expected #{this} not to have text #{exp}' | ||
| - , text | ||
| - , actual | ||
| - ); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('value', function (value) { | ||
| - var actual = flag(this, 'object').val(); | ||
| - this.assert( | ||
| - flag(this, 'object').val() === value | ||
| - , 'expected #{this} to have value #{exp}, but the value was #{act}' | ||
| - , 'expected #{this} not to have value #{exp}' | ||
| - , value | ||
| - , actual | ||
| - ); | ||
| - }); | ||
| - | ||
| - chai.Assertion.addMethod('descendants', function (selector) { | ||
| - this.assert( | ||
| - flag(this, 'object').has(selector).length > 0 | ||
| - , 'expected #{this} to have #{exp}' | ||
| - , 'expected #{this} not to have #{exp}' | ||
| - , selector | ||
| - ); | ||
| - }); | ||
| - | ||
| - $.each(['visible', 'hidden', 'selected', 'checked', 'enabled', 'disabled'], function (i, attr) { | ||
| - chai.Assertion.addProperty(attr, function () { | ||
| - this.assert( | ||
| - flag(this, 'object').is(':' + attr) | ||
| - , 'expected #{this} to be ' + attr | ||
| - , 'expected #{this} not to be ' + attr); | ||
| - }); | ||
| - }); | ||
| - | ||
| - chai.Assertion.overwriteProperty('exist', function (_super) { | ||
| - return function () { | ||
| - var obj = flag(this, 'object'); | ||
| - if (obj instanceof $) { | ||
| - this.assert( | ||
| - obj.length > 0 | ||
| - , 'expected ' + inspect(obj.selector) + ' to exist' | ||
| - , 'expected ' + inspect(obj.selector) + ' not to exist'); | ||
| - } else { | ||
| - _super.apply(this, arguments); | ||
| - } | ||
| - }; | ||
| - }); | ||
| - | ||
| - chai.Assertion.overwriteProperty('empty', function (_super) { | ||
| - return function () { | ||
| - var obj = flag(this, 'object'); | ||
| - if (obj instanceof $) { | ||
| - this.assert( | ||
| - obj.is(':empty') | ||
| - , 'expected #{this} to be empty' | ||
| - , 'expected #{this} not to be empty'); | ||
| - } else { | ||
| - _super.apply(this, arguments); | ||
| - } | ||
| - }; | ||
| - }); | ||
| - | ||
| - chai.Assertion.overwriteMethod('match', function (_super) { | ||
| - return function (selector) { | ||
| - var obj = flag(this, 'object'); | ||
| - if (obj instanceof $) { | ||
| - this.assert( | ||
| - obj.is(selector) | ||
| - , 'expected #{this} to match #{exp}' | ||
| - , 'expected #{this} not to match #{exp}' | ||
| - , selector | ||
| - ); | ||
| - } else { | ||
| - _super.apply(this, arguments); | ||
| - } | ||
| - } | ||
| - }); | ||
| - | ||
| - chai.Assertion.overwriteChainableMethod('contain', | ||
| - function (_super) { | ||
| - return function (text) { | ||
| - var obj = flag(this, 'object'); | ||
| - if (obj instanceof $) { | ||
| - this.assert( | ||
| - obj.is(':contains(\'' + text + '\')') | ||
| - , 'expected #{this} to contain #{exp}' | ||
| - , 'expected #{this} not to contain #{exp}' | ||
| - , text); | ||
| - } else { | ||
| - _super.apply(this, arguments); | ||
| - } | ||
| - } | ||
| - }, | ||
| - function(_super) { | ||
| - return function() { | ||
| - _super.call(this); | ||
| - }; | ||
| - } | ||
| - ); | ||
| -})); |
4,800
public/js/lib/chai/chai.js
0 additions,
4,800 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
1
public/js/lib/codemirror-accessible/.gitignore
| @@ -1 +0,0 @@ | ||
| -.DS_Store |
3
public/js/lib/codemirror-accessible/README.md
| @@ -1,3 +0,0 @@ | ||
| -# CodeMirror Accessible | ||
| - | ||
| -Read more at the project page: http://bgrins.github.io/codemirror-accessible/ |
80
public/js/lib/codemirror-accessible/accessible.js
| @@ -1,80 +0,0 @@ | ||
| -window.onload=function(){ | ||
| - if (!window.waitToLoad) { | ||
| - load(); | ||
| - } | ||
| -}; | ||
| - | ||
| -function load() { | ||
| - if (window.loaded) { | ||
| - return; | ||
| - } | ||
| - window.loaded = true; | ||
| - | ||
| - var myTextArea = document.getElementById("editor"); | ||
| - var textareaEditor = document.getElementById('textarea-editor'); | ||
| - var clonedTextArea = document.getElementById('editor2'); | ||
| - | ||
| - textareaEditor.value = clonedTextArea.value = myTextArea.value; | ||
| - | ||
| - document.getElementById("original-demo").appendChild(clonedTextArea); | ||
| - var myScreenreader = document.getElementById("editor-screenreader"); | ||
| - | ||
| - var myContentEditable = document.getElementById("content-editable"); | ||
| - var button = document.getElementById("toggle-textarea-visibility"); | ||
| - | ||
| - | ||
| - var editor = window.editor = CodeMirror.fromTextArea(myTextArea, { | ||
| - lineNumbers: true, | ||
| - matchBrackets: true, | ||
| - continueComments: "Enter", | ||
| - extraKeys: {"Ctrl-Q": "toggleComment"} | ||
| - }); | ||
| - | ||
| - var editor2 = window.editor2 = CodeMirrorOriginal.fromTextArea(clonedTextArea, { | ||
| - lineNumbers: true, | ||
| - matchBrackets: true, | ||
| - continueComments: "Enter", | ||
| - extraKeys: {"Ctrl-Q": "toggleComment"} | ||
| - }); | ||
| - | ||
| - | ||
| - var textareaVisible = false; | ||
| - function toggleTextareaDisplay() { | ||
| - | ||
| - if (!editor.display.input.getAttribute("backup-style")) { | ||
| - editor.display.input.setAttribute("backup-style", editor.display.input.getAttribute("style")); | ||
| - editor.display.input.parentNode.setAttribute("backup-style", editor.display.input.parentNode.getAttribute("style")); | ||
| - } | ||
| - | ||
| - if (textareaVisible) { | ||
| - editor.display.input.setAttribute("style", editor.display.input.getAttribute("backup-style")); | ||
| - editor.display.input.parentNode.setAttribute("style", editor.display.input.parentNode.getAttribute("backup-style")); | ||
| - editor2.display.input.setAttribute("style", editor.display.input.getAttribute("backup-style")); | ||
| - editor2.display.input.parentNode.setAttribute("style", editor.display.input.parentNode.getAttribute("backup-style")); | ||
| - } | ||
| - else { | ||
| - editor.display.input.setAttribute("style", "height: 100px; width: 95%; margin-left: 3%; "); | ||
| - editor.display.input.parentNode.setAttribute("style", ""); | ||
| - editor2.display.input.setAttribute("style", "height: 100px; width: 95%; margin-left: 3%; "); | ||
| - editor2.display.input.parentNode.setAttribute("style", ""); | ||
| - } | ||
| - | ||
| - textareaVisible = !textareaVisible; | ||
| - | ||
| - if (window.localStorage) { | ||
| - if (textareaVisible) { | ||
| - window.localStorage["toggleTextareaDisplay"] = "1"; | ||
| - } | ||
| - else { | ||
| - window.localStorage.removeKey("toggleTextareaDisplay"); | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - button.onclick = toggleTextareaDisplay; | ||
| - | ||
| - if (window.localStorage && window.localStorage["toggleTextareaDisplay"]) { | ||
| - toggleTextareaDisplay(); | ||
| - } | ||
| - | ||
| -} |
5,828
public/js/lib/codemirror-accessible/codemirror-accessible.js
0 additions,
5,828 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
5,848
public/js/lib/codemirror-accessible/codemirror-accessible2.js
0 additions,
5,848 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
5,799
public/js/lib/codemirror-accessible/codemirror-original.js
0 additions,
5,799 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
258
public/js/lib/codemirror-accessible/codemirror.css
| @@ -1,258 +0,0 @@ | ||
| -/* BASICS */ | ||
| - | ||
| -.CodeMirror { | ||
| - /* Set height, width, borders, and global font properties here */ | ||
| - font-family: monospace; | ||
| - height: 300px; | ||
| -} | ||
| -.CodeMirror-scroll { | ||
| - /* Set scrolling behaviour here */ | ||
| - overflow: auto; | ||
| -} | ||
| - | ||
| -/* PADDING */ | ||
| - | ||
| -.CodeMirror-lines { | ||
| - padding: 4px 0; /* Vertical padding around content */ | ||
| -} | ||
| -.CodeMirror pre { | ||
| - padding: 0 4px; /* Horizontal padding of content */ | ||
| -} | ||
| - | ||
| -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { | ||
| - background-color: white; /* The little square between H and V scrollbars */ | ||
| -} | ||
| - | ||
| -/* GUTTER */ | ||
| - | ||
| -.CodeMirror-gutters { | ||
| - border-right: 1px solid #ddd; | ||
| - background-color: #f7f7f7; | ||
| - white-space: nowrap; | ||
| -} | ||
| -.CodeMirror-linenumbers {} | ||
| -.CodeMirror-linenumber { | ||
| - padding: 0 3px 0 5px; | ||
| - min-width: 20px; | ||
| - text-align: right; | ||
| - color: #999; | ||
| -} | ||
| - | ||
| -/* CURSOR */ | ||
| - | ||
| -.CodeMirror div.CodeMirror-cursor { | ||
| - border-left: 1px solid black; | ||
| - z-index: 3; | ||
| -} | ||
| -/* Shown when moving in bi-directional text */ | ||
| -.CodeMirror div.CodeMirror-secondarycursor { | ||
| - border-left: 1px solid silver; | ||
| -} | ||
| -.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { | ||
| - width: auto; | ||
| - border: 0; | ||
| - background: #7e7; | ||
| - z-index: 1; | ||
| -} | ||
| -/* Can style cursor different in overwrite (non-insert) mode */ | ||
| -.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {} | ||
| - | ||
| -.cm-tab { display: inline-block; } | ||
| - | ||
| -/* DEFAULT THEME */ | ||
| - | ||
| -.cm-s-default .cm-keyword {color: #708;} | ||
| -.cm-s-default .cm-atom {color: #219;} | ||
| -.cm-s-default .cm-number {color: #164;} | ||
| -.cm-s-default .cm-def {color: #00f;} | ||
| -.cm-s-default .cm-variable {color: black;} | ||
| -.cm-s-default .cm-variable-2 {color: #05a;} | ||
| -.cm-s-default .cm-variable-3 {color: #085;} | ||
| -.cm-s-default .cm-property {color: black;} | ||
| -.cm-s-default .cm-operator {color: black;} | ||
| -.cm-s-default .cm-comment {color: #a50;} | ||
| -.cm-s-default .cm-string {color: #a11;} | ||
| -.cm-s-default .cm-string-2 {color: #f50;} | ||
| -.cm-s-default .cm-meta {color: #555;} | ||
| -.cm-s-default .cm-error {color: #f00;} | ||
| -.cm-s-default .cm-qualifier {color: #555;} | ||
| -.cm-s-default .cm-builtin {color: #30a;} | ||
| -.cm-s-default .cm-bracket {color: #997;} | ||
| -.cm-s-default .cm-tag {color: #170;} | ||
| -.cm-s-default .cm-attribute {color: #00c;} | ||
| -.cm-s-default .cm-header {color: blue;} | ||
| -.cm-s-default .cm-quote {color: #090;} | ||
| -.cm-s-default .cm-hr {color: #999;} | ||
| -.cm-s-default .cm-link {color: #00c;} | ||
| - | ||
| -.cm-negative {color: #d44;} | ||
| -.cm-positive {color: #292;} | ||
| -.cm-header, .cm-strong {font-weight: bold;} | ||
| -.cm-em {font-style: italic;} | ||
| -.cm-link {text-decoration: underline;} | ||
| - | ||
| -.cm-invalidchar {color: #f00;} | ||
| - | ||
| -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} | ||
| -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} | ||
| - | ||
| -/* STOP */ | ||
| - | ||
| -/* The rest of this file contains styles related to the mechanics of | ||
| - the editor. You probably shouldn't touch them. */ | ||
| - | ||
| -.CodeMirror { | ||
| - line-height: 1; | ||
| - position: relative; | ||
| - overflow: hidden; | ||
| - background: white; | ||
| - color: black; | ||
| -} | ||
| - | ||
| -.CodeMirror-scroll { | ||
| - /* 30px is the magic margin used to hide the element's real scrollbars */ | ||
| - /* See overflow: hidden in .CodeMirror */ | ||
| - margin-bottom: -30px; margin-right: -30px; | ||
| - padding-bottom: 30px; padding-right: 30px; | ||
| - height: 100%; | ||
| - outline: none; /* Prevent dragging from highlighting the element */ | ||
| - position: relative; | ||
| -} | ||
| -.CodeMirror-sizer { | ||
| - position: relative; | ||
| -} | ||
| - | ||
| -/* The fake, visible scrollbars. Used to force redraw during scrolling | ||
| - before actuall scrolling happens, thus preventing shaking and | ||
| - flickering artifacts. */ | ||
| -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { | ||
| - position: absolute; | ||
| - z-index: 6; | ||
| - display: none; | ||
| -} | ||
| -.CodeMirror-vscrollbar { | ||
| - right: 0; top: 0; | ||
| - overflow-x: hidden; | ||
| - overflow-y: scroll; | ||
| -} | ||
| -.CodeMirror-hscrollbar { | ||
| - bottom: 0; left: 0; | ||
| - overflow-y: hidden; | ||
| - overflow-x: scroll; | ||
| -} | ||
| -.CodeMirror-scrollbar-filler { | ||
| - right: 0; bottom: 0; | ||
| -} | ||
| -.CodeMirror-gutter-filler { | ||
| - left: 0; bottom: 0; | ||
| -} | ||
| - | ||
| -.CodeMirror-gutters { | ||
| - position: absolute; left: 0; top: 0; | ||
| - padding-bottom: 30px; | ||
| - z-index: 3; | ||
| -} | ||
| -.CodeMirror-gutter { | ||
| - white-space: normal; | ||
| - height: 100%; | ||
| - padding-bottom: 30px; | ||
| - margin-bottom: -32px; | ||
| - display: inline-block; | ||
| - /* Hack to make IE7 behave */ | ||
| - *zoom:1; | ||
| - *display:inline; | ||
| -} | ||
| -.CodeMirror-gutter-elt { | ||
| - position: absolute; | ||
| - cursor: default; | ||
| - z-index: 4; | ||
| -} | ||
| - | ||
| -.CodeMirror-lines { | ||
| - cursor: text; | ||
| -} | ||
| -.CodeMirror pre { | ||
| - /* Reset some styles that the rest of the page might have set */ | ||
| - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; | ||
| - border-width: 0; | ||
| - background: transparent; | ||
| - font-family: inherit; | ||
| - font-size: inherit; | ||
| - margin: 0; | ||
| - white-space: pre; | ||
| - word-wrap: normal; | ||
| - line-height: inherit; | ||
| - color: inherit; | ||
| - z-index: 2; | ||
| - position: relative; | ||
| - overflow: visible; | ||
| -} | ||
| -.CodeMirror-wrap pre { | ||
| - word-wrap: break-word; | ||
| - white-space: pre-wrap; | ||
| - word-break: normal; | ||
| -} | ||
| -.CodeMirror-code pre { | ||
| - border-right: 30px solid transparent; | ||
| - width: -webkit-fit-content; | ||
| - width: -moz-fit-content; | ||
| - width: fit-content; | ||
| -} | ||
| -.CodeMirror-wrap .CodeMirror-code pre { | ||
| - border-right: none; | ||
| - width: auto; | ||
| -} | ||
| -.CodeMirror-linebackground { | ||
| - position: absolute; | ||
| - left: 0; right: 0; top: 0; bottom: 0; | ||
| - z-index: 0; | ||
| -} | ||
| - | ||
| -.CodeMirror-linewidget { | ||
| - position: relative; | ||
| - z-index: 2; | ||
| - overflow: auto; | ||
| -} | ||
| - | ||
| -.CodeMirror-widget { | ||
| -} | ||
| - | ||
| -.CodeMirror-wrap .CodeMirror-scroll { | ||
| - overflow-x: hidden; | ||
| -} | ||
| - | ||
| -.CodeMirror-measure { | ||
| - position: absolute; | ||
| - width: 100%; height: 0px; | ||
| - overflow: hidden; | ||
| - visibility: hidden; | ||
| -} | ||
| -.CodeMirror-measure pre { position: static; } | ||
| - | ||
| -.CodeMirror div.CodeMirror-cursor { | ||
| - position: absolute; | ||
| - visibility: hidden; | ||
| - border-right: none; | ||
| - width: 0; | ||
| -} | ||
| -.CodeMirror-focused div.CodeMirror-cursor { | ||
| - visibility: visible; | ||
| -} | ||
| - | ||
| -.CodeMirror-selected { background: #d9d9d9; } | ||
| -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } | ||
| - | ||
| -.cm-searching { | ||
| - background: #ffa; | ||
| - background: rgba(255, 255, 0, .4); | ||
| -} | ||
| - | ||
| -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ | ||
| -.CodeMirror span { *vertical-align: text-bottom; } | ||
| - | ||
| -@media print { | ||
| - /* Hide the cursor when printing */ | ||
| - .CodeMirror div.CodeMirror-cursor { | ||
| - visibility: hidden; | ||
| - } | ||
| -} |
9,941
public/js/lib/codemirror-accessible/index.html
0 additions,
9,941 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
482
public/js/lib/codemirror-accessible/javascript.js
| @@ -1,482 +0,0 @@ | ||
| -// TODO actually recognize syntax of TypeScript constructs | ||
| - | ||
| - | ||
| -var opts= function(config, parserConfig) { | ||
| - var indentUnit = config.indentUnit; | ||
| - var statementIndent = parserConfig.statementIndent; | ||
| - var jsonMode = parserConfig.json; | ||
| - var isTS = parserConfig.typescript; | ||
| - | ||
| - // Tokenizer | ||
| - | ||
| - var keywords = function(){ | ||
| - function kw(type) {return {type: type, style: "keyword"};} | ||
| - var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); | ||
| - var operator = kw("operator"), atom = {type: "atom", style: "atom"}; | ||
| - | ||
| - var jsKeywords = { | ||
| - "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, | ||
| - "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, | ||
| - "var": kw("var"), "const": kw("var"), "let": kw("var"), | ||
| - "function": kw("function"), "catch": kw("catch"), | ||
| - "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), | ||
| - "in": operator, "typeof": operator, "instanceof": operator, | ||
| - "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, | ||
| - "this": kw("this") | ||
| - }; | ||
| - | ||
| - // Extend the 'normal' keywords with the TypeScript language extensions | ||
| - if (isTS) { | ||
| - var type = {type: "variable", style: "variable-3"}; | ||
| - var tsKeywords = { | ||
| - // object-like things | ||
| - "interface": kw("interface"), | ||
| - "class": kw("class"), | ||
| - "extends": kw("extends"), | ||
| - "constructor": kw("constructor"), | ||
| - | ||
| - // scope modifiers | ||
| - "public": kw("public"), | ||
| - "private": kw("private"), | ||
| - "protected": kw("protected"), | ||
| - "static": kw("static"), | ||
| - | ||
| - "super": kw("super"), | ||
| - | ||
| - // types | ||
| - "string": type, "number": type, "bool": type, "any": type | ||
| - }; | ||
| - | ||
| - for (var attr in tsKeywords) { | ||
| - jsKeywords[attr] = tsKeywords[attr]; | ||
| - } | ||
| - } | ||
| - | ||
| - return jsKeywords; | ||
| - }(); | ||
| - | ||
| - var isOperatorChar = /[+\-*&%=<>!?|~^]/; | ||
| - | ||
| - function chain(stream, state, f) { | ||
| - state.tokenize = f; | ||
| - return f(stream, state); | ||
| - } | ||
| - | ||
| - function nextUntilUnescaped(stream, end) { | ||
| - var escaped = false, next; | ||
| - while ((next = stream.next()) != null) { | ||
| - if (next == end && !escaped) | ||
| - return false; | ||
| - escaped = !escaped && next == "\\"; | ||
| - } | ||
| - return escaped; | ||
| - } | ||
| - | ||
| - // Used as scratch variables to communicate multiple values without | ||
| - // consing up tons of objects. | ||
| - var type, content; | ||
| - function ret(tp, style, cont) { | ||
| - type = tp; content = cont; | ||
| - return style; | ||
| - } | ||
| - | ||
| - function jsTokenBase(stream, state) { | ||
| - var ch = stream.next(); | ||
| - if (ch == '"' || ch == "'") | ||
| - return chain(stream, state, jsTokenString(ch)); | ||
| - else if (/[\[\]{}\(\),;\:\.]/.test(ch)) | ||
| - return ret(ch); | ||
| - else if (ch == "0" && stream.eat(/x/i)) { | ||
| - stream.eatWhile(/[\da-f]/i); | ||
| - return ret("number", "number"); | ||
| - } | ||
| - else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { | ||
| - stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); | ||
| - return ret("number", "number"); | ||
| - } | ||
| - else if (ch == "/") { | ||
| - if (stream.eat("*")) { | ||
| - return chain(stream, state, jsTokenComment); | ||
| - } | ||
| - else if (stream.eat("/")) { | ||
| - stream.skipToEnd(); | ||
| - return ret("comment", "comment"); | ||
| - } | ||
| - else if (state.lastType == "operator" || state.lastType == "keyword c" || | ||
| - /^[\[{}\(,;:]$/.test(state.lastType)) { | ||
| - nextUntilUnescaped(stream, "/"); | ||
| - stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla | ||
| - return ret("regexp", "string-2"); | ||
| - } | ||
| - else { | ||
| - stream.eatWhile(isOperatorChar); | ||
| - return ret("operator", null, stream.current()); | ||
| - } | ||
| - } | ||
| - else if (ch == "#") { | ||
| - stream.skipToEnd(); | ||
| - return ret("error", "error"); | ||
| - } | ||
| - else if (isOperatorChar.test(ch)) { | ||
| - stream.eatWhile(isOperatorChar); | ||
| - return ret("operator", null, stream.current()); | ||
| - } | ||
| - else { | ||
| - stream.eatWhile(/[\w\$_]/); | ||
| - var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; | ||
| - return (known && state.lastType != ".") ? ret(known.type, known.style, word) : | ||
| - ret("variable", "variable", word); | ||
| - } | ||
| - } | ||
| - | ||
| - function jsTokenString(quote) { | ||
| - return function(stream, state) { | ||
| - if (!nextUntilUnescaped(stream, quote)) | ||
| - state.tokenize = jsTokenBase; | ||
| - return ret("string", "string"); | ||
| - }; | ||
| - } | ||
| - | ||
| - function jsTokenComment(stream, state) { | ||
| - var maybeEnd = false, ch; | ||
| - while (ch = stream.next()) { | ||
| - if (ch == "/" && maybeEnd) { | ||
| - state.tokenize = jsTokenBase; | ||
| - break; | ||
| - } | ||
| - maybeEnd = (ch == "*"); | ||
| - } | ||
| - return ret("comment", "comment"); | ||
| - } | ||
| - | ||
| - // Parser | ||
| - | ||
| - var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true}; | ||
| - | ||
| - function JSLexical(indented, column, type, align, prev, info) { | ||
| - this.indented = indented; | ||
| - this.column = column; | ||
| - this.type = type; | ||
| - this.prev = prev; | ||
| - this.info = info; | ||
| - if (align != null) this.align = align; | ||
| - } | ||
| - | ||
| - function inScope(state, varname) { | ||
| - for (var v = state.localVars; v; v = v.next) | ||
| - if (v.name == varname) return true; | ||
| - } | ||
| - | ||
| - function parseJS(state, style, type, content, stream) { | ||
| - var cc = state.cc; | ||
| - // Communicate our context to the combinators. | ||
| - // (Less wasteful than consing up a hundred closures on every call.) | ||
| - cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; | ||
| - | ||
| - if (!state.lexical.hasOwnProperty("align")) | ||
| - state.lexical.align = true; | ||
| - | ||
| - while(true) { | ||
| - var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; | ||
| - if (combinator(type, content)) { | ||
| - while(cc.length && cc[cc.length - 1].lex) | ||
| - cc.pop()(); | ||
| - if (cx.marked) return cx.marked; | ||
| - if (type == "variable" && inScope(state, content)) return "variable-2"; | ||
| - return style; | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - // Combinator utils | ||
| - | ||
| - var cx = {state: null, column: null, marked: null, cc: null}; | ||
| - function pass() { | ||
| - for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); | ||
| - } | ||
| - function cont() { | ||
| - pass.apply(null, arguments); | ||
| - return true; | ||
| - } | ||
| - function register(varname) { | ||
| - function inList(list) { | ||
| - for (var v = list; v; v = v.next) | ||
| - if (v.name == varname) return true; | ||
| - return false; | ||
| - } | ||
| - var state = cx.state; | ||
| - if (state.context) { | ||
| - cx.marked = "def"; | ||
| - if (inList(state.localVars)) return; | ||
| - state.localVars = {name: varname, next: state.localVars}; | ||
| - } else { | ||
| - if (inList(state.globalVars)) return; | ||
| - state.globalVars = {name: varname, next: state.globalVars}; | ||
| - } | ||
| - } | ||
| - | ||
| - // Combinators | ||
| - | ||
| - var defaultVars = {name: "this", next: {name: "arguments"}}; | ||
| - function pushcontext() { | ||
| - cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; | ||
| - cx.state.localVars = defaultVars; | ||
| - } | ||
| - function popcontext() { | ||
| - cx.state.localVars = cx.state.context.vars; | ||
| - cx.state.context = cx.state.context.prev; | ||
| - } | ||
| - function pushlex(type, info) { | ||
| - var result = function() { | ||
| - var state = cx.state, indent = state.indented; | ||
| - if (state.lexical.type == "stat") indent = state.lexical.indented; | ||
| - state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); | ||
| - }; | ||
| - result.lex = true; | ||
| - return result; | ||
| - } | ||
| - function poplex() { | ||
| - var state = cx.state; | ||
| - if (state.lexical.prev) { | ||
| - if (state.lexical.type == ")") | ||
| - state.indented = state.lexical.indented; | ||
| - state.lexical = state.lexical.prev; | ||
| - } | ||
| - } | ||
| - poplex.lex = true; | ||
| - | ||
| - function expect(wanted) { | ||
| - return function(type) { | ||
| - if (type == wanted) return cont(); | ||
| - else if (wanted == ";") return pass(); | ||
| - else return cont(arguments.callee); | ||
| - }; | ||
| - } | ||
| - | ||
| - function statement(type) { | ||
| - if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); | ||
| - if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); | ||
| - if (type == "keyword b") return cont(pushlex("form"), statement, poplex); | ||
| - if (type == "{") return cont(pushlex("}"), block, poplex); | ||
| - if (type == ";") return cont(); | ||
| - if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse); | ||
| - if (type == "function") return cont(functiondef); | ||
| - if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), | ||
| - poplex, statement, poplex); | ||
| - if (type == "variable") return cont(pushlex("stat"), maybelabel); | ||
| - if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), | ||
| - block, poplex, poplex); | ||
| - if (type == "case") return cont(expression, expect(":")); | ||
| - if (type == "default") return cont(expect(":")); | ||
| - if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), | ||
| - statement, poplex, popcontext); | ||
| - return pass(pushlex("stat"), expression, expect(";"), poplex); | ||
| - } | ||
| - function expression(type) { | ||
| - return expressionInner(type, false); | ||
| - } | ||
| - function expressionNoComma(type) { | ||
| - return expressionInner(type, true); | ||
| - } | ||
| - function expressionInner(type, noComma) { | ||
| - var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; | ||
| - if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); | ||
| - if (type == "function") return cont(functiondef); | ||
| - if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); | ||
| - if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); | ||
| - if (type == "operator") return cont(noComma ? expressionNoComma : expression); | ||
| - if (type == "[") return cont(pushlex("]"), commasep(expressionNoComma, "]"), poplex, maybeop); | ||
| - if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeop); | ||
| - return cont(); | ||
| - } | ||
| - function maybeexpression(type) { | ||
| - if (type.match(/[;\}\)\],]/)) return pass(); | ||
| - return pass(expression); | ||
| - } | ||
| - function maybeexpressionNoComma(type) { | ||
| - if (type.match(/[;\}\)\],]/)) return pass(); | ||
| - return pass(expressionNoComma); | ||
| - } | ||
| - | ||
| - function maybeoperatorComma(type, value) { | ||
| - if (type == ",") return cont(expression); | ||
| - return maybeoperatorNoComma(type, value, false); | ||
| - } | ||
| - function maybeoperatorNoComma(type, value, noComma) { | ||
| - var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; | ||
| - var expr = noComma == false ? expression : expressionNoComma; | ||
| - if (type == "operator") { | ||
| - if (/\+\+|--/.test(value)) return cont(me); | ||
| - if (value == "?") return cont(expression, expect(":"), expr); | ||
| - return cont(expr); | ||
| - } | ||
| - if (type == ";") return; | ||
| - if (type == "(") return cont(pushlex(")", "call"), commasep(expressionNoComma, ")"), poplex, me); | ||
| - if (type == ".") return cont(property, me); | ||
| - if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); | ||
| - } | ||
| - function maybelabel(type) { | ||
| - if (type == ":") return cont(poplex, statement); | ||
| - return pass(maybeoperatorComma, expect(";"), poplex); | ||
| - } | ||
| - function property(type) { | ||
| - if (type == "variable") {cx.marked = "property"; return cont();} | ||
| - } | ||
| - function objprop(type, value) { | ||
| - if (type == "variable") { | ||
| - cx.marked = "property"; | ||
| - if (value == "get" || value == "set") return cont(getterSetter); | ||
| - } else if (type == "number" || type == "string") { | ||
| - cx.marked = type + " property"; | ||
| - } | ||
| - if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expressionNoComma); | ||
| - } | ||
| - function getterSetter(type) { | ||
| - if (type == ":") return cont(expression); | ||
| - if (type != "variable") return cont(expect(":"), expression); | ||
| - cx.marked = "property"; | ||
| - return cont(functiondef); | ||
| - } | ||
| - function commasep(what, end) { | ||
| - function proceed(type) { | ||
| - if (type == ",") { | ||
| - var lex = cx.state.lexical; | ||
| - if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; | ||
| - return cont(what, proceed); | ||
| - } | ||
| - if (type == end) return cont(); | ||
| - return cont(expect(end)); | ||
| - } | ||
| - return function(type) { | ||
| - if (type == end) return cont(); | ||
| - else return pass(what, proceed); | ||
| - }; | ||
| - } | ||
| - function block(type) { | ||
| - if (type == "}") return cont(); | ||
| - return pass(statement, block); | ||
| - } | ||
| - function maybetype(type) { | ||
| - if (type == ":") return cont(typedef); | ||
| - return pass(); | ||
| - } | ||
| - function typedef(type) { | ||
| - if (type == "variable"){cx.marked = "variable-3"; return cont();} | ||
| - return pass(); | ||
| - } | ||
| - function vardef1(type, value) { | ||
| - if (type == "variable") { | ||
| - register(value); | ||
| - return isTS ? cont(maybetype, vardef2) : cont(vardef2); | ||
| - } | ||
| - return pass(); | ||
| - } | ||
| - function vardef2(type, value) { | ||
| - if (value == "=") return cont(expressionNoComma, vardef2); | ||
| - if (type == ",") return cont(vardef1); | ||
| - } | ||
| - function maybeelse(type, value) { | ||
| - if (type == "keyword b" && value == "else") return cont(pushlex("form"), statement, poplex); | ||
| - } | ||
| - function forspec1(type) { | ||
| - if (type == "var") return cont(vardef1, expect(";"), forspec2); | ||
| - if (type == ";") return cont(forspec2); | ||
| - if (type == "variable") return cont(formaybein); | ||
| - return pass(expression, expect(";"), forspec2); | ||
| - } | ||
| - function formaybein(_type, value) { | ||
| - if (value == "in") return cont(expression); | ||
| - return cont(maybeoperatorComma, forspec2); | ||
| - } | ||
| - function forspec2(type, value) { | ||
| - if (type == ";") return cont(forspec3); | ||
| - if (value == "in") return cont(expression); | ||
| - return pass(expression, expect(";"), forspec3); | ||
| - } | ||
| - function forspec3(type) { | ||
| - if (type != ")") cont(expression); | ||
| - } | ||
| - function functiondef(type, value) { | ||
| - if (type == "variable") {register(value); return cont(functiondef);} | ||
| - if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext); | ||
| - } | ||
| - function funarg(type, value) { | ||
| - if (type == "variable") {register(value); return isTS ? cont(maybetype) : cont();} | ||
| - } | ||
| - | ||
| - // Interface | ||
| - | ||
| - return { | ||
| - startState: function(basecolumn) { | ||
| - return { | ||
| - tokenize: jsTokenBase, | ||
| - lastType: null, | ||
| - cc: [], | ||
| - lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), | ||
| - localVars: parserConfig.localVars, | ||
| - globalVars: parserConfig.globalVars, | ||
| - context: parserConfig.localVars && {vars: parserConfig.localVars}, | ||
| - indented: 0 | ||
| - }; | ||
| - }, | ||
| - | ||
| - token: function(stream, state) { | ||
| - if (stream.sol()) { | ||
| - if (!state.lexical.hasOwnProperty("align")) | ||
| - state.lexical.align = false; | ||
| - state.indented = stream.indentation(); | ||
| - } | ||
| - if (state.tokenize != jsTokenComment && stream.eatSpace()) return null; | ||
| - var style = state.tokenize(stream, state); | ||
| - if (type == "comment") return style; | ||
| - state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; | ||
| - return parseJS(state, style, type, content, stream); | ||
| - }, | ||
| - | ||
| - indent: function(state, textAfter) { | ||
| - if (state.tokenize == jsTokenComment) return CodeMirror.Pass; | ||
| - if (state.tokenize != jsTokenBase) return 0; | ||
| - var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; | ||
| - // Kludge to prevent 'maybelse' from blocking lexical scope pops | ||
| - for (var i = state.cc.length - 1; i >= 0; --i) { | ||
| - var c = state.cc[i]; | ||
| - if (c == poplex) lexical = lexical.prev; | ||
| - else if (c != maybeelse || /^else\b/.test(textAfter)) break; | ||
| - } | ||
| - if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; | ||
| - if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") | ||
| - lexical = lexical.prev; | ||
| - var type = lexical.type, closing = firstChar == type; | ||
| - | ||
| - if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? 4 : 0); | ||
| - else if (type == "form" && firstChar == "{") return lexical.indented; | ||
| - else if (type == "form") return lexical.indented + indentUnit; | ||
| - else if (type == "stat") | ||
| - return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? statementIndent || indentUnit : 0); | ||
| - else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) | ||
| - return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); | ||
| - else if (lexical.align) return lexical.column + (closing ? 0 : 1); | ||
| - else return lexical.indented + (closing ? 0 : indentUnit); | ||
| - }, | ||
| - | ||
| - electricChars: ":{}", | ||
| - blockCommentStart: jsonMode ? null : "/*", | ||
| - blockCommentEnd: jsonMode ? null : "*/", | ||
| - lineComment: jsonMode ? null : "//", | ||
| - fold: "brace", | ||
| - | ||
| - helperType: jsonMode ? "json" : "javascript", | ||
| - jsonMode: jsonMode | ||
| - }; | ||
| -}; | ||
| - | ||
| -CodeMirror.defineMode("javascript", opts ); | ||
| -CodeMirrorOriginal.defineMode("javascript", opts ); | ||
| -CodeMirror.defineMIME("text/javascript", "javascript"); | ||
| -CodeMirror.defineMIME("text/ecmascript", "javascript"); | ||
| -CodeMirror.defineMIME("application/javascript", "javascript"); | ||
| -CodeMirror.defineMIME("application/ecmascript", "javascript"); | ||
| -CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); | ||
| -CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); | ||
| -CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); | ||
| -CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); |
749
public/js/lib/codemirror-accessible/stress.html
0 additions,
749 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
8
public/js/lib/codemirror/.gitattributes
| @@ -1,8 +0,0 @@ | ||
| -*.txt text | ||
| -*.js text | ||
| -*.html text | ||
| -*.md text | ||
| -*.json text | ||
| -*.yml text | ||
| -*.css text | ||
| -*.svg text |
8
public/js/lib/codemirror/.gitignore
| @@ -1,8 +0,0 @@ | ||
| -/node_modules | ||
| -/npm-debug.log | ||
| -test.html | ||
| -.tern-* | ||
| -*~ | ||
| -*.swp | ||
| -.idea | ||
| -*.iml |
3
public/js/lib/codemirror/.travis.yml
| @@ -1,3 +0,0 @@ | ||
| -language: node_js | ||
| -node_js: | ||
| - - 0.8 |
423
public/js/lib/codemirror/AUTHORS
| @@ -1,423 +0,0 @@ | ||
| -List of CodeMirror contributors. Updated before every release. | ||
| - | ||
| -4r2r | ||
| -Aaron Brooks | ||
| -Abdelouahab | ||
| -Abe Fettig | ||
| -Adam Ahmed | ||
| -Adam King | ||
| -adanlobato | ||
| -Adán Lobato | ||
| -Adrian Aichner | ||
| -aeroson | ||
| -Ahmad Amireh | ||
| -Ahmad M. Zawawi | ||
| -ahoward | ||
| -Akeksandr Motsjonov | ||
| -Alberto González Palomo | ||
| -Alberto Pose | ||
| -Albert Xing | ||
| -Alexander Pavlov | ||
| -Alexander Schepanovski | ||
| -Alexander Shvets | ||
| -Alexander Solovyov | ||
| -Alexandre Bique | ||
| -alexey-k | ||
| -Alex Piggott | ||
| -Amsul | ||
| -amuntean | ||
| -Amy | ||
| -Ananya Sen | ||
| -anaran | ||
| -AndersMad | ||
| -Anders Nawroth | ||
| -Anderson Mesquita | ||
| -Andrea G | ||
| -Andreas Reischuck | ||
| -Andre von Houck | ||
| -Andrey Fedorov | ||
| -Andrey Klyuchnikov | ||
| -Andrey Lushnikov | ||
| -Andy Joslin | ||
| -Andy Kimball | ||
| -Andy Li | ||
| -angelozerr | ||
| -angelo.zerr@gmail.com | ||
| -Ankit Ahuja | ||
| -Ansel Santosa | ||
| -Anthony Grimes | ||
| -Anton Kovalyov | ||
| -areos | ||
| -as3boyan | ||
| -AtomicPages LLC | ||
| -Atul Bhouraskar | ||
| -Aurelian Oancea | ||
| -Bastian Müller | ||
| -Bem Jones-Bey | ||
| -benbro | ||
| -Beni Cherniavsky-Paskin | ||
| -Benjamin DeCoste | ||
| -Ben Keen | ||
| -Bernhard Sirlinger | ||
| -Bert Chang | ||
| -Billy Moon | ||
| -binny | ||
| -B Krishna Chaitanya | ||
| -Blaine G | ||
| -blukat29 | ||
| -boomyjee | ||
| -borawjm | ||
| -Brandon Frohs | ||
| -Brandon Wamboldt | ||
| -Brett Zamir | ||
| -Brian Grinstead | ||
| -Brian Sletten | ||
| -Bruce Mitchener | ||
| -Chandra Sekhar Pydi | ||
| -Charles Skelton | ||
| -Cheah Chu Yeow | ||
| -Chris Coyier | ||
| -Chris Granger | ||
| -Chris Houseknecht | ||
| -Chris Morgan | ||
| -Christian Oyarzun | ||
| -Christopher Brown | ||
| -ciaranj | ||
| -CodeAnimal | ||
| -ComFreek | ||
| -Curtis Gagliardi | ||
| -dagsta | ||
| -daines | ||
| -Dale Jung | ||
| -Dan Bentley | ||
| -Dan Heberden | ||
| -Daniel, Dao Quang Minh | ||
| -Daniele Di Sarli | ||
| -Daniel Faust | ||
| -Daniel Huigens | ||
| -Daniel KJ | ||
| -Daniel Neel | ||
| -Daniel Parnell | ||
| -Danny Yoo | ||
| -darealshinji | ||
| -Darius Roberts | ||
| -Dave Myers | ||
| -David Mignot | ||
| -David Pathakjee | ||
| -David Vázquez | ||
| -deebugger | ||
| -Deep Thought | ||
| -Devon Carew | ||
| -dignifiedquire | ||
| -Dimage Sapelkin | ||
| -domagoj412 | ||
| -Dominator008 | ||
| -Domizio Demichelis | ||
| -Doug Wikle | ||
| -Drew Bratcher | ||
| -Drew Hintz | ||
| -Drew Khoury | ||
| -Dror BG | ||
| -duralog | ||
| -eborden | ||
| -edsharp | ||
| -ekhaled | ||
| -Enam Mijbah Noor | ||
| -Eric Allam | ||
| -eustas | ||
| -Fabien O'Carroll | ||
| -Fabio Zendhi Nagao | ||
| -Faiza Alsaied | ||
| -Fauntleroy | ||
| -fbuchinger | ||
| -feizhang365 | ||
| -Felipe Lalanne | ||
| -Felix Raab | ||
| -Filip Noetzel | ||
| -flack | ||
| -ForbesLindesay | ||
| -Forbes Lindesay | ||
| -Ford_Lawnmower | ||
| -Frank Wiegand | ||
| -Gabriel Gheorghian | ||
| -Gabriel Horner | ||
| -Gabriel Nahmias | ||
| -galambalazs | ||
| -Gautam Mehta | ||
| -gekkoe | ||
| -Gerard Braad | ||
| -Gergely Hegykozi | ||
| -Glenn Jorde | ||
| -Glenn Ruehle | ||
| -Golevka | ||
| -Gordon Smith | ||
| -Grant Skinner | ||
| -greengiant | ||
| -Gregory Koberger | ||
| -Guillaume Massé | ||
| -Guillaume Massé | ||
| -Gustavo Rodrigues | ||
| -Hakan Tunc | ||
| -Hans Engel | ||
| -Hardest | ||
| -Hasan Karahan | ||
| -Herculano Campos | ||
| -Hiroyuki Makino | ||
| -hitsthings | ||
| -Hocdoc | ||
| -Ian Beck | ||
| -Ian Dickinson | ||
| -Ian Wehrman | ||
| -Ian Wetherbee | ||
| -Ice White | ||
| -ICHIKAWA, Yuji | ||
| -ilvalle | ||
| -Ingo Richter | ||
| -Irakli Gozalishvili | ||
| -Ivan Kurnosov | ||
| -Jacob Lee | ||
| -Jakob Miland | ||
| -Jakub Vrana | ||
| -Jakub Vrána | ||
| -James Campos | ||
| -James Thorne | ||
| -Jamie Hill | ||
| -Jan Jongboom | ||
| -jankeromnes | ||
| -Jan Keromnes | ||
| -Jan Odvarko | ||
| -Jan T. Sott | ||
| -Jared Forsyth | ||
| -Jason | ||
| -Jason Barnabe | ||
| -Jason Grout | ||
| -Jason Johnston | ||
| -Jason San Jose | ||
| -Jason Siefken | ||
| -Jaydeep Solanki | ||
| -Jean Boussier | ||
| -jeffkenton | ||
| -Jeff Pickhardt | ||
| -jem (graphite) | ||
| -Jeremy Parmenter | ||
| -Jochen Berger | ||
| -Johan Ask | ||
| -John Connor | ||
| -John Lees-Miller | ||
| -John Snelson | ||
| -John Van Der Loo | ||
| -Jonathan Malmaud | ||
| -jongalloway | ||
| -Jon Malmaud | ||
| -Jon Sangster | ||
| -Joost-Wim Boekesteijn | ||
| -Joseph Pecoraro | ||
| -Joshua Newman | ||
| -Josh Watzman | ||
| -jots | ||
| -jsoojeon | ||
| -Juan Benavides Romero | ||
| -Jucovschi Constantin | ||
| -Juho Vuori | ||
| -Justin Hileman | ||
| -jwallers@gmail.com | ||
| -kaniga | ||
| -Ken Newman | ||
| -Ken Rockot | ||
| -Kevin Sawicki | ||
| -Kevin Ushey | ||
| -Klaus Silveira | ||
| -Koh Zi Han, Cliff | ||
| -komakino | ||
| -Konstantin Lopuhin | ||
| -koops | ||
| -ks-ifware | ||
| -kubelsmieci | ||
| -Lanfei | ||
| -Lanny | ||
| -Laszlo Vidacs | ||
| -leaf corcoran | ||
| -Leonid Khachaturov | ||
| -Leon Sorokin | ||
| -Leonya Khachaturov | ||
| -Liam Newman | ||
| -LM | ||
| -lochel | ||
| -Lorenzo Stoakes | ||
| -Luciano Longo | ||
| -Luke Stagner | ||
| -lynschinzer | ||
| -Maksim Lin | ||
| -Maksym Taran | ||
| -Malay Majithia | ||
| -Manuel Rego Casasnovas | ||
| -Marat Dreizin | ||
| -Marcel Gerber | ||
| -Marco Aurélio | ||
| -Marco Munizaga | ||
| -Marcus Bointon | ||
| -Marijn Haverbeke | ||
| -Mário Gonçalves | ||
| -Mario Pietsch | ||
| -Mark Lentczner | ||
| -Marko Bonaci | ||
| -Martin Balek | ||
| -Martín Gaitán | ||
| -Martin Hasoň | ||
| -Mason Malone | ||
| -Mateusz Paprocki | ||
| -Mathias Bynens | ||
| -mats cronqvist | ||
| -Matthew Beale | ||
| -Matthias Bussonnier | ||
| -Matthias BUSSONNIER | ||
| -Matt McDonald | ||
| -Matt Pass | ||
| -Matt Sacks | ||
| -mauricio | ||
| -Maximilian Hils | ||
| -Maxim Kraev | ||
| -Max Kirsch | ||
| -Max Xiantu | ||
| -mbarkhau | ||
| -Metatheos | ||
| -Micah Dubinko | ||
| -Michael Lehenbauer | ||
| -Michael Zhou | ||
| -Mighty Guava | ||
| -Miguel Castillo | ||
| -Mike | ||
| -Mike Brevoort | ||
| -Mike Diaz | ||
| -Mike Ivanov | ||
| -Mike Kadin | ||
| -MinRK | ||
| -Miraculix87 | ||
| -misfo | ||
| -mloginov | ||
| -Moritz Schwörer | ||
| -mps | ||
| -mtaran-google | ||
| -Narciso Jaramillo | ||
| -Nathan Williams | ||
| -ndr | ||
| -nerbert | ||
| -nextrevision | ||
| -nguillaumin | ||
| -Ng Zhi An | ||
| -Nicholas Bollweg | ||
| -Nicholas Bollweg (Nick) | ||
| -Nick Small | ||
| -Niels van Groningen | ||
| -nightwing | ||
| -Nikita Beloglazov | ||
| -Nikita Vasilyev | ||
| -Nikolay Kostov | ||
| -nilp0inter | ||
| -Nisarg Jhaveri | ||
| -nlwillia | ||
| -Norman Rzepka | ||
| -pablo | ||
| -Page | ||
| -Panupong Pasupat | ||
| -paris | ||
| -Patil Arpith | ||
| -Patrick Stoica | ||
| -Patrick Strawderman | ||
| -Paul Garvin | ||
| -Paul Ivanov | ||
| -Pavel Feldman | ||
| -Pavel Strashkin | ||
| -Paweł Bartkiewicz | ||
| -peteguhl | ||
| -Peter Flynn | ||
| -peterkroon | ||
| -Peter Kroon | ||
| -prasanthj | ||
| -Prasanth J | ||
| -Radek Piórkowski | ||
| -Rahul | ||
| -Randall Mason | ||
| -Randy Burden | ||
| -Randy Edmunds | ||
| -Rasmus Erik Voel Jensen | ||
| -Richard van der Meer | ||
| -Richard Z.H. Wang | ||
| -Robert Crossfield | ||
| -Roberto Abdelkader Martínez Pérez | ||
| -robertop23 | ||
| -Robert Plummer | ||
| -Ruslan Osmanov | ||
| -Ryan Prior | ||
| -sabaca | ||
| -Samuel Ainsworth | ||
| -sandeepshetty | ||
| -Sander AKA Redsandro | ||
| -santec | ||
| -Sascha Peilicke | ||
| -satchmorun | ||
| -sathyamoorthi | ||
| -SCLINIC\jdecker | ||
| -Scott Aikin | ||
| -Scott Goodhew | ||
| -Sebastian Zaha | ||
| -shaund | ||
| -shaun gilchrist | ||
| -Shawn A | ||
| -sheopory | ||
| -Shiv Deepak | ||
| -Shmuel Englard | ||
| -Shubham Jain | ||
| -silverwind | ||
| -snasa | ||
| -soliton4 | ||
| -sonson | ||
| -spastorelli | ||
| -srajanpaliwal | ||
| -Stanislav Oaserele | ||
| -Stas Kobzar | ||
| -Stefan Borsje | ||
| -Steffen Beyer | ||
| -Steve O'Hara | ||
| -stoskov | ||
| -Taha Jahangir | ||
| -Takuji Shimokawa | ||
| -Tarmil | ||
| -tfjgeorge | ||
| -Thaddee Tyl | ||
| -TheHowl | ||
| -think | ||
| -Thomas Dvornik | ||
| -Thomas Schmid | ||
| -Tim Alby | ||
| -Tim Baumann | ||
| -Timothy Farrell | ||
| -Timothy Hatcher | ||
| -TobiasBg | ||
| -Tomas-A | ||
| -Tomas Varaneckas | ||
| -Tom Erik Støwer | ||
| -Tom MacWright | ||
| -Tony Jian | ||
| -Travis Heppe | ||
| -Triangle717 | ||
| -twifkak | ||
| -Vestimir Markov | ||
| -vf | ||
| -Vincent Woo | ||
| -Volker Mische | ||
| -wenli | ||
| -Wesley Wiser | ||
| -Will Binns-Smith | ||
| -William Jamieson | ||
| -William Stein | ||
| -Willy | ||
| -Wojtek Ptak | ||
| -Xavier Mendez | ||
| -Yassin N. Hassan | ||
| -YNH Webdev | ||
| -Yunchi Luo | ||
| -Yuvi Panda | ||
| -Zachary Dremann | ||
| -zziuni | ||
| -魏鹏刚 |
76
public/js/lib/codemirror/CONTRIBUTING.md
| @@ -1,76 +0,0 @@ | ||
| -# How to contribute | ||
| - | ||
| -- [Getting help](#getting-help-) | ||
| -- [Submitting bug reports](#submitting-bug-reports-) | ||
| -- [Contributing code](#contributing-code-) | ||
| - | ||
| -## Getting help | ||
| - | ||
| -Community discussion, questions, and informal bug reporting is done on the | ||
| -[discuss.CodeMirror forum](http://discuss.codemirror.net). | ||
| - | ||
| -## Submitting bug reports | ||
| - | ||
| -The preferred way to report bugs is to use the | ||
| -[GitHub issue tracker](http://github.com/codemirror/CodeMirror/issues). Before | ||
| -reporting a bug, read these pointers. | ||
| - | ||
| -**Note:** The issue tracker is for *bugs*, not requests for help. Questions | ||
| -should be asked on the | ||
| -[discuss.CodeMirror forum](http://discuss.codemirror.net) instead. | ||
| - | ||
| -### Reporting bugs effectively | ||
| - | ||
| -- CodeMirror is maintained by volunteers. They don't owe you anything, so be | ||
| - polite. Reports with an indignant or belligerent tone tend to be moved to the | ||
| - bottom of the pile. | ||
| - | ||
| -- Include information about **the browser in which the problem occurred**. Even | ||
| - if you tested several browsers, and the problem occurred in all of them, | ||
| - mention this fact in the bug report. Also include browser version numbers and | ||
| - the operating system that you're on. | ||
| - | ||
| -- Mention which release of CodeMirror you're using. Preferably, try also with | ||
| - the current development snapshot, to ensure the problem has not already been | ||
| - fixed. | ||
| - | ||
| -- Mention very precisely what went wrong. "X is broken" is not a good bug | ||
| - report. What did you expect to happen? What happened instead? Describe the | ||
| - exact steps a maintainer has to take to make the problem occur. We can not | ||
| - fix something that we can not observe. | ||
| - | ||
| -- If the problem can not be reproduced in any of the demos included in the | ||
| - CodeMirror distribution, please provide an HTML document that demonstrates | ||
| - the problem. The best way to do this is to go to | ||
| - [jsbin.com](http://jsbin.com/ihunin/edit), enter it there, press save, and | ||
| - include the resulting link in your bug report. | ||
| - | ||
| -## Contributing code | ||
| - | ||
| -- Make sure you have a [GitHub Account](https://github.com/signup/free) | ||
| -- Fork [CodeMirror](https://github.com/codemirror/CodeMirror/) | ||
| - ([how to fork a repo](https://help.github.com/articles/fork-a-repo)) | ||
| -- Make your changes | ||
| -- If your changes are easy to test or likely to regress, add tests. | ||
| - Tests for the core go into `test/test.js`, some modes have their own | ||
| - test suite under `mode/XXX/test.js`. Feel free to add new test | ||
| - suites to modes that don't have one yet (be sure to link the new | ||
| - tests into `test/index.html`). | ||
| -- Follow the general code style of the rest of the project (see | ||
| - below). Run `bin/lint` to verify that the linter is happy. | ||
| -- Make sure all tests pass. Visit `test/index.html` in your browser to | ||
| - run them. | ||
| -- Submit a pull request | ||
| -([how to create a pull request](https://help.github.com/articles/fork-a-repo)) | ||
| - | ||
| -### Coding standards | ||
| - | ||
| -- 2 spaces per indentation level, no tabs. | ||
| -- Include semicolons after statements. | ||
| -- Note that the linter (`bin/lint`) which is run after each commit | ||
| - complains about unused variables and functions. Prefix their names | ||
| - with an underscore to muffle it. | ||
| - | ||
| -- CodeMirror does *not* follow JSHint or JSLint prescribed style. | ||
| - Patches that try to 'fix' code to pass one of these linters will be | ||
| - unceremoniously discarded. |
19
public/js/lib/codemirror/LICENSE
| @@ -1,19 +0,0 @@ | ||
| -Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others | ||
| - | ||
| -Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| -of this software and associated documentation files (the "Software"), to deal | ||
| -in the Software without restriction, including without limitation the rights | ||
| -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| -copies of the Software, and to permit persons to whom the Software is | ||
| -furnished to do so, subject to the following conditions: | ||
| - | ||
| -The above copyright notice and this permission notice shall be included in | ||
| -all copies or substantial portions of the Software. | ||
| - | ||
| -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| -THE SOFTWARE. |
11
public/js/lib/codemirror/README.md
| @@ -1,11 +0,0 @@ | ||
| -# CodeMirror | ||
| -[](https://travis-ci.org/codemirror/CodeMirror) | ||
| -[](https://www.npmjs.org/package/codemirror) | ||
| - | ||
| -CodeMirror is a JavaScript component that provides a code editor in | ||
| -the browser. When a mode is available for the language you are coding | ||
| -in, it will color your code, and optionally help with indentation. | ||
| - | ||
| -The project page is http://codemirror.net | ||
| -The manual is at http://codemirror.net/doc/manual.html | ||
| -The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) |
183
public/js/lib/codemirror/addon/comment/comment.js
| @@ -1,183 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var noOptions = {}; | ||
| - var nonWS = /[^\s\u00a0]/; | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function firstNonWS(str) { | ||
| - var found = str.search(nonWS); | ||
| - return found == -1 ? 0 : found; | ||
| - } | ||
| - | ||
| - CodeMirror.commands.toggleComment = function(cm) { | ||
| - var minLine = Infinity, ranges = cm.listSelections(), mode = null; | ||
| - for (var i = ranges.length - 1; i >= 0; i--) { | ||
| - var from = ranges[i].from(), to = ranges[i].to(); | ||
| - if (from.line >= minLine) continue; | ||
| - if (to.line >= minLine) to = Pos(minLine, 0); | ||
| - minLine = from.line; | ||
| - if (mode == null) { | ||
| - if (cm.uncomment(from, to)) mode = "un"; | ||
| - else { cm.lineComment(from, to); mode = "line"; } | ||
| - } else if (mode == "un") { | ||
| - cm.uncomment(from, to); | ||
| - } else { | ||
| - cm.lineComment(from, to); | ||
| - } | ||
| - } | ||
| - }; | ||
| - | ||
| - CodeMirror.defineExtension("lineComment", function(from, to, options) { | ||
| - if (!options) options = noOptions; | ||
| - var self = this, mode = self.getModeAt(from); | ||
| - var commentString = options.lineComment || mode.lineComment; | ||
| - if (!commentString) { | ||
| - if (options.blockCommentStart || mode.blockCommentStart) { | ||
| - options.fullLines = true; | ||
| - self.blockComment(from, to, options); | ||
| - } | ||
| - return; | ||
| - } | ||
| - var firstLine = self.getLine(from.line); | ||
| - if (firstLine == null) return; | ||
| - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); | ||
| - var pad = options.padding == null ? " " : options.padding; | ||
| - var blankLines = options.commentBlankLines || from.line == to.line; | ||
| - | ||
| - self.operation(function() { | ||
| - if (options.indent) { | ||
| - var baseString = firstLine.slice(0, firstNonWS(firstLine)); | ||
| - for (var i = from.line; i < end; ++i) { | ||
| - var line = self.getLine(i), cut = baseString.length; | ||
| - if (!blankLines && !nonWS.test(line)) continue; | ||
| - if (line.slice(0, cut) != baseString) cut = firstNonWS(line); | ||
| - self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); | ||
| - } | ||
| - } else { | ||
| - for (var i = from.line; i < end; ++i) { | ||
| - if (blankLines || nonWS.test(self.getLine(i))) | ||
| - self.replaceRange(commentString + pad, Pos(i, 0)); | ||
| - } | ||
| - } | ||
| - }); | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("blockComment", function(from, to, options) { | ||
| - if (!options) options = noOptions; | ||
| - var self = this, mode = self.getModeAt(from); | ||
| - var startString = options.blockCommentStart || mode.blockCommentStart; | ||
| - var endString = options.blockCommentEnd || mode.blockCommentEnd; | ||
| - if (!startString || !endString) { | ||
| - if ((options.lineComment || mode.lineComment) && options.fullLines != false) | ||
| - self.lineComment(from, to, options); | ||
| - return; | ||
| - } | ||
| - | ||
| - var end = Math.min(to.line, self.lastLine()); | ||
| - if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; | ||
| - | ||
| - var pad = options.padding == null ? " " : options.padding; | ||
| - if (from.line > end) return; | ||
| - | ||
| - self.operation(function() { | ||
| - if (options.fullLines != false) { | ||
| - var lastLineHasText = nonWS.test(self.getLine(end)); | ||
| - self.replaceRange(pad + endString, Pos(end)); | ||
| - self.replaceRange(startString + pad, Pos(from.line, 0)); | ||
| - var lead = options.blockCommentLead || mode.blockCommentLead; | ||
| - if (lead != null) for (var i = from.line + 1; i <= end; ++i) | ||
| - if (i != end || lastLineHasText) | ||
| - self.replaceRange(lead + pad, Pos(i, 0)); | ||
| - } else { | ||
| - self.replaceRange(endString, to); | ||
| - self.replaceRange(startString, from); | ||
| - } | ||
| - }); | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("uncomment", function(from, to, options) { | ||
| - if (!options) options = noOptions; | ||
| - var self = this, mode = self.getModeAt(from); | ||
| - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end); | ||
| - | ||
| - // Try finding line comments | ||
| - var lineString = options.lineComment || mode.lineComment, lines = []; | ||
| - var pad = options.padding == null ? " " : options.padding, didSomething; | ||
| - lineComment: { | ||
| - if (!lineString) break lineComment; | ||
| - for (var i = start; i <= end; ++i) { | ||
| - var line = self.getLine(i); | ||
| - var found = line.indexOf(lineString); | ||
| - if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; | ||
| - if (found == -1 && (i != end || i == start) && nonWS.test(line)) break lineComment; | ||
| - if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; | ||
| - lines.push(line); | ||
| - } | ||
| - self.operation(function() { | ||
| - for (var i = start; i <= end; ++i) { | ||
| - var line = lines[i - start]; | ||
| - var pos = line.indexOf(lineString), endPos = pos + lineString.length; | ||
| - if (pos < 0) continue; | ||
| - if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; | ||
| - didSomething = true; | ||
| - self.replaceRange("", Pos(i, pos), Pos(i, endPos)); | ||
| - } | ||
| - }); | ||
| - if (didSomething) return true; | ||
| - } | ||
| - | ||
| - // Try block comments | ||
| - var startString = options.blockCommentStart || mode.blockCommentStart; | ||
| - var endString = options.blockCommentEnd || mode.blockCommentEnd; | ||
| - if (!startString || !endString) return false; | ||
| - var lead = options.blockCommentLead || mode.blockCommentLead; | ||
| - var startLine = self.getLine(start), endLine = end == start ? startLine : self.getLine(end); | ||
| - var open = startLine.indexOf(startString), close = endLine.lastIndexOf(endString); | ||
| - if (close == -1 && start != end) { | ||
| - endLine = self.getLine(--end); | ||
| - close = endLine.lastIndexOf(endString); | ||
| - } | ||
| - if (open == -1 || close == -1 || | ||
| - !/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) || | ||
| - !/comment/.test(self.getTokenTypeAt(Pos(end, close + 1)))) | ||
| - return false; | ||
| - | ||
| - // Avoid killing block comments completely outside the selection. | ||
| - // Positions of the last startString before the start of the selection, and the first endString after it. | ||
| - var lastStart = startLine.lastIndexOf(startString, from.ch); | ||
| - var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); | ||
| - if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; | ||
| - // Positions of the first endString after the end of the selection, and the last startString before it. | ||
| - firstEnd = endLine.indexOf(endString, to.ch); | ||
| - var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); | ||
| - lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart; | ||
| - if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; | ||
| - | ||
| - self.operation(function() { | ||
| - self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), | ||
| - Pos(end, close + endString.length)); | ||
| - var openEnd = open + startString.length; | ||
| - if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; | ||
| - self.replaceRange("", Pos(start, open), Pos(start, openEnd)); | ||
| - if (lead) for (var i = start + 1; i <= end; ++i) { | ||
| - var line = self.getLine(i), found = line.indexOf(lead); | ||
| - if (found == -1 || nonWS.test(line.slice(0, found))) continue; | ||
| - var foundEnd = found + lead.length; | ||
| - if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; | ||
| - self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); | ||
| - } | ||
| - }); | ||
| - return true; | ||
| - }); | ||
| -}); |
85
public/js/lib/codemirror/addon/comment/continuecomment.js
| @@ -1,85 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - var modes = ["clike", "css", "javascript"]; | ||
| - | ||
| - for (var i = 0; i < modes.length; ++i) | ||
| - CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "}); | ||
| - | ||
| - function continueComment(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(), mode, inserts = []; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var pos = ranges[i].head, token = cm.getTokenAt(pos); | ||
| - if (token.type != "comment") return CodeMirror.Pass; | ||
| - var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode; | ||
| - if (!mode) mode = modeHere; | ||
| - else if (mode != modeHere) return CodeMirror.Pass; | ||
| - | ||
| - var insert = null; | ||
| - if (mode.blockCommentStart && mode.blockCommentContinue) { | ||
| - var end = token.string.indexOf(mode.blockCommentEnd); | ||
| - var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; | ||
| - if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) { | ||
| - // Comment ended, don't continue it | ||
| - } else if (token.string.indexOf(mode.blockCommentStart) == 0) { | ||
| - insert = full.slice(0, token.start); | ||
| - if (!/^\s*$/.test(insert)) { | ||
| - insert = ""; | ||
| - for (var j = 0; j < token.start; ++j) insert += " "; | ||
| - } | ||
| - } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && | ||
| - found + mode.blockCommentContinue.length > token.start && | ||
| - /^\s*$/.test(full.slice(0, found))) { | ||
| - insert = full.slice(0, found); | ||
| - } | ||
| - if (insert != null) insert += mode.blockCommentContinue; | ||
| - } | ||
| - if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) { | ||
| - var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); | ||
| - if (found > -1) { | ||
| - insert = line.slice(0, found); | ||
| - if (/\S/.test(insert)) insert = null; | ||
| - else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0]; | ||
| - } | ||
| - } | ||
| - if (insert == null) return CodeMirror.Pass; | ||
| - inserts[i] = "\n" + insert; | ||
| - } | ||
| - | ||
| - cm.operation(function() { | ||
| - for (var i = ranges.length - 1; i >= 0; i--) | ||
| - cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert"); | ||
| - }); | ||
| - } | ||
| - | ||
| - function continueLineCommentEnabled(cm) { | ||
| - var opt = cm.getOption("continueComments"); | ||
| - if (opt && typeof opt == "object") | ||
| - return opt.continueLineComment !== false; | ||
| - return true; | ||
| - } | ||
| - | ||
| - CodeMirror.defineOption("continueComments", null, function(cm, val, prev) { | ||
| - if (prev && prev != CodeMirror.Init) | ||
| - cm.removeKeyMap("continueComment"); | ||
| - if (val) { | ||
| - var key = "Enter"; | ||
| - if (typeof val == "string") | ||
| - key = val; | ||
| - else if (typeof val == "object" && val.key) | ||
| - key = val.key; | ||
| - var map = {name: "continueComment"}; | ||
| - map[key] = continueComment; | ||
| - cm.addKeyMap(map); | ||
| - } | ||
| - }); | ||
| -}); |
32
public/js/lib/codemirror/addon/dialog/dialog.css
| @@ -1,32 +0,0 @@ | ||
| -.CodeMirror-dialog { | ||
| - position: absolute; | ||
| - left: 0; right: 0; | ||
| - background: white; | ||
| - z-index: 15; | ||
| - padding: .1em .8em; | ||
| - overflow: hidden; | ||
| - color: #333; | ||
| -} | ||
| - | ||
| -.CodeMirror-dialog-top { | ||
| - border-bottom: 1px solid #eee; | ||
| - top: 0; | ||
| -} | ||
| - | ||
| -.CodeMirror-dialog-bottom { | ||
| - border-top: 1px solid #eee; | ||
| - bottom: 0; | ||
| -} | ||
| - | ||
| -.CodeMirror-dialog input { | ||
| - border: none; | ||
| - outline: none; | ||
| - background: transparent; | ||
| - width: 20em; | ||
| - color: inherit; | ||
| - font-family: monospace; | ||
| -} | ||
| - | ||
| -.CodeMirror-dialog button { | ||
| - font-size: 70%; | ||
| -} |
155
public/js/lib/codemirror/addon/dialog/dialog.js
| @@ -1,155 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Open simple dialogs on top of an editor. Relies on dialog.css. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - function dialogDiv(cm, template, bottom) { | ||
| - var wrap = cm.getWrapperElement(); | ||
| - var dialog; | ||
| - dialog = wrap.appendChild(document.createElement("div")); | ||
| - if (bottom) | ||
| - dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; | ||
| - else | ||
| - dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; | ||
| - | ||
| - if (typeof template == "string") { | ||
| - dialog.innerHTML = template; | ||
| - } else { // Assuming it's a detached DOM element. | ||
| - dialog.appendChild(template); | ||
| - } | ||
| - return dialog; | ||
| - } | ||
| - | ||
| - function closeNotification(cm, newVal) { | ||
| - if (cm.state.currentNotificationClose) | ||
| - cm.state.currentNotificationClose(); | ||
| - cm.state.currentNotificationClose = newVal; | ||
| - } | ||
| - | ||
| - CodeMirror.defineExtension("openDialog", function(template, callback, options) { | ||
| - if (!options) options = {}; | ||
| - | ||
| - closeNotification(this, null); | ||
| - | ||
| - var dialog = dialogDiv(this, template, options.bottom); | ||
| - var closed = false, me = this; | ||
| - function close(newVal) { | ||
| - if (typeof newVal == 'string') { | ||
| - inp.value = newVal; | ||
| - } else { | ||
| - if (closed) return; | ||
| - closed = true; | ||
| - dialog.parentNode.removeChild(dialog); | ||
| - me.focus(); | ||
| - | ||
| - if (options.onClose) options.onClose(dialog); | ||
| - } | ||
| - } | ||
| - | ||
| - var inp = dialog.getElementsByTagName("input")[0], button; | ||
| - if (inp) { | ||
| - if (options.value) { | ||
| - inp.value = options.value; | ||
| - inp.select(); | ||
| - } | ||
| - | ||
| - if (options.onInput) | ||
| - CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); | ||
| - if (options.onKeyUp) | ||
| - CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); | ||
| - | ||
| - CodeMirror.on(inp, "keydown", function(e) { | ||
| - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } | ||
| - if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { | ||
| - inp.blur(); | ||
| - CodeMirror.e_stop(e); | ||
| - close(); | ||
| - } | ||
| - if (e.keyCode == 13) callback(inp.value, e); | ||
| - }); | ||
| - | ||
| - if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); | ||
| - | ||
| - inp.focus(); | ||
| - } else if (button = dialog.getElementsByTagName("button")[0]) { | ||
| - CodeMirror.on(button, "click", function() { | ||
| - close(); | ||
| - me.focus(); | ||
| - }); | ||
| - | ||
| - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); | ||
| - | ||
| - button.focus(); | ||
| - } | ||
| - return close; | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { | ||
| - closeNotification(this, null); | ||
| - var dialog = dialogDiv(this, template, options && options.bottom); | ||
| - var buttons = dialog.getElementsByTagName("button"); | ||
| - var closed = false, me = this, blurring = 1; | ||
| - function close() { | ||
| - if (closed) return; | ||
| - closed = true; | ||
| - dialog.parentNode.removeChild(dialog); | ||
| - me.focus(); | ||
| - } | ||
| - buttons[0].focus(); | ||
| - for (var i = 0; i < buttons.length; ++i) { | ||
| - var b = buttons[i]; | ||
| - (function(callback) { | ||
| - CodeMirror.on(b, "click", function(e) { | ||
| - CodeMirror.e_preventDefault(e); | ||
| - close(); | ||
| - if (callback) callback(me); | ||
| - }); | ||
| - })(callbacks[i]); | ||
| - CodeMirror.on(b, "blur", function() { | ||
| - --blurring; | ||
| - setTimeout(function() { if (blurring <= 0) close(); }, 200); | ||
| - }); | ||
| - CodeMirror.on(b, "focus", function() { ++blurring; }); | ||
| - } | ||
| - }); | ||
| - | ||
| - /* | ||
| - * openNotification | ||
| - * Opens a notification, that can be closed with an optional timer | ||
| - * (default 5000ms timer) and always closes on click. | ||
| - * | ||
| - * If a notification is opened while another is opened, it will close the | ||
| - * currently opened one and open the new one immediately. | ||
| - */ | ||
| - CodeMirror.defineExtension("openNotification", function(template, options) { | ||
| - closeNotification(this, close); | ||
| - var dialog = dialogDiv(this, template, options && options.bottom); | ||
| - var closed = false, doneTimer; | ||
| - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; | ||
| - | ||
| - function close() { | ||
| - if (closed) return; | ||
| - closed = true; | ||
| - clearTimeout(doneTimer); | ||
| - dialog.parentNode.removeChild(dialog); | ||
| - } | ||
| - | ||
| - CodeMirror.on(dialog, 'click', function(e) { | ||
| - CodeMirror.e_preventDefault(e); | ||
| - close(); | ||
| - }); | ||
| - | ||
| - if (duration) | ||
| - doneTimer = setTimeout(close, duration); | ||
| - | ||
| - return close; | ||
| - }); | ||
| -}); |
6
public/js/lib/codemirror/addon/display/fullscreen.css
| @@ -1,6 +0,0 @@ | ||
| -.CodeMirror-fullscreen { | ||
| - position: fixed; | ||
| - top: 0; left: 0; right: 0; bottom: 0; | ||
| - height: auto; | ||
| - z-index: 9; | ||
| -} |
41
public/js/lib/codemirror/addon/display/fullscreen.js
| @@ -1,41 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { | ||
| - if (old == CodeMirror.Init) old = false; | ||
| - if (!old == !val) return; | ||
| - if (val) setFullscreen(cm); | ||
| - else setNormal(cm); | ||
| - }); | ||
| - | ||
| - function setFullscreen(cm) { | ||
| - var wrap = cm.getWrapperElement(); | ||
| - cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, | ||
| - width: wrap.style.width, height: wrap.style.height}; | ||
| - wrap.style.width = ""; | ||
| - wrap.style.height = "auto"; | ||
| - wrap.className += " CodeMirror-fullscreen"; | ||
| - document.documentElement.style.overflow = "hidden"; | ||
| - cm.refresh(); | ||
| - } | ||
| - | ||
| - function setNormal(cm) { | ||
| - var wrap = cm.getWrapperElement(); | ||
| - wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); | ||
| - document.documentElement.style.overflow = ""; | ||
| - var info = cm.state.fullScreenRestore; | ||
| - wrap.style.width = info.width; wrap.style.height = info.height; | ||
| - window.scrollTo(info.scrollLeft, info.scrollTop); | ||
| - cm.refresh(); | ||
| - } | ||
| -}); |
94
public/js/lib/codemirror/addon/display/panel.js
| @@ -1,94 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - CodeMirror.defineExtension("addPanel", function(node, options) { | ||
| - if (!this.state.panels) initPanels(this); | ||
| - | ||
| - var info = this.state.panels; | ||
| - if (options && options.position == "bottom") | ||
| - info.wrapper.appendChild(node); | ||
| - else | ||
| - info.wrapper.insertBefore(node, info.wrapper.firstChild); | ||
| - var height = (options && options.height) || node.offsetHeight; | ||
| - this._setSize(null, info.heightLeft -= height); | ||
| - info.panels++; | ||
| - return new Panel(this, node, options, height); | ||
| - }); | ||
| - | ||
| - function Panel(cm, node, options, height) { | ||
| - this.cm = cm; | ||
| - this.node = node; | ||
| - this.options = options; | ||
| - this.height = height; | ||
| - this.cleared = false; | ||
| - } | ||
| - | ||
| - Panel.prototype.clear = function() { | ||
| - if (this.cleared) return; | ||
| - this.cleared = true; | ||
| - var info = this.cm.state.panels; | ||
| - this.cm._setSize(null, info.heightLeft += this.height); | ||
| - info.wrapper.removeChild(this.node); | ||
| - if (--info.panels == 0) removePanels(this.cm); | ||
| - }; | ||
| - | ||
| - Panel.prototype.changed = function(height) { | ||
| - var newHeight = height == null ? this.node.offsetHeight : height; | ||
| - var info = this.cm.state.panels; | ||
| - this.cm._setSize(null, info.height += (newHeight - this.height)); | ||
| - this.height = newHeight; | ||
| - }; | ||
| - | ||
| - function initPanels(cm) { | ||
| - var wrap = cm.getWrapperElement(); | ||
| - var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle; | ||
| - var height = parseInt(style.height); | ||
| - var info = cm.state.panels = { | ||
| - setHeight: wrap.style.height, | ||
| - heightLeft: height, | ||
| - panels: 0, | ||
| - wrapper: document.createElement("div") | ||
| - }; | ||
| - wrap.parentNode.insertBefore(info.wrapper, wrap); | ||
| - var hasFocus = cm.hasFocus(); | ||
| - info.wrapper.appendChild(wrap); | ||
| - if (hasFocus) cm.focus(); | ||
| - | ||
| - cm._setSize = cm.setSize; | ||
| - if (height != null) cm.setSize = function(width, newHeight) { | ||
| - if (newHeight == null) return this._setSize(width, newHeight); | ||
| - info.setHeight = newHeight; | ||
| - if (typeof newHeight != "number") { | ||
| - var px = /^(\d+\.?\d*)px$/.exec(newHeight); | ||
| - if (px) { | ||
| - newHeight = Number(px[1]); | ||
| - } else { | ||
| - info.wrapper.style.height = newHeight; | ||
| - newHeight = info.wrapper.offsetHeight; | ||
| - info.wrapper.style.height = ""; | ||
| - } | ||
| - } | ||
| - cm._setSize(width, info.heightLeft += (newHeight - height)); | ||
| - height = newHeight; | ||
| - }; | ||
| - } | ||
| - | ||
| - function removePanels(cm) { | ||
| - var info = cm.state.panels; | ||
| - cm.state.panels = null; | ||
| - | ||
| - var wrap = cm.getWrapperElement(); | ||
| - info.wrapper.parentNode.replaceChild(wrap, info.wrapper); | ||
| - wrap.style.height = info.setHeight; | ||
| - cm.setSize = cm._setSize; | ||
| - cm.setSize(); | ||
| - } | ||
| -}); |
58
public/js/lib/codemirror/addon/display/placeholder.js
| @@ -1,58 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - CodeMirror.defineOption("placeholder", "", function(cm, val, old) { | ||
| - var prev = old && old != CodeMirror.Init; | ||
| - if (val && !prev) { | ||
| - cm.on("blur", onBlur); | ||
| - cm.on("change", onChange); | ||
| - onChange(cm); | ||
| - } else if (!val && prev) { | ||
| - cm.off("blur", onBlur); | ||
| - cm.off("change", onChange); | ||
| - clearPlaceholder(cm); | ||
| - var wrapper = cm.getWrapperElement(); | ||
| - wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); | ||
| - } | ||
| - | ||
| - if (val && !cm.hasFocus()) onBlur(cm); | ||
| - }); | ||
| - | ||
| - function clearPlaceholder(cm) { | ||
| - if (cm.state.placeholder) { | ||
| - cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); | ||
| - cm.state.placeholder = null; | ||
| - } | ||
| - } | ||
| - function setPlaceholder(cm) { | ||
| - clearPlaceholder(cm); | ||
| - var elt = cm.state.placeholder = document.createElement("pre"); | ||
| - elt.style.cssText = "height: 0; overflow: visible"; | ||
| - elt.className = "CodeMirror-placeholder"; | ||
| - elt.appendChild(document.createTextNode(cm.getOption("placeholder"))); | ||
| - cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); | ||
| - } | ||
| - | ||
| - function onBlur(cm) { | ||
| - if (isEmpty(cm)) setPlaceholder(cm); | ||
| - } | ||
| - function onChange(cm) { | ||
| - var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); | ||
| - wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); | ||
| - | ||
| - if (empty) setPlaceholder(cm); | ||
| - else clearPlaceholder(cm); | ||
| - } | ||
| - | ||
| - function isEmpty(cm) { | ||
| - return (cm.lineCount() === 1) && (cm.getLine(0) === ""); | ||
| - } | ||
| -}); |
64
public/js/lib/codemirror/addon/display/rulers.js
| @@ -1,64 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("rulers", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - clearRulers(cm); | ||
| - cm.off("refresh", refreshRulers); | ||
| - } | ||
| - if (val && val.length) { | ||
| - setRulers(cm); | ||
| - cm.on("refresh", refreshRulers); | ||
| - } | ||
| - }); | ||
| - | ||
| - function clearRulers(cm) { | ||
| - for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) { | ||
| - var node = cm.display.lineSpace.childNodes[i]; | ||
| - if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className)) | ||
| - node.parentNode.removeChild(node); | ||
| - } | ||
| - } | ||
| - | ||
| - function setRulers(cm) { | ||
| - var val = cm.getOption("rulers"); | ||
| - var cw = cm.defaultCharWidth(); | ||
| - var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left; | ||
| - var minH = cm.display.scroller.offsetHeight + 30; | ||
| - for (var i = 0; i < val.length; i++) { | ||
| - var elt = document.createElement("div"); | ||
| - elt.className = "CodeMirror-ruler"; | ||
| - var col, cls = null, conf = val[i]; | ||
| - if (typeof conf == "number") { | ||
| - col = conf; | ||
| - } else { | ||
| - col = conf.column; | ||
| - if (conf.className) elt.className += " " + conf.className; | ||
| - if (conf.color) elt.style.borderColor = conf.color; | ||
| - if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle; | ||
| - if (conf.width) elt.style.borderLeftWidth = conf.width; | ||
| - cls = val[i].className; | ||
| - } | ||
| - elt.style.left = (left + col * cw) + "px"; | ||
| - elt.style.top = "-50px"; | ||
| - elt.style.bottom = "-20px"; | ||
| - elt.style.minHeight = minH + "px"; | ||
| - cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv); | ||
| - } | ||
| - } | ||
| - | ||
| - function refreshRulers(cm) { | ||
| - clearRulers(cm); | ||
| - setRulers(cm); | ||
| - } | ||
| -}); |
159
public/js/lib/codemirror/addon/edit/closebrackets.js
| @@ -1,159 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - var DEFAULT_BRACKETS = "()[]{}''\"\""; | ||
| - var DEFAULT_EXPLODE_ON_ENTER = "[]{}"; | ||
| - var SPACE_CHAR_REGEX = /\s/; | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { | ||
| - if (old != CodeMirror.Init && old) | ||
| - cm.removeKeyMap("autoCloseBrackets"); | ||
| - if (!val) return; | ||
| - var pairs = DEFAULT_BRACKETS, explode = DEFAULT_EXPLODE_ON_ENTER; | ||
| - if (typeof val == "string") pairs = val; | ||
| - else if (typeof val == "object") { | ||
| - if (val.pairs != null) pairs = val.pairs; | ||
| - if (val.explode != null) explode = val.explode; | ||
| - } | ||
| - var map = buildKeymap(pairs); | ||
| - if (explode) map.Enter = buildExplodeHandler(explode); | ||
| - cm.addKeyMap(map); | ||
| - }); | ||
| - | ||
| - function charsAround(cm, pos) { | ||
| - var str = cm.getRange(Pos(pos.line, pos.ch - 1), | ||
| - Pos(pos.line, pos.ch + 1)); | ||
| - return str.length == 2 ? str : null; | ||
| - } | ||
| - | ||
| - // Project the token type that will exists after the given char is | ||
| - // typed, and use it to determine whether it would cause the start | ||
| - // of a string token. | ||
| - function enteringString(cm, pos, ch) { | ||
| - var line = cm.getLine(pos.line); | ||
| - var token = cm.getTokenAt(pos); | ||
| - if (/\bstring2?\b/.test(token.type)) return false; | ||
| - var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4); | ||
| - stream.pos = stream.start = token.start; | ||
| - for (;;) { | ||
| - var type1 = cm.getMode().token(stream, token.state); | ||
| - if (stream.pos >= pos.ch + 1) return /\bstring2?\b/.test(type1); | ||
| - stream.start = stream.pos; | ||
| - } | ||
| - } | ||
| - | ||
| - function buildKeymap(pairs) { | ||
| - var map = { | ||
| - name : "autoCloseBrackets", | ||
| - Backspace: function(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - if (!ranges[i].empty()) return CodeMirror.Pass; | ||
| - var around = charsAround(cm, ranges[i].head); | ||
| - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; | ||
| - } | ||
| - for (var i = ranges.length - 1; i >= 0; i--) { | ||
| - var cur = ranges[i].head; | ||
| - cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); | ||
| - } | ||
| - } | ||
| - }; | ||
| - var closingBrackets = ""; | ||
| - for (var i = 0; i < pairs.length; i += 2) (function(left, right) { | ||
| - closingBrackets += right; | ||
| - map["'" + left + "'"] = function(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(), type, next; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var range = ranges[i], cur = range.head, curType; | ||
| - var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); | ||
| - if (!range.empty()) { | ||
| - curType = "surround"; | ||
| - } else if (left == right && next == right) { | ||
| - if (cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == left + left + left) | ||
| - curType = "skipThree"; | ||
| - else | ||
| - curType = "skip"; | ||
| - } else if (left == right && cur.ch > 1 && | ||
| - cm.getRange(Pos(cur.line, cur.ch - 2), cur) == left + left && | ||
| - (cur.ch <= 2 || cm.getRange(Pos(cur.line, cur.ch - 3), Pos(cur.line, cur.ch - 2)) != left)) { | ||
| - curType = "addFour"; | ||
| - } else if (left == '"' || left == "'") { | ||
| - if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, left)) curType = "both"; | ||
| - else return CodeMirror.Pass; | ||
| - } else if (cm.getLine(cur.line).length == cur.ch || closingBrackets.indexOf(next) >= 0 || SPACE_CHAR_REGEX.test(next)) { | ||
| - curType = "both"; | ||
| - } else { | ||
| - return CodeMirror.Pass; | ||
| - } | ||
| - if (!type) type = curType; | ||
| - else if (type != curType) return CodeMirror.Pass; | ||
| - } | ||
| - | ||
| - cm.operation(function() { | ||
| - if (type == "skip") { | ||
| - cm.execCommand("goCharRight"); | ||
| - } else if (type == "skipThree") { | ||
| - for (var i = 0; i < 3; i++) | ||
| - cm.execCommand("goCharRight"); | ||
| - } else if (type == "surround") { | ||
| - var sels = cm.getSelections(); | ||
| - for (var i = 0; i < sels.length; i++) | ||
| - sels[i] = left + sels[i] + right; | ||
| - cm.replaceSelections(sels, "around"); | ||
| - } else if (type == "both") { | ||
| - cm.replaceSelection(left + right, null); | ||
| - cm.execCommand("goCharLeft"); | ||
| - } else if (type == "addFour") { | ||
| - cm.replaceSelection(left + left + left + left, "before"); | ||
| - cm.execCommand("goCharRight"); | ||
| - } | ||
| - }); | ||
| - }; | ||
| - if (left != right) map["'" + right + "'"] = function(cm) { | ||
| - var ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var range = ranges[i]; | ||
| - if (!range.empty() || | ||
| - cm.getRange(range.head, Pos(range.head.line, range.head.ch + 1)) != right) | ||
| - return CodeMirror.Pass; | ||
| - } | ||
| - cm.execCommand("goCharRight"); | ||
| - }; | ||
| - })(pairs.charAt(i), pairs.charAt(i + 1)); | ||
| - return map; | ||
| - } | ||
| - | ||
| - function buildExplodeHandler(pairs) { | ||
| - return function(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - if (!ranges[i].empty()) return CodeMirror.Pass; | ||
| - var around = charsAround(cm, ranges[i].head); | ||
| - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; | ||
| - } | ||
| - cm.operation(function() { | ||
| - cm.replaceSelection("\n\n", null); | ||
| - cm.execCommand("goCharLeft"); | ||
| - ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var line = ranges[i].head.line; | ||
| - cm.indentLine(line, null, true); | ||
| - cm.indentLine(line + 1, null, true); | ||
| - } | ||
| - }); | ||
| - }; | ||
| - } | ||
| -}); |
159
public/js/lib/codemirror/addon/edit/closetag.js
| @@ -1,159 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -/** | ||
| - * Tag-closer extension for CodeMirror. | ||
| - * | ||
| - * This extension adds an "autoCloseTags" option that can be set to | ||
| - * either true to get the default behavior, or an object to further | ||
| - * configure its behavior. | ||
| - * | ||
| - * These are supported options: | ||
| - * | ||
| - * `whenClosing` (default true) | ||
| - * Whether to autoclose when the '/' of a closing tag is typed. | ||
| - * `whenOpening` (default true) | ||
| - * Whether to autoclose the tag when the final '>' of an opening | ||
| - * tag is typed. | ||
| - * `dontCloseTags` (default is empty tags for HTML, none for XML) | ||
| - * An array of tag names that should not be autoclosed. | ||
| - * `indentTags` (default is block tags for HTML, none for XML) | ||
| - * An array of tag names that should, when opened, cause a | ||
| - * blank line to be added inside the tag, and the blank line and | ||
| - * closing line to be indented. | ||
| - * | ||
| - * See demos/closetag.html for a usage example. | ||
| - */ | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("../fold/xml-fold")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "../fold/xml-fold"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) { | ||
| - if (old != CodeMirror.Init && old) | ||
| - cm.removeKeyMap("autoCloseTags"); | ||
| - if (!val) return; | ||
| - var map = {name: "autoCloseTags"}; | ||
| - if (typeof val != "object" || val.whenClosing) | ||
| - map["'/'"] = function(cm) { return autoCloseSlash(cm); }; | ||
| - if (typeof val != "object" || val.whenOpening) | ||
| - map["'>'"] = function(cm) { return autoCloseGT(cm); }; | ||
| - cm.addKeyMap(map); | ||
| - }); | ||
| - | ||
| - var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", | ||
| - "source", "track", "wbr"]; | ||
| - var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4", | ||
| - "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"]; | ||
| - | ||
| - function autoCloseGT(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(), replacements = []; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - if (!ranges[i].empty()) return CodeMirror.Pass; | ||
| - var pos = ranges[i].head, tok = cm.getTokenAt(pos); | ||
| - var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; | ||
| - if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass; | ||
| - | ||
| - var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html"; | ||
| - var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose); | ||
| - var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent); | ||
| - | ||
| - var tagName = state.tagName; | ||
| - if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch); | ||
| - var lowerTagName = tagName.toLowerCase(); | ||
| - // Don't process the '>' at the end of an end-tag or self-closing tag | ||
| - if (!tagName || | ||
| - tok.type == "string" && (tok.end != pos.ch || !/[\"\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) || | ||
| - tok.type == "tag" && state.type == "closeTag" || | ||
| - tok.string.indexOf("/") == (tok.string.length - 1) || // match something like <someTagName /> | ||
| - dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 || | ||
| - closingTagExists(cm, tagName, pos, state, true)) | ||
| - return CodeMirror.Pass; | ||
| - | ||
| - var indent = indentTags && indexOf(indentTags, lowerTagName) > -1; | ||
| - replacements[i] = {indent: indent, | ||
| - text: ">" + (indent ? "\n\n" : "") + "</" + tagName + ">", | ||
| - newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)}; | ||
| - } | ||
| - | ||
| - for (var i = ranges.length - 1; i >= 0; i--) { | ||
| - var info = replacements[i]; | ||
| - cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert"); | ||
| - var sel = cm.listSelections().slice(0); | ||
| - sel[i] = {head: info.newPos, anchor: info.newPos}; | ||
| - cm.setSelections(sel); | ||
| - if (info.indent) { | ||
| - cm.indentLine(info.newPos.line, null, true); | ||
| - cm.indentLine(info.newPos.line + 1, null, true); | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - function autoCloseSlash(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(), replacements = []; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - if (!ranges[i].empty()) return CodeMirror.Pass; | ||
| - var pos = ranges[i].head, tok = cm.getTokenAt(pos); | ||
| - var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; | ||
| - if (tok.type == "string" || tok.string.charAt(0) != "<" || | ||
| - tok.start != pos.ch - 1) | ||
| - return CodeMirror.Pass; | ||
| - // Kludge to get around the fact that we are not in XML mode | ||
| - // when completing in JS/CSS snippet in htmlmixed mode. Does not | ||
| - // work for other XML embedded languages (there is no general | ||
| - // way to go from a mixed mode to its current XML state). | ||
| - if (inner.mode.name != "xml") { | ||
| - if (cm.getMode().name == "htmlmixed" && inner.mode.name == "javascript") | ||
| - replacements[i] = "/script>"; | ||
| - else if (cm.getMode().name == "htmlmixed" && inner.mode.name == "css") | ||
| - replacements[i] = "/style>"; | ||
| - else | ||
| - return CodeMirror.Pass; | ||
| - } else { | ||
| - if (!state.context || !state.context.tagName || | ||
| - closingTagExists(cm, state.context.tagName, pos, state)) | ||
| - return CodeMirror.Pass; | ||
| - replacements[i] = "/" + state.context.tagName + ">"; | ||
| - } | ||
| - } | ||
| - cm.replaceSelections(replacements); | ||
| - ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) | ||
| - if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line) | ||
| - cm.indentLine(ranges[i].head.line); | ||
| - } | ||
| - | ||
| - function indexOf(collection, elt) { | ||
| - if (collection.indexOf) return collection.indexOf(elt); | ||
| - for (var i = 0, e = collection.length; i < e; ++i) | ||
| - if (collection[i] == elt) return i; | ||
| - return -1; | ||
| - } | ||
| - | ||
| - // If xml-fold is loaded, we use its functionality to try and verify | ||
| - // whether a given tag is actually unclosed. | ||
| - function closingTagExists(cm, tagName, pos, state, newTag) { | ||
| - if (!CodeMirror.scanForClosingTag) return false; | ||
| - var end = Math.min(cm.lastLine() + 1, pos.line + 500); | ||
| - var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end); | ||
| - if (!nextClose || nextClose.tag != tagName) return false; | ||
| - var cx = state.context; | ||
| - // If the immediate wrapping context contains onCx instances of | ||
| - // the same tag, a closing tag only exists if there are at least | ||
| - // that many closing tags of that type following. | ||
| - for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx; | ||
| - pos = nextClose.to; | ||
| - for (var i = 1; i < onCx; i++) { | ||
| - var next = CodeMirror.scanForClosingTag(cm, pos, null, end); | ||
| - if (!next || next.tag != tagName) return false; | ||
| - pos = next.to; | ||
| - } | ||
| - return true; | ||
| - } | ||
| -}); |
51
public/js/lib/codemirror/addon/edit/continuelist.js
| @@ -1,51 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\s*)/, | ||
| - emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)\.)(\s*)$/, | ||
| - unorderedListRE = /[*+-]\s/; | ||
| - | ||
| - CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { | ||
| - if (cm.getOption("disableInput")) return CodeMirror.Pass; | ||
| - var ranges = cm.listSelections(), replacements = []; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var pos = ranges[i].head, match; | ||
| - var eolState = cm.getStateAfter(pos.line); | ||
| - var inList = eolState.list !== false; | ||
| - var inQuote = eolState.quote !== false; | ||
| - | ||
| - if (!ranges[i].empty() || (!inList && !inQuote) || !(match = cm.getLine(pos.line).match(listRE))) { | ||
| - cm.execCommand("newlineAndIndent"); | ||
| - return; | ||
| - } | ||
| - if (cm.getLine(pos.line).match(emptyListRE)) { | ||
| - cm.replaceRange("", { | ||
| - line: pos.line, ch: 0 | ||
| - }, { | ||
| - line: pos.line, ch: pos.ch + 1 | ||
| - }); | ||
| - replacements[i] = "\n"; | ||
| - | ||
| - } else { | ||
| - var indent = match[1], after = match[4]; | ||
| - var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0 | ||
| - ? match[2] | ||
| - : (parseInt(match[3], 10) + 1) + "."; | ||
| - | ||
| - replacements[i] = "\n" + indent + bullet + after; | ||
| - } | ||
| - } | ||
| - | ||
| - cm.replaceSelections(replacements); | ||
| - }; | ||
| -}); |
120
public/js/lib/codemirror/addon/edit/matchbrackets.js
| @@ -1,120 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && | ||
| - (document.documentMode == null || document.documentMode < 8); | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; | ||
| - | ||
| - function findMatchingBracket(cm, where, strict, config) { | ||
| - var line = cm.getLineHandle(where.line), pos = where.ch - 1; | ||
| - var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; | ||
| - if (!match) return null; | ||
| - var dir = match.charAt(1) == ">" ? 1 : -1; | ||
| - if (strict && (dir > 0) != (pos == where.ch)) return null; | ||
| - var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); | ||
| - | ||
| - var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); | ||
| - if (found == null) return null; | ||
| - return {from: Pos(where.line, pos), to: found && found.pos, | ||
| - match: found && found.ch == match.charAt(0), forward: dir > 0}; | ||
| - } | ||
| - | ||
| - // bracketRegex is used to specify which type of bracket to scan | ||
| - // should be a regexp, e.g. /[[\]]/ | ||
| - // | ||
| - // Note: If "where" is on an open bracket, then this bracket is ignored. | ||
| - // | ||
| - // Returns false when no bracket was found, null when it reached | ||
| - // maxScanLines and gave up | ||
| - function scanForBracket(cm, where, dir, style, config) { | ||
| - var maxScanLen = (config && config.maxScanLineLength) || 10000; | ||
| - var maxScanLines = (config && config.maxScanLines) || 1000; | ||
| - | ||
| - var stack = []; | ||
| - var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; | ||
| - var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) | ||
| - : Math.max(cm.firstLine() - 1, where.line - maxScanLines); | ||
| - for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { | ||
| - var line = cm.getLine(lineNo); | ||
| - if (!line) continue; | ||
| - var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; | ||
| - if (line.length > maxScanLen) continue; | ||
| - if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); | ||
| - for (; pos != end; pos += dir) { | ||
| - var ch = line.charAt(pos); | ||
| - if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { | ||
| - var match = matching[ch]; | ||
| - if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); | ||
| - else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; | ||
| - else stack.pop(); | ||
| - } | ||
| - } | ||
| - } | ||
| - return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; | ||
| - } | ||
| - | ||
| - function matchBrackets(cm, autoclear, config) { | ||
| - // Disable brace matching in long lines, since it'll cause hugely slow updates | ||
| - var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; | ||
| - var marks = [], ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); | ||
| - if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { | ||
| - var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; | ||
| - marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); | ||
| - if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) | ||
| - marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); | ||
| - } | ||
| - } | ||
| - | ||
| - if (marks.length) { | ||
| - // Kludge to work around the IE bug from issue #1193, where text | ||
| - // input stops going to the textare whever this fires. | ||
| - if (ie_lt8 && cm.state.focused) cm.display.input.focus(); | ||
| - | ||
| - var clear = function() { | ||
| - cm.operation(function() { | ||
| - for (var i = 0; i < marks.length; i++) marks[i].clear(); | ||
| - }); | ||
| - }; | ||
| - if (autoclear) setTimeout(clear, 800); | ||
| - else return clear; | ||
| - } | ||
| - } | ||
| - | ||
| - var currentlyHighlighted = null; | ||
| - function doMatchBrackets(cm) { | ||
| - cm.operation(function() { | ||
| - if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} | ||
| - currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); | ||
| - }); | ||
| - } | ||
| - | ||
| - CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) | ||
| - cm.off("cursorActivity", doMatchBrackets); | ||
| - if (val) { | ||
| - cm.state.matchBrackets = typeof val == "object" ? val : {}; | ||
| - cm.on("cursorActivity", doMatchBrackets); | ||
| - } | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); | ||
| - CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ | ||
| - return findMatchingBracket(this, pos, strict, config); | ||
| - }); | ||
| - CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ | ||
| - return scanForBracket(this, pos, dir, style, config); | ||
| - }); | ||
| -}); |
66
public/js/lib/codemirror/addon/edit/matchtags.js
| @@ -1,66 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("../fold/xml-fold")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "../fold/xml-fold"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("matchTags", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - cm.off("cursorActivity", doMatchTags); | ||
| - cm.off("viewportChange", maybeUpdateMatch); | ||
| - clear(cm); | ||
| - } | ||
| - if (val) { | ||
| - cm.state.matchBothTags = typeof val == "object" && val.bothTags; | ||
| - cm.on("cursorActivity", doMatchTags); | ||
| - cm.on("viewportChange", maybeUpdateMatch); | ||
| - doMatchTags(cm); | ||
| - } | ||
| - }); | ||
| - | ||
| - function clear(cm) { | ||
| - if (cm.state.tagHit) cm.state.tagHit.clear(); | ||
| - if (cm.state.tagOther) cm.state.tagOther.clear(); | ||
| - cm.state.tagHit = cm.state.tagOther = null; | ||
| - } | ||
| - | ||
| - function doMatchTags(cm) { | ||
| - cm.state.failedTagMatch = false; | ||
| - cm.operation(function() { | ||
| - clear(cm); | ||
| - if (cm.somethingSelected()) return; | ||
| - var cur = cm.getCursor(), range = cm.getViewport(); | ||
| - range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); | ||
| - var match = CodeMirror.findMatchingTag(cm, cur, range); | ||
| - if (!match) return; | ||
| - if (cm.state.matchBothTags) { | ||
| - var hit = match.at == "open" ? match.open : match.close; | ||
| - if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); | ||
| - } | ||
| - var other = match.at == "close" ? match.open : match.close; | ||
| - if (other) | ||
| - cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); | ||
| - else | ||
| - cm.state.failedTagMatch = true; | ||
| - }); | ||
| - } | ||
| - | ||
| - function maybeUpdateMatch(cm) { | ||
| - if (cm.state.failedTagMatch) doMatchTags(cm); | ||
| - } | ||
| - | ||
| - CodeMirror.commands.toMatchingTag = function(cm) { | ||
| - var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); | ||
| - if (found) { | ||
| - var other = found.at == "close" ? found.open : found.close; | ||
| - if (other) cm.extendSelection(other.to, other.from); | ||
| - } | ||
| - }; | ||
| -}); |
27
public/js/lib/codemirror/addon/edit/trailingspace.js
| @@ -1,27 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { | ||
| - if (prev == CodeMirror.Init) prev = false; | ||
| - if (prev && !val) | ||
| - cm.removeOverlay("trailingspace"); | ||
| - else if (!prev && val) | ||
| - cm.addOverlay({ | ||
| - token: function(stream) { | ||
| - for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} | ||
| - if (i > stream.pos) { stream.pos = i; return null; } | ||
| - stream.pos = l; | ||
| - return "trailingspace"; | ||
| - }, | ||
| - name: "trailingspace" | ||
| - }); | ||
| - }); | ||
| -}); |
43,080
public/js/lib/codemirror/addon/emmet/emmet.js
0 additions,
43,080 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
105
public/js/lib/codemirror/addon/fold/brace-fold.js
| @@ -1,105 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("fold", "brace", function(cm, start) { | ||
| - var line = start.line, lineText = cm.getLine(line); | ||
| - var startCh, tokenType; | ||
| - | ||
| - function findOpening(openCh) { | ||
| - for (var at = start.ch, pass = 0;;) { | ||
| - var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); | ||
| - if (found == -1) { | ||
| - if (pass == 1) break; | ||
| - pass = 1; | ||
| - at = lineText.length; | ||
| - continue; | ||
| - } | ||
| - if (pass == 1 && found < start.ch) break; | ||
| - tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); | ||
| - if (!/^(comment|string)/.test(tokenType)) return found + 1; | ||
| - at = found - 1; | ||
| - } | ||
| - } | ||
| - | ||
| - var startToken = "{", endToken = "}", startCh = findOpening("{"); | ||
| - if (startCh == null) { | ||
| - startToken = "[", endToken = "]"; | ||
| - startCh = findOpening("["); | ||
| - } | ||
| - | ||
| - if (startCh == null) return; | ||
| - var count = 1, lastLine = cm.lastLine(), end, endCh; | ||
| - outer: for (var i = line; i <= lastLine; ++i) { | ||
| - var text = cm.getLine(i), pos = i == line ? startCh : 0; | ||
| - for (;;) { | ||
| - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); | ||
| - if (nextOpen < 0) nextOpen = text.length; | ||
| - if (nextClose < 0) nextClose = text.length; | ||
| - pos = Math.min(nextOpen, nextClose); | ||
| - if (pos == text.length) break; | ||
| - if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { | ||
| - if (pos == nextOpen) ++count; | ||
| - else if (!--count) { end = i; endCh = pos; break outer; } | ||
| - } | ||
| - ++pos; | ||
| - } | ||
| - } | ||
| - if (end == null || line == end && endCh == startCh) return; | ||
| - return {from: CodeMirror.Pos(line, startCh), | ||
| - to: CodeMirror.Pos(end, endCh)}; | ||
| -}); | ||
| - | ||
| -CodeMirror.registerHelper("fold", "import", function(cm, start) { | ||
| - function hasImport(line) { | ||
| - if (line < cm.firstLine() || line > cm.lastLine()) return null; | ||
| - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); | ||
| - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); | ||
| - if (start.type != "keyword" || start.string != "import") return null; | ||
| - // Now find closing semicolon, return its position | ||
| - for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { | ||
| - var text = cm.getLine(i), semi = text.indexOf(";"); | ||
| - if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; | ||
| - } | ||
| - } | ||
| - | ||
| - var start = start.line, has = hasImport(start), prev; | ||
| - if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) | ||
| - return null; | ||
| - for (var end = has.end;;) { | ||
| - var next = hasImport(end.line + 1); | ||
| - if (next == null) break; | ||
| - end = next.end; | ||
| - } | ||
| - return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; | ||
| -}); | ||
| - | ||
| -CodeMirror.registerHelper("fold", "include", function(cm, start) { | ||
| - function hasInclude(line) { | ||
| - if (line < cm.firstLine() || line > cm.lastLine()) return null; | ||
| - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); | ||
| - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); | ||
| - if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; | ||
| - } | ||
| - | ||
| - var start = start.line, has = hasInclude(start); | ||
| - if (has == null || hasInclude(start - 1) != null) return null; | ||
| - for (var end = start;;) { | ||
| - var next = hasInclude(end + 1); | ||
| - if (next == null) break; | ||
| - ++end; | ||
| - } | ||
| - return {from: CodeMirror.Pos(start, has + 1), | ||
| - to: cm.clipPos(CodeMirror.Pos(end))}; | ||
| -}); | ||
| - | ||
| -}); |
57
public/js/lib/codemirror/addon/fold/comment-fold.js
| @@ -1,57 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { | ||
| - return mode.blockCommentStart && mode.blockCommentEnd; | ||
| -}, function(cm, start) { | ||
| - var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; | ||
| - if (!startToken || !endToken) return; | ||
| - var line = start.line, lineText = cm.getLine(line); | ||
| - | ||
| - var startCh; | ||
| - for (var at = start.ch, pass = 0;;) { | ||
| - var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); | ||
| - if (found == -1) { | ||
| - if (pass == 1) return; | ||
| - pass = 1; | ||
| - at = lineText.length; | ||
| - continue; | ||
| - } | ||
| - if (pass == 1 && found < start.ch) return; | ||
| - if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { | ||
| - startCh = found + startToken.length; | ||
| - break; | ||
| - } | ||
| - at = found - 1; | ||
| - } | ||
| - | ||
| - var depth = 1, lastLine = cm.lastLine(), end, endCh; | ||
| - outer: for (var i = line; i <= lastLine; ++i) { | ||
| - var text = cm.getLine(i), pos = i == line ? startCh : 0; | ||
| - for (;;) { | ||
| - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); | ||
| - if (nextOpen < 0) nextOpen = text.length; | ||
| - if (nextClose < 0) nextClose = text.length; | ||
| - pos = Math.min(nextOpen, nextClose); | ||
| - if (pos == text.length) break; | ||
| - if (pos == nextOpen) ++depth; | ||
| - else if (!--depth) { end = i; endCh = pos; break outer; } | ||
| - ++pos; | ||
| - } | ||
| - } | ||
| - if (end == null || line == end && endCh == startCh) return; | ||
| - return {from: CodeMirror.Pos(line, startCh), | ||
| - to: CodeMirror.Pos(end, endCh)}; | ||
| -}); | ||
| - | ||
| -}); |
145
public/js/lib/codemirror/addon/fold/foldcode.js
| @@ -1,145 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - function doFold(cm, pos, options, force) { | ||
| - if (options && options.call) { | ||
| - var finder = options; | ||
| - options = null; | ||
| - } else { | ||
| - var finder = getOption(cm, options, "rangeFinder"); | ||
| - } | ||
| - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); | ||
| - var minSize = getOption(cm, options, "minFoldSize"); | ||
| - | ||
| - function getRange(allowFolded) { | ||
| - var range = finder(cm, pos); | ||
| - if (!range || range.to.line - range.from.line < minSize) return null; | ||
| - var marks = cm.findMarksAt(range.from); | ||
| - for (var i = 0; i < marks.length; ++i) { | ||
| - if (marks[i].__isFold && force !== "fold") { | ||
| - if (!allowFolded) return null; | ||
| - range.cleared = true; | ||
| - marks[i].clear(); | ||
| - } | ||
| - } | ||
| - return range; | ||
| - } | ||
| - | ||
| - var range = getRange(true); | ||
| - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { | ||
| - pos = CodeMirror.Pos(pos.line - 1, 0); | ||
| - range = getRange(false); | ||
| - } | ||
| - if (!range || range.cleared || force === "unfold") return; | ||
| - | ||
| - var myWidget = makeWidget(cm, options); | ||
| - CodeMirror.on(myWidget, "mousedown", function(e) { | ||
| - myRange.clear(); | ||
| - CodeMirror.e_preventDefault(e); | ||
| - }); | ||
| - var myRange = cm.markText(range.from, range.to, { | ||
| - replacedWith: myWidget, | ||
| - clearOnEnter: true, | ||
| - __isFold: true | ||
| - }); | ||
| - myRange.on("clear", function(from, to) { | ||
| - CodeMirror.signal(cm, "unfold", cm, from, to); | ||
| - }); | ||
| - CodeMirror.signal(cm, "fold", cm, range.from, range.to); | ||
| - } | ||
| - | ||
| - function makeWidget(cm, options) { | ||
| - var widget = getOption(cm, options, "widget"); | ||
| - if (typeof widget == "string") { | ||
| - var text = document.createTextNode(widget); | ||
| - widget = document.createElement("span"); | ||
| - widget.appendChild(text); | ||
| - widget.className = "CodeMirror-foldmarker"; | ||
| - } | ||
| - return widget; | ||
| - } | ||
| - | ||
| - // Clumsy backwards-compatible interface | ||
| - CodeMirror.newFoldFunction = function(rangeFinder, widget) { | ||
| - return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; | ||
| - }; | ||
| - | ||
| - // New-style interface | ||
| - CodeMirror.defineExtension("foldCode", function(pos, options, force) { | ||
| - doFold(this, pos, options, force); | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("isFolded", function(pos) { | ||
| - var marks = this.findMarksAt(pos); | ||
| - for (var i = 0; i < marks.length; ++i) | ||
| - if (marks[i].__isFold) return true; | ||
| - }); | ||
| - | ||
| - CodeMirror.commands.toggleFold = function(cm) { | ||
| - cm.foldCode(cm.getCursor()); | ||
| - }; | ||
| - CodeMirror.commands.fold = function(cm) { | ||
| - cm.foldCode(cm.getCursor(), null, "fold"); | ||
| - }; | ||
| - CodeMirror.commands.unfold = function(cm) { | ||
| - cm.foldCode(cm.getCursor(), null, "unfold"); | ||
| - }; | ||
| - CodeMirror.commands.foldAll = function(cm) { | ||
| - cm.operation(function() { | ||
| - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) | ||
| - cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); | ||
| - }); | ||
| - }; | ||
| - CodeMirror.commands.unfoldAll = function(cm) { | ||
| - cm.operation(function() { | ||
| - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) | ||
| - cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); | ||
| - }); | ||
| - }; | ||
| - | ||
| - CodeMirror.registerHelper("fold", "combine", function() { | ||
| - var funcs = Array.prototype.slice.call(arguments, 0); | ||
| - return function(cm, start) { | ||
| - for (var i = 0; i < funcs.length; ++i) { | ||
| - var found = funcs[i](cm, start); | ||
| - if (found) return found; | ||
| - } | ||
| - }; | ||
| - }); | ||
| - | ||
| - CodeMirror.registerHelper("fold", "auto", function(cm, start) { | ||
| - var helpers = cm.getHelpers(start, "fold"); | ||
| - for (var i = 0; i < helpers.length; i++) { | ||
| - var cur = helpers[i](cm, start); | ||
| - if (cur) return cur; | ||
| - } | ||
| - }); | ||
| - | ||
| - var defaultOptions = { | ||
| - rangeFinder: CodeMirror.fold.auto, | ||
| - widget: "\u2194", | ||
| - minFoldSize: 0, | ||
| - scanUp: false | ||
| - }; | ||
| - | ||
| - CodeMirror.defineOption("foldOptions", null); | ||
| - | ||
| - function getOption(cm, options, name) { | ||
| - if (options && options[name] !== undefined) | ||
| - return options[name]; | ||
| - var editorOptions = cm.options.foldOptions; | ||
| - if (editorOptions && editorOptions[name] !== undefined) | ||
| - return editorOptions[name]; | ||
| - return defaultOptions[name]; | ||
| - } | ||
| -}); |
20
public/js/lib/codemirror/addon/fold/foldgutter.css
| @@ -1,20 +0,0 @@ | ||
| -.CodeMirror-foldmarker { | ||
| - color: blue; | ||
| - text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; | ||
| - font-family: arial; | ||
| - line-height: .3; | ||
| - cursor: pointer; | ||
| -} | ||
| -.CodeMirror-foldgutter { | ||
| - width: .7em; | ||
| -} | ||
| -.CodeMirror-foldgutter-open, | ||
| -.CodeMirror-foldgutter-folded { | ||
| - cursor: pointer; | ||
| -} | ||
| -.CodeMirror-foldgutter-open:after { | ||
| - content: "\25BE"; | ||
| -} | ||
| -.CodeMirror-foldgutter-folded:after { | ||
| - content: "\25B8"; | ||
| -} |
134
public/js/lib/codemirror/addon/fold/foldgutter.js
| @@ -1,134 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("./foldcode")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "./foldcode"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - cm.clearGutter(cm.state.foldGutter.options.gutter); | ||
| - cm.state.foldGutter = null; | ||
| - cm.off("gutterClick", onGutterClick); | ||
| - cm.off("change", onChange); | ||
| - cm.off("viewportChange", onViewportChange); | ||
| - cm.off("fold", onFold); | ||
| - cm.off("unfold", onFold); | ||
| - cm.off("swapDoc", updateInViewport); | ||
| - } | ||
| - if (val) { | ||
| - cm.state.foldGutter = new State(parseOptions(val)); | ||
| - updateInViewport(cm); | ||
| - cm.on("gutterClick", onGutterClick); | ||
| - cm.on("change", onChange); | ||
| - cm.on("viewportChange", onViewportChange); | ||
| - cm.on("fold", onFold); | ||
| - cm.on("unfold", onFold); | ||
| - cm.on("swapDoc", updateInViewport); | ||
| - } | ||
| - }); | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function State(options) { | ||
| - this.options = options; | ||
| - this.from = this.to = 0; | ||
| - } | ||
| - | ||
| - function parseOptions(opts) { | ||
| - if (opts === true) opts = {}; | ||
| - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; | ||
| - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; | ||
| - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; | ||
| - return opts; | ||
| - } | ||
| - | ||
| - function isFolded(cm, line) { | ||
| - var marks = cm.findMarksAt(Pos(line)); | ||
| - for (var i = 0; i < marks.length; ++i) | ||
| - if (marks[i].__isFold && marks[i].find().from.line == line) return true; | ||
| - } | ||
| - | ||
| - function marker(spec) { | ||
| - if (typeof spec == "string") { | ||
| - var elt = document.createElement("div"); | ||
| - elt.className = spec + " CodeMirror-guttermarker-subtle"; | ||
| - return elt; | ||
| - } else { | ||
| - return spec.cloneNode(true); | ||
| - } | ||
| - } | ||
| - | ||
| - function updateFoldInfo(cm, from, to) { | ||
| - var opts = cm.state.foldGutter.options, cur = from; | ||
| - cm.eachLine(from, to, function(line) { | ||
| - var mark = null; | ||
| - if (isFolded(cm, cur)) { | ||
| - mark = marker(opts.indicatorFolded); | ||
| - } else { | ||
| - var pos = Pos(cur, 0), func = opts.rangeFinder || CodeMirror.fold.auto; | ||
| - var range = func && func(cm, pos); | ||
| - if (range && range.from.line + 1 < range.to.line) | ||
| - mark = marker(opts.indicatorOpen); | ||
| - } | ||
| - cm.setGutterMarker(line, opts.gutter, mark); | ||
| - ++cur; | ||
| - }); | ||
| - } | ||
| - | ||
| - function updateInViewport(cm) { | ||
| - var vp = cm.getViewport(), state = cm.state.foldGutter; | ||
| - if (!state) return; | ||
| - cm.operation(function() { | ||
| - updateFoldInfo(cm, vp.from, vp.to); | ||
| - }); | ||
| - state.from = vp.from; state.to = vp.to; | ||
| - } | ||
| - | ||
| - function onGutterClick(cm, line, gutter) { | ||
| - var opts = cm.state.foldGutter.options; | ||
| - if (gutter != opts.gutter) return; | ||
| - cm.foldCode(Pos(line, 0), opts.rangeFinder); | ||
| - } | ||
| - | ||
| - function onChange(cm) { | ||
| - var state = cm.state.foldGutter, opts = cm.state.foldGutter.options; | ||
| - state.from = state.to = 0; | ||
| - clearTimeout(state.changeUpdate); | ||
| - state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); | ||
| - } | ||
| - | ||
| - function onViewportChange(cm) { | ||
| - var state = cm.state.foldGutter, opts = cm.state.foldGutter.options; | ||
| - clearTimeout(state.changeUpdate); | ||
| - state.changeUpdate = setTimeout(function() { | ||
| - var vp = cm.getViewport(); | ||
| - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { | ||
| - updateInViewport(cm); | ||
| - } else { | ||
| - cm.operation(function() { | ||
| - if (vp.from < state.from) { | ||
| - updateFoldInfo(cm, vp.from, state.from); | ||
| - state.from = vp.from; | ||
| - } | ||
| - if (vp.to > state.to) { | ||
| - updateFoldInfo(cm, state.to, vp.to); | ||
| - state.to = vp.to; | ||
| - } | ||
| - }); | ||
| - } | ||
| - }, opts.updateViewportTimeSpan || 400); | ||
| - } | ||
| - | ||
| - function onFold(cm, from) { | ||
| - var state = cm.state.foldGutter, line = from.line; | ||
| - if (line >= state.from && line < state.to) | ||
| - updateFoldInfo(cm, line, line + 1); | ||
| - } | ||
| -}); |
44
public/js/lib/codemirror/addon/fold/indent-fold.js
| @@ -1,44 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("fold", "indent", function(cm, start) { | ||
| - var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); | ||
| - if (!/\S/.test(firstLine)) return; | ||
| - var getIndent = function(line) { | ||
| - return CodeMirror.countColumn(line, null, tabSize); | ||
| - }; | ||
| - var myIndent = getIndent(firstLine); | ||
| - var lastLineInFold = null; | ||
| - // Go through lines until we find a line that definitely doesn't belong in | ||
| - // the block we're folding, or to the end. | ||
| - for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { | ||
| - var curLine = cm.getLine(i); | ||
| - var curIndent = getIndent(curLine); | ||
| - if (curIndent > myIndent) { | ||
| - // Lines with a greater indent are considered part of the block. | ||
| - lastLineInFold = i; | ||
| - } else if (!/\S/.test(curLine)) { | ||
| - // Empty lines might be breaks within the block we're trying to fold. | ||
| - } else { | ||
| - // A non-empty line at an indent equal to or less than ours marks the | ||
| - // start of another block. | ||
| - break; | ||
| - } | ||
| - } | ||
| - if (lastLineInFold) return { | ||
| - from: CodeMirror.Pos(start.line, firstLine.length), | ||
| - to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) | ||
| - }; | ||
| -}); | ||
| - | ||
| -}); |
49
public/js/lib/codemirror/addon/fold/markdown-fold.js
| @@ -1,49 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("fold", "markdown", function(cm, start) { | ||
| - var maxDepth = 100; | ||
| - | ||
| - function isHeader(lineNo) { | ||
| - var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); | ||
| - return tokentype && /\bheader\b/.test(tokentype); | ||
| - } | ||
| - | ||
| - function headerLevel(lineNo, line, nextLine) { | ||
| - var match = line && line.match(/^#+/); | ||
| - if (match && isHeader(lineNo)) return match[0].length; | ||
| - match = nextLine && nextLine.match(/^[=\-]+\s*$/); | ||
| - if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; | ||
| - return maxDepth; | ||
| - } | ||
| - | ||
| - var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); | ||
| - var level = headerLevel(start.line, firstLine, nextLine); | ||
| - if (level === maxDepth) return undefined; | ||
| - | ||
| - var lastLineNo = cm.lastLine(); | ||
| - var end = start.line, nextNextLine = cm.getLine(end + 2); | ||
| - while (end < lastLineNo) { | ||
| - if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; | ||
| - ++end; | ||
| - nextLine = nextNextLine; | ||
| - nextNextLine = cm.getLine(end + 2); | ||
| - } | ||
| - | ||
| - return { | ||
| - from: CodeMirror.Pos(start.line, firstLine.length), | ||
| - to: CodeMirror.Pos(end, cm.getLine(end).length) | ||
| - }; | ||
| -}); | ||
| - | ||
| -}); |
182
public/js/lib/codemirror/addon/fold/xml-fold.js
| @@ -1,182 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } | ||
| - | ||
| - var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; | ||
| - var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; | ||
| - var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g"); | ||
| - | ||
| - function Iter(cm, line, ch, range) { | ||
| - this.line = line; this.ch = ch; | ||
| - this.cm = cm; this.text = cm.getLine(line); | ||
| - this.min = range ? range.from : cm.firstLine(); | ||
| - this.max = range ? range.to - 1 : cm.lastLine(); | ||
| - } | ||
| - | ||
| - function tagAt(iter, ch) { | ||
| - var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch)); | ||
| - return type && /\btag\b/.test(type); | ||
| - } | ||
| - | ||
| - function nextLine(iter) { | ||
| - if (iter.line >= iter.max) return; | ||
| - iter.ch = 0; | ||
| - iter.text = iter.cm.getLine(++iter.line); | ||
| - return true; | ||
| - } | ||
| - function prevLine(iter) { | ||
| - if (iter.line <= iter.min) return; | ||
| - iter.text = iter.cm.getLine(--iter.line); | ||
| - iter.ch = iter.text.length; | ||
| - return true; | ||
| - } | ||
| - | ||
| - function toTagEnd(iter) { | ||
| - for (;;) { | ||
| - var gt = iter.text.indexOf(">", iter.ch); | ||
| - if (gt == -1) { if (nextLine(iter)) continue; else return; } | ||
| - if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; } | ||
| - var lastSlash = iter.text.lastIndexOf("/", gt); | ||
| - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); | ||
| - iter.ch = gt + 1; | ||
| - return selfClose ? "selfClose" : "regular"; | ||
| - } | ||
| - } | ||
| - function toTagStart(iter) { | ||
| - for (;;) { | ||
| - var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1; | ||
| - if (lt == -1) { if (prevLine(iter)) continue; else return; } | ||
| - if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; } | ||
| - xmlTagStart.lastIndex = lt; | ||
| - iter.ch = lt; | ||
| - var match = xmlTagStart.exec(iter.text); | ||
| - if (match && match.index == lt) return match; | ||
| - } | ||
| - } | ||
| - | ||
| - function toNextTag(iter) { | ||
| - for (;;) { | ||
| - xmlTagStart.lastIndex = iter.ch; | ||
| - var found = xmlTagStart.exec(iter.text); | ||
| - if (!found) { if (nextLine(iter)) continue; else return; } | ||
| - if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; } | ||
| - iter.ch = found.index + found[0].length; | ||
| - return found; | ||
| - } | ||
| - } | ||
| - function toPrevTag(iter) { | ||
| - for (;;) { | ||
| - var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1; | ||
| - if (gt == -1) { if (prevLine(iter)) continue; else return; } | ||
| - if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; } | ||
| - var lastSlash = iter.text.lastIndexOf("/", gt); | ||
| - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); | ||
| - iter.ch = gt + 1; | ||
| - return selfClose ? "selfClose" : "regular"; | ||
| - } | ||
| - } | ||
| - | ||
| - function findMatchingClose(iter, tag) { | ||
| - var stack = []; | ||
| - for (;;) { | ||
| - var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0); | ||
| - if (!next || !(end = toTagEnd(iter))) return; | ||
| - if (end == "selfClose") continue; | ||
| - if (next[1]) { // closing tag | ||
| - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) { | ||
| - stack.length = i; | ||
| - break; | ||
| - } | ||
| - if (i < 0 && (!tag || tag == next[2])) return { | ||
| - tag: next[2], | ||
| - from: Pos(startLine, startCh), | ||
| - to: Pos(iter.line, iter.ch) | ||
| - }; | ||
| - } else { // opening tag | ||
| - stack.push(next[2]); | ||
| - } | ||
| - } | ||
| - } | ||
| - function findMatchingOpen(iter, tag) { | ||
| - var stack = []; | ||
| - for (;;) { | ||
| - var prev = toPrevTag(iter); | ||
| - if (!prev) return; | ||
| - if (prev == "selfClose") { toTagStart(iter); continue; } | ||
| - var endLine = iter.line, endCh = iter.ch; | ||
| - var start = toTagStart(iter); | ||
| - if (!start) return; | ||
| - if (start[1]) { // closing tag | ||
| - stack.push(start[2]); | ||
| - } else { // opening tag | ||
| - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) { | ||
| - stack.length = i; | ||
| - break; | ||
| - } | ||
| - if (i < 0 && (!tag || tag == start[2])) return { | ||
| - tag: start[2], | ||
| - from: Pos(iter.line, iter.ch), | ||
| - to: Pos(endLine, endCh) | ||
| - }; | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - CodeMirror.registerHelper("fold", "xml", function(cm, start) { | ||
| - var iter = new Iter(cm, start.line, 0); | ||
| - for (;;) { | ||
| - var openTag = toNextTag(iter), end; | ||
| - if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return; | ||
| - if (!openTag[1] && end != "selfClose") { | ||
| - var start = Pos(iter.line, iter.ch); | ||
| - var close = findMatchingClose(iter, openTag[2]); | ||
| - return close && {from: start, to: close.from}; | ||
| - } | ||
| - } | ||
| - }); | ||
| - CodeMirror.findMatchingTag = function(cm, pos, range) { | ||
| - var iter = new Iter(cm, pos.line, pos.ch, range); | ||
| - if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return; | ||
| - var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch); | ||
| - var start = end && toTagStart(iter); | ||
| - if (!end || !start || cmp(iter, pos) > 0) return; | ||
| - var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]}; | ||
| - if (end == "selfClose") return {open: here, close: null, at: "open"}; | ||
| - | ||
| - if (start[1]) { // closing tag | ||
| - return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"}; | ||
| - } else { // opening tag | ||
| - iter = new Iter(cm, to.line, to.ch, range); | ||
| - return {open: here, close: findMatchingClose(iter, start[2]), at: "open"}; | ||
| - } | ||
| - }; | ||
| - | ||
| - CodeMirror.findEnclosingTag = function(cm, pos, range) { | ||
| - var iter = new Iter(cm, pos.line, pos.ch, range); | ||
| - for (;;) { | ||
| - var open = findMatchingOpen(iter); | ||
| - if (!open) break; | ||
| - var forward = new Iter(cm, pos.line, pos.ch, range); | ||
| - var close = findMatchingClose(forward, open.tag); | ||
| - if (close) return {open: open, close: close}; | ||
| - } | ||
| - }; | ||
| - | ||
| - // Used by addon/edit/closetag.js | ||
| - CodeMirror.scanForClosingTag = function(cm, pos, name, end) { | ||
| - var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null); | ||
| - return findMatchingClose(iter, name); | ||
| - }; | ||
| -}); |
41
public/js/lib/codemirror/addon/hint/anyword-hint.js
| @@ -1,41 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var WORD = /[\w$]+/, RANGE = 500; | ||
| - | ||
| - CodeMirror.registerHelper("hint", "anyword", function(editor, options) { | ||
| - var word = options && options.word || WORD; | ||
| - var range = options && options.range || RANGE; | ||
| - var cur = editor.getCursor(), curLine = editor.getLine(cur.line); | ||
| - var end = cur.ch, start = end; | ||
| - while (start && word.test(curLine.charAt(start - 1))) --start; | ||
| - var curWord = start != end && curLine.slice(start, end); | ||
| - | ||
| - var list = [], seen = {}; | ||
| - var re = new RegExp(word.source, "g"); | ||
| - for (var dir = -1; dir <= 1; dir += 2) { | ||
| - var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; | ||
| - for (; line != endLine; line += dir) { | ||
| - var text = editor.getLine(line), m; | ||
| - while (m = re.exec(text)) { | ||
| - if (line == cur.line && m[0] === curWord) continue; | ||
| - if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { | ||
| - seen[m[0]] = true; | ||
| - list.push(m[0]); | ||
| - } | ||
| - } | ||
| - } | ||
| - } | ||
| - return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; | ||
| - }); | ||
| -}); |
56
public/js/lib/codemirror/addon/hint/css-hint.js
| @@ -1,56 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("../../mode/css/css")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "../../mode/css/css"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1, | ||
| - "first-letter": 1, "first-line": 1, "first-child": 1, | ||
| - before: 1, after: 1, lang: 1}; | ||
| - | ||
| - CodeMirror.registerHelper("hint", "css", function(cm) { | ||
| - var cur = cm.getCursor(), token = cm.getTokenAt(cur); | ||
| - var inner = CodeMirror.innerMode(cm.getMode(), token.state); | ||
| - if (inner.mode.name != "css") return; | ||
| - | ||
| - var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); | ||
| - if (/[^\w$_-]/.test(word)) { | ||
| - word = ""; start = end = cur.ch; | ||
| - } | ||
| - | ||
| - var spec = CodeMirror.resolveMode("text/css"); | ||
| - | ||
| - var result = []; | ||
| - function add(keywords) { | ||
| - for (var name in keywords) | ||
| - if (!word || name.lastIndexOf(word, 0) == 0) | ||
| - result.push(name); | ||
| - } | ||
| - | ||
| - var st = inner.state.state; | ||
| - if (st == "pseudo" || token.type == "variable-3") { | ||
| - add(pseudoClasses); | ||
| - } else if (st == "block" || st == "maybeprop") { | ||
| - add(spec.propertyKeywords); | ||
| - } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { | ||
| - add(spec.valueKeywords); | ||
| - add(spec.colorKeywords); | ||
| - } else if (st == "media" || st == "media_parens") { | ||
| - add(spec.mediaTypes); | ||
| - add(spec.mediaFeatures); | ||
| - } | ||
| - | ||
| - if (result.length) return { | ||
| - list: result, | ||
| - from: CodeMirror.Pos(cur.line, start), | ||
| - to: CodeMirror.Pos(cur.line, end) | ||
| - }; | ||
| - }); | ||
| -}); |
348
public/js/lib/codemirror/addon/hint/html-hint.js
| @@ -1,348 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("./xml-hint")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "./xml-hint"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "); | ||
| - var targets = ["_blank", "_self", "_top", "_parent"]; | ||
| - var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"]; | ||
| - var methods = ["get", "post", "put", "delete"]; | ||
| - var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]; | ||
| - var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech", | ||
| - "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait", | ||
| - "orientation:landscape", "device-height: [X]", "device-width: [X]"]; | ||
| - var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags | ||
| - | ||
| - var data = { | ||
| - a: { | ||
| - attrs: { | ||
| - href: null, ping: null, type: null, | ||
| - media: media, | ||
| - target: targets, | ||
| - hreflang: langs | ||
| - } | ||
| - }, | ||
| - abbr: s, | ||
| - acronym: s, | ||
| - address: s, | ||
| - applet: s, | ||
| - area: { | ||
| - attrs: { | ||
| - alt: null, coords: null, href: null, target: null, ping: null, | ||
| - media: media, hreflang: langs, type: null, | ||
| - shape: ["default", "rect", "circle", "poly"] | ||
| - } | ||
| - }, | ||
| - article: s, | ||
| - aside: s, | ||
| - audio: { | ||
| - attrs: { | ||
| - src: null, mediagroup: null, | ||
| - crossorigin: ["anonymous", "use-credentials"], | ||
| - preload: ["none", "metadata", "auto"], | ||
| - autoplay: ["", "autoplay"], | ||
| - loop: ["", "loop"], | ||
| - controls: ["", "controls"] | ||
| - } | ||
| - }, | ||
| - b: s, | ||
| - base: { attrs: { href: null, target: targets } }, | ||
| - basefont: s, | ||
| - bdi: s, | ||
| - bdo: s, | ||
| - big: s, | ||
| - blockquote: { attrs: { cite: null } }, | ||
| - body: s, | ||
| - br: s, | ||
| - button: { | ||
| - attrs: { | ||
| - form: null, formaction: null, name: null, value: null, | ||
| - autofocus: ["", "autofocus"], | ||
| - disabled: ["", "autofocus"], | ||
| - formenctype: encs, | ||
| - formmethod: methods, | ||
| - formnovalidate: ["", "novalidate"], | ||
| - formtarget: targets, | ||
| - type: ["submit", "reset", "button"] | ||
| - } | ||
| - }, | ||
| - canvas: { attrs: { width: null, height: null } }, | ||
| - caption: s, | ||
| - center: s, | ||
| - cite: s, | ||
| - code: s, | ||
| - col: { attrs: { span: null } }, | ||
| - colgroup: { attrs: { span: null } }, | ||
| - command: { | ||
| - attrs: { | ||
| - type: ["command", "checkbox", "radio"], | ||
| - label: null, icon: null, radiogroup: null, command: null, title: null, | ||
| - disabled: ["", "disabled"], | ||
| - checked: ["", "checked"] | ||
| - } | ||
| - }, | ||
| - data: { attrs: { value: null } }, | ||
| - datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } }, | ||
| - datalist: { attrs: { data: null } }, | ||
| - dd: s, | ||
| - del: { attrs: { cite: null, datetime: null } }, | ||
| - details: { attrs: { open: ["", "open"] } }, | ||
| - dfn: s, | ||
| - dir: s, | ||
| - div: s, | ||
| - dl: s, | ||
| - dt: s, | ||
| - em: s, | ||
| - embed: { attrs: { src: null, type: null, width: null, height: null } }, | ||
| - eventsource: { attrs: { src: null } }, | ||
| - fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } }, | ||
| - figcaption: s, | ||
| - figure: s, | ||
| - font: s, | ||
| - footer: s, | ||
| - form: { | ||
| - attrs: { | ||
| - action: null, name: null, | ||
| - "accept-charset": charsets, | ||
| - autocomplete: ["on", "off"], | ||
| - enctype: encs, | ||
| - method: methods, | ||
| - novalidate: ["", "novalidate"], | ||
| - target: targets | ||
| - } | ||
| - }, | ||
| - frame: s, | ||
| - frameset: s, | ||
| - h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, | ||
| - head: { | ||
| - attrs: {}, | ||
| - children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"] | ||
| - }, | ||
| - header: s, | ||
| - hgroup: s, | ||
| - hr: s, | ||
| - html: { | ||
| - attrs: { manifest: null }, | ||
| - children: ["head", "body"] | ||
| - }, | ||
| - i: s, | ||
| - iframe: { | ||
| - attrs: { | ||
| - src: null, srcdoc: null, name: null, width: null, height: null, | ||
| - sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"], | ||
| - seamless: ["", "seamless"] | ||
| - } | ||
| - }, | ||
| - img: { | ||
| - attrs: { | ||
| - alt: null, src: null, ismap: null, usemap: null, width: null, height: null, | ||
| - crossorigin: ["anonymous", "use-credentials"] | ||
| - } | ||
| - }, | ||
| - input: { | ||
| - attrs: { | ||
| - alt: null, dirname: null, form: null, formaction: null, | ||
| - height: null, list: null, max: null, maxlength: null, min: null, | ||
| - name: null, pattern: null, placeholder: null, size: null, src: null, | ||
| - step: null, value: null, width: null, | ||
| - accept: ["audio/*", "video/*", "image/*"], | ||
| - autocomplete: ["on", "off"], | ||
| - autofocus: ["", "autofocus"], | ||
| - checked: ["", "checked"], | ||
| - disabled: ["", "disabled"], | ||
| - formenctype: encs, | ||
| - formmethod: methods, | ||
| - formnovalidate: ["", "novalidate"], | ||
| - formtarget: targets, | ||
| - multiple: ["", "multiple"], | ||
| - readonly: ["", "readonly"], | ||
| - required: ["", "required"], | ||
| - type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", | ||
| - "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", | ||
| - "file", "submit", "image", "reset", "button"] | ||
| - } | ||
| - }, | ||
| - ins: { attrs: { cite: null, datetime: null } }, | ||
| - kbd: s, | ||
| - keygen: { | ||
| - attrs: { | ||
| - challenge: null, form: null, name: null, | ||
| - autofocus: ["", "autofocus"], | ||
| - disabled: ["", "disabled"], | ||
| - keytype: ["RSA"] | ||
| - } | ||
| - }, | ||
| - label: { attrs: { "for": null, form: null } }, | ||
| - legend: s, | ||
| - li: { attrs: { value: null } }, | ||
| - link: { | ||
| - attrs: { | ||
| - href: null, type: null, | ||
| - hreflang: langs, | ||
| - media: media, | ||
| - sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"] | ||
| - } | ||
| - }, | ||
| - map: { attrs: { name: null } }, | ||
| - mark: s, | ||
| - menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } }, | ||
| - meta: { | ||
| - attrs: { | ||
| - content: null, | ||
| - charset: charsets, | ||
| - name: ["viewport", "application-name", "author", "description", "generator", "keywords"], | ||
| - "http-equiv": ["content-language", "content-type", "default-style", "refresh"] | ||
| - } | ||
| - }, | ||
| - meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, | ||
| - nav: s, | ||
| - noframes: s, | ||
| - noscript: s, | ||
| - object: { | ||
| - attrs: { | ||
| - data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, | ||
| - typemustmatch: ["", "typemustmatch"] | ||
| - } | ||
| - }, | ||
| - ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } }, | ||
| - optgroup: { attrs: { disabled: ["", "disabled"], label: null } }, | ||
| - option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } }, | ||
| - output: { attrs: { "for": null, form: null, name: null } }, | ||
| - p: s, | ||
| - param: { attrs: { name: null, value: null } }, | ||
| - pre: s, | ||
| - progress: { attrs: { value: null, max: null } }, | ||
| - q: { attrs: { cite: null } }, | ||
| - rp: s, | ||
| - rt: s, | ||
| - ruby: s, | ||
| - s: s, | ||
| - samp: s, | ||
| - script: { | ||
| - attrs: { | ||
| - type: ["text/javascript"], | ||
| - src: null, | ||
| - async: ["", "async"], | ||
| - defer: ["", "defer"], | ||
| - charset: charsets | ||
| - } | ||
| - }, | ||
| - section: s, | ||
| - select: { | ||
| - attrs: { | ||
| - form: null, name: null, size: null, | ||
| - autofocus: ["", "autofocus"], | ||
| - disabled: ["", "disabled"], | ||
| - multiple: ["", "multiple"] | ||
| - } | ||
| - }, | ||
| - small: s, | ||
| - source: { attrs: { src: null, type: null, media: null } }, | ||
| - span: s, | ||
| - strike: s, | ||
| - strong: s, | ||
| - style: { | ||
| - attrs: { | ||
| - type: ["text/css"], | ||
| - media: media, | ||
| - scoped: null | ||
| - } | ||
| - }, | ||
| - sub: s, | ||
| - summary: s, | ||
| - sup: s, | ||
| - table: s, | ||
| - tbody: s, | ||
| - td: { attrs: { colspan: null, rowspan: null, headers: null } }, | ||
| - textarea: { | ||
| - attrs: { | ||
| - dirname: null, form: null, maxlength: null, name: null, placeholder: null, | ||
| - rows: null, cols: null, | ||
| - autofocus: ["", "autofocus"], | ||
| - disabled: ["", "disabled"], | ||
| - readonly: ["", "readonly"], | ||
| - required: ["", "required"], | ||
| - wrap: ["soft", "hard"] | ||
| - } | ||
| - }, | ||
| - tfoot: s, | ||
| - th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } }, | ||
| - thead: s, | ||
| - time: { attrs: { datetime: null } }, | ||
| - title: s, | ||
| - tr: s, | ||
| - track: { | ||
| - attrs: { | ||
| - src: null, label: null, "default": null, | ||
| - kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"], | ||
| - srclang: langs | ||
| - } | ||
| - }, | ||
| - tt: s, | ||
| - u: s, | ||
| - ul: s, | ||
| - "var": s, | ||
| - video: { | ||
| - attrs: { | ||
| - src: null, poster: null, width: null, height: null, | ||
| - crossorigin: ["anonymous", "use-credentials"], | ||
| - preload: ["auto", "metadata", "none"], | ||
| - autoplay: ["", "autoplay"], | ||
| - mediagroup: ["movie"], | ||
| - muted: ["", "muted"], | ||
| - controls: ["", "controls"] | ||
| - } | ||
| - }, | ||
| - wbr: s | ||
| - }; | ||
| - | ||
| - var globalAttrs = { | ||
| - accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], | ||
| - "class": null, | ||
| - contenteditable: ["true", "false"], | ||
| - contextmenu: null, | ||
| - dir: ["ltr", "rtl", "auto"], | ||
| - draggable: ["true", "false", "auto"], | ||
| - dropzone: ["copy", "move", "link", "string:", "file:"], | ||
| - hidden: ["hidden"], | ||
| - id: null, | ||
| - inert: ["inert"], | ||
| - itemid: null, | ||
| - itemprop: null, | ||
| - itemref: null, | ||
| - itemscope: ["itemscope"], | ||
| - itemtype: null, | ||
| - lang: ["en", "es"], | ||
| - spellcheck: ["true", "false"], | ||
| - style: null, | ||
| - tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"], | ||
| - title: null, | ||
| - translate: ["yes", "no"], | ||
| - onclick: null, | ||
| - rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"] | ||
| - }; | ||
| - function populate(obj) { | ||
| - for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) | ||
| - obj.attrs[attr] = globalAttrs[attr]; | ||
| - } | ||
| - | ||
| - populate(s); | ||
| - for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) | ||
| - populate(data[tag]); | ||
| - | ||
| - CodeMirror.htmlSchema = data; | ||
| - function htmlHint(cm, options) { | ||
| - var local = {schemaInfo: data}; | ||
| - if (options) for (var opt in options) local[opt] = options[opt]; | ||
| - return CodeMirror.hint.xml(cm, local); | ||
| - } | ||
| - CodeMirror.registerHelper("hint", "html", htmlHint); | ||
| -}); |
146
public/js/lib/codemirror/addon/hint/javascript-hint.js
| @@ -1,146 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function forEach(arr, f) { | ||
| - for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); | ||
| - } | ||
| - | ||
| - function arrayContains(arr, item) { | ||
| - if (!Array.prototype.indexOf) { | ||
| - var i = arr.length; | ||
| - while (i--) { | ||
| - if (arr[i] === item) { | ||
| - return true; | ||
| - } | ||
| - } | ||
| - return false; | ||
| - } | ||
| - return arr.indexOf(item) != -1; | ||
| - } | ||
| - | ||
| - function scriptHint(editor, keywords, getToken, options) { | ||
| - // Find the token at the cursor | ||
| - var cur = editor.getCursor(), token = getToken(editor, cur); | ||
| - if (/\b(?:string|comment)\b/.test(token.type)) return; | ||
| - token.state = CodeMirror.innerMode(editor.getMode(), token.state).state; | ||
| - | ||
| - // If it's not a 'word-style' token, ignore the token. | ||
| - if (!/^[\w$_]*$/.test(token.string)) { | ||
| - token = {start: cur.ch, end: cur.ch, string: "", state: token.state, | ||
| - type: token.string == "." ? "property" : null}; | ||
| - } else if (token.end > cur.ch) { | ||
| - token.end = cur.ch; | ||
| - token.string = token.string.slice(0, cur.ch - token.start); | ||
| - } | ||
| - | ||
| - var tprop = token; | ||
| - // If it is a property, find out what it is a property of. | ||
| - while (tprop.type == "property") { | ||
| - tprop = getToken(editor, Pos(cur.line, tprop.start)); | ||
| - if (tprop.string != ".") return; | ||
| - tprop = getToken(editor, Pos(cur.line, tprop.start)); | ||
| - if (!context) var context = []; | ||
| - context.push(tprop); | ||
| - } | ||
| - return {list: getCompletions(token, context, keywords, options), | ||
| - from: Pos(cur.line, token.start), | ||
| - to: Pos(cur.line, token.end)}; | ||
| - } | ||
| - | ||
| - function javascriptHint(editor, options) { | ||
| - return scriptHint(editor, javascriptKeywords, | ||
| - function (e, cur) {return e.getTokenAt(cur);}, | ||
| - options); | ||
| - }; | ||
| - CodeMirror.registerHelper("hint", "javascript", javascriptHint); | ||
| - | ||
| - function getCoffeeScriptToken(editor, cur) { | ||
| - // This getToken, it is for coffeescript, imitates the behavior of | ||
| - // getTokenAt method in javascript.js, that is, returning "property" | ||
| - // type and treat "." as indepenent token. | ||
| - var token = editor.getTokenAt(cur); | ||
| - if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { | ||
| - token.end = token.start; | ||
| - token.string = '.'; | ||
| - token.type = "property"; | ||
| - } | ||
| - else if (/^\.[\w$_]*$/.test(token.string)) { | ||
| - token.type = "property"; | ||
| - token.start++; | ||
| - token.string = token.string.replace(/\./, ''); | ||
| - } | ||
| - return token; | ||
| - } | ||
| - | ||
| - function coffeescriptHint(editor, options) { | ||
| - return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options); | ||
| - } | ||
| - CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint); | ||
| - | ||
| - var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + | ||
| - "toUpperCase toLowerCase split concat match replace search").split(" "); | ||
| - var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + | ||
| - "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); | ||
| - var funcProps = "prototype apply call bind".split(" "); | ||
| - var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + | ||
| - "if in instanceof new null return switch throw true try typeof var void while with").split(" "); | ||
| - var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + | ||
| - "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); | ||
| - | ||
| - function getCompletions(token, context, keywords, options) { | ||
| - var found = [], start = token.string, global = options && options.globalScope || window; | ||
| - function maybeAdd(str) { | ||
| - if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str); | ||
| - } | ||
| - function gatherCompletions(obj) { | ||
| - if (typeof obj == "string") forEach(stringProps, maybeAdd); | ||
| - else if (obj instanceof Array) forEach(arrayProps, maybeAdd); | ||
| - else if (obj instanceof Function) forEach(funcProps, maybeAdd); | ||
| - for (var name in obj) maybeAdd(name); | ||
| - } | ||
| - | ||
| - if (context && context.length) { | ||
| - // If this is a property, see if it belongs to some object we can | ||
| - // find in the current environment. | ||
| - var obj = context.pop(), base; | ||
| - if (obj.type && obj.type.indexOf("variable") === 0) { | ||
| - if (options && options.additionalContext) | ||
| - base = options.additionalContext[obj.string]; | ||
| - if (!options || options.useGlobalScope !== false) | ||
| - base = base || global[obj.string]; | ||
| - } else if (obj.type == "string") { | ||
| - base = ""; | ||
| - } else if (obj.type == "atom") { | ||
| - base = 1; | ||
| - } else if (obj.type == "function") { | ||
| - if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && | ||
| - (typeof global.jQuery == 'function')) | ||
| - base = global.jQuery(); | ||
| - else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function')) | ||
| - base = global._(); | ||
| - } | ||
| - while (base != null && context.length) | ||
| - base = base[context.pop().string]; | ||
| - if (base != null) gatherCompletions(base); | ||
| - } else { | ||
| - // If not, just look in the global object and any local scope | ||
| - // (reading into JS mode internals to get at the local and global variables) | ||
| - for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); | ||
| - for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name); | ||
| - if (!options || options.useGlobalScope !== false) | ||
| - gatherCompletions(global); | ||
| - forEach(keywords, maybeAdd); | ||
| - } | ||
| - return found; | ||
| - } | ||
| -}); |
38
public/js/lib/codemirror/addon/hint/show-hint.css
| @@ -1,38 +0,0 @@ | ||
| -.CodeMirror-hints { | ||
| - position: absolute; | ||
| - z-index: 10; | ||
| - overflow: hidden; | ||
| - list-style: none; | ||
| - | ||
| - margin: 0; | ||
| - padding: 2px; | ||
| - | ||
| - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - border-radius: 3px; | ||
| - border: 1px solid silver; | ||
| - | ||
| - background: white; | ||
| - font-size: 90%; | ||
| - font-family: monospace; | ||
| - | ||
| - max-height: 20em; | ||
| - overflow-y: auto; | ||
| -} | ||
| - | ||
| -.CodeMirror-hint { | ||
| - margin: 0; | ||
| - padding: 0 4px; | ||
| - border-radius: 2px; | ||
| - max-width: 19em; | ||
| - overflow: hidden; | ||
| - white-space: pre; | ||
| - color: black; | ||
| - cursor: pointer; | ||
| -} | ||
| - | ||
| -li.CodeMirror-hint-active { | ||
| - background: #08f; | ||
| - color: white; | ||
| -} |
389
public/js/lib/codemirror/addon/hint/show-hint.js
| @@ -1,389 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var HINT_ELEMENT_CLASS = "CodeMirror-hint"; | ||
| - var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; | ||
| - | ||
| - // This is the old interface, kept around for now to stay | ||
| - // backwards-compatible. | ||
| - CodeMirror.showHint = function(cm, getHints, options) { | ||
| - if (!getHints) return cm.showHint(options); | ||
| - if (options && options.async) getHints.async = true; | ||
| - var newOpts = {hint: getHints}; | ||
| - if (options) for (var prop in options) newOpts[prop] = options[prop]; | ||
| - return cm.showHint(newOpts); | ||
| - }; | ||
| - | ||
| - CodeMirror.defineExtension("showHint", function(options) { | ||
| - // We want a single cursor position. | ||
| - if (this.listSelections().length > 1 || this.somethingSelected()) return; | ||
| - | ||
| - if (this.state.completionActive) this.state.completionActive.close(); | ||
| - var completion = this.state.completionActive = new Completion(this, options); | ||
| - var getHints = completion.options.hint; | ||
| - if (!getHints) return; | ||
| - | ||
| - CodeMirror.signal(this, "startCompletion", this); | ||
| - if (getHints.async) | ||
| - getHints(this, function(hints) { completion.showHints(hints); }, completion.options); | ||
| - else | ||
| - return completion.showHints(getHints(this, completion.options)); | ||
| - }); | ||
| - | ||
| - function Completion(cm, options) { | ||
| - this.cm = cm; | ||
| - this.options = this.buildOptions(options); | ||
| - this.widget = this.onClose = null; | ||
| - } | ||
| - | ||
| - Completion.prototype = { | ||
| - close: function() { | ||
| - if (!this.active()) return; | ||
| - this.cm.state.completionActive = null; | ||
| - | ||
| - if (this.widget) this.widget.close(); | ||
| - if (this.onClose) this.onClose(); | ||
| - CodeMirror.signal(this.cm, "endCompletion", this.cm); | ||
| - }, | ||
| - | ||
| - active: function() { | ||
| - return this.cm.state.completionActive == this; | ||
| - }, | ||
| - | ||
| - pick: function(data, i) { | ||
| - var completion = data.list[i]; | ||
| - if (completion.hint) completion.hint(this.cm, data, completion); | ||
| - else this.cm.replaceRange(getText(completion), completion.from || data.from, | ||
| - completion.to || data.to, "complete"); | ||
| - CodeMirror.signal(data, "pick", completion); | ||
| - this.close(); | ||
| - }, | ||
| - | ||
| - showHints: function(data) { | ||
| - if (!data || !data.list.length || !this.active()) return this.close(); | ||
| - | ||
| - if (this.options.completeSingle && data.list.length == 1) | ||
| - this.pick(data, 0); | ||
| - else | ||
| - this.showWidget(data); | ||
| - }, | ||
| - | ||
| - showWidget: function(data) { | ||
| - this.widget = new Widget(this, data); | ||
| - CodeMirror.signal(data, "shown"); | ||
| - | ||
| - var debounce = 0, completion = this, finished; | ||
| - var closeOn = this.options.closeCharacters; | ||
| - var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length; | ||
| - | ||
| - var requestAnimationFrame = window.requestAnimationFrame || function(fn) { | ||
| - return setTimeout(fn, 1000/60); | ||
| - }; | ||
| - var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; | ||
| - | ||
| - function done() { | ||
| - if (finished) return; | ||
| - finished = true; | ||
| - completion.close(); | ||
| - completion.cm.off("cursorActivity", activity); | ||
| - if (data) CodeMirror.signal(data, "close"); | ||
| - } | ||
| - | ||
| - function update() { | ||
| - if (finished) return; | ||
| - CodeMirror.signal(data, "update"); | ||
| - var getHints = completion.options.hint; | ||
| - if (getHints.async) | ||
| - getHints(completion.cm, finishUpdate, completion.options); | ||
| - else | ||
| - finishUpdate(getHints(completion.cm, completion.options)); | ||
| - } | ||
| - function finishUpdate(data_) { | ||
| - data = data_; | ||
| - if (finished) return; | ||
| - if (!data || !data.list.length) return done(); | ||
| - if (completion.widget) completion.widget.close(); | ||
| - completion.widget = new Widget(completion, data); | ||
| - } | ||
| - | ||
| - function clearDebounce() { | ||
| - if (debounce) { | ||
| - cancelAnimationFrame(debounce); | ||
| - debounce = 0; | ||
| - } | ||
| - } | ||
| - | ||
| - function activity() { | ||
| - clearDebounce(); | ||
| - var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line); | ||
| - if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch || | ||
| - pos.ch < startPos.ch || completion.cm.somethingSelected() || | ||
| - (pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) { | ||
| - completion.close(); | ||
| - } else { | ||
| - debounce = requestAnimationFrame(update); | ||
| - if (completion.widget) completion.widget.close(); | ||
| - } | ||
| - } | ||
| - this.cm.on("cursorActivity", activity); | ||
| - this.onClose = done; | ||
| - }, | ||
| - | ||
| - buildOptions: function(options) { | ||
| - var editor = this.cm.options.hintOptions; | ||
| - var out = {}; | ||
| - for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; | ||
| - if (editor) for (var prop in editor) | ||
| - if (editor[prop] !== undefined) out[prop] = editor[prop]; | ||
| - if (options) for (var prop in options) | ||
| - if (options[prop] !== undefined) out[prop] = options[prop]; | ||
| - return out; | ||
| - } | ||
| - }; | ||
| - | ||
| - function getText(completion) { | ||
| - if (typeof completion == "string") return completion; | ||
| - else return completion.text; | ||
| - } | ||
| - | ||
| - function buildKeyMap(completion, handle) { | ||
| - var baseMap = { | ||
| - Up: function() {handle.moveFocus(-1);}, | ||
| - Down: function() {handle.moveFocus(1);}, | ||
| - PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, | ||
| - PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, | ||
| - Home: function() {handle.setFocus(0);}, | ||
| - End: function() {handle.setFocus(handle.length - 1);}, | ||
| - Enter: handle.pick, | ||
| - Tab: handle.pick, | ||
| - Esc: handle.close | ||
| - }; | ||
| - var custom = completion.options.customKeys; | ||
| - var ourMap = custom ? {} : baseMap; | ||
| - function addBinding(key, val) { | ||
| - var bound; | ||
| - if (typeof val != "string") | ||
| - bound = function(cm) { return val(cm, handle); }; | ||
| - // This mechanism is deprecated | ||
| - else if (baseMap.hasOwnProperty(val)) | ||
| - bound = baseMap[val]; | ||
| - else | ||
| - bound = val; | ||
| - ourMap[key] = bound; | ||
| - } | ||
| - if (custom) | ||
| - for (var key in custom) if (custom.hasOwnProperty(key)) | ||
| - addBinding(key, custom[key]); | ||
| - var extra = completion.options.extraKeys; | ||
| - if (extra) | ||
| - for (var key in extra) if (extra.hasOwnProperty(key)) | ||
| - addBinding(key, extra[key]); | ||
| - return ourMap; | ||
| - } | ||
| - | ||
| - function getHintElement(hintsElement, el) { | ||
| - while (el && el != hintsElement) { | ||
| - if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; | ||
| - el = el.parentNode; | ||
| - } | ||
| - } | ||
| - | ||
| - function Widget(completion, data) { | ||
| - this.completion = completion; | ||
| - this.data = data; | ||
| - var widget = this, cm = completion.cm; | ||
| - | ||
| - var hints = this.hints = document.createElement("ul"); | ||
| - hints.className = "CodeMirror-hints"; | ||
| - this.selectedHint = data.selectedHint || 0; | ||
| - | ||
| - var completions = data.list; | ||
| - for (var i = 0; i < completions.length; ++i) { | ||
| - var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; | ||
| - var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); | ||
| - if (cur.className != null) className = cur.className + " " + className; | ||
| - elt.className = className; | ||
| - if (cur.render) cur.render(elt, data, cur); | ||
| - else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); | ||
| - elt.hintId = i; | ||
| - } | ||
| - | ||
| - var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); | ||
| - var left = pos.left, top = pos.bottom, below = true; | ||
| - hints.style.left = left + "px"; | ||
| - hints.style.top = top + "px"; | ||
| - // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. | ||
| - var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); | ||
| - var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); | ||
| - (completion.options.container || document.body).appendChild(hints); | ||
| - var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; | ||
| - if (overlapY > 0) { | ||
| - var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); | ||
| - if (curTop - height > 0) { // Fits above cursor | ||
| - hints.style.top = (top = pos.top - height) + "px"; | ||
| - below = false; | ||
| - } else if (height > winH) { | ||
| - hints.style.height = (winH - 5) + "px"; | ||
| - hints.style.top = (top = pos.bottom - box.top) + "px"; | ||
| - var cursor = cm.getCursor(); | ||
| - if (data.from.ch != cursor.ch) { | ||
| - pos = cm.cursorCoords(cursor); | ||
| - hints.style.left = (left = pos.left) + "px"; | ||
| - box = hints.getBoundingClientRect(); | ||
| - } | ||
| - } | ||
| - } | ||
| - var overlapX = box.right - winW; | ||
| - if (overlapX > 0) { | ||
| - if (box.right - box.left > winW) { | ||
| - hints.style.width = (winW - 5) + "px"; | ||
| - overlapX -= (box.right - box.left) - winW; | ||
| - } | ||
| - hints.style.left = (left = pos.left - overlapX) + "px"; | ||
| - } | ||
| - | ||
| - cm.addKeyMap(this.keyMap = buildKeyMap(completion, { | ||
| - moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, | ||
| - setFocus: function(n) { widget.changeActive(n); }, | ||
| - menuSize: function() { return widget.screenAmount(); }, | ||
| - length: completions.length, | ||
| - close: function() { completion.close(); }, | ||
| - pick: function() { widget.pick(); }, | ||
| - data: data | ||
| - })); | ||
| - | ||
| - if (completion.options.closeOnUnfocus) { | ||
| - var closingOnBlur; | ||
| - cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); | ||
| - cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); | ||
| - } | ||
| - | ||
| - var startScroll = cm.getScrollInfo(); | ||
| - cm.on("scroll", this.onScroll = function() { | ||
| - var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); | ||
| - var newTop = top + startScroll.top - curScroll.top; | ||
| - var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); | ||
| - if (!below) point += hints.offsetHeight; | ||
| - if (point <= editor.top || point >= editor.bottom) return completion.close(); | ||
| - hints.style.top = newTop + "px"; | ||
| - hints.style.left = (left + startScroll.left - curScroll.left) + "px"; | ||
| - }); | ||
| - | ||
| - CodeMirror.on(hints, "dblclick", function(e) { | ||
| - var t = getHintElement(hints, e.target || e.srcElement); | ||
| - if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} | ||
| - }); | ||
| - | ||
| - CodeMirror.on(hints, "click", function(e) { | ||
| - var t = getHintElement(hints, e.target || e.srcElement); | ||
| - if (t && t.hintId != null) { | ||
| - widget.changeActive(t.hintId); | ||
| - if (completion.options.completeOnSingleClick) widget.pick(); | ||
| - } | ||
| - }); | ||
| - | ||
| - CodeMirror.on(hints, "mousedown", function() { | ||
| - setTimeout(function(){cm.focus();}, 20); | ||
| - }); | ||
| - | ||
| - CodeMirror.signal(data, "select", completions[0], hints.firstChild); | ||
| - return true; | ||
| - } | ||
| - | ||
| - Widget.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 cm = this.completion.cm; | ||
| - if (this.completion.options.closeOnUnfocus) { | ||
| - cm.off("blur", this.onBlur); | ||
| - cm.off("focus", this.onFocus); | ||
| - } | ||
| - cm.off("scroll", this.onScroll); | ||
| - }, | ||
| - | ||
| - pick: function() { | ||
| - this.completion.pick(this.data, this.selectedHint); | ||
| - }, | ||
| - | ||
| - changeActive: function(i, avoidWrap) { | ||
| - if (i >= this.data.list.length) | ||
| - i = avoidWrap ? this.data.list.length - 1 : 0; | ||
| - else if (i < 0) | ||
| - i = avoidWrap ? 0 : this.data.list.length - 1; | ||
| - if (this.selectedHint == i) return; | ||
| - var node = this.hints.childNodes[this.selectedHint]; | ||
| - node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); | ||
| - node = this.hints.childNodes[this.selectedHint = i]; | ||
| - node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; | ||
| - if (node.offsetTop < this.hints.scrollTop) | ||
| - this.hints.scrollTop = node.offsetTop - 3; | ||
| - else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) | ||
| - this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; | ||
| - CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); | ||
| - }, | ||
| - | ||
| - screenAmount: function() { | ||
| - return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; | ||
| - } | ||
| - }; | ||
| - | ||
| - CodeMirror.registerHelper("hint", "auto", function(cm, options) { | ||
| - var helpers = cm.getHelpers(cm.getCursor(), "hint"), words; | ||
| - if (helpers.length) { | ||
| - for (var i = 0; i < helpers.length; i++) { | ||
| - var cur = helpers[i](cm, options); | ||
| - if (cur && cur.list.length) return cur; | ||
| - } | ||
| - } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { | ||
| - if (words) return CodeMirror.hint.fromList(cm, {words: words}); | ||
| - } else if (CodeMirror.hint.anyword) { | ||
| - return CodeMirror.hint.anyword(cm, options); | ||
| - } | ||
| - }); | ||
| - | ||
| - CodeMirror.registerHelper("hint", "fromList", function(cm, options) { | ||
| - var cur = cm.getCursor(), token = cm.getTokenAt(cur); | ||
| - var found = []; | ||
| - for (var i = 0; i < options.words.length; i++) { | ||
| - var word = options.words[i]; | ||
| - if (word.slice(0, token.string.length) == token.string) | ||
| - found.push(word); | ||
| - } | ||
| - | ||
| - if (found.length) return { | ||
| - list: found, | ||
| - from: CodeMirror.Pos(cur.line, token.start), | ||
| - to: CodeMirror.Pos(cur.line, token.end) | ||
| - }; | ||
| - }); | ||
| - | ||
| - CodeMirror.commands.autocomplete = CodeMirror.showHint; | ||
| - | ||
| - var defaultOptions = { | ||
| - hint: CodeMirror.hint.auto, | ||
| - completeSingle: true, | ||
| - alignWithWord: true, | ||
| - closeCharacters: /[\s()\[\]{};:>,]/, | ||
| - closeOnUnfocus: true, | ||
| - completeOnSingleClick: false, | ||
| - container: null, | ||
| - customKeys: null, | ||
| - extraKeys: null | ||
| - }; | ||
| - | ||
| - CodeMirror.defineOption("hintOptions", null); | ||
| -}); |
197
public/js/lib/codemirror/addon/hint/sql-hint.js
| @@ -1,197 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("../../mode/sql/sql")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "../../mode/sql/sql"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var tables; | ||
| - var defaultTable; | ||
| - var keywords; | ||
| - var CONS = { | ||
| - QUERY_DIV: ";", | ||
| - ALIAS_KEYWORD: "AS" | ||
| - }; | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function getKeywords(editor) { | ||
| - var mode = editor.doc.modeOption; | ||
| - if (mode === "sql") mode = "text/x-sql"; | ||
| - return CodeMirror.resolveMode(mode).keywords; | ||
| - } | ||
| - | ||
| - function match(string, word) { | ||
| - var len = string.length; | ||
| - var sub = word.substr(0, len); | ||
| - return string.toUpperCase() === sub.toUpperCase(); | ||
| - } | ||
| - | ||
| - function addMatches(result, search, wordlist, formatter) { | ||
| - for (var word in wordlist) { | ||
| - if (!wordlist.hasOwnProperty(word)) continue; | ||
| - if (Array.isArray(wordlist)) { | ||
| - word = wordlist[word]; | ||
| - } | ||
| - if (match(search, word)) { | ||
| - result.push(formatter(word)); | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - function nameCompletion(cur, token, result, editor) { | ||
| - var useBacktick = (token.string.charAt(0) == "`"); | ||
| - var string = token.string.substr(1); | ||
| - var prevToken = editor.getTokenAt(Pos(cur.line, token.start)); | ||
| - if (token.string.charAt(0) == "." || prevToken.string == "."){ | ||
| - //Suggest colunm names | ||
| - if (prevToken.string == ".") { | ||
| - var prevToken = editor.getTokenAt(Pos(cur.line, token.start - 1)); | ||
| - } | ||
| - var table = prevToken.string; | ||
| - //Check if backtick is used in table name. If yes, use it for columns too. | ||
| - var useBacktickTable = false; | ||
| - if (table.match(/`/g)) { | ||
| - useBacktickTable = true; | ||
| - table = table.replace(/`/g, ""); | ||
| - } | ||
| - //Check if table is available. If not, find table by Alias | ||
| - if (!tables.hasOwnProperty(table)) | ||
| - table = findTableByAlias(table, editor); | ||
| - var columns = tables[table]; | ||
| - if (!columns) return; | ||
| - | ||
| - if (useBacktick) { | ||
| - addMatches(result, string, columns, function(w) {return "`" + w + "`";}); | ||
| - } | ||
| - else if(useBacktickTable) { | ||
| - addMatches(result, string, columns, function(w) {return ".`" + w + "`";}); | ||
| - } | ||
| - else { | ||
| - addMatches(result, string, columns, function(w) {return "." + w;}); | ||
| - } | ||
| - } | ||
| - else { | ||
| - //Suggest table names or colums in defaultTable | ||
| - while (token.start && string.charAt(0) == ".") { | ||
| - token = editor.getTokenAt(Pos(cur.line, token.start - 1)); | ||
| - string = token.string + string; | ||
| - } | ||
| - if (useBacktick) { | ||
| - addMatches(result, string, tables, function(w) {return "`" + w + "`";}); | ||
| - addMatches(result, string, defaultTable, function(w) {return "`" + w + "`";}); | ||
| - } | ||
| - else { | ||
| - addMatches(result, string, tables, function(w) {return w;}); | ||
| - addMatches(result, string, defaultTable, function(w) {return w;}); | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - function eachWord(lineText, f) { | ||
| - if (!lineText) return; | ||
| - var excepted = /[,;]/g; | ||
| - var words = lineText.split(" "); | ||
| - for (var i = 0; i < words.length; i++) { | ||
| - f(words[i]?words[i].replace(excepted, '') : ''); | ||
| - } | ||
| - } | ||
| - | ||
| - function convertCurToNumber(cur) { | ||
| - // max characters of a line is 999,999. | ||
| - return cur.line + cur.ch / Math.pow(10, 6); | ||
| - } | ||
| - | ||
| - function convertNumberToCur(num) { | ||
| - return Pos(Math.floor(num), +num.toString().split('.').pop()); | ||
| - } | ||
| - | ||
| - function findTableByAlias(alias, editor) { | ||
| - var doc = editor.doc; | ||
| - var fullQuery = doc.getValue(); | ||
| - var aliasUpperCase = alias.toUpperCase(); | ||
| - var previousWord = ""; | ||
| - var table = ""; | ||
| - var separator = []; | ||
| - var validRange = { | ||
| - start: Pos(0, 0), | ||
| - end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length) | ||
| - }; | ||
| - | ||
| - //add separator | ||
| - var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV); | ||
| - while(indexOfSeparator != -1) { | ||
| - separator.push(doc.posFromIndex(indexOfSeparator)); | ||
| - indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1); | ||
| - } | ||
| - separator.unshift(Pos(0, 0)); | ||
| - separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length)); | ||
| - | ||
| - //find valid range | ||
| - var prevItem = 0; | ||
| - var current = convertCurToNumber(editor.getCursor()); | ||
| - for (var i=0; i< separator.length; i++) { | ||
| - var _v = convertCurToNumber(separator[i]); | ||
| - if (current > prevItem && current <= _v) { | ||
| - validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) }; | ||
| - break; | ||
| - } | ||
| - prevItem = _v; | ||
| - } | ||
| - | ||
| - var query = doc.getRange(validRange.start, validRange.end, false); | ||
| - | ||
| - for (var i = 0; i < query.length; i++) { | ||
| - var lineText = query[i]; | ||
| - eachWord(lineText, function(word) { | ||
| - var wordUpperCase = word.toUpperCase(); | ||
| - if (wordUpperCase === aliasUpperCase && tables.hasOwnProperty(previousWord)) { | ||
| - table = previousWord; | ||
| - } | ||
| - if (wordUpperCase !== CONS.ALIAS_KEYWORD) { | ||
| - previousWord = word; | ||
| - } | ||
| - }); | ||
| - if (table) break; | ||
| - } | ||
| - return table; | ||
| - } | ||
| - | ||
| - CodeMirror.registerHelper("hint", "sql", function(editor, options) { | ||
| - tables = (options && options.tables) || {}; | ||
| - var defaultTableName = options && options.defaultTable; | ||
| - defaultTable = (defaultTableName && tables[defaultTableName] || []); | ||
| - keywords = keywords || getKeywords(editor); | ||
| - | ||
| - var cur = editor.getCursor(); | ||
| - var result = []; | ||
| - var token = editor.getTokenAt(cur), start, end, search; | ||
| - if (token.end > cur.ch) { | ||
| - token.end = cur.ch; | ||
| - token.string = token.string.slice(0, cur.ch - token.start); | ||
| - } | ||
| - | ||
| - if (token.string.match(/^[.`\w@]\w*$/)) { | ||
| - search = token.string; | ||
| - start = token.start; | ||
| - end = token.end; | ||
| - } else { | ||
| - start = end = cur.ch; | ||
| - search = ""; | ||
| - } | ||
| - if (search.charAt(0) == "." || search.charAt(0) == "`") { | ||
| - nameCompletion(cur, token, result, editor); | ||
| - } else { | ||
| - addMatches(result, search, tables, function(w) {return w;}); | ||
| - addMatches(result, search, defaultTable, function(w) {return w;}); | ||
| - addMatches(result, search, keywords, function(w) {return w.toUpperCase();}); | ||
| - } | ||
| - | ||
| - return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)}; | ||
| - }); | ||
| -}); |
110
public/js/lib/codemirror/addon/hint/xml-hint.js
| @@ -1,110 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function getHints(cm, options) { | ||
| - var tags = options && options.schemaInfo; | ||
| - var quote = (options && options.quoteChar) || '"'; | ||
| - if (!tags) return; | ||
| - var cur = cm.getCursor(), token = cm.getTokenAt(cur); | ||
| - if (token.end > cur.ch) { | ||
| - token.end = cur.ch; | ||
| - token.string = token.string.slice(0, cur.ch - token.start); | ||
| - } | ||
| - var inner = CodeMirror.innerMode(cm.getMode(), token.state); | ||
| - if (inner.mode.name != "xml") return; | ||
| - var result = [], replaceToken = false, prefix; | ||
| - var tag = /\btag\b/.test(token.type) && !/>$/.test(token.string); | ||
| - var tagName = tag && /^\w/.test(token.string), tagStart; | ||
| - | ||
| - if (tagName) { | ||
| - var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start); | ||
| - var tagType = /<\/$/.test(before) ? "close" : /<$/.test(before) ? "open" : null; | ||
| - if (tagType) tagStart = token.start - (tagType == "close" ? 2 : 1); | ||
| - } else if (tag && token.string == "<") { | ||
| - tagType = "open"; | ||
| - } else if (tag && token.string == "</") { | ||
| - tagType = "close"; | ||
| - } | ||
| - | ||
| - if (!tag && !inner.state.tagName || tagType) { | ||
| - if (tagName) | ||
| - prefix = token.string; | ||
| - replaceToken = tagType; | ||
| - var cx = inner.state.context, curTag = cx && tags[cx.tagName]; | ||
| - var childList = cx ? curTag && curTag.children : tags["!top"]; | ||
| - if (childList && tagType != "close") { | ||
| - for (var i = 0; i < childList.length; ++i) if (!prefix || childList[i].lastIndexOf(prefix, 0) == 0) | ||
| - result.push("<" + childList[i]); | ||
| - } else if (tagType != "close") { | ||
| - for (var name in tags) | ||
| - if (tags.hasOwnProperty(name) && name != "!top" && name != "!attrs" && (!prefix || name.lastIndexOf(prefix, 0) == 0)) | ||
| - result.push("<" + name); | ||
| - } | ||
| - if (cx && (!prefix || tagType == "close" && cx.tagName.lastIndexOf(prefix, 0) == 0)) | ||
| - result.push("</" + cx.tagName + ">"); | ||
| - } else { | ||
| - // Attribute completion | ||
| - var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs; | ||
| - var globalAttrs = tags["!attrs"]; | ||
| - if (!attrs && !globalAttrs) return; | ||
| - if (!attrs) { | ||
| - attrs = globalAttrs; | ||
| - } else if (globalAttrs) { // Combine tag-local and global attributes | ||
| - var set = {}; | ||
| - for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm]; | ||
| - for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm]; | ||
| - attrs = set; | ||
| - } | ||
| - if (token.type == "string" || token.string == "=") { // A value | ||
| - var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)), | ||
| - Pos(cur.line, token.type == "string" ? token.start : token.end)); | ||
| - var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues; | ||
| - if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return; | ||
| - if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget | ||
| - if (token.type == "string") { | ||
| - prefix = token.string; | ||
| - var n = 0; | ||
| - if (/['"]/.test(token.string.charAt(0))) { | ||
| - quote = token.string.charAt(0); | ||
| - prefix = token.string.slice(1); | ||
| - n++; | ||
| - } | ||
| - var len = token.string.length; | ||
| - if (/['"]/.test(token.string.charAt(len - 1))) { | ||
| - quote = token.string.charAt(len - 1); | ||
| - prefix = token.string.substr(n, len - 2); | ||
| - } | ||
| - replaceToken = true; | ||
| - } | ||
| - for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].lastIndexOf(prefix, 0) == 0) | ||
| - result.push(quote + atValues[i] + quote); | ||
| - } else { // An attribute name | ||
| - if (token.type == "attribute") { | ||
| - prefix = token.string; | ||
| - replaceToken = true; | ||
| - } | ||
| - for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.lastIndexOf(prefix, 0) == 0)) | ||
| - result.push(attr); | ||
| - } | ||
| - } | ||
| - return { | ||
| - list: result, | ||
| - from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur, | ||
| - to: replaceToken ? Pos(cur.line, token.end) : cur | ||
| - }; | ||
| - } | ||
| - | ||
| - CodeMirror.registerHelper("hint", "xml", getHints); | ||
| -}); |
41
public/js/lib/codemirror/addon/lint/coffeescript-lint.js
| @@ -1,41 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js | ||
| - | ||
| -// declare global: coffeelint | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("lint", "coffeescript", function(text) { | ||
| - var found = []; | ||
| - var parseError = function(err) { | ||
| - var loc = err.lineNumber; | ||
| - found.push({from: CodeMirror.Pos(loc-1, 0), | ||
| - to: CodeMirror.Pos(loc, 0), | ||
| - severity: err.level, | ||
| - message: err.message}); | ||
| - }; | ||
| - try { | ||
| - var res = coffeelint.lint(text); | ||
| - for(var i = 0; i < res.length; i++) { | ||
| - parseError(res[i]); | ||
| - } | ||
| - } catch(e) { | ||
| - found.push({from: CodeMirror.Pos(e.location.first_line, 0), | ||
| - to: CodeMirror.Pos(e.location.last_line, e.location.last_column), | ||
| - severity: 'error', | ||
| - message: e.message}); | ||
| - } | ||
| - return found; | ||
| -}); | ||
| - | ||
| -}); |
35
public/js/lib/codemirror/addon/lint/css-lint.js
| @@ -1,35 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Depends on csslint.js from https://github.com/stubbornella/csslint | ||
| - | ||
| -// declare global: CSSLint | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("lint", "css", function(text) { | ||
| - var found = []; | ||
| - if (!window.CSSLint) return found; | ||
| - var results = CSSLint.verify(text), messages = results.messages, message = null; | ||
| - for ( var i = 0; i < messages.length; i++) { | ||
| - message = messages[i]; | ||
| - var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; | ||
| - found.push({ | ||
| - from: CodeMirror.Pos(startLine, startCol), | ||
| - to: CodeMirror.Pos(endLine, endCol), | ||
| - message: message.message, | ||
| - severity : message.type | ||
| - }); | ||
| - } | ||
| - return found; | ||
| -}); | ||
| - | ||
| -}); |
136
public/js/lib/codemirror/addon/lint/javascript-lint.js
| @@ -1,136 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - // declare global: JSHINT | ||
| - | ||
| - var bogus = [ "Dangerous comment" ]; | ||
| - | ||
| - var warnings = [ [ "Expected '{'", | ||
| - "Statement body should be inside '{ }' braces." ] ]; | ||
| - | ||
| - var errors = [ "Missing semicolon", "Extra comma", "Missing property name", | ||
| - "Unmatched ", " and instead saw", " is not defined", | ||
| - "Unclosed string", "Stopping, unable to continue" ]; | ||
| - | ||
| - function validator(text, options) { | ||
| - if (!window.JSHINT) return []; | ||
| - JSHINT(text, options); | ||
| - var errors = JSHINT.data().errors, result = []; | ||
| - if (errors) parseErrors(errors, result); | ||
| - return result; | ||
| - } | ||
| - | ||
| - CodeMirror.registerHelper("lint", "javascript", validator); | ||
| - | ||
| - function cleanup(error) { | ||
| - // All problems are warnings by default | ||
| - fixWith(error, warnings, "warning", true); | ||
| - fixWith(error, errors, "error"); | ||
| - | ||
| - return isBogus(error) ? null : error; | ||
| - } | ||
| - | ||
| - function fixWith(error, fixes, severity, force) { | ||
| - var description, fix, find, replace, found; | ||
| - | ||
| - description = error.description; | ||
| - | ||
| - for ( var i = 0; i < fixes.length; i++) { | ||
| - fix = fixes[i]; | ||
| - find = (typeof fix === "string" ? fix : fix[0]); | ||
| - replace = (typeof fix === "string" ? null : fix[1]); | ||
| - found = description.indexOf(find) !== -1; | ||
| - | ||
| - if (force || found) { | ||
| - error.severity = severity; | ||
| - } | ||
| - if (found && replace) { | ||
| - error.description = replace; | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - function isBogus(error) { | ||
| - var description = error.description; | ||
| - for ( var i = 0; i < bogus.length; i++) { | ||
| - if (description.indexOf(bogus[i]) !== -1) { | ||
| - return true; | ||
| - } | ||
| - } | ||
| - return false; | ||
| - } | ||
| - | ||
| - function parseErrors(errors, output) { | ||
| - for ( var i = 0; i < errors.length; i++) { | ||
| - var error = errors[i]; | ||
| - if (error) { | ||
| - var linetabpositions, index; | ||
| - | ||
| - linetabpositions = []; | ||
| - | ||
| - // This next block is to fix a problem in jshint. Jshint | ||
| - // replaces | ||
| - // all tabs with spaces then performs some checks. The error | ||
| - // positions (character/space) are then reported incorrectly, | ||
| - // not taking the replacement step into account. Here we look | ||
| - // at the evidence line and try to adjust the character position | ||
| - // to the correct value. | ||
| - if (error.evidence) { | ||
| - // Tab positions are computed once per line and cached | ||
| - var tabpositions = linetabpositions[error.line]; | ||
| - if (!tabpositions) { | ||
| - var evidence = error.evidence; | ||
| - tabpositions = []; | ||
| - // ugggh phantomjs does not like this | ||
| - // forEachChar(evidence, function(item, index) { | ||
| - Array.prototype.forEach.call(evidence, function(item, | ||
| - index) { | ||
| - if (item === '\t') { | ||
| - // First col is 1 (not 0) to match error | ||
| - // positions | ||
| - tabpositions.push(index + 1); | ||
| - } | ||
| - }); | ||
| - linetabpositions[error.line] = tabpositions; | ||
| - } | ||
| - if (tabpositions.length > 0) { | ||
| - var pos = error.character; | ||
| - tabpositions.forEach(function(tabposition) { | ||
| - if (pos > tabposition) pos -= 1; | ||
| - }); | ||
| - error.character = pos; | ||
| - } | ||
| - } | ||
| - | ||
| - var start = error.character - 1, end = start + 1; | ||
| - if (error.evidence) { | ||
| - index = error.evidence.substring(start).search(/.\b/); | ||
| - if (index > -1) { | ||
| - end += index; | ||
| - } | ||
| - } | ||
| - | ||
| - // Convert to format expected by validation service | ||
| - error.description = error.reason;// + "(jshint)"; | ||
| - error.start = error.character; | ||
| - error.end = end; | ||
| - error = cleanup(error); | ||
| - | ||
| - if (error) | ||
| - output.push({message: error.description, | ||
| - severity: error.severity, | ||
| - from: CodeMirror.Pos(error.line - 1, start), | ||
| - to: CodeMirror.Pos(error.line - 1, end)}); | ||
| - } | ||
| - } | ||
| - } | ||
| -}); |
31
public/js/lib/codemirror/addon/lint/json-lint.js
| @@ -1,31 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Depends on jsonlint.js from https://github.com/zaach/jsonlint | ||
| - | ||
| -// declare global: jsonlint | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.registerHelper("lint", "json", function(text) { | ||
| - var found = []; | ||
| - jsonlint.parseError = function(str, hash) { | ||
| - var loc = hash.loc; | ||
| - found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), | ||
| - to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), | ||
| - message: str}); | ||
| - }; | ||
| - try { jsonlint.parse(text); } | ||
| - catch(e) {} | ||
| - return found; | ||
| -}); | ||
| - | ||
| -}); |
73
public/js/lib/codemirror/addon/lint/lint.css
| @@ -1,73 +0,0 @@ | ||
| -/* The lint marker gutter */ | ||
| -.CodeMirror-lint-markers { | ||
| - width: 16px; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-tooltip { | ||
| - background-color: infobackground; | ||
| - border: 1px solid black; | ||
| - border-radius: 4px 4px 4px 4px; | ||
| - color: infotext; | ||
| - font-family: monospace; | ||
| - font-size: 10pt; | ||
| - overflow: hidden; | ||
| - padding: 2px 5px; | ||
| - position: fixed; | ||
| - white-space: pre; | ||
| - white-space: pre-wrap; | ||
| - z-index: 100; | ||
| - max-width: 600px; | ||
| - opacity: 0; | ||
| - transition: opacity .4s; | ||
| - -moz-transition: opacity .4s; | ||
| - -webkit-transition: opacity .4s; | ||
| - -o-transition: opacity .4s; | ||
| - -ms-transition: opacity .4s; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { | ||
| - background-position: left bottom; | ||
| - background-repeat: repeat-x; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-mark-error { | ||
| - background-image: | ||
| - url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==") | ||
| - ; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-mark-warning { | ||
| - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { | ||
| - background-position: center center; | ||
| - background-repeat: no-repeat; | ||
| - cursor: pointer; | ||
| - display: inline-block; | ||
| - height: 16px; | ||
| - width: 16px; | ||
| - vertical-align: middle; | ||
| - position: relative; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { | ||
| - padding-left: 18px; | ||
| - background-position: top left; | ||
| - background-repeat: no-repeat; | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { | ||
| - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { | ||
| - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); | ||
| -} | ||
| - | ||
| -.CodeMirror-lint-marker-multiple { | ||
| - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); | ||
| - background-repeat: no-repeat; | ||
| - background-position: right bottom; | ||
| - width: 100%; height: 100%; | ||
| -} |
204
public/js/lib/codemirror/addon/lint/lint.js
| @@ -1,204 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - var GUTTER_ID = "CodeMirror-lint-markers"; | ||
| - | ||
| - function showTooltip(e, content) { | ||
| - var tt = document.createElement("div"); | ||
| - tt.className = "CodeMirror-lint-tooltip"; | ||
| - tt.appendChild(content.cloneNode(true)); | ||
| - document.body.appendChild(tt); | ||
| - | ||
| - function position(e) { | ||
| - if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); | ||
| - tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; | ||
| - tt.style.left = (e.clientX + 5) + "px"; | ||
| - } | ||
| - CodeMirror.on(document, "mousemove", position); | ||
| - position(e); | ||
| - if (tt.style.opacity != null) tt.style.opacity = 1; | ||
| - return tt; | ||
| - } | ||
| - function rm(elt) { | ||
| - if (elt.parentNode) elt.parentNode.removeChild(elt); | ||
| - } | ||
| - function hideTooltip(tt) { | ||
| - if (!tt.parentNode) return; | ||
| - if (tt.style.opacity == null) rm(tt); | ||
| - tt.style.opacity = 0; | ||
| - setTimeout(function() { rm(tt); }, 600); | ||
| - } | ||
| - | ||
| - function showTooltipFor(e, content, node) { | ||
| - var tooltip = showTooltip(e, content); | ||
| - function hide() { | ||
| - CodeMirror.off(node, "mouseout", hide); | ||
| - if (tooltip) { hideTooltip(tooltip); tooltip = null; } | ||
| - } | ||
| - var poll = setInterval(function() { | ||
| - if (tooltip) for (var n = node;; n = n.parentNode) { | ||
| - if (n == document.body) return; | ||
| - if (!n) { hide(); break; } | ||
| - } | ||
| - if (!tooltip) return clearInterval(poll); | ||
| - }, 400); | ||
| - CodeMirror.on(node, "mouseout", hide); | ||
| - } | ||
| - | ||
| - function LintState(cm, options, hasGutter) { | ||
| - this.marked = []; | ||
| - this.options = options; | ||
| - this.timeout = null; | ||
| - this.hasGutter = hasGutter; | ||
| - this.onMouseOver = function(e) { onMouseOver(cm, e); }; | ||
| - } | ||
| - | ||
| - function parseOptions(cm, options) { | ||
| - if (options instanceof Function) return {getAnnotations: options}; | ||
| - if (!options || options === true) options = {}; | ||
| - if (!options.getAnnotations) options.getAnnotations = cm.getHelper(CodeMirror.Pos(0, 0), "lint"); | ||
| - if (!options.getAnnotations) throw new Error("Required option 'getAnnotations' missing (lint addon)"); | ||
| - return options; | ||
| - } | ||
| - | ||
| - function clearMarks(cm) { | ||
| - var state = cm.state.lint; | ||
| - if (state.hasGutter) cm.clearGutter(GUTTER_ID); | ||
| - for (var i = 0; i < state.marked.length; ++i) | ||
| - state.marked[i].clear(); | ||
| - state.marked.length = 0; | ||
| - } | ||
| - | ||
| - function makeMarker(labels, severity, multiple, tooltips) { | ||
| - var marker = document.createElement("div"), inner = marker; | ||
| - marker.className = "CodeMirror-lint-marker-" + severity; | ||
| - if (multiple) { | ||
| - inner = marker.appendChild(document.createElement("div")); | ||
| - inner.className = "CodeMirror-lint-marker-multiple"; | ||
| - } | ||
| - | ||
| - if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) { | ||
| - showTooltipFor(e, labels, inner); | ||
| - }); | ||
| - | ||
| - return marker; | ||
| - } | ||
| - | ||
| - function getMaxSeverity(a, b) { | ||
| - if (a == "error") return a; | ||
| - else return b; | ||
| - } | ||
| - | ||
| - function groupByLine(annotations) { | ||
| - var lines = []; | ||
| - for (var i = 0; i < annotations.length; ++i) { | ||
| - var ann = annotations[i], line = ann.from.line; | ||
| - (lines[line] || (lines[line] = [])).push(ann); | ||
| - } | ||
| - return lines; | ||
| - } | ||
| - | ||
| - function annotationTooltip(ann) { | ||
| - var severity = ann.severity; | ||
| - if (!severity) severity = "error"; | ||
| - var tip = document.createElement("div"); | ||
| - tip.className = "CodeMirror-lint-message-" + severity; | ||
| - tip.appendChild(document.createTextNode(ann.message)); | ||
| - return tip; | ||
| - } | ||
| - | ||
| - function startLinting(cm) { | ||
| - var state = cm.state.lint, options = state.options; | ||
| - var passOptions = options.options || options; // Support deprecated passing of `options` property in options | ||
| - if (options.async) | ||
| - options.getAnnotations(cm.getValue(), updateLinting, passOptions, cm); | ||
| - else | ||
| - updateLinting(cm, options.getAnnotations(cm.getValue(), passOptions, cm)); | ||
| - } | ||
| - | ||
| - function updateLinting(cm, annotationsNotSorted) { | ||
| - clearMarks(cm); | ||
| - var state = cm.state.lint, options = state.options; | ||
| - | ||
| - var annotations = groupByLine(annotationsNotSorted); | ||
| - | ||
| - for (var line = 0; line < annotations.length; ++line) { | ||
| - var anns = annotations[line]; | ||
| - if (!anns) continue; | ||
| - | ||
| - var maxSeverity = null; | ||
| - var tipLabel = state.hasGutter && document.createDocumentFragment(); | ||
| - | ||
| - for (var i = 0; i < anns.length; ++i) { | ||
| - var ann = anns[i]; | ||
| - var severity = ann.severity; | ||
| - if (!severity) severity = "error"; | ||
| - maxSeverity = getMaxSeverity(maxSeverity, severity); | ||
| - | ||
| - if (options.formatAnnotation) ann = options.formatAnnotation(ann); | ||
| - if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); | ||
| - | ||
| - if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { | ||
| - className: "CodeMirror-lint-mark-" + severity, | ||
| - __annotation: ann | ||
| - })); | ||
| - } | ||
| - | ||
| - if (state.hasGutter) | ||
| - cm.setGutterMarker(line, GUTTER_ID, makeMarker(tipLabel, maxSeverity, anns.length > 1, | ||
| - state.options.tooltips)); | ||
| - } | ||
| - if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); | ||
| - } | ||
| - | ||
| - function onChange(cm) { | ||
| - var state = cm.state.lint; | ||
| - clearTimeout(state.timeout); | ||
| - state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500); | ||
| - } | ||
| - | ||
| - function popupSpanTooltip(ann, e) { | ||
| - var target = e.target || e.srcElement; | ||
| - showTooltipFor(e, annotationTooltip(ann), target); | ||
| - } | ||
| - | ||
| - function onMouseOver(cm, e) { | ||
| - var target = e.target || e.srcElement; | ||
| - if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; | ||
| - var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; | ||
| - var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); | ||
| - for (var i = 0; i < spans.length; ++i) { | ||
| - var ann = spans[i].__annotation; | ||
| - if (ann) return popupSpanTooltip(ann, e); | ||
| - } | ||
| - } | ||
| - | ||
| - CodeMirror.defineOption("lint", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - clearMarks(cm); | ||
| - cm.off("change", onChange); | ||
| - CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); | ||
| - delete cm.state.lint; | ||
| - } | ||
| - | ||
| - if (val) { | ||
| - var gutters = cm.getOption("gutters"), hasLintGutter = false; | ||
| - for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; | ||
| - var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter); | ||
| - cm.on("change", onChange); | ||
| - if (state.options.tooltips != false) | ||
| - CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); | ||
| - | ||
| - startLinting(cm); | ||
| - } | ||
| - }); | ||
| -}); |
28
public/js/lib/codemirror/addon/lint/yaml-lint.js
| @@ -1,28 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -// Depends on js-yaml.js from https://github.com/nodeca/js-yaml | ||
| - | ||
| -// declare global: jsyaml | ||
| - | ||
| -CodeMirror.registerHelper("lint", "yaml", function(text) { | ||
| - var found = []; | ||
| - try { jsyaml.load(text); } | ||
| - catch(e) { | ||
| - var loc = e.mark; | ||
| - found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); | ||
| - } | ||
| - return found; | ||
| -}); | ||
| - | ||
| -}); |
112
public/js/lib/codemirror/addon/merge/merge.css
| @@ -1,112 +0,0 @@ | ||
| -.CodeMirror-merge { | ||
| - position: relative; | ||
| - border: 1px solid #ddd; | ||
| - white-space: pre; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge, .CodeMirror-merge .CodeMirror { | ||
| - height: 350px; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; } | ||
| -.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; } | ||
| -.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; } | ||
| -.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; } | ||
| - | ||
| -.CodeMirror-merge-pane { | ||
| - display: inline-block; | ||
| - white-space: normal; | ||
| - vertical-align: top; | ||
| -} | ||
| -.CodeMirror-merge-pane-rightmost { | ||
| - position: absolute; | ||
| - right: 0px; | ||
| - z-index: 1; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-gap { | ||
| - z-index: 2; | ||
| - display: inline-block; | ||
| - height: 100%; | ||
| - -moz-box-sizing: border-box; | ||
| - box-sizing: border-box; | ||
| - overflow: hidden; | ||
| - border-left: 1px solid #ddd; | ||
| - border-right: 1px solid #ddd; | ||
| - position: relative; | ||
| - background: #f8f8f8; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-scrolllock-wrap { | ||
| - position: absolute; | ||
| - bottom: 0; left: 50%; | ||
| -} | ||
| -.CodeMirror-merge-scrolllock { | ||
| - position: relative; | ||
| - left: -50%; | ||
| - cursor: pointer; | ||
| - color: #555; | ||
| - line-height: 1; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right { | ||
| - position: absolute; | ||
| - left: 0; top: 0; | ||
| - right: 0; bottom: 0; | ||
| - line-height: 1; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-copy { | ||
| - position: absolute; | ||
| - cursor: pointer; | ||
| - color: #44c; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-copy-reverse { | ||
| - position: absolute; | ||
| - cursor: pointer; | ||
| - color: #44c; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; } | ||
| -.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; } | ||
| - | ||
| -.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted { | ||
| - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==); | ||
| - background-position: bottom left; | ||
| - background-repeat: repeat-x; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted { | ||
| - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==); | ||
| - background-position: bottom left; | ||
| - background-repeat: repeat-x; | ||
| -} | ||
| - | ||
| -.CodeMirror-merge-r-chunk { background: #ffffe0; } | ||
| -.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; } | ||
| -.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; } | ||
| -.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; } | ||
| - | ||
| -.CodeMirror-merge-l-chunk { background: #eef; } | ||
| -.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; } | ||
| -.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; } | ||
| -.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; } | ||
| - | ||
| -.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; } | ||
| -.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; } | ||
| -.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; } | ||
| - | ||
| -.CodeMirror-merge-collapsed-widget:before { | ||
| - content: "(...)"; | ||
| -} | ||
| -.CodeMirror-merge-collapsed-widget { | ||
| - cursor: pointer; | ||
| - color: #88b; | ||
| - background: #eef; | ||
| - border: 1px solid #ddf; | ||
| - font-size: 90%; | ||
| - padding: 0 3px; | ||
| - border-radius: 4px; | ||
| -} | ||
| -.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; } |
643
public/js/lib/codemirror/addon/merge/merge.js
| @@ -1,643 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("diff_match_patch")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "diff_match_patch"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror, diff_match_patch); | ||
| -})(function(CodeMirror, diff_match_patch) { | ||
| - "use strict"; | ||
| - var Pos = CodeMirror.Pos; | ||
| - var svgNS = "http://www.w3.org/2000/svg"; | ||
| - | ||
| - function DiffView(mv, type) { | ||
| - this.mv = mv; | ||
| - this.type = type; | ||
| - this.classes = type == "left" | ||
| - ? {chunk: "CodeMirror-merge-l-chunk", | ||
| - start: "CodeMirror-merge-l-chunk-start", | ||
| - end: "CodeMirror-merge-l-chunk-end", | ||
| - insert: "CodeMirror-merge-l-inserted", | ||
| - del: "CodeMirror-merge-l-deleted", | ||
| - connect: "CodeMirror-merge-l-connect"} | ||
| - : {chunk: "CodeMirror-merge-r-chunk", | ||
| - start: "CodeMirror-merge-r-chunk-start", | ||
| - end: "CodeMirror-merge-r-chunk-end", | ||
| - insert: "CodeMirror-merge-r-inserted", | ||
| - del: "CodeMirror-merge-r-deleted", | ||
| - connect: "CodeMirror-merge-r-connect"}; | ||
| - if (mv.options.connect == "align") | ||
| - this.aligners = []; | ||
| - } | ||
| - | ||
| - DiffView.prototype = { | ||
| - constructor: DiffView, | ||
| - init: function(pane, orig, options) { | ||
| - this.edit = this.mv.edit; | ||
| - this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); | ||
| - | ||
| - this.diff = getDiff(asString(orig), asString(options.value)); | ||
| - this.diffOutOfDate = false; | ||
| - | ||
| - this.showDifferences = options.showDifferences !== false; | ||
| - this.forceUpdate = registerUpdate(this); | ||
| - setScrollLock(this, true, false); | ||
| - registerScroll(this); | ||
| - }, | ||
| - setShowDifferences: function(val) { | ||
| - val = val !== false; | ||
| - if (val != this.showDifferences) { | ||
| - this.showDifferences = val; | ||
| - this.forceUpdate("full"); | ||
| - } | ||
| - } | ||
| - }; | ||
| - | ||
| - function ensureDiff(dv) { | ||
| - if (dv.diffOutOfDate) { | ||
| - dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue()); | ||
| - dv.diffOutOfDate = false; | ||
| - CodeMirror.signal(dv.edit, "updateDiff", dv.diff); | ||
| - } | ||
| - } | ||
| - | ||
| - function registerUpdate(dv) { | ||
| - var edit = {from: 0, to: 0, marked: []}; | ||
| - var orig = {from: 0, to: 0, marked: []}; | ||
| - var debounceChange; | ||
| - function update(mode) { | ||
| - if (mode == "full") { | ||
| - if (dv.svg) clear(dv.svg); | ||
| - if (dv.copyButtons) clear(dv.copyButtons); | ||
| - clearMarks(dv.edit, edit.marked, dv.classes); | ||
| - clearMarks(dv.orig, orig.marked, dv.classes); | ||
| - edit.from = edit.to = orig.from = orig.to = 0; | ||
| - } | ||
| - ensureDiff(dv); | ||
| - if (dv.showDifferences) { | ||
| - updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes); | ||
| - updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes); | ||
| - } | ||
| - makeConnections(dv); | ||
| - } | ||
| - function set(slow) { | ||
| - clearTimeout(debounceChange); | ||
| - debounceChange = setTimeout(update, slow == true ? 250 : 100); | ||
| - } | ||
| - function change() { | ||
| - if (!dv.diffOutOfDate) { | ||
| - dv.diffOutOfDate = true; | ||
| - edit.from = edit.to = orig.from = orig.to = 0; | ||
| - } | ||
| - set(true); | ||
| - } | ||
| - dv.edit.on("change", change); | ||
| - dv.orig.on("change", change); | ||
| - dv.edit.on("markerAdded", set); | ||
| - dv.edit.on("markerCleared", set); | ||
| - dv.orig.on("markerAdded", set); | ||
| - dv.orig.on("markerCleared", set); | ||
| - dv.edit.on("viewportChange", set); | ||
| - dv.orig.on("viewportChange", set); | ||
| - update(); | ||
| - return update; | ||
| - } | ||
| - | ||
| - function registerScroll(dv) { | ||
| - dv.edit.on("scroll", function() { | ||
| - syncScroll(dv, DIFF_INSERT) && makeConnections(dv); | ||
| - }); | ||
| - dv.orig.on("scroll", function() { | ||
| - syncScroll(dv, DIFF_DELETE) && makeConnections(dv); | ||
| - }); | ||
| - } | ||
| - | ||
| - function syncScroll(dv, type) { | ||
| - // Change handler will do a refresh after a timeout when diff is out of date | ||
| - if (dv.diffOutOfDate) return false; | ||
| - if (!dv.lockScroll) return true; | ||
| - var editor, other, now = +new Date; | ||
| - if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; } | ||
| - else { editor = dv.orig; other = dv.edit; } | ||
| - // Don't take action if the position of this editor was recently set | ||
| - // (to prevent feedback loops) | ||
| - if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false; | ||
| - | ||
| - var sInfo = editor.getScrollInfo(); | ||
| - if (dv.mv.options.connect == "align") { | ||
| - targetPos = sInfo.top; | ||
| - } else { | ||
| - var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen; | ||
| - var mid = editor.lineAtHeight(midY, "local"); | ||
| - var around = chunkBoundariesAround(dv.diff, mid, type == DIFF_INSERT); | ||
| - var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig); | ||
| - var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit); | ||
| - var ratio = (midY - off.top) / (off.bot - off.top); | ||
| - var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top); | ||
| - | ||
| - var botDist, mix; | ||
| - // Some careful tweaking to make sure no space is left out of view | ||
| - // when scrolling to top or bottom. | ||
| - if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) { | ||
| - targetPos = targetPos * mix + sInfo.top * (1 - mix); | ||
| - } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) { | ||
| - var otherInfo = other.getScrollInfo(); | ||
| - var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos; | ||
| - if (botDistOther > botDist && (mix = botDist / halfScreen) < 1) | ||
| - targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix); | ||
| - } | ||
| - } | ||
| - | ||
| - other.scrollTo(sInfo.left, targetPos); | ||
| - other.state.scrollSetAt = now; | ||
| - other.state.scrollSetBy = dv; | ||
| - return true; | ||
| - } | ||
| - | ||
| - function getOffsets(editor, around) { | ||
| - var bot = around.after; | ||
| - if (bot == null) bot = editor.lastLine() + 1; | ||
| - return {top: editor.heightAtLine(around.before || 0, "local"), | ||
| - bot: editor.heightAtLine(bot, "local")}; | ||
| - } | ||
| - | ||
| - function setScrollLock(dv, val, action) { | ||
| - dv.lockScroll = val; | ||
| - if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv); | ||
| - dv.lockButton.innerHTML = val ? "\u21db\u21da" : "\u21db \u21da"; | ||
| - } | ||
| - | ||
| - // Updating the marks for editor content | ||
| - | ||
| - function clearMarks(editor, arr, classes) { | ||
| - for (var i = 0; i < arr.length; ++i) { | ||
| - var mark = arr[i]; | ||
| - if (mark instanceof CodeMirror.TextMarker) { | ||
| - mark.clear(); | ||
| - } else if (mark.parent) { | ||
| - editor.removeLineClass(mark, "background", classes.chunk); | ||
| - editor.removeLineClass(mark, "background", classes.start); | ||
| - editor.removeLineClass(mark, "background", classes.end); | ||
| - } | ||
| - } | ||
| - arr.length = 0; | ||
| - } | ||
| - | ||
| - // FIXME maybe add a margin around viewport to prevent too many updates | ||
| - function updateMarks(editor, diff, state, type, classes) { | ||
| - var vp = editor.getViewport(); | ||
| - editor.operation(function() { | ||
| - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { | ||
| - clearMarks(editor, state.marked, classes); | ||
| - markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); | ||
| - state.from = vp.from; state.to = vp.to; | ||
| - } else { | ||
| - if (vp.from < state.from) { | ||
| - markChanges(editor, diff, type, state.marked, vp.from, state.from, classes); | ||
| - state.from = vp.from; | ||
| - } | ||
| - if (vp.to > state.to) { | ||
| - markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); | ||
| - state.to = vp.to; | ||
| - } | ||
| - } | ||
| - }); | ||
| - } | ||
| - | ||
| - function markChanges(editor, diff, type, marks, from, to, classes) { | ||
| - var pos = Pos(0, 0); | ||
| - var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); | ||
| - var cls = type == DIFF_DELETE ? classes.del : classes.insert; | ||
| - function markChunk(start, end) { | ||
| - var bfrom = Math.max(from, start), bto = Math.min(to, end); | ||
| - for (var i = bfrom; i < bto; ++i) { | ||
| - var line = editor.addLineClass(i, "background", classes.chunk); | ||
| - if (i == start) editor.addLineClass(line, "background", classes.start); | ||
| - if (i == end - 1) editor.addLineClass(line, "background", classes.end); | ||
| - marks.push(line); | ||
| - } | ||
| - // When the chunk is empty, make sure a horizontal line shows up | ||
| - if (start == end && bfrom == end && bto == end) { | ||
| - if (bfrom) | ||
| - marks.push(editor.addLineClass(bfrom - 1, "background", classes.end)); | ||
| - else | ||
| - marks.push(editor.addLineClass(bfrom, "background", classes.start)); | ||
| - } | ||
| - } | ||
| - | ||
| - var chunkStart = 0; | ||
| - for (var i = 0; i < diff.length; ++i) { | ||
| - var part = diff[i], tp = part[0], str = part[1]; | ||
| - if (tp == DIFF_EQUAL) { | ||
| - var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); | ||
| - moveOver(pos, str); | ||
| - var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); | ||
| - if (cleanTo > cleanFrom) { | ||
| - if (i) markChunk(chunkStart, cleanFrom); | ||
| - chunkStart = cleanTo; | ||
| - } | ||
| - } else { | ||
| - if (tp == type) { | ||
| - var end = moveOver(pos, str, true); | ||
| - var a = posMax(top, pos), b = posMin(bot, end); | ||
| - if (!posEq(a, b)) | ||
| - marks.push(editor.markText(a, b, {className: cls})); | ||
| - pos = end; | ||
| - } | ||
| - } | ||
| - } | ||
| - if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1); | ||
| - } | ||
| - | ||
| - // Updating the gap between editor and original | ||
| - | ||
| - function makeConnections(dv) { | ||
| - if (!dv.showDifferences) return; | ||
| - | ||
| - var align = dv.mv.options.connect == "align"; | ||
| - if (align) { | ||
| - if (!dv.orig.curOp) return dv.orig.operation(function() { | ||
| - makeConnections(dv); | ||
| - }); | ||
| - for (var i = 0; i < dv.aligners.length; i++) | ||
| - dv.aligners[i].clear(); | ||
| - dv.aligners.length = 0; | ||
| - var extraSpaceAbove = {edit: 0, orig: 0}; | ||
| - } | ||
| - | ||
| - if (dv.svg) { | ||
| - clear(dv.svg); | ||
| - var w = dv.gap.offsetWidth; | ||
| - attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight); | ||
| - } | ||
| - if (dv.copyButtons) clear(dv.copyButtons); | ||
| - | ||
| - var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport(); | ||
| - var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top; | ||
| - iterateChunks(dv.diff, function(topOrig, botOrig, topEdit, botEdit) { | ||
| - if (topEdit <= vpEdit.to && botEdit >= vpEdit.from && | ||
| - topOrig <= vpOrig.to && botOrig >= vpOrig.from) | ||
| - drawConnectorsForChunk(dv, topOrig, botOrig, topEdit, botEdit, sTopOrig, sTopEdit, w); | ||
| - if (align && (topEdit <= vpEdit.to || topOrig <= vpOrig.to)) { | ||
| - var above = (botEdit < vpEdit.from && botOrig < vpOrig.from); | ||
| - alignChunks(dv, topOrig, botOrig, topEdit, botEdit, above && extraSpaceAbove); | ||
| - } | ||
| - }); | ||
| - if (align) { | ||
| - if (extraSpaceAbove.edit) | ||
| - dv.aligners.push(padBelow(dv.edit, 0, extraSpaceAbove.edit)); | ||
| - if (extraSpaceAbove.orig) | ||
| - dv.aligners.push(padBelow(dv.orig, 0, extraSpaceAbove.orig)); | ||
| - } | ||
| - } | ||
| - | ||
| - function drawConnectorsForChunk(dv, topOrig, botOrig, topEdit, botEdit, sTopOrig, sTopEdit, w) { | ||
| - var flip = dv.type == "left"; | ||
| - var top = dv.orig.heightAtLine(topOrig, "local") - sTopOrig; | ||
| - if (dv.svg) { | ||
| - var topLpx = top; | ||
| - var topRpx = dv.edit.heightAtLine(topEdit, "local") - sTopEdit; | ||
| - if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; } | ||
| - var botLpx = dv.orig.heightAtLine(botOrig, "local") - sTopOrig; | ||
| - var botRpx = dv.edit.heightAtLine(botEdit, "local") - sTopEdit; | ||
| - if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; } | ||
| - var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx; | ||
| - var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx; | ||
| - attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")), | ||
| - "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z", | ||
| - "class", dv.classes.connect); | ||
| - } | ||
| - if (dv.copyButtons) { | ||
| - var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc", | ||
| - "CodeMirror-merge-copy")); | ||
| - var editOriginals = dv.mv.options.allowEditingOriginals; | ||
| - copy.title = editOriginals ? "Push to left" : "Revert chunk"; | ||
| - copy.chunk = {topEdit: topEdit, botEdit: botEdit, topOrig: topOrig, botOrig: botOrig}; | ||
| - copy.style.top = top + "px"; | ||
| - | ||
| - if (editOriginals) { | ||
| - var topReverse = dv.orig.heightAtLine(topEdit, "local") - sTopEdit; | ||
| - var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc", | ||
| - "CodeMirror-merge-copy-reverse")); | ||
| - copyReverse.title = "Push to right"; | ||
| - copyReverse.chunk = {topEdit: topOrig, botEdit: botOrig, topOrig: topEdit, botOrig: botEdit}; | ||
| - copyReverse.style.top = topReverse + "px"; | ||
| - dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px"; | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - function alignChunks(dv, topOrig, botOrig, topEdit, botEdit, aboveViewport) { | ||
| - var topOrigPx = dv.orig.heightAtLine(topOrig, "local"); | ||
| - var botOrigPx = dv.orig.heightAtLine(botOrig, "local"); | ||
| - var topEditPx = dv.edit.heightAtLine(topEdit, "local"); | ||
| - var botEditPx = dv.edit.heightAtLine(botEdit, "local"); | ||
| - var origH = botOrigPx -topOrigPx, editH = botEditPx - topEditPx; | ||
| - var diff = editH - origH; | ||
| - if (diff > 1) { | ||
| - if (aboveViewport) aboveViewport.orig += diff; | ||
| - else dv.aligners.push(padBelow(dv.orig, botOrig - 1, diff)); | ||
| - } else if (diff < -1) { | ||
| - if (aboveViewport) aboveViewport.edit -= diff; | ||
| - else dv.aligners.push(padBelow(dv.edit, botEdit - 1, -diff)); | ||
| - } | ||
| - return 0; | ||
| - } | ||
| - | ||
| - function padBelow(cm, line, size) { | ||
| - var elt = document.createElement("div"); | ||
| - elt.style.height = size + "px"; elt.style.minWidth = "1px"; | ||
| - return cm.addLineWidget(line, elt, {height: size}); | ||
| - } | ||
| - | ||
| - function copyChunk(dv, to, from, chunk) { | ||
| - if (dv.diffOutOfDate) return; | ||
| - to.replaceRange(from.getRange(Pos(chunk.topOrig, 0), Pos(chunk.botOrig, 0)), | ||
| - Pos(chunk.topEdit, 0), Pos(chunk.botEdit, 0)); | ||
| - } | ||
| - | ||
| - // Merge view, containing 0, 1, or 2 diff views. | ||
| - | ||
| - var MergeView = CodeMirror.MergeView = function(node, options) { | ||
| - if (!(this instanceof MergeView)) return new MergeView(node, options); | ||
| - | ||
| - this.options = options; | ||
| - var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight; | ||
| - if (origLeft && origRight) { | ||
| - if (options.connect == "align") | ||
| - throw new Error("connect: \"align\" is not supported for three-way merge views"); | ||
| - if (options.collapseIdentical) | ||
| - throw new Error("collapseIdentical option is not supported for three-way merge views"); | ||
| - } | ||
| - | ||
| - var hasLeft = origLeft != null, hasRight = origRight != null; | ||
| - var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); | ||
| - var wrap = [], left = this.left = null, right = this.right = null; | ||
| - | ||
| - if (hasLeft) { | ||
| - left = this.left = new DiffView(this, "left"); | ||
| - var leftPane = elt("div", null, "CodeMirror-merge-pane"); | ||
| - wrap.push(leftPane); | ||
| - wrap.push(buildGap(left)); | ||
| - } | ||
| - | ||
| - var editPane = elt("div", null, "CodeMirror-merge-pane"); | ||
| - wrap.push(editPane); | ||
| - | ||
| - if (hasRight) { | ||
| - right = this.right = new DiffView(this, "right"); | ||
| - wrap.push(buildGap(right)); | ||
| - var rightPane = elt("div", null, "CodeMirror-merge-pane"); | ||
| - wrap.push(rightPane); | ||
| - } | ||
| - | ||
| - (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost"; | ||
| - | ||
| - wrap.push(elt("div", null, null, "height: 0; clear: both;")); | ||
| - | ||
| - var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane")); | ||
| - this.edit = CodeMirror(editPane, copyObj(options)); | ||
| - | ||
| - if (left) left.init(leftPane, origLeft, options); | ||
| - if (right) right.init(rightPane, origRight, options); | ||
| - | ||
| - if (options.collapseIdentical) | ||
| - collapseIdenticalStretches(left || right, options.collapseIdentical); | ||
| - | ||
| - var onResize = function() { | ||
| - if (left) makeConnections(left); | ||
| - if (right) makeConnections(right); | ||
| - }; | ||
| - CodeMirror.on(window, "resize", onResize); | ||
| - var resizeInterval = setInterval(function() { | ||
| - for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {} | ||
| - if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); } | ||
| - }, 5000); | ||
| - }; | ||
| - | ||
| - function buildGap(dv) { | ||
| - var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock"); | ||
| - lock.title = "Toggle locked scrolling"; | ||
| - var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap"); | ||
| - CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); }); | ||
| - var gapElts = [lockWrap]; | ||
| - if (dv.mv.options.revertButtons !== false) { | ||
| - dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type); | ||
| - CodeMirror.on(dv.copyButtons, "click", function(e) { | ||
| - var node = e.target || e.srcElement; | ||
| - if (!node.chunk) return; | ||
| - if (node.className == "CodeMirror-merge-copy-reverse") { | ||
| - copyChunk(dv, dv.orig, dv.edit, node.chunk); | ||
| - return; | ||
| - } | ||
| - copyChunk(dv, dv.edit, dv.orig, node.chunk); | ||
| - }); | ||
| - gapElts.unshift(dv.copyButtons); | ||
| - } | ||
| - if (dv.mv.options.connect != "align") { | ||
| - var svg = document.createElementNS && document.createElementNS(svgNS, "svg"); | ||
| - if (svg && !svg.createSVGRect) svg = null; | ||
| - dv.svg = svg; | ||
| - if (svg) gapElts.push(svg); | ||
| - } | ||
| - | ||
| - return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap"); | ||
| - } | ||
| - | ||
| - MergeView.prototype = { | ||
| - constuctor: MergeView, | ||
| - editor: function() { return this.edit; }, | ||
| - rightOriginal: function() { return this.right && this.right.orig; }, | ||
| - leftOriginal: function() { return this.left && this.left.orig; }, | ||
| - setShowDifferences: function(val) { | ||
| - if (this.right) this.right.setShowDifferences(val); | ||
| - if (this.left) this.left.setShowDifferences(val); | ||
| - }, | ||
| - rightChunks: function() { | ||
| - return this.right && getChunks(this.right); | ||
| - }, | ||
| - leftChunks: function() { | ||
| - return this.left && getChunks(this.left); | ||
| - } | ||
| - }; | ||
| - | ||
| - function asString(obj) { | ||
| - if (typeof obj == "string") return obj; | ||
| - else return obj.getValue(); | ||
| - } | ||
| - | ||
| - // Operations on diffs | ||
| - | ||
| - var dmp = new diff_match_patch(); | ||
| - function getDiff(a, b) { | ||
| - var diff = dmp.diff_main(a, b); | ||
| - dmp.diff_cleanupSemantic(diff); | ||
| - // The library sometimes leaves in empty parts, which confuse the algorithm | ||
| - for (var i = 0; i < diff.length; ++i) { | ||
| - var part = diff[i]; | ||
| - if (!part[1]) { | ||
| - diff.splice(i--, 1); | ||
| - } else if (i && diff[i - 1][0] == part[0]) { | ||
| - diff.splice(i--, 1); | ||
| - diff[i][1] += part[1]; | ||
| - } | ||
| - } | ||
| - return diff; | ||
| - } | ||
| - | ||
| - function iterateChunks(diff, f) { | ||
| - var startEdit = 0, startOrig = 0; | ||
| - var edit = Pos(0, 0), orig = Pos(0, 0); | ||
| - for (var i = 0; i < diff.length; ++i) { | ||
| - var part = diff[i], tp = part[0]; | ||
| - if (tp == DIFF_EQUAL) { | ||
| - var startOff = startOfLineClean(diff, i) ? 0 : 1; | ||
| - var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; | ||
| - moveOver(edit, part[1], null, orig); | ||
| - var endOff = endOfLineClean(diff, i) ? 1 : 0; | ||
| - var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; | ||
| - if (cleanToEdit > cleanFromEdit) { | ||
| - if (i) f(startOrig, cleanFromOrig, startEdit, cleanFromEdit); | ||
| - startEdit = cleanToEdit; startOrig = cleanToOrig; | ||
| - } | ||
| - } else { | ||
| - moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); | ||
| - } | ||
| - } | ||
| - if (startEdit <= edit.line || startOrig <= orig.line) | ||
| - f(startOrig, orig.line + 1, startEdit, edit.line + 1); | ||
| - } | ||
| - | ||
| - function getChunks(dv) { | ||
| - ensureDiff(dv); | ||
| - var collect = []; | ||
| - iterateChunks(dv.diff, function(topOrig, botOrig, topEdit, botEdit) { | ||
| - collect.push({origFrom: topOrig, origTo: botOrig, | ||
| - editFrom: topEdit, editTo: botEdit}); | ||
| - }); | ||
| - return collect; | ||
| - } | ||
| - | ||
| - function endOfLineClean(diff, i) { | ||
| - if (i == diff.length - 1) return true; | ||
| - var next = diff[i + 1][1]; | ||
| - if (next.length == 1 || next.charCodeAt(0) != 10) return false; | ||
| - if (i == diff.length - 2) return true; | ||
| - next = diff[i + 2][1]; | ||
| - return next.length > 1 && next.charCodeAt(0) == 10; | ||
| - } | ||
| - | ||
| - function startOfLineClean(diff, i) { | ||
| - if (i == 0) return true; | ||
| - var last = diff[i - 1][1]; | ||
| - if (last.charCodeAt(last.length - 1) != 10) return false; | ||
| - if (i == 1) return true; | ||
| - last = diff[i - 2][1]; | ||
| - return last.charCodeAt(last.length - 1) == 10; | ||
| - } | ||
| - | ||
| - function chunkBoundariesAround(diff, n, nInEdit) { | ||
| - var beforeE, afterE, beforeO, afterO; | ||
| - iterateChunks(diff, function(fromOrig, toOrig, fromEdit, toEdit) { | ||
| - var fromLocal = nInEdit ? fromEdit : fromOrig; | ||
| - var toLocal = nInEdit ? toEdit : toOrig; | ||
| - if (afterE == null) { | ||
| - if (fromLocal > n) { afterE = fromEdit; afterO = fromOrig; } | ||
| - else if (toLocal > n) { afterE = toEdit; afterO = toOrig; } | ||
| - } | ||
| - if (toLocal <= n) { beforeE = toEdit; beforeO = toOrig; } | ||
| - else if (fromLocal <= n) { beforeE = fromEdit; beforeO = fromOrig; } | ||
| - }); | ||
| - return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}}; | ||
| - } | ||
| - | ||
| - function collapseSingle(cm, from, to) { | ||
| - cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); | ||
| - var widget = document.createElement("span"); | ||
| - widget.className = "CodeMirror-merge-collapsed-widget"; | ||
| - widget.title = "Identical text collapsed. Click to expand."; | ||
| - var mark = cm.markText(Pos(from, 0), Pos(to - 1), { | ||
| - inclusiveLeft: true, | ||
| - inclusiveRight: true, | ||
| - replacedWith: widget, | ||
| - clearOnEnter: true | ||
| - }); | ||
| - function clear() { | ||
| - mark.clear(); | ||
| - cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); | ||
| - } | ||
| - widget.addEventListener("click", clear); | ||
| - return {mark: mark, clear: clear}; | ||
| - } | ||
| - | ||
| - function collapseStretch(dv, origStart, editStart, size) { | ||
| - var mOrig = collapseSingle(dv.orig, origStart, origStart + size); | ||
| - var mEdit = collapseSingle(dv.edit, editStart, editStart + size); | ||
| - mOrig.mark.on("clear", function() { mEdit.clear(); }); | ||
| - mEdit.mark.on("clear", function() { mOrig.clear(); }); | ||
| - } | ||
| - | ||
| - function collapseIdenticalStretches(dv, margin) { | ||
| - if (typeof margin != "number") margin = 2; | ||
| - var lastOrig = dv.orig.firstLine(), lastEdit = dv.edit.firstLine(); | ||
| - iterateChunks(dv.diff, function(topOrig, botOrig, _topEdit, botEdit) { | ||
| - var identicalSize = topOrig - margin - lastOrig; | ||
| - if (identicalSize > margin) | ||
| - collapseStretch(dv, lastOrig, lastEdit, identicalSize); | ||
| - lastOrig = botOrig + margin; lastEdit = botEdit + margin; | ||
| - }); | ||
| - var bottomSize = dv.orig.lastLine() + 1 - lastOrig; | ||
| - if (bottomSize > margin) | ||
| - collapseStretch(dv, lastOrig, lastEdit, bottomSize); | ||
| - } | ||
| - | ||
| - // General utilities | ||
| - | ||
| - function elt(tag, content, className, style) { | ||
| - var e = document.createElement(tag); | ||
| - if (className) e.className = className; | ||
| - if (style) e.style.cssText = style; | ||
| - if (typeof content == "string") e.appendChild(document.createTextNode(content)); | ||
| - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); | ||
| - return e; | ||
| - } | ||
| - | ||
| - function clear(node) { | ||
| - for (var count = node.childNodes.length; count > 0; --count) | ||
| - node.removeChild(node.firstChild); | ||
| - } | ||
| - | ||
| - function attrs(elt) { | ||
| - for (var i = 1; i < arguments.length; i += 2) | ||
| - elt.setAttribute(arguments[i], arguments[i+1]); | ||
| - } | ||
| - | ||
| - function copyObj(obj, target) { | ||
| - if (!target) target = {}; | ||
| - for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; | ||
| - return target; | ||
| - } | ||
| - | ||
| - function moveOver(pos, str, copy, other) { | ||
| - var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0; | ||
| - for (;;) { | ||
| - var nl = str.indexOf("\n", at); | ||
| - if (nl == -1) break; | ||
| - ++out.line; | ||
| - if (other) ++other.line; | ||
| - at = nl + 1; | ||
| - } | ||
| - out.ch = (at ? 0 : out.ch) + (str.length - at); | ||
| - if (other) other.ch = (at ? 0 : other.ch) + (str.length - at); | ||
| - return out; | ||
| - } | ||
| - | ||
| - function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; } | ||
| - function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; } | ||
| - function posEq(a, b) { return a.line == b.line && a.ch == b.ch; } | ||
| -}); |
64
public/js/lib/codemirror/addon/mode/loadmode.js
| @@ -1,64 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), "cjs"); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror, "plain"); | ||
| -})(function(CodeMirror, env) { | ||
| - if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; | ||
| - | ||
| - var loading = {}; | ||
| - function splitCallback(cont, n) { | ||
| - var countDown = n; | ||
| - return function() { if (--countDown == 0) cont(); }; | ||
| - } | ||
| - function ensureDeps(mode, cont) { | ||
| - var deps = CodeMirror.modes[mode].dependencies; | ||
| - if (!deps) return cont(); | ||
| - var missing = []; | ||
| - for (var i = 0; i < deps.length; ++i) { | ||
| - if (!CodeMirror.modes.hasOwnProperty(deps[i])) | ||
| - missing.push(deps[i]); | ||
| - } | ||
| - if (!missing.length) return cont(); | ||
| - var split = splitCallback(cont, missing.length); | ||
| - for (var i = 0; i < missing.length; ++i) | ||
| - CodeMirror.requireMode(missing[i], split); | ||
| - } | ||
| - | ||
| - CodeMirror.requireMode = function(mode, cont) { | ||
| - if (typeof mode != "string") mode = mode.name; | ||
| - if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); | ||
| - if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); | ||
| - | ||
| - var file = CodeMirror.modeURL.replace(/%N/g, mode); | ||
| - if (env == "plain") { | ||
| - var script = document.createElement("script"); | ||
| - script.src = file; | ||
| - var others = document.getElementsByTagName("script")[0]; | ||
| - var list = loading[mode] = [cont]; | ||
| - CodeMirror.on(script, "load", function() { | ||
| - ensureDeps(mode, function() { | ||
| - for (var i = 0; i < list.length; ++i) list[i](); | ||
| - }); | ||
| - }); | ||
| - others.parentNode.insertBefore(script, others); | ||
| - } else if (env == "cjs") { | ||
| - require(file); | ||
| - cont(); | ||
| - } else if (env == "amd") { | ||
| - requirejs([file], cont); | ||
| - } | ||
| - }; | ||
| - | ||
| - CodeMirror.autoLoadMode = function(instance, mode) { | ||
| - if (!CodeMirror.modes.hasOwnProperty(mode)) | ||
| - CodeMirror.requireMode(mode, function() { | ||
| - instance.setOption("mode", instance.getOption("mode")); | ||
| - }); | ||
| - }; | ||
| -}); |
118
public/js/lib/codemirror/addon/mode/multiplex.js
| @@ -1,118 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.multiplexingMode = function(outer /*, others */) { | ||
| - // Others should be {open, close, mode [, delimStyle] [, innerStyle]} objects | ||
| - var others = Array.prototype.slice.call(arguments, 1); | ||
| - var n_others = others.length; | ||
| - | ||
| - function indexOf(string, pattern, from) { | ||
| - if (typeof pattern == "string") return string.indexOf(pattern, from); | ||
| - var m = pattern.exec(from ? string.slice(from) : string); | ||
| - return m ? m.index + from : -1; | ||
| - } | ||
| - | ||
| - return { | ||
| - startState: function() { | ||
| - return { | ||
| - outer: CodeMirror.startState(outer), | ||
| - innerActive: null, | ||
| - inner: null | ||
| - }; | ||
| - }, | ||
| - | ||
| - copyState: function(state) { | ||
| - return { | ||
| - outer: CodeMirror.copyState(outer, state.outer), | ||
| - innerActive: state.innerActive, | ||
| - inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner) | ||
| - }; | ||
| - }, | ||
| - | ||
| - token: function(stream, state) { | ||
| - if (!state.innerActive) { | ||
| - var cutOff = Infinity, oldContent = stream.string; | ||
| - for (var i = 0; i < n_others; ++i) { | ||
| - var other = others[i]; | ||
| - var found = indexOf(oldContent, other.open, stream.pos); | ||
| - if (found == stream.pos) { | ||
| - stream.match(other.open); | ||
| - state.innerActive = other; | ||
| - state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0); | ||
| - return other.delimStyle; | ||
| - } else if (found != -1 && found < cutOff) { | ||
| - cutOff = found; | ||
| - } | ||
| - } | ||
| - if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); | ||
| - var outerToken = outer.token(stream, state.outer); | ||
| - if (cutOff != Infinity) stream.string = oldContent; | ||
| - return outerToken; | ||
| - } else { | ||
| - var curInner = state.innerActive, oldContent = stream.string; | ||
| - if (!curInner.close && stream.sol()) { | ||
| - state.innerActive = state.inner = null; | ||
| - return this.token(stream, state); | ||
| - } | ||
| - var found = curInner.close ? indexOf(oldContent, curInner.close, stream.pos) : -1; | ||
| - if (found == stream.pos) { | ||
| - stream.match(curInner.close); | ||
| - state.innerActive = state.inner = null; | ||
| - return curInner.delimStyle; | ||
| - } | ||
| - if (found > -1) stream.string = oldContent.slice(0, found); | ||
| - var innerToken = curInner.mode.token(stream, state.inner); | ||
| - if (found > -1) stream.string = oldContent; | ||
| - | ||
| - if (curInner.innerStyle) { | ||
| - if (innerToken) innerToken = innerToken + ' ' + curInner.innerStyle; | ||
| - else innerToken = curInner.innerStyle; | ||
| - } | ||
| - | ||
| - return innerToken; | ||
| - } | ||
| - }, | ||
| - | ||
| - indent: function(state, textAfter) { | ||
| - var mode = state.innerActive ? state.innerActive.mode : outer; | ||
| - if (!mode.indent) return CodeMirror.Pass; | ||
| - return mode.indent(state.innerActive ? state.inner : state.outer, textAfter); | ||
| - }, | ||
| - | ||
| - blankLine: function(state) { | ||
| - var mode = state.innerActive ? state.innerActive.mode : outer; | ||
| - if (mode.blankLine) { | ||
| - mode.blankLine(state.innerActive ? state.inner : state.outer); | ||
| - } | ||
| - if (!state.innerActive) { | ||
| - for (var i = 0; i < n_others; ++i) { | ||
| - var other = others[i]; | ||
| - if (other.open === "\n") { | ||
| - state.innerActive = other; | ||
| - state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0); | ||
| - } | ||
| - } | ||
| - } else if (state.innerActive.close === "\n") { | ||
| - state.innerActive = state.inner = null; | ||
| - } | ||
| - }, | ||
| - | ||
| - electricChars: outer.electricChars, | ||
| - | ||
| - innerMode: function(state) { | ||
| - return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer}; | ||
| - } | ||
| - }; | ||
| -}; | ||
| - | ||
| -}); |
33
public/js/lib/codemirror/addon/mode/multiplex_test.js
| @@ -1,33 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function() { | ||
| - CodeMirror.defineMode("markdown_with_stex", function(){ | ||
| - var inner = CodeMirror.getMode({}, "stex"); | ||
| - var outer = CodeMirror.getMode({}, "markdown"); | ||
| - | ||
| - var innerOptions = { | ||
| - open: '$', | ||
| - close: '$', | ||
| - mode: inner, | ||
| - delimStyle: 'delim', | ||
| - innerStyle: 'inner' | ||
| - }; | ||
| - | ||
| - return CodeMirror.multiplexingMode(outer, innerOptions); | ||
| - }); | ||
| - | ||
| - var mode = CodeMirror.getMode({}, "markdown_with_stex"); | ||
| - | ||
| - function MT(name) { | ||
| - test.mode( | ||
| - name, | ||
| - mode, | ||
| - Array.prototype.slice.call(arguments, 1), | ||
| - 'multiplexing'); | ||
| - } | ||
| - | ||
| - MT( | ||
| - "stexInsideMarkdown", | ||
| - "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); | ||
| -})(); |
85
public/js/lib/codemirror/addon/mode/overlay.js
| @@ -1,85 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Utility function that allows modes to be combined. The mode given | ||
| -// as the base argument takes care of most of the normal mode | ||
| -// functionality, but a second (typically simple) mode is used, which | ||
| -// can override the style of text. Both modes get to parse all of the | ||
| -// text, but when both assign a non-null style to a piece of code, the | ||
| -// overlay wins, unless the combine argument was true and not overridden, | ||
| -// or state.overlay.combineTokens was true, in which case the styles are | ||
| -// combined. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.overlayMode = function(base, overlay, combine) { | ||
| - return { | ||
| - startState: function() { | ||
| - return { | ||
| - base: CodeMirror.startState(base), | ||
| - overlay: CodeMirror.startState(overlay), | ||
| - basePos: 0, baseCur: null, | ||
| - overlayPos: 0, overlayCur: null, | ||
| - streamSeen: null | ||
| - }; | ||
| - }, | ||
| - copyState: function(state) { | ||
| - return { | ||
| - base: CodeMirror.copyState(base, state.base), | ||
| - overlay: CodeMirror.copyState(overlay, state.overlay), | ||
| - basePos: state.basePos, baseCur: null, | ||
| - overlayPos: state.overlayPos, overlayCur: null | ||
| - }; | ||
| - }, | ||
| - | ||
| - token: function(stream, state) { | ||
| - if (stream != state.streamSeen || | ||
| - Math.min(state.basePos, state.overlayPos) < stream.start) { | ||
| - state.streamSeen = stream; | ||
| - state.basePos = state.overlayPos = stream.start; | ||
| - } | ||
| - | ||
| - if (stream.start == state.basePos) { | ||
| - state.baseCur = base.token(stream, state.base); | ||
| - state.basePos = stream.pos; | ||
| - } | ||
| - if (stream.start == state.overlayPos) { | ||
| - stream.pos = stream.start; | ||
| - state.overlayCur = overlay.token(stream, state.overlay); | ||
| - state.overlayPos = stream.pos; | ||
| - } | ||
| - stream.pos = Math.min(state.basePos, state.overlayPos); | ||
| - | ||
| - // state.overlay.combineTokens always takes precedence over combine, | ||
| - // unless set to null | ||
| - if (state.overlayCur == null) return state.baseCur; | ||
| - else if (state.baseCur != null && | ||
| - state.overlay.combineTokens || | ||
| - combine && state.overlay.combineTokens == null) | ||
| - return state.baseCur + " " + state.overlayCur; | ||
| - else return state.overlayCur; | ||
| - }, | ||
| - | ||
| - indent: base.indent && function(state, textAfter) { | ||
| - return base.indent(state.base, textAfter); | ||
| - }, | ||
| - electricChars: base.electricChars, | ||
| - | ||
| - innerMode: function(state) { return {state: state.base, mode: base}; }, | ||
| - | ||
| - blankLine: function(state) { | ||
| - if (base.blankLine) base.blankLine(state.base); | ||
| - if (overlay.blankLine) overlay.blankLine(state.overlay); | ||
| - } | ||
| - }; | ||
| -}; | ||
| - | ||
| -}); |
213
public/js/lib/codemirror/addon/mode/simple.js
| @@ -1,213 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineSimpleMode = function(name, states) { | ||
| - CodeMirror.defineMode(name, function(config) { | ||
| - return CodeMirror.simpleMode(config, states); | ||
| - }); | ||
| - }; | ||
| - | ||
| - CodeMirror.simpleMode = function(config, states) { | ||
| - ensureState(states, "start"); | ||
| - var states_ = {}, meta = states.meta || {}, hasIndentation = false; | ||
| - for (var state in states) if (state != meta && states.hasOwnProperty(state)) { | ||
| - var list = states_[state] = [], orig = states[state]; | ||
| - for (var i = 0; i < orig.length; i++) { | ||
| - var data = orig[i]; | ||
| - list.push(new Rule(data, states)); | ||
| - if (data.indent || data.dedent) hasIndentation = true; | ||
| - } | ||
| - } | ||
| - var mode = { | ||
| - startState: function() { | ||
| - return {state: "start", pending: null, | ||
| - local: null, localState: null, | ||
| - indent: hasIndentation ? [] : null}; | ||
| - }, | ||
| - copyState: function(state) { | ||
| - var s = {state: state.state, pending: state.pending, | ||
| - local: state.local, localState: null, | ||
| - indent: state.indent && state.indent.slice(0)}; | ||
| - if (state.localState) | ||
| - s.localState = CodeMirror.copyState(state.local.mode, state.localState); | ||
| - if (state.stack) | ||
| - s.stack = state.stack.slice(0); | ||
| - for (var pers = state.persistentStates; pers; pers = pers.next) | ||
| - s.persistentStates = {mode: pers.mode, | ||
| - spec: pers.spec, | ||
| - state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), | ||
| - next: s.persistentStates}; | ||
| - return s; | ||
| - }, | ||
| - token: tokenFunction(states_, config), | ||
| - innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, | ||
| - indent: indentFunction(states_, meta) | ||
| - }; | ||
| - if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) | ||
| - mode[prop] = meta[prop]; | ||
| - return mode; | ||
| - }; | ||
| - | ||
| - function ensureState(states, name) { | ||
| - if (!states.hasOwnProperty(name)) | ||
| - throw new Error("Undefined state " + name + "in simple mode"); | ||
| - } | ||
| - | ||
| - function toRegex(val, caret) { | ||
| - if (!val) return /(?:)/; | ||
| - var flags = ""; | ||
| - if (val instanceof RegExp) { | ||
| - if (val.ignoreCase) flags = "i"; | ||
| - val = val.source; | ||
| - } else { | ||
| - val = String(val); | ||
| - } | ||
| - return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); | ||
| - } | ||
| - | ||
| - function asToken(val) { | ||
| - if (!val) return null; | ||
| - if (typeof val == "string") return val.replace(/\./g, " "); | ||
| - var result = []; | ||
| - for (var i = 0; i < val.length; i++) | ||
| - result.push(val[i] && val[i].replace(/\./g, " ")); | ||
| - return result; | ||
| - } | ||
| - | ||
| - function Rule(data, states) { | ||
| - if (data.next || data.push) ensureState(states, data.next || data.push); | ||
| - this.regex = toRegex(data.regex); | ||
| - this.token = asToken(data.token); | ||
| - this.data = data; | ||
| - } | ||
| - | ||
| - function tokenFunction(states, config) { | ||
| - return function(stream, state) { | ||
| - if (state.pending) { | ||
| - var pend = state.pending.shift(); | ||
| - if (state.pending.length == 0) state.pending = null; | ||
| - stream.pos += pend.text.length; | ||
| - return pend.token; | ||
| - } | ||
| - | ||
| - if (state.local) { | ||
| - if (state.local.end && stream.match(state.local.end)) { | ||
| - var tok = state.local.endToken || null; | ||
| - state.local = state.localState = null; | ||
| - return tok; | ||
| - } else { | ||
| - var tok = state.local.mode.token(stream, state.localState), m; | ||
| - if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) | ||
| - stream.pos = stream.start + m.index; | ||
| - return tok; | ||
| - } | ||
| - } | ||
| - | ||
| - var curState = states[state.state]; | ||
| - for (var i = 0; i < curState.length; i++) { | ||
| - var rule = curState[i]; | ||
| - var matches = stream.match(rule.regex); | ||
| - if (matches) { | ||
| - if (rule.data.next) { | ||
| - state.state = rule.data.next; | ||
| - } else if (rule.data.push) { | ||
| - (state.stack || (state.stack = [])).push(state.state); | ||
| - state.state = rule.data.push; | ||
| - } else if (rule.data.pop && state.stack && state.stack.length) { | ||
| - state.state = state.stack.pop(); | ||
| - } | ||
| - | ||
| - if (rule.data.mode) | ||
| - enterLocalMode(config, state, rule.data.mode, rule.token); | ||
| - if (rule.data.indent) | ||
| - state.indent.push(stream.indentation() + config.indentUnit); | ||
| - if (rule.data.dedent) | ||
| - state.indent.pop(); | ||
| - if (matches.length > 2) { | ||
| - state.pending = []; | ||
| - for (var j = 2; j < matches.length; j++) | ||
| - if (matches[j]) | ||
| - state.pending.push({text: matches[j], token: rule.token[j - 1]}); | ||
| - stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); | ||
| - return rule.token[0]; | ||
| - } else if (rule.token && rule.token.join) { | ||
| - return rule.token[0]; | ||
| - } else { | ||
| - return rule.token; | ||
| - } | ||
| - } | ||
| - } | ||
| - stream.next(); | ||
| - return null; | ||
| - }; | ||
| - } | ||
| - | ||
| - function cmp(a, b) { | ||
| - if (a === b) return true; | ||
| - if (!a || typeof a != "object" || !b || typeof b != "object") return false; | ||
| - var props = 0; | ||
| - for (var prop in a) if (a.hasOwnProperty(prop)) { | ||
| - if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; | ||
| - props++; | ||
| - } | ||
| - for (var prop in b) if (b.hasOwnProperty(prop)) props--; | ||
| - return props == 0; | ||
| - } | ||
| - | ||
| - function enterLocalMode(config, state, spec, token) { | ||
| - var pers; | ||
| - if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) | ||
| - if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; | ||
| - var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); | ||
| - var lState = pers ? pers.state : CodeMirror.startState(mode); | ||
| - if (spec.persistent && !pers) | ||
| - state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; | ||
| - | ||
| - state.localState = lState; | ||
| - state.local = {mode: mode, | ||
| - end: spec.end && toRegex(spec.end), | ||
| - endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), | ||
| - endToken: token && token.join ? token[token.length - 1] : token}; | ||
| - } | ||
| - | ||
| - function indexOf(val, arr) { | ||
| - for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; | ||
| - } | ||
| - | ||
| - function indentFunction(states, meta) { | ||
| - return function(state, textAfter, line) { | ||
| - if (state.local && state.local.mode.indent) | ||
| - return state.local.mode.indent(state.localState, textAfter, line); | ||
| - if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) | ||
| - return CodeMirror.Pass; | ||
| - | ||
| - var pos = state.indent.length - 1, rules = states[state.state]; | ||
| - scan: for (;;) { | ||
| - for (var i = 0; i < rules.length; i++) { | ||
| - var rule = rules[i]; | ||
| - if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { | ||
| - var m = rule.regex.exec(textAfter); | ||
| - if (m && m[0]) { | ||
| - pos--; | ||
| - if (rule.next || rule.push) rules = states[rule.next || rule.push]; | ||
| - textAfter = textAfter.slice(m[0].length); | ||
| - continue scan; | ||
| - } | ||
| - } | ||
| - } | ||
| - break; | ||
| - } | ||
| - return pos < 0 ? 0 : state.indent[pos]; | ||
| - }; | ||
| - } | ||
| -}); |
40
public/js/lib/codemirror/addon/runmode/colorize.js
| @@ -1,40 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("./runmode")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "./runmode"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; | ||
| - | ||
| - function textContent(node, out) { | ||
| - if (node.nodeType == 3) return out.push(node.nodeValue); | ||
| - for (var ch = node.firstChild; ch; ch = ch.nextSibling) { | ||
| - textContent(ch, out); | ||
| - if (isBlock.test(node.nodeType)) out.push("\n"); | ||
| - } | ||
| - } | ||
| - | ||
| - CodeMirror.colorize = function(collection, defaultMode) { | ||
| - if (!collection) collection = document.body.getElementsByTagName("pre"); | ||
| - | ||
| - for (var i = 0; i < collection.length; ++i) { | ||
| - var node = collection[i]; | ||
| - var mode = node.getAttribute("data-lang") || defaultMode; | ||
| - if (!mode) continue; | ||
| - | ||
| - var text = []; | ||
| - textContent(node, text); | ||
| - node.innerHTML = ""; | ||
| - CodeMirror.runMode(text.join(""), mode, node); | ||
| - | ||
| - node.className += " cm-s-default"; | ||
| - } | ||
| - }; | ||
| -}); |
157
public/js/lib/codemirror/addon/runmode/runmode-standalone.js
| @@ -1,157 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -window.CodeMirror = {}; | ||
| - | ||
| -(function() { | ||
| -"use strict"; | ||
| - | ||
| -function splitLines(string){ return string.split(/\r?\n|\r/); }; | ||
| - | ||
| -function StringStream(string) { | ||
| - this.pos = this.start = 0; | ||
| - this.string = string; | ||
| - this.lineStart = 0; | ||
| -} | ||
| -StringStream.prototype = { | ||
| - eol: function() {return this.pos >= this.string.length;}, | ||
| - sol: function() {return this.pos == 0;}, | ||
| - peek: function() {return this.string.charAt(this.pos) || null;}, | ||
| - next: function() { | ||
| - if (this.pos < this.string.length) | ||
| - return this.string.charAt(this.pos++); | ||
| - }, | ||
| - eat: function(match) { | ||
| - var ch = this.string.charAt(this.pos); | ||
| - if (typeof match == "string") var ok = ch == match; | ||
| - else var ok = ch && (match.test ? match.test(ch) : match(ch)); | ||
| - if (ok) {++this.pos; return ch;} | ||
| - }, | ||
| - eatWhile: function(match) { | ||
| - var start = this.pos; | ||
| - while (this.eat(match)){} | ||
| - return this.pos > start; | ||
| - }, | ||
| - eatSpace: function() { | ||
| - var start = this.pos; | ||
| - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; | ||
| - return this.pos > start; | ||
| - }, | ||
| - skipToEnd: function() {this.pos = this.string.length;}, | ||
| - skipTo: function(ch) { | ||
| - var found = this.string.indexOf(ch, this.pos); | ||
| - if (found > -1) {this.pos = found; return true;} | ||
| - }, | ||
| - backUp: function(n) {this.pos -= n;}, | ||
| - column: function() {return this.start - this.lineStart;}, | ||
| - indentation: function() {return 0;}, | ||
| - match: function(pattern, consume, caseInsensitive) { | ||
| - if (typeof pattern == "string") { | ||
| - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; | ||
| - var substr = this.string.substr(this.pos, pattern.length); | ||
| - if (cased(substr) == cased(pattern)) { | ||
| - if (consume !== false) this.pos += pattern.length; | ||
| - return true; | ||
| - } | ||
| - } else { | ||
| - var match = this.string.slice(this.pos).match(pattern); | ||
| - if (match && match.index > 0) return null; | ||
| - if (match && consume !== false) this.pos += match[0].length; | ||
| - return match; | ||
| - } | ||
| - }, | ||
| - current: function(){return this.string.slice(this.start, this.pos);}, | ||
| - hideFirstChars: function(n, inner) { | ||
| - this.lineStart += n; | ||
| - try { return inner(); } | ||
| - finally { this.lineStart -= n; } | ||
| - } | ||
| -}; | ||
| -CodeMirror.StringStream = StringStream; | ||
| - | ||
| -CodeMirror.startState = function (mode, a1, a2) { | ||
| - return mode.startState ? mode.startState(a1, a2) : true; | ||
| -}; | ||
| - | ||
| -var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; | ||
| -CodeMirror.defineMode = function (name, mode) { | ||
| - if (arguments.length > 2) | ||
| - mode.dependencies = Array.prototype.slice.call(arguments, 2); | ||
| - modes[name] = mode; | ||
| -}; | ||
| -CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; }; | ||
| -CodeMirror.resolveMode = function(spec) { | ||
| - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { | ||
| - spec = mimeModes[spec]; | ||
| - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { | ||
| - spec = mimeModes[spec.name]; | ||
| - } | ||
| - if (typeof spec == "string") return {name: spec}; | ||
| - else return spec || {name: "null"}; | ||
| -}; | ||
| -CodeMirror.getMode = function (options, spec) { | ||
| - spec = CodeMirror.resolveMode(spec); | ||
| - var mfactory = modes[spec.name]; | ||
| - if (!mfactory) throw new Error("Unknown mode: " + spec); | ||
| - return mfactory(options, spec); | ||
| -}; | ||
| -CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min; | ||
| -CodeMirror.defineMode("null", function() { | ||
| - return {token: function(stream) {stream.skipToEnd();}}; | ||
| -}); | ||
| -CodeMirror.defineMIME("text/plain", "null"); | ||
| - | ||
| -CodeMirror.runMode = function (string, modespec, callback, options) { | ||
| - var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec); | ||
| - | ||
| - if (callback.nodeType == 1) { | ||
| - var tabSize = (options && options.tabSize) || 4; | ||
| - var node = callback, col = 0; | ||
| - node.innerHTML = ""; | ||
| - callback = function (text, style) { | ||
| - if (text == "\n") { | ||
| - node.appendChild(document.createElement("br")); | ||
| - col = 0; | ||
| - return; | ||
| - } | ||
| - var content = ""; | ||
| - // replace tabs | ||
| - for (var pos = 0; ;) { | ||
| - var idx = text.indexOf("\t", pos); | ||
| - if (idx == -1) { | ||
| - content += text.slice(pos); | ||
| - col += text.length - pos; | ||
| - break; | ||
| - } else { | ||
| - col += idx - pos; | ||
| - content += text.slice(pos, idx); | ||
| - var size = tabSize - col % tabSize; | ||
| - col += size; | ||
| - for (var i = 0; i < size; ++i) content += " "; | ||
| - pos = idx + 1; | ||
| - } | ||
| - } | ||
| - | ||
| - if (style) { | ||
| - var sp = node.appendChild(document.createElement("span")); | ||
| - sp.className = "cm-" + style.replace(/ +/g, " cm-"); | ||
| - sp.appendChild(document.createTextNode(content)); | ||
| - } else { | ||
| - node.appendChild(document.createTextNode(content)); | ||
| - } | ||
| - }; | ||
| - } | ||
| - | ||
| - var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); | ||
| - for (var i = 0, e = lines.length; i < e; ++i) { | ||
| - if (i) callback("\n"); | ||
| - var stream = new CodeMirror.StringStream(lines[i]); | ||
| - if (!stream.string && mode.blankLine) mode.blankLine(state); | ||
| - while (!stream.eol()) { | ||
| - var style = mode.token(stream, state); | ||
| - callback(stream.current(), style, i, stream.start, state); | ||
| - stream.start = stream.pos; | ||
| - } | ||
| - } | ||
| -}; | ||
| -})(); |
72
public/js/lib/codemirror/addon/runmode/runmode.js
| @@ -1,72 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| -"use strict"; | ||
| - | ||
| -CodeMirror.runMode = function(string, modespec, callback, options) { | ||
| - var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); | ||
| - var ie = /MSIE \d/.test(navigator.userAgent); | ||
| - var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); | ||
| - | ||
| - if (callback.nodeType == 1) { | ||
| - var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; | ||
| - var node = callback, col = 0; | ||
| - node.innerHTML = ""; | ||
| - callback = function(text, style) { | ||
| - if (text == "\n") { | ||
| - // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. | ||
| - // Emitting a carriage return makes everything ok. | ||
| - node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); | ||
| - col = 0; | ||
| - return; | ||
| - } | ||
| - var content = ""; | ||
| - // replace tabs | ||
| - for (var pos = 0;;) { | ||
| - var idx = text.indexOf("\t", pos); | ||
| - if (idx == -1) { | ||
| - content += text.slice(pos); | ||
| - col += text.length - pos; | ||
| - break; | ||
| - } else { | ||
| - col += idx - pos; | ||
| - content += text.slice(pos, idx); | ||
| - var size = tabSize - col % tabSize; | ||
| - col += size; | ||
| - for (var i = 0; i < size; ++i) content += " "; | ||
| - pos = idx + 1; | ||
| - } | ||
| - } | ||
| - | ||
| - if (style) { | ||
| - var sp = node.appendChild(document.createElement("span")); | ||
| - sp.className = "cm-" + style.replace(/ +/g, " cm-"); | ||
| - sp.appendChild(document.createTextNode(content)); | ||
| - } else { | ||
| - node.appendChild(document.createTextNode(content)); | ||
| - } | ||
| - }; | ||
| - } | ||
| - | ||
| - var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); | ||
| - for (var i = 0, e = lines.length; i < e; ++i) { | ||
| - if (i) callback("\n"); | ||
| - var stream = new CodeMirror.StringStream(lines[i]); | ||
| - if (!stream.string && mode.blankLine) mode.blankLine(state); | ||
| - while (!stream.eol()) { | ||
| - var style = mode.token(stream, state); | ||
| - callback(stream.current(), style, i, stream.start, state); | ||
| - stream.start = stream.pos; | ||
| - } | ||
| - } | ||
| -}; | ||
| - | ||
| -}); |
120
public/js/lib/codemirror/addon/runmode/runmode.node.js
| @@ -1,120 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -/* Just enough of CodeMirror to run runMode under node.js */ | ||
| - | ||
| -// declare global: StringStream | ||
| - | ||
| -function splitLines(string){ return string.split(/\r?\n|\r/); }; | ||
| - | ||
| -function StringStream(string) { | ||
| - this.pos = this.start = 0; | ||
| - this.string = string; | ||
| - this.lineStart = 0; | ||
| -} | ||
| -StringStream.prototype = { | ||
| - eol: function() {return this.pos >= this.string.length;}, | ||
| - sol: function() {return this.pos == 0;}, | ||
| - peek: function() {return this.string.charAt(this.pos) || null;}, | ||
| - next: function() { | ||
| - if (this.pos < this.string.length) | ||
| - return this.string.charAt(this.pos++); | ||
| - }, | ||
| - eat: function(match) { | ||
| - var ch = this.string.charAt(this.pos); | ||
| - if (typeof match == "string") var ok = ch == match; | ||
| - else var ok = ch && (match.test ? match.test(ch) : match(ch)); | ||
| - if (ok) {++this.pos; return ch;} | ||
| - }, | ||
| - eatWhile: function(match) { | ||
| - var start = this.pos; | ||
| - while (this.eat(match)){} | ||
| - return this.pos > start; | ||
| - }, | ||
| - eatSpace: function() { | ||
| - var start = this.pos; | ||
| - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; | ||
| - return this.pos > start; | ||
| - }, | ||
| - skipToEnd: function() {this.pos = this.string.length;}, | ||
| - skipTo: function(ch) { | ||
| - var found = this.string.indexOf(ch, this.pos); | ||
| - if (found > -1) {this.pos = found; return true;} | ||
| - }, | ||
| - backUp: function(n) {this.pos -= n;}, | ||
| - column: function() {return this.start - this.lineStart;}, | ||
| - indentation: function() {return 0;}, | ||
| - match: function(pattern, consume, caseInsensitive) { | ||
| - if (typeof pattern == "string") { | ||
| - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; | ||
| - var substr = this.string.substr(this.pos, pattern.length); | ||
| - if (cased(substr) == cased(pattern)) { | ||
| - if (consume !== false) this.pos += pattern.length; | ||
| - return true; | ||
| - } | ||
| - } else { | ||
| - var match = this.string.slice(this.pos).match(pattern); | ||
| - if (match && match.index > 0) return null; | ||
| - if (match && consume !== false) this.pos += match[0].length; | ||
| - return match; | ||
| - } | ||
| - }, | ||
| - current: function(){return this.string.slice(this.start, this.pos);}, | ||
| - hideFirstChars: function(n, inner) { | ||
| - this.lineStart += n; | ||
| - try { return inner(); } | ||
| - finally { this.lineStart -= n; } | ||
| - } | ||
| -}; | ||
| -exports.StringStream = StringStream; | ||
| - | ||
| -exports.startState = function(mode, a1, a2) { | ||
| - return mode.startState ? mode.startState(a1, a2) : true; | ||
| -}; | ||
| - | ||
| -var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; | ||
| -exports.defineMode = function(name, mode) { | ||
| - if (arguments.length > 2) | ||
| - mode.dependencies = Array.prototype.slice.call(arguments, 2); | ||
| - modes[name] = mode; | ||
| -}; | ||
| -exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; | ||
| - | ||
| -exports.defineMode("null", function() { | ||
| - return {token: function(stream) {stream.skipToEnd();}}; | ||
| -}); | ||
| -exports.defineMIME("text/plain", "null"); | ||
| - | ||
| -exports.resolveMode = function(spec) { | ||
| - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { | ||
| - spec = mimeModes[spec]; | ||
| - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { | ||
| - spec = mimeModes[spec.name]; | ||
| - } | ||
| - if (typeof spec == "string") return {name: spec}; | ||
| - else return spec || {name: "null"}; | ||
| -}; | ||
| -exports.getMode = function(options, spec) { | ||
| - spec = exports.resolveMode(spec); | ||
| - var mfactory = modes[spec.name]; | ||
| - if (!mfactory) throw new Error("Unknown mode: " + spec); | ||
| - return mfactory(options, spec); | ||
| -}; | ||
| -exports.registerHelper = exports.registerGlobalHelper = Math.min; | ||
| - | ||
| -exports.runMode = function(string, modespec, callback, options) { | ||
| - var mode = exports.getMode({indentUnit: 2}, modespec); | ||
| - var lines = splitLines(string), state = (options && options.state) || exports.startState(mode); | ||
| - for (var i = 0, e = lines.length; i < e; ++i) { | ||
| - if (i) callback("\n"); | ||
| - var stream = new exports.StringStream(lines[i]); | ||
| - if (!stream.string && mode.blankLine) mode.blankLine(state); | ||
| - while (!stream.eol()) { | ||
| - var style = mode.token(stream, state); | ||
| - callback(stream.current(), style, i, stream.start, state); | ||
| - stream.start = stream.pos; | ||
| - } | ||
| - } | ||
| -}; | ||
| - | ||
| -require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")]; |
76
public/js/lib/codemirror/addon/scroll/annotatescrollbar.js
| @@ -1,76 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineExtension("annotateScrollbar", function(className) { | ||
| - return new Annotation(this, className); | ||
| - }); | ||
| - | ||
| - function Annotation(cm, className) { | ||
| - this.cm = cm; | ||
| - this.className = className; | ||
| - this.annotations = []; | ||
| - this.div = cm.getWrapperElement().appendChild(document.createElement("div")); | ||
| - this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none"; | ||
| - this.computeScale(); | ||
| - | ||
| - var self = this; | ||
| - cm.on("refresh", this.resizeHandler = function(){ | ||
| - if (self.computeScale()) self.redraw(); | ||
| - }); | ||
| - } | ||
| - | ||
| - Annotation.prototype.computeScale = function() { | ||
| - var cm = this.cm; | ||
| - var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight) / | ||
| - cm.heightAtLine(cm.lastLine() + 1, "local"); | ||
| - if (hScale != this.hScale) { | ||
| - this.hScale = hScale; | ||
| - return true; | ||
| - } | ||
| - }; | ||
| - | ||
| - Annotation.prototype.update = function(annotations) { | ||
| - this.annotations = annotations; | ||
| - this.redraw(); | ||
| - }; | ||
| - | ||
| - Annotation.prototype.redraw = function() { | ||
| - var cm = this.cm, hScale = this.hScale; | ||
| - if (!cm.display.barWidth) return; | ||
| - | ||
| - var frag = document.createDocumentFragment(), anns = this.annotations; | ||
| - for (var i = 0, nextTop; i < anns.length; i++) { | ||
| - var ann = anns[i]; | ||
| - var top = nextTop || cm.charCoords(ann.from, "local").top * hScale; | ||
| - var bottom = cm.charCoords(ann.to, "local").bottom * hScale; | ||
| - while (i < anns.length - 1) { | ||
| - nextTop = cm.charCoords(anns[i + 1].from, "local").top * hScale; | ||
| - if (nextTop > bottom + .9) break; | ||
| - ann = anns[++i]; | ||
| - bottom = cm.charCoords(ann.to, "local").bottom * hScale; | ||
| - } | ||
| - var height = Math.max(bottom - top, 3); | ||
| - | ||
| - var elt = frag.appendChild(document.createElement("div")); | ||
| - elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: " + top + "px; height: " + height + "px"; | ||
| - elt.className = this.className; | ||
| - } | ||
| - this.div.textContent = ""; | ||
| - this.div.appendChild(frag); | ||
| - }; | ||
| - | ||
| - Annotation.prototype.clear = function() { | ||
| - this.cm.off("refresh", this.resizeHandler); | ||
| - this.div.parentNode.removeChild(this.div); | ||
| - }; | ||
| -}); |
46
public/js/lib/codemirror/addon/scroll/scrollpastend.js
| @@ -1,46 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - cm.off("change", onChange); | ||
| - cm.off("refresh", updateBottomMargin); | ||
| - cm.display.lineSpace.parentNode.style.paddingBottom = ""; | ||
| - cm.state.scrollPastEndPadding = null; | ||
| - } | ||
| - if (val) { | ||
| - cm.on("change", onChange); | ||
| - cm.on("refresh", updateBottomMargin); | ||
| - updateBottomMargin(cm); | ||
| - } | ||
| - }); | ||
| - | ||
| - function onChange(cm, change) { | ||
| - if (CodeMirror.changeEnd(change).line == cm.lastLine()) | ||
| - updateBottomMargin(cm); | ||
| - } | ||
| - | ||
| - function updateBottomMargin(cm) { | ||
| - var padding = ""; | ||
| - if (cm.lineCount() > 1) { | ||
| - var totalH = cm.display.scroller.clientHeight - 30, | ||
| - lastLineH = cm.getLineHandle(cm.lastLine()).height; | ||
| - padding = (totalH - lastLineH) + "px"; | ||
| - } | ||
| - if (cm.state.scrollPastEndPadding != padding) { | ||
| - cm.state.scrollPastEndPadding = padding; | ||
| - cm.display.lineSpace.parentNode.style.paddingBottom = padding; | ||
| - cm.setSize(); | ||
| - } | ||
| - } | ||
| -}); |
66
public/js/lib/codemirror/addon/scroll/simplescrollbars.css
| @@ -1,66 +0,0 @@ | ||
| -.CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { | ||
| - position: absolute; | ||
| - background: #ccc; | ||
| - -moz-box-sizing: border-box; | ||
| - box-sizing: border-box; | ||
| - border: 1px solid #bbb; | ||
| - border-radius: 2px; | ||
| -} | ||
| - | ||
| -.CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { | ||
| - position: absolute; | ||
| - z-index: 6; | ||
| - background: #eee; | ||
| -} | ||
| - | ||
| -.CodeMirror-simplescroll-horizontal { | ||
| - bottom: 0; left: 0; | ||
| - height: 8px; | ||
| -} | ||
| -.CodeMirror-simplescroll-horizontal div { | ||
| - bottom: 0; | ||
| - height: 100%; | ||
| -} | ||
| - | ||
| -.CodeMirror-simplescroll-vertical { | ||
| - right: 0; top: 0; | ||
| - width: 8px; | ||
| -} | ||
| -.CodeMirror-simplescroll-vertical div { | ||
| - right: 0; | ||
| - width: 100%; | ||
| -} | ||
| - | ||
| - | ||
| -.CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { | ||
| - display: none; | ||
| -} | ||
| - | ||
| -.CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { | ||
| - position: absolute; | ||
| - background: #bcd; | ||
| - border-radius: 3px; | ||
| -} | ||
| - | ||
| -.CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { | ||
| - position: absolute; | ||
| - z-index: 6; | ||
| -} | ||
| - | ||
| -.CodeMirror-overlayscroll-horizontal { | ||
| - bottom: 0; left: 0; | ||
| - height: 6px; | ||
| -} | ||
| -.CodeMirror-overlayscroll-horizontal div { | ||
| - bottom: 0; | ||
| - height: 100%; | ||
| -} | ||
| - | ||
| -.CodeMirror-overlayscroll-vertical { | ||
| - right: 0; top: 0; | ||
| - width: 6px; | ||
| -} | ||
| -.CodeMirror-overlayscroll-vertical div { | ||
| - right: 0; | ||
| - width: 100%; | ||
| -} |
139
public/js/lib/codemirror/addon/scroll/simplescrollbars.js
| @@ -1,139 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - function Bar(cls, orientation, scroll) { | ||
| - this.orientation = orientation; | ||
| - this.scroll = scroll; | ||
| - this.screen = this.total = this.size = 1; | ||
| - this.pos = 0; | ||
| - | ||
| - this.node = document.createElement("div"); | ||
| - this.node.className = cls + "-" + orientation; | ||
| - this.inner = this.node.appendChild(document.createElement("div")); | ||
| - | ||
| - var self = this; | ||
| - CodeMirror.on(this.inner, "mousedown", function(e) { | ||
| - if (e.which != 1) return; | ||
| - CodeMirror.e_preventDefault(e); | ||
| - var axis = self.orientation == "horizontal" ? "pageX" : "pageY"; | ||
| - var start = e[axis], startpos = self.pos; | ||
| - function move(e) { | ||
| - if (e.which != 1) { | ||
| - CodeMirror.off(document, "mousemove", move); | ||
| - return; | ||
| - } | ||
| - self.moveTo(startpos + (e[axis] - start) * (self.total / self.size)); | ||
| - } | ||
| - CodeMirror.on(document, "mousemove", move); | ||
| - }); | ||
| - | ||
| - CodeMirror.on(this.node, "click", function(e) { | ||
| - CodeMirror.e_preventDefault(e); | ||
| - var innerBox = self.inner.getBoundingClientRect(), where; | ||
| - if (self.orientation == "horizontal") | ||
| - where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0; | ||
| - else | ||
| - where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0; | ||
| - self.moveTo(self.pos + where * self.screen); | ||
| - }); | ||
| - | ||
| - function onWheel(e) { | ||
| - var moved = CodeMirror.wheelEventPixels(e)[self.orientation == "horizontal" ? "x" : "y"]; | ||
| - var oldPos = self.pos; | ||
| - self.moveTo(self.pos + moved); | ||
| - if (self.pos != oldPos) CodeMirror.e_preventDefault(e); | ||
| - } | ||
| - CodeMirror.on(this.node, "mousewheel", onWheel); | ||
| - CodeMirror.on(this.node, "DOMMouseScroll", onWheel); | ||
| - } | ||
| - | ||
| - Bar.prototype.moveTo = function(pos, update) { | ||
| - if (pos < 0) pos = 0; | ||
| - if (pos > this.total - this.screen) pos = this.total - this.screen; | ||
| - if (pos == this.pos) return; | ||
| - this.pos = pos; | ||
| - this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = | ||
| - (pos * (this.size / this.total)) + "px"; | ||
| - if (update !== false) this.scroll(pos, this.orientation); | ||
| - }; | ||
| - | ||
| - Bar.prototype.update = function(scrollSize, clientSize, barSize) { | ||
| - this.screen = clientSize; | ||
| - this.total = scrollSize; | ||
| - this.size = barSize; | ||
| - | ||
| - // FIXME clip to min size? | ||
| - this.inner.style[this.orientation == "horizontal" ? "width" : "height"] = | ||
| - this.screen * (this.size / this.total) + "px"; | ||
| - this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = | ||
| - this.pos * (this.size / this.total) + "px"; | ||
| - }; | ||
| - | ||
| - function SimpleScrollbars(cls, place, scroll) { | ||
| - this.addClass = cls; | ||
| - this.horiz = new Bar(cls, "horizontal", scroll); | ||
| - place(this.horiz.node); | ||
| - this.vert = new Bar(cls, "vertical", scroll); | ||
| - place(this.vert.node); | ||
| - this.width = null; | ||
| - } | ||
| - | ||
| - SimpleScrollbars.prototype.update = function(measure) { | ||
| - if (this.width == null) { | ||
| - var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle; | ||
| - if (style) this.width = parseInt(style.height); | ||
| - } | ||
| - var width = this.width || 0; | ||
| - | ||
| - var needsH = measure.scrollWidth > measure.clientWidth + 1; | ||
| - var needsV = measure.scrollHeight > measure.clientHeight + 1; | ||
| - this.vert.node.style.display = needsV ? "block" : "none"; | ||
| - this.horiz.node.style.display = needsH ? "block" : "none"; | ||
| - | ||
| - if (needsV) { | ||
| - this.vert.update(measure.scrollHeight, measure.clientHeight, | ||
| - measure.viewHeight - (needsH ? width : 0)); | ||
| - this.vert.node.style.display = "block"; | ||
| - this.vert.node.style.bottom = needsH ? width + "px" : "0"; | ||
| - } | ||
| - if (needsH) { | ||
| - this.horiz.update(measure.scrollWidth, measure.clientWidth, | ||
| - measure.viewWidth - (needsV ? width : 0) - measure.barLeft); | ||
| - this.horiz.node.style.right = needsV ? width + "px" : "0"; | ||
| - this.horiz.node.style.left = measure.barLeft + "px"; | ||
| - } | ||
| - | ||
| - return {right: needsV ? width : 0, bottom: needsH ? width : 0}; | ||
| - }; | ||
| - | ||
| - SimpleScrollbars.prototype.setScrollTop = function(pos) { | ||
| - this.vert.moveTo(pos, false); | ||
| - }; | ||
| - | ||
| - SimpleScrollbars.prototype.setScrollLeft = function(pos) { | ||
| - this.horiz.moveTo(pos, false); | ||
| - }; | ||
| - | ||
| - SimpleScrollbars.prototype.clear = function() { | ||
| - var parent = this.horiz.node.parentNode; | ||
| - parent.removeChild(this.horiz.node); | ||
| - parent.removeChild(this.vert.node); | ||
| - }; | ||
| - | ||
| - CodeMirror.scrollbarModel.simple = function(place, scroll) { | ||
| - return new SimpleScrollbars("CodeMirror-simplescroll", place, scroll); | ||
| - }; | ||
| - CodeMirror.scrollbarModel.overlay = function(place, scroll) { | ||
| - return new SimpleScrollbars("CodeMirror-overlayscroll", place, scroll); | ||
| - }; | ||
| -}); |
128
public/js/lib/codemirror/addon/search/match-highlighter.js
| @@ -1,128 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Highlighting text that matches the selection | ||
| -// | ||
| -// Defines an option highlightSelectionMatches, which, when enabled, | ||
| -// will style strings that match the selection throughout the | ||
| -// document. | ||
| -// | ||
| -// The option can be set to true to simply enable it, or to a | ||
| -// {minChars, style, wordsOnly, showToken, delay} object to explicitly | ||
| -// configure it. minChars is the minimum amount of characters that should be | ||
| -// selected for the behavior to occur, and style is the token style to | ||
| -// apply to the matches. This will be prefixed by "cm-" to create an | ||
| -// actual CSS class name. If wordsOnly is enabled, the matches will be | ||
| -// highlighted only if the selected text is a word. showToken, when enabled, | ||
| -// will cause the current token to be highlighted when nothing is selected. | ||
| -// delay is used to specify how much time to wait, in milliseconds, before | ||
| -// highlighting the matches. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var DEFAULT_MIN_CHARS = 2; | ||
| - var DEFAULT_TOKEN_STYLE = "matchhighlight"; | ||
| - var DEFAULT_DELAY = 100; | ||
| - var DEFAULT_WORDS_ONLY = false; | ||
| - | ||
| - function State(options) { | ||
| - if (typeof options == "object") { | ||
| - this.minChars = options.minChars; | ||
| - this.style = options.style; | ||
| - this.showToken = options.showToken; | ||
| - this.delay = options.delay; | ||
| - this.wordsOnly = options.wordsOnly; | ||
| - } | ||
| - if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; | ||
| - if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; | ||
| - if (this.delay == null) this.delay = DEFAULT_DELAY; | ||
| - if (this.wordsOnly == null) this.wordsOnly = DEFAULT_WORDS_ONLY; | ||
| - this.overlay = this.timeout = null; | ||
| - } | ||
| - | ||
| - CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { | ||
| - if (old && old != CodeMirror.Init) { | ||
| - var over = cm.state.matchHighlighter.overlay; | ||
| - if (over) cm.removeOverlay(over); | ||
| - clearTimeout(cm.state.matchHighlighter.timeout); | ||
| - cm.state.matchHighlighter = null; | ||
| - cm.off("cursorActivity", cursorActivity); | ||
| - } | ||
| - if (val) { | ||
| - cm.state.matchHighlighter = new State(val); | ||
| - highlightMatches(cm); | ||
| - cm.on("cursorActivity", cursorActivity); | ||
| - } | ||
| - }); | ||
| - | ||
| - function cursorActivity(cm) { | ||
| - var state = cm.state.matchHighlighter; | ||
| - clearTimeout(state.timeout); | ||
| - state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); | ||
| - } | ||
| - | ||
| - function highlightMatches(cm) { | ||
| - cm.operation(function() { | ||
| - var state = cm.state.matchHighlighter; | ||
| - if (state.overlay) { | ||
| - cm.removeOverlay(state.overlay); | ||
| - state.overlay = null; | ||
| - } | ||
| - if (!cm.somethingSelected() && state.showToken) { | ||
| - var re = state.showToken === true ? /[\w$]/ : state.showToken; | ||
| - var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; | ||
| - while (start && re.test(line.charAt(start - 1))) --start; | ||
| - while (end < line.length && re.test(line.charAt(end))) ++end; | ||
| - if (start < end) | ||
| - cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style)); | ||
| - return; | ||
| - } | ||
| - var from = cm.getCursor("from"), to = cm.getCursor("to"); | ||
| - if (from.line != to.line) return; | ||
| - if (state.wordsOnly && !isWord(cm, from, to)) return; | ||
| - var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, ""); | ||
| - if (selection.length >= state.minChars) | ||
| - cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style)); | ||
| - }); | ||
| - } | ||
| - | ||
| - function isWord(cm, from, to) { | ||
| - var str = cm.getRange(from, to); | ||
| - if (str.match(/^\w+$/) !== null) { | ||
| - if (from.ch > 0) { | ||
| - var pos = {line: from.line, ch: from.ch - 1}; | ||
| - var chr = cm.getRange(pos, from); | ||
| - if (chr.match(/\W/) === null) return false; | ||
| - } | ||
| - if (to.ch < cm.getLine(from.line).length) { | ||
| - var pos = {line: to.line, ch: to.ch + 1}; | ||
| - var chr = cm.getRange(to, pos); | ||
| - if (chr.match(/\W/) === null) return false; | ||
| - } | ||
| - return true; | ||
| - } else return false; | ||
| - } | ||
| - | ||
| - function boundariesAround(stream, re) { | ||
| - return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && | ||
| - (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); | ||
| - } | ||
| - | ||
| - function makeOverlay(query, hasBoundary, style) { | ||
| - return {token: function(stream) { | ||
| - if (stream.match(query) && | ||
| - (!hasBoundary || boundariesAround(stream, hasBoundary))) | ||
| - return style; | ||
| - stream.next(); | ||
| - stream.skipTo(query.charAt(0)) || stream.skipToEnd(); | ||
| - }}; | ||
| - } | ||
| -}); |
8
public/js/lib/codemirror/addon/search/matchesonscrollbar.css
| @@ -1,8 +0,0 @@ | ||
| -.CodeMirror-search-match { | ||
| - background: gold; | ||
| - border-top: 1px solid orange; | ||
| - border-bottom: 1px solid orange; | ||
| - -moz-box-sizing: border-box; | ||
| - box-sizing: border-box; | ||
| - opacity: .5; | ||
| -} |
90
public/js/lib/codemirror/addon/search/matchesonscrollbar.js
| @@ -1,90 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, className) { | ||
| - return new SearchAnnotation(this, query, caseFold, className); | ||
| - }); | ||
| - | ||
| - function SearchAnnotation(cm, query, caseFold, className) { | ||
| - this.cm = cm; | ||
| - this.annotation = cm.annotateScrollbar(className || "CodeMirror-search-match"); | ||
| - this.query = query; | ||
| - this.caseFold = caseFold; | ||
| - this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; | ||
| - this.matches = []; | ||
| - this.update = null; | ||
| - | ||
| - this.findMatches(); | ||
| - this.annotation.update(this.matches); | ||
| - | ||
| - var self = this; | ||
| - cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); | ||
| - } | ||
| - | ||
| - var MAX_MATCHES = 1000; | ||
| - | ||
| - SearchAnnotation.prototype.findMatches = function() { | ||
| - if (!this.gap) return; | ||
| - for (var i = 0; i < this.matches.length; i++) { | ||
| - var match = this.matches[i]; | ||
| - if (match.from.line >= this.gap.to) break; | ||
| - if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); | ||
| - } | ||
| - var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), this.caseFold); | ||
| - while (cursor.findNext()) { | ||
| - var match = {from: cursor.from(), to: cursor.to()}; | ||
| - if (match.from.line >= this.gap.to) break; | ||
| - this.matches.splice(i++, 0, match); | ||
| - if (this.matches.length > MAX_MATCHES) break; | ||
| - } | ||
| - this.gap = null; | ||
| - }; | ||
| - | ||
| - function offsetLine(line, changeStart, sizeChange) { | ||
| - if (line <= changeStart) return line; | ||
| - return Math.max(changeStart, line + sizeChange); | ||
| - } | ||
| - | ||
| - SearchAnnotation.prototype.onChange = function(change) { | ||
| - var startLine = change.from.line; | ||
| - var endLine = CodeMirror.changeEnd(change).line; | ||
| - var sizeChange = endLine - change.to.line; | ||
| - if (this.gap) { | ||
| - this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); | ||
| - this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); | ||
| - } else { | ||
| - this.gap = {from: change.from.line, to: endLine + 1}; | ||
| - } | ||
| - | ||
| - if (sizeChange) for (var i = 0; i < this.matches.length; i++) { | ||
| - var match = this.matches[i]; | ||
| - var newFrom = offsetLine(match.from.line, startLine, sizeChange); | ||
| - if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); | ||
| - var newTo = offsetLine(match.to.line, startLine, sizeChange); | ||
| - if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); | ||
| - } | ||
| - clearTimeout(this.update); | ||
| - var self = this; | ||
| - this.update = setTimeout(function() { self.updateAfterChange(); }, 250); | ||
| - }; | ||
| - | ||
| - SearchAnnotation.prototype.updateAfterChange = function() { | ||
| - this.findMatches(); | ||
| - this.annotation.update(this.matches); | ||
| - }; | ||
| - | ||
| - SearchAnnotation.prototype.clear = function() { | ||
| - this.cm.off("change", this.changeHandler); | ||
| - this.annotation.clear(); | ||
| - }; | ||
| -}); |
164
public/js/lib/codemirror/addon/search/search.js
| @@ -1,164 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Define search commands. Depends on dialog.js or another | ||
| -// implementation of the openDialog method. | ||
| - | ||
| -// Replace works a little oddly -- it will do the replace on the next | ||
| -// Ctrl-G (or whatever is bound to findNext) press. You prevent a | ||
| -// replace by making sure the match is no longer selected when hitting | ||
| -// Ctrl-G. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - function searchOverlay(query, caseInsensitive) { | ||
| - if (typeof query == "string") | ||
| - query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); | ||
| - else if (!query.global) | ||
| - query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); | ||
| - | ||
| - return {token: function(stream) { | ||
| - query.lastIndex = stream.pos; | ||
| - var match = query.exec(stream.string); | ||
| - if (match && match.index == stream.pos) { | ||
| - stream.pos += match[0].length; | ||
| - return "searching"; | ||
| - } else if (match) { | ||
| - stream.pos = match.index; | ||
| - } else { | ||
| - stream.skipToEnd(); | ||
| - } | ||
| - }}; | ||
| - } | ||
| - | ||
| - function SearchState() { | ||
| - this.posFrom = this.posTo = this.query = null; | ||
| - this.overlay = null; | ||
| - } | ||
| - function getSearchState(cm) { | ||
| - return cm.state.search || (cm.state.search = new SearchState()); | ||
| - } | ||
| - function queryCaseInsensitive(query) { | ||
| - return typeof query == "string" && query == query.toLowerCase(); | ||
| - } | ||
| - function getSearchCursor(cm, query, pos) { | ||
| - // Heuristic: if the query string is all lowercase, do a case insensitive search. | ||
| - return cm.getSearchCursor(query, pos, queryCaseInsensitive(query)); | ||
| - } | ||
| - function dialog(cm, text, shortText, deflt, f) { | ||
| - if (cm.openDialog) cm.openDialog(text, f, {value: deflt}); | ||
| - else f(prompt(shortText, deflt)); | ||
| - } | ||
| - function confirmDialog(cm, text, shortText, fs) { | ||
| - if (cm.openConfirm) cm.openConfirm(text, fs); | ||
| - else if (confirm(shortText)) fs[0](); | ||
| - } | ||
| - function parseQuery(query) { | ||
| - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); | ||
| - if (isRE) { | ||
| - try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } | ||
| - catch(e) {} // Not a regular expression after all, do a string search | ||
| - } | ||
| - if (typeof query == "string" ? query == "" : query.test("")) | ||
| - query = /x^/; | ||
| - return query; | ||
| - } | ||
| - var queryDialog = | ||
| - 'Search: <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">(Use /re/ syntax for regexp search)</span>'; | ||
| - function doSearch(cm, rev) { | ||
| - var state = getSearchState(cm); | ||
| - if (state.query) return findNext(cm, rev); | ||
| - dialog(cm, queryDialog, "Search for:", cm.getSelection(), function(query) { | ||
| - cm.operation(function() { | ||
| - if (!query || state.query) return; | ||
| - state.query = parseQuery(query); | ||
| - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); | ||
| - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); | ||
| - cm.addOverlay(state.overlay); | ||
| - if (cm.showMatchesOnScrollbar) { | ||
| - if (state.annotate) { state.annotate.clear(); state.annotate = null; } | ||
| - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); | ||
| - } | ||
| - state.posFrom = state.posTo = cm.getCursor(); | ||
| - findNext(cm, rev); | ||
| - }); | ||
| - }); | ||
| - } | ||
| - function findNext(cm, rev) {cm.operation(function() { | ||
| - var state = getSearchState(cm); | ||
| - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); | ||
| - if (!cursor.find(rev)) { | ||
| - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); | ||
| - if (!cursor.find(rev)) return; | ||
| - } | ||
| - cm.setSelection(cursor.from(), cursor.to()); | ||
| - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); | ||
| - state.posFrom = cursor.from(); state.posTo = cursor.to(); | ||
| - });} | ||
| - function clearSearch(cm) {cm.operation(function() { | ||
| - var state = getSearchState(cm); | ||
| - if (!state.query) return; | ||
| - state.query = null; | ||
| - cm.removeOverlay(state.overlay); | ||
| - if (state.annotate) { state.annotate.clear(); state.annotate = null; } | ||
| - });} | ||
| - | ||
| - var replaceQueryDialog = | ||
| - 'Replace: <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">(Use /re/ syntax for regexp search)</span>'; | ||
| - var replacementQueryDialog = 'With: <input type="text" style="width: 10em" class="CodeMirror-search-field"/>'; | ||
| - var doReplaceConfirm = "Replace? <button>Yes</button> <button>No</button> <button>Stop</button>"; | ||
| - function replace(cm, all) { | ||
| - if (cm.getOption("readOnly")) return; | ||
| - dialog(cm, replaceQueryDialog, "Replace:", cm.getSelection(), function(query) { | ||
| - if (!query) return; | ||
| - query = parseQuery(query); | ||
| - dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) { | ||
| - if (all) { | ||
| - cm.operation(function() { | ||
| - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { | ||
| - if (typeof query != "string") { | ||
| - var match = cm.getRange(cursor.from(), cursor.to()).match(query); | ||
| - cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); | ||
| - } else cursor.replace(text); | ||
| - } | ||
| - }); | ||
| - } else { | ||
| - clearSearch(cm); | ||
| - var cursor = getSearchCursor(cm, query, cm.getCursor()); | ||
| - var advance = function() { | ||
| - var start = cursor.from(), match; | ||
| - if (!(match = cursor.findNext())) { | ||
| - cursor = getSearchCursor(cm, query); | ||
| - if (!(match = cursor.findNext()) || | ||
| - (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; | ||
| - } | ||
| - cm.setSelection(cursor.from(), cursor.to()); | ||
| - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); | ||
| - confirmDialog(cm, doReplaceConfirm, "Replace?", | ||
| - [function() {doReplace(match);}, advance]); | ||
| - }; | ||
| - var doReplace = function(match) { | ||
| - cursor.replace(typeof query == "string" ? text : | ||
| - text.replace(/\$(\d)/g, function(_, i) {return match[i];})); | ||
| - advance(); | ||
| - }; | ||
| - advance(); | ||
| - } | ||
| - }); | ||
| - }); | ||
| - } | ||
| - | ||
| - CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; | ||
| - CodeMirror.commands.findNext = doSearch; | ||
| - CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; | ||
| - CodeMirror.commands.clearSearch = clearSearch; | ||
| - CodeMirror.commands.replace = replace; | ||
| - CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; | ||
| -}); |
189
public/js/lib/codemirror/addon/search/searchcursor.js
| @@ -1,189 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function SearchCursor(doc, query, pos, caseFold) { | ||
| - this.atOccurrence = false; this.doc = doc; | ||
| - if (caseFold == null && typeof query == "string") caseFold = false; | ||
| - | ||
| - pos = pos ? doc.clipPos(pos) : Pos(0, 0); | ||
| - this.pos = {from: pos, to: pos}; | ||
| - | ||
| - // The matches method is filled in based on the type of query. | ||
| - // It takes a position and a direction, and returns an object | ||
| - // describing the next occurrence of the query, or null if no | ||
| - // more matches were found. | ||
| - if (typeof query != "string") { // Regexp match | ||
| - if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); | ||
| - this.matches = function(reverse, pos) { | ||
| - if (reverse) { | ||
| - query.lastIndex = 0; | ||
| - var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start; | ||
| - for (;;) { | ||
| - query.lastIndex = cutOff; | ||
| - var newMatch = query.exec(line); | ||
| - if (!newMatch) break; | ||
| - match = newMatch; | ||
| - start = match.index; | ||
| - cutOff = match.index + (match[0].length || 1); | ||
| - if (cutOff == line.length) break; | ||
| - } | ||
| - var matchLen = (match && match[0].length) || 0; | ||
| - if (!matchLen) { | ||
| - if (start == 0 && line.length == 0) {match = undefined;} | ||
| - else if (start != doc.getLine(pos.line).length) { | ||
| - matchLen++; | ||
| - } | ||
| - } | ||
| - } else { | ||
| - query.lastIndex = pos.ch; | ||
| - var line = doc.getLine(pos.line), match = query.exec(line); | ||
| - var matchLen = (match && match[0].length) || 0; | ||
| - var start = match && match.index; | ||
| - if (start + matchLen != line.length && !matchLen) matchLen = 1; | ||
| - } | ||
| - if (match && matchLen) | ||
| - return {from: Pos(pos.line, start), | ||
| - to: Pos(pos.line, start + matchLen), | ||
| - match: match}; | ||
| - }; | ||
| - } else { // String query | ||
| - var origQuery = query; | ||
| - if (caseFold) query = query.toLowerCase(); | ||
| - var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; | ||
| - var target = query.split("\n"); | ||
| - // Different methods for single-line and multi-line queries | ||
| - if (target.length == 1) { | ||
| - if (!query.length) { | ||
| - // Empty string would match anything and never progress, so | ||
| - // we define it to match nothing instead. | ||
| - this.matches = function() {}; | ||
| - } else { | ||
| - this.matches = function(reverse, pos) { | ||
| - if (reverse) { | ||
| - var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig); | ||
| - var match = line.lastIndexOf(query); | ||
| - if (match > -1) { | ||
| - match = adjustPos(orig, line, match); | ||
| - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; | ||
| - } | ||
| - } else { | ||
| - var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig); | ||
| - var match = line.indexOf(query); | ||
| - if (match > -1) { | ||
| - match = adjustPos(orig, line, match) + pos.ch; | ||
| - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; | ||
| - } | ||
| - } | ||
| - }; | ||
| - } | ||
| - } else { | ||
| - var origTarget = origQuery.split("\n"); | ||
| - this.matches = function(reverse, pos) { | ||
| - var last = target.length - 1; | ||
| - if (reverse) { | ||
| - if (pos.line - (target.length - 1) < doc.firstLine()) return; | ||
| - if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return; | ||
| - var to = Pos(pos.line, origTarget[last].length); | ||
| - for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln) | ||
| - if (target[i] != fold(doc.getLine(ln))) return; | ||
| - var line = doc.getLine(ln), cut = line.length - origTarget[0].length; | ||
| - if (fold(line.slice(cut)) != target[0]) return; | ||
| - return {from: Pos(ln, cut), to: to}; | ||
| - } else { | ||
| - if (pos.line + (target.length - 1) > doc.lastLine()) return; | ||
| - var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length; | ||
| - if (fold(line.slice(cut)) != target[0]) return; | ||
| - var from = Pos(pos.line, cut); | ||
| - for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln) | ||
| - if (target[i] != fold(doc.getLine(ln))) return; | ||
| - if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return; | ||
| - return {from: from, to: Pos(ln, origTarget[last].length)}; | ||
| - } | ||
| - }; | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - SearchCursor.prototype = { | ||
| - findNext: function() {return this.find(false);}, | ||
| - findPrevious: function() {return this.find(true);}, | ||
| - | ||
| - find: function(reverse) { | ||
| - var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); | ||
| - function savePosAndFail(line) { | ||
| - var pos = Pos(line, 0); | ||
| - self.pos = {from: pos, to: pos}; | ||
| - self.atOccurrence = false; | ||
| - return false; | ||
| - } | ||
| - | ||
| - for (;;) { | ||
| - if (this.pos = this.matches(reverse, pos)) { | ||
| - this.atOccurrence = true; | ||
| - return this.pos.match || true; | ||
| - } | ||
| - if (reverse) { | ||
| - if (!pos.line) return savePosAndFail(0); | ||
| - pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length); | ||
| - } | ||
| - else { | ||
| - var maxLine = this.doc.lineCount(); | ||
| - if (pos.line == maxLine - 1) return savePosAndFail(maxLine); | ||
| - pos = Pos(pos.line + 1, 0); | ||
| - } | ||
| - } | ||
| - }, | ||
| - | ||
| - from: function() {if (this.atOccurrence) return this.pos.from;}, | ||
| - to: function() {if (this.atOccurrence) return this.pos.to;}, | ||
| - | ||
| - replace: function(newText) { | ||
| - if (!this.atOccurrence) return; | ||
| - var lines = CodeMirror.splitLines(newText); | ||
| - this.doc.replaceRange(lines, this.pos.from, this.pos.to); | ||
| - this.pos.to = Pos(this.pos.from.line + lines.length - 1, | ||
| - lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); | ||
| - } | ||
| - }; | ||
| - | ||
| - // Maps a position in a case-folded line back to a position in the original line | ||
| - // (compensating for codepoints increasing in number during folding) | ||
| - function adjustPos(orig, folded, pos) { | ||
| - if (orig.length == folded.length) return pos; | ||
| - for (var pos1 = Math.min(pos, orig.length);;) { | ||
| - var len1 = orig.slice(0, pos1).toLowerCase().length; | ||
| - if (len1 < pos) ++pos1; | ||
| - else if (len1 > pos) --pos1; | ||
| - else return pos1; | ||
| - } | ||
| - } | ||
| - | ||
| - CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { | ||
| - return new SearchCursor(this.doc, query, pos, caseFold); | ||
| - }); | ||
| - CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { | ||
| - return new SearchCursor(this, query, pos, caseFold); | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("selectMatches", function(query, caseFold) { | ||
| - var ranges = [], next; | ||
| - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); | ||
| - while (next = cur.findNext()) { | ||
| - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; | ||
| - ranges.push({anchor: cur.from(), head: cur.to()}); | ||
| - } | ||
| - if (ranges.length) | ||
| - this.setSelections(ranges, 0); | ||
| - }); | ||
| -}); |
71
public/js/lib/codemirror/addon/selection/active-line.js
| @@ -1,71 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Because sometimes you need to style the cursor's line. | ||
| -// | ||
| -// Adds an option 'styleActiveLine' which, when enabled, gives the | ||
| -// active line's wrapping <div> the CSS class "CodeMirror-activeline", | ||
| -// and gives its background <div> the class "CodeMirror-activeline-background". | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - var WRAP_CLASS = "CodeMirror-activeline"; | ||
| - var BACK_CLASS = "CodeMirror-activeline-background"; | ||
| - | ||
| - CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { | ||
| - var prev = old && old != CodeMirror.Init; | ||
| - if (val && !prev) { | ||
| - cm.state.activeLines = []; | ||
| - updateActiveLines(cm, cm.listSelections()); | ||
| - cm.on("beforeSelectionChange", selectionChange); | ||
| - } else if (!val && prev) { | ||
| - cm.off("beforeSelectionChange", selectionChange); | ||
| - clearActiveLines(cm); | ||
| - delete cm.state.activeLines; | ||
| - } | ||
| - }); | ||
| - | ||
| - function clearActiveLines(cm) { | ||
| - for (var i = 0; i < cm.state.activeLines.length; i++) { | ||
| - cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); | ||
| - cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); | ||
| - } | ||
| - } | ||
| - | ||
| - function sameArray(a, b) { | ||
| - if (a.length != b.length) return false; | ||
| - for (var i = 0; i < a.length; i++) | ||
| - if (a[i] != b[i]) return false; | ||
| - return true; | ||
| - } | ||
| - | ||
| - function updateActiveLines(cm, ranges) { | ||
| - var active = []; | ||
| - for (var i = 0; i < ranges.length; i++) { | ||
| - var range = ranges[i]; | ||
| - if (!range.empty()) continue; | ||
| - var line = cm.getLineHandleVisualStart(range.head.line); | ||
| - if (active[active.length - 1] != line) active.push(line); | ||
| - } | ||
| - if (sameArray(cm.state.activeLines, active)) return; | ||
| - cm.operation(function() { | ||
| - clearActiveLines(cm); | ||
| - for (var i = 0; i < active.length; i++) { | ||
| - cm.addLineClass(active[i], "wrap", WRAP_CLASS); | ||
| - cm.addLineClass(active[i], "background", BACK_CLASS); | ||
| - } | ||
| - cm.state.activeLines = active; | ||
| - }); | ||
| - } | ||
| - | ||
| - function selectionChange(cm, sel) { | ||
| - updateActiveLines(cm, sel.ranges); | ||
| - } | ||
| -}); |
118
public/js/lib/codemirror/addon/selection/mark-selection.js
| @@ -1,118 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Because sometimes you need to mark the selected *text*. | ||
| -// | ||
| -// Adds an option 'styleSelectedText' which, when enabled, gives | ||
| -// selected text the CSS class given as option value, or | ||
| -// "CodeMirror-selectedtext" when the value is not a string. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { | ||
| - var prev = old && old != CodeMirror.Init; | ||
| - if (val && !prev) { | ||
| - cm.state.markedSelection = []; | ||
| - cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; | ||
| - reset(cm); | ||
| - cm.on("cursorActivity", onCursorActivity); | ||
| - cm.on("change", onChange); | ||
| - } else if (!val && prev) { | ||
| - cm.off("cursorActivity", onCursorActivity); | ||
| - cm.off("change", onChange); | ||
| - clear(cm); | ||
| - cm.state.markedSelection = cm.state.markedSelectionStyle = null; | ||
| - } | ||
| - }); | ||
| - | ||
| - function onCursorActivity(cm) { | ||
| - cm.operation(function() { update(cm); }); | ||
| - } | ||
| - | ||
| - function onChange(cm) { | ||
| - if (cm.state.markedSelection.length) | ||
| - cm.operation(function() { clear(cm); }); | ||
| - } | ||
| - | ||
| - var CHUNK_SIZE = 8; | ||
| - var Pos = CodeMirror.Pos; | ||
| - var cmp = CodeMirror.cmpPos; | ||
| - | ||
| - function coverRange(cm, from, to, addAt) { | ||
| - if (cmp(from, to) == 0) return; | ||
| - var array = cm.state.markedSelection; | ||
| - var cls = cm.state.markedSelectionStyle; | ||
| - for (var line = from.line;;) { | ||
| - var start = line == from.line ? from : Pos(line, 0); | ||
| - var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; | ||
| - var end = atEnd ? to : Pos(endLine, 0); | ||
| - var mark = cm.markText(start, end, {className: cls}); | ||
| - if (addAt == null) array.push(mark); | ||
| - else array.splice(addAt++, 0, mark); | ||
| - if (atEnd) break; | ||
| - line = endLine; | ||
| - } | ||
| - } | ||
| - | ||
| - function clear(cm) { | ||
| - var array = cm.state.markedSelection; | ||
| - for (var i = 0; i < array.length; ++i) array[i].clear(); | ||
| - array.length = 0; | ||
| - } | ||
| - | ||
| - function reset(cm) { | ||
| - clear(cm); | ||
| - var ranges = cm.listSelections(); | ||
| - for (var i = 0; i < ranges.length; i++) | ||
| - coverRange(cm, ranges[i].from(), ranges[i].to()); | ||
| - } | ||
| - | ||
| - function update(cm) { | ||
| - if (!cm.somethingSelected()) return clear(cm); | ||
| - if (cm.listSelections().length > 1) return reset(cm); | ||
| - | ||
| - var from = cm.getCursor("start"), to = cm.getCursor("end"); | ||
| - | ||
| - var array = cm.state.markedSelection; | ||
| - if (!array.length) return coverRange(cm, from, to); | ||
| - | ||
| - var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); | ||
| - if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE || | ||
| - cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) | ||
| - return reset(cm); | ||
| - | ||
| - while (cmp(from, coverStart.from) > 0) { | ||
| - array.shift().clear(); | ||
| - coverStart = array[0].find(); | ||
| - } | ||
| - if (cmp(from, coverStart.from) < 0) { | ||
| - if (coverStart.to.line - from.line < CHUNK_SIZE) { | ||
| - array.shift().clear(); | ||
| - coverRange(cm, from, coverStart.to, 0); | ||
| - } else { | ||
| - coverRange(cm, from, coverStart.from, 0); | ||
| - } | ||
| - } | ||
| - | ||
| - while (cmp(to, coverEnd.to) < 0) { | ||
| - array.pop().clear(); | ||
| - coverEnd = array[array.length - 1].find(); | ||
| - } | ||
| - if (cmp(to, coverEnd.to) > 0) { | ||
| - if (to.line - coverEnd.from.line < CHUNK_SIZE) { | ||
| - array.pop().clear(); | ||
| - coverRange(cm, coverEnd.from, to); | ||
| - } else { | ||
| - coverRange(cm, coverEnd.to, to); | ||
| - } | ||
| - } | ||
| - } | ||
| -}); |
86
public/js/lib/codemirror/addon/tern/tern.css
| @@ -1,86 +0,0 @@ | ||
| -.CodeMirror-Tern-completion { | ||
| - padding-left: 22px; | ||
| - position: relative; | ||
| -} | ||
| -.CodeMirror-Tern-completion:before { | ||
| - position: absolute; | ||
| - left: 2px; | ||
| - bottom: 2px; | ||
| - border-radius: 50%; | ||
| - font-size: 12px; | ||
| - font-weight: bold; | ||
| - height: 15px; | ||
| - width: 15px; | ||
| - line-height: 16px; | ||
| - text-align: center; | ||
| - color: white; | ||
| - -moz-box-sizing: border-box; | ||
| - box-sizing: border-box; | ||
| -} | ||
| -.CodeMirror-Tern-completion-unknown:before { | ||
| - content: "?"; | ||
| - background: #4bb; | ||
| -} | ||
| -.CodeMirror-Tern-completion-object:before { | ||
| - content: "O"; | ||
| - background: #77c; | ||
| -} | ||
| -.CodeMirror-Tern-completion-fn:before { | ||
| - content: "F"; | ||
| - background: #7c7; | ||
| -} | ||
| -.CodeMirror-Tern-completion-array:before { | ||
| - content: "A"; | ||
| - background: #c66; | ||
| -} | ||
| -.CodeMirror-Tern-completion-number:before { | ||
| - content: "1"; | ||
| - background: #999; | ||
| -} | ||
| -.CodeMirror-Tern-completion-string:before { | ||
| - content: "S"; | ||
| - background: #999; | ||
| -} | ||
| -.CodeMirror-Tern-completion-bool:before { | ||
| - content: "B"; | ||
| - background: #999; | ||
| -} | ||
| - | ||
| -.CodeMirror-Tern-completion-guess { | ||
| - color: #999; | ||
| -} | ||
| - | ||
| -.CodeMirror-Tern-tooltip { | ||
| - border: 1px solid silver; | ||
| - border-radius: 3px; | ||
| - color: #444; | ||
| - padding: 2px 5px; | ||
| - font-size: 90%; | ||
| - font-family: monospace; | ||
| - background-color: white; | ||
| - white-space: pre-wrap; | ||
| - | ||
| - max-width: 40em; | ||
| - position: absolute; | ||
| - z-index: 10; | ||
| - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - box-shadow: 2px 3px 5px rgba(0,0,0,.2); | ||
| - | ||
| - transition: opacity 1s; | ||
| - -moz-transition: opacity 1s; | ||
| - -webkit-transition: opacity 1s; | ||
| - -o-transition: opacity 1s; | ||
| - -ms-transition: opacity 1s; | ||
| -} | ||
| - | ||
| -.CodeMirror-Tern-hint-doc { | ||
| - max-width: 25em; | ||
| - margin-top: -3px; | ||
| -} | ||
| - | ||
| -.CodeMirror-Tern-fname { color: black; } | ||
| -.CodeMirror-Tern-farg { color: #70a; } | ||
| -.CodeMirror-Tern-farg-current { text-decoration: underline; } | ||
| -.CodeMirror-Tern-type { color: #07c; } | ||
| -.CodeMirror-Tern-fhint-guess { opacity: .7; } |
670
public/js/lib/codemirror/addon/tern/tern.js
| @@ -1,670 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// Glue code between CodeMirror and Tern. | ||
| -// | ||
| -// Create a CodeMirror.TernServer to wrap an actual Tern server, | ||
| -// register open documents (CodeMirror.Doc instances) with it, and | ||
| -// call its methods to activate the assisting functions that Tern | ||
| -// provides. | ||
| -// | ||
| -// Options supported (all optional): | ||
| -// * defs: An array of JSON definition data structures. | ||
| -// * plugins: An object mapping plugin names to configuration | ||
| -// options. | ||
| -// * getFile: A function(name, c) that can be used to access files in | ||
| -// the project that haven't been loaded yet. Simply do c(null) to | ||
| -// indicate that a file is not available. | ||
| -// * fileFilter: A function(value, docName, doc) that will be applied | ||
| -// to documents before passing them on to Tern. | ||
| -// * switchToDoc: A function(name, doc) that should, when providing a | ||
| -// multi-file view, switch the view or focus to the named file. | ||
| -// * showError: A function(editor, message) that can be used to | ||
| -// override the way errors are displayed. | ||
| -// * completionTip: Customize the content in tooltips for completions. | ||
| -// Is passed a single argument—the completion's data as returned by | ||
| -// Tern—and may return a string, DOM node, or null to indicate that | ||
| -// no tip should be shown. By default the docstring is shown. | ||
| -// * typeTip: Like completionTip, but for the tooltips shown for type | ||
| -// queries. | ||
| -// * responseFilter: A function(doc, query, request, error, data) that | ||
| -// will be applied to the Tern responses before treating them | ||
| -// | ||
| -// | ||
| -// It is possible to run the Tern server in a web worker by specifying | ||
| -// these additional options: | ||
| -// * useWorker: Set to true to enable web worker mode. You'll probably | ||
| -// want to feature detect the actual value you use here, for example | ||
| -// !!window.Worker. | ||
| -// * workerScript: The main script of the worker. Point this to | ||
| -// wherever you are hosting worker.js from this directory. | ||
| -// * workerDeps: An array of paths pointing (relative to workerScript) | ||
| -// to the Acorn and Tern libraries and any Tern plugins you want to | ||
| -// load. Or, if you minified those into a single script and included | ||
| -// them in the workerScript, simply leave this undefined. | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - // declare global: tern | ||
| - | ||
| - CodeMirror.TernServer = function(options) { | ||
| - var self = this; | ||
| - this.options = options || {}; | ||
| - var plugins = this.options.plugins || (this.options.plugins = {}); | ||
| - if (!plugins.doc_comment) plugins.doc_comment = true; | ||
| - if (this.options.useWorker) { | ||
| - this.server = new WorkerServer(this); | ||
| - } else { | ||
| - this.server = new tern.Server({ | ||
| - getFile: function(name, c) { return getFile(self, name, c); }, | ||
| - async: true, | ||
| - defs: this.options.defs || [], | ||
| - plugins: plugins | ||
| - }); | ||
| - } | ||
| - this.docs = Object.create(null); | ||
| - this.trackChange = function(doc, change) { trackChange(self, doc, change); }; | ||
| - | ||
| - this.cachedArgHints = null; | ||
| - this.activeArgHints = null; | ||
| - this.jumpStack = []; | ||
| - | ||
| - this.getHint = function(cm, c) { return hint(self, cm, c); }; | ||
| - this.getHint.async = true; | ||
| - }; | ||
| - | ||
| - CodeMirror.TernServer.prototype = { | ||
| - addDoc: function(name, doc) { | ||
| - var data = {doc: doc, name: name, changed: null}; | ||
| - this.server.addFile(name, docValue(this, data)); | ||
| - CodeMirror.on(doc, "change", this.trackChange); | ||
| - return this.docs[name] = data; | ||
| - }, | ||
| - | ||
| - delDoc: function(id) { | ||
| - var found = resolveDoc(this, id); | ||
| - if (!found) return; | ||
| - CodeMirror.off(found.doc, "change", this.trackChange); | ||
| - delete this.docs[found.name]; | ||
| - this.server.delFile(found.name); | ||
| - }, | ||
| - | ||
| - hideDoc: function(id) { | ||
| - closeArgHints(this); | ||
| - var found = resolveDoc(this, id); | ||
| - if (found && found.changed) sendDoc(this, found); | ||
| - }, | ||
| - | ||
| - complete: function(cm) { | ||
| - cm.showHint({hint: this.getHint}); | ||
| - }, | ||
| - | ||
| - showType: function(cm, pos, c) { showContextInfo(this, cm, pos, "type", c); }, | ||
| - | ||
| - showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, "documentation", c); }, | ||
| - | ||
| - updateArgHints: function(cm) { updateArgHints(this, cm); }, | ||
| - | ||
| - jumpToDef: function(cm) { jumpToDef(this, cm); }, | ||
| - | ||
| - jumpBack: function(cm) { jumpBack(this, cm); }, | ||
| - | ||
| - rename: function(cm) { rename(this, cm); }, | ||
| - | ||
| - selectName: function(cm) { selectName(this, cm); }, | ||
| - | ||
| - request: function (cm, query, c, pos) { | ||
| - var self = this; | ||
| - var doc = findDoc(this, cm.getDoc()); | ||
| - var request = buildRequest(this, doc, query, pos); | ||
| - | ||
| - this.server.request(request, function (error, data) { | ||
| - if (!error && self.options.responseFilter) | ||
| - data = self.options.responseFilter(doc, query, request, error, data); | ||
| - c(error, data); | ||
| - }); | ||
| - } | ||
| - }; | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - var cls = "CodeMirror-Tern-"; | ||
| - var bigDoc = 250; | ||
| - | ||
| - function getFile(ts, name, c) { | ||
| - var buf = ts.docs[name]; | ||
| - if (buf) | ||
| - c(docValue(ts, buf)); | ||
| - else if (ts.options.getFile) | ||
| - ts.options.getFile(name, c); | ||
| - else | ||
| - c(null); | ||
| - } | ||
| - | ||
| - function findDoc(ts, doc, name) { | ||
| - for (var n in ts.docs) { | ||
| - var cur = ts.docs[n]; | ||
| - if (cur.doc == doc) return cur; | ||
| - } | ||
| - if (!name) for (var i = 0;; ++i) { | ||
| - n = "[doc" + (i || "") + "]"; | ||
| - if (!ts.docs[n]) { name = n; break; } | ||
| - } | ||
| - return ts.addDoc(name, doc); | ||
| - } | ||
| - | ||
| - function resolveDoc(ts, id) { | ||
| - if (typeof id == "string") return ts.docs[id]; | ||
| - if (id instanceof CodeMirror) id = id.getDoc(); | ||
| - if (id instanceof CodeMirror.Doc) return findDoc(ts, id); | ||
| - } | ||
| - | ||
| - function trackChange(ts, doc, change) { | ||
| - var data = findDoc(ts, doc); | ||
| - | ||
| - var argHints = ts.cachedArgHints; | ||
| - if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) <= 0) | ||
| - ts.cachedArgHints = null; | ||
| - | ||
| - var changed = data.changed; | ||
| - if (changed == null) | ||
| - data.changed = changed = {from: change.from.line, to: change.from.line}; | ||
| - var end = change.from.line + (change.text.length - 1); | ||
| - if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end); | ||
| - if (end >= changed.to) changed.to = end + 1; | ||
| - if (changed.from > change.from.line) changed.from = change.from.line; | ||
| - | ||
| - if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() { | ||
| - if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data); | ||
| - }, 200); | ||
| - } | ||
| - | ||
| - function sendDoc(ts, doc) { | ||
| - ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) { | ||
| - if (error) window.console.error(error); | ||
| - else doc.changed = null; | ||
| - }); | ||
| - } | ||
| - | ||
| - // Completion | ||
| - | ||
| - function hint(ts, cm, c) { | ||
| - ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) { | ||
| - if (error) return showError(ts, cm, error); | ||
| - var completions = [], after = ""; | ||
| - var from = data.start, to = data.end; | ||
| - if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" && | ||
| - cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]") | ||
| - after = "\"]"; | ||
| - | ||
| - for (var i = 0; i < data.completions.length; ++i) { | ||
| - var completion = data.completions[i], className = typeToIcon(completion.type); | ||
| - if (data.guess) className += " " + cls + "guess"; | ||
| - completions.push({text: completion.name + after, | ||
| - displayText: completion.name, | ||
| - className: className, | ||
| - data: completion}); | ||
| - } | ||
| - | ||
| - var obj = {from: from, to: to, list: completions}; | ||
| - var tooltip = null; | ||
| - CodeMirror.on(obj, "close", function() { remove(tooltip); }); | ||
| - CodeMirror.on(obj, "update", function() { remove(tooltip); }); | ||
| - CodeMirror.on(obj, "select", function(cur, node) { | ||
| - remove(tooltip); | ||
| - var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc; | ||
| - if (content) { | ||
| - tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset, | ||
| - node.getBoundingClientRect().top + window.pageYOffset, content); | ||
| - tooltip.className += " " + cls + "hint-doc"; | ||
| - } | ||
| - }); | ||
| - c(obj); | ||
| - }); | ||
| - } | ||
| - | ||
| - function typeToIcon(type) { | ||
| - var suffix; | ||
| - if (type == "?") suffix = "unknown"; | ||
| - else if (type == "number" || type == "string" || type == "bool") suffix = type; | ||
| - else if (/^fn\(/.test(type)) suffix = "fn"; | ||
| - else if (/^\[/.test(type)) suffix = "array"; | ||
| - else suffix = "object"; | ||
| - return cls + "completion " + cls + "completion-" + suffix; | ||
| - } | ||
| - | ||
| - // Type queries | ||
| - | ||
| - function showContextInfo(ts, cm, pos, queryName, c) { | ||
| - ts.request(cm, queryName, function(error, data) { | ||
| - if (error) return showError(ts, cm, error); | ||
| - if (ts.options.typeTip) { | ||
| - var tip = ts.options.typeTip(data); | ||
| - } else { | ||
| - var tip = elt("span", null, elt("strong", null, data.type || "not found")); | ||
| - if (data.doc) | ||
| - tip.appendChild(document.createTextNode(" — " + data.doc)); | ||
| - if (data.url) { | ||
| - tip.appendChild(document.createTextNode(" ")); | ||
| - tip.appendChild(elt("a", null, "[docs]")).href = data.url; | ||
| - } | ||
| - } | ||
| - tempTooltip(cm, tip); | ||
| - if (c) c(); | ||
| - }, pos); | ||
| - } | ||
| - | ||
| - // Maintaining argument hints | ||
| - | ||
| - function updateArgHints(ts, cm) { | ||
| - closeArgHints(ts); | ||
| - | ||
| - if (cm.somethingSelected()) return; | ||
| - var state = cm.getTokenAt(cm.getCursor()).state; | ||
| - var inner = CodeMirror.innerMode(cm.getMode(), state); | ||
| - if (inner.mode.name != "javascript") return; | ||
| - var lex = inner.state.lexical; | ||
| - if (lex.info != "call") return; | ||
| - | ||
| - var ch, argPos = lex.pos || 0, tabSize = cm.getOption("tabSize"); | ||
| - for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) { | ||
| - var str = cm.getLine(line), extra = 0; | ||
| - for (var pos = 0;;) { | ||
| - var tab = str.indexOf("\t", pos); | ||
| - if (tab == -1) break; | ||
| - extra += tabSize - (tab + extra) % tabSize - 1; | ||
| - pos = tab + 1; | ||
| - } | ||
| - ch = lex.column - extra; | ||
| - if (str.charAt(ch) == "(") {found = true; break;} | ||
| - } | ||
| - if (!found) return; | ||
| - | ||
| - var start = Pos(line, ch); | ||
| - var cache = ts.cachedArgHints; | ||
| - if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0) | ||
| - return showArgHints(ts, cm, argPos); | ||
| - | ||
| - ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) { | ||
| - if (error || !data.type || !(/^fn\(/).test(data.type)) return; | ||
| - ts.cachedArgHints = { | ||
| - start: pos, | ||
| - type: parseFnType(data.type), | ||
| - name: data.exprName || data.name || "fn", | ||
| - guess: data.guess, | ||
| - doc: cm.getDoc() | ||
| - }; | ||
| - showArgHints(ts, cm, argPos); | ||
| - }); | ||
| - } | ||
| - | ||
| - function showArgHints(ts, cm, pos) { | ||
| - closeArgHints(ts); | ||
| - | ||
| - var cache = ts.cachedArgHints, tp = cache.type; | ||
| - var tip = elt("span", cache.guess ? cls + "fhint-guess" : null, | ||
| - elt("span", cls + "fname", cache.name), "("); | ||
| - for (var i = 0; i < tp.args.length; ++i) { | ||
| - if (i) tip.appendChild(document.createTextNode(", ")); | ||
| - var arg = tp.args[i]; | ||
| - tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?")); | ||
| - if (arg.type != "?") { | ||
| - tip.appendChild(document.createTextNode(":\u00a0")); | ||
| - tip.appendChild(elt("span", cls + "type", arg.type)); | ||
| - } | ||
| - } | ||
| - tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); | ||
| - if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); | ||
| - var place = cm.cursorCoords(null, "page"); | ||
| - ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip); | ||
| - } | ||
| - | ||
| - function parseFnType(text) { | ||
| - var args = [], pos = 3; | ||
| - | ||
| - function skipMatching(upto) { | ||
| - var depth = 0, start = pos; | ||
| - for (;;) { | ||
| - var next = text.charAt(pos); | ||
| - if (upto.test(next) && !depth) return text.slice(start, pos); | ||
| - if (/[{\[\(]/.test(next)) ++depth; | ||
| - else if (/[}\]\)]/.test(next)) --depth; | ||
| - ++pos; | ||
| - } | ||
| - } | ||
| - | ||
| - // Parse arguments | ||
| - if (text.charAt(pos) != ")") for (;;) { | ||
| - var name = text.slice(pos).match(/^([^, \(\[\{]+): /); | ||
| - if (name) { | ||
| - pos += name[0].length; | ||
| - name = name[1]; | ||
| - } | ||
| - args.push({name: name, type: skipMatching(/[\),]/)}); | ||
| - if (text.charAt(pos) == ")") break; | ||
| - pos += 2; | ||
| - } | ||
| - | ||
| - var rettype = text.slice(pos).match(/^\) -> (.*)$/); | ||
| - | ||
| - return {args: args, rettype: rettype && rettype[1]}; | ||
| - } | ||
| - | ||
| - // Moving to the definition of something | ||
| - | ||
| - function jumpToDef(ts, cm) { | ||
| - function inner(varName) { | ||
| - var req = {type: "definition", variable: varName || null}; | ||
| - var doc = findDoc(ts, cm.getDoc()); | ||
| - ts.server.request(buildRequest(ts, doc, req), function(error, data) { | ||
| - if (error) return showError(ts, cm, error); | ||
| - if (!data.file && data.url) { window.open(data.url); return; } | ||
| - | ||
| - if (data.file) { | ||
| - var localDoc = ts.docs[data.file], found; | ||
| - if (localDoc && (found = findContext(localDoc.doc, data))) { | ||
| - ts.jumpStack.push({file: doc.name, | ||
| - start: cm.getCursor("from"), | ||
| - end: cm.getCursor("to")}); | ||
| - moveTo(ts, doc, localDoc, found.start, found.end); | ||
| - return; | ||
| - } | ||
| - } | ||
| - showError(ts, cm, "Could not find a definition."); | ||
| - }); | ||
| - } | ||
| - | ||
| - if (!atInterestingExpression(cm)) | ||
| - dialog(cm, "Jump to variable", function(name) { if (name) inner(name); }); | ||
| - else | ||
| - inner(); | ||
| - } | ||
| - | ||
| - function jumpBack(ts, cm) { | ||
| - var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file]; | ||
| - if (!doc) return; | ||
| - moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end); | ||
| - } | ||
| - | ||
| - function moveTo(ts, curDoc, doc, start, end) { | ||
| - doc.doc.setSelection(start, end); | ||
| - if (curDoc != doc && ts.options.switchToDoc) { | ||
| - closeArgHints(ts); | ||
| - ts.options.switchToDoc(doc.name, doc.doc); | ||
| - } | ||
| - } | ||
| - | ||
| - // The {line,ch} representation of positions makes this rather awkward. | ||
| - function findContext(doc, data) { | ||
| - var before = data.context.slice(0, data.contextOffset).split("\n"); | ||
| - var startLine = data.start.line - (before.length - 1); | ||
| - var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length); | ||
| - | ||
| - var text = doc.getLine(startLine).slice(start.ch); | ||
| - for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur) | ||
| - text += "\n" + doc.getLine(cur); | ||
| - if (text.slice(0, data.context.length) == data.context) return data; | ||
| - | ||
| - var cursor = doc.getSearchCursor(data.context, 0, false); | ||
| - var nearest, nearestDist = Infinity; | ||
| - while (cursor.findNext()) { | ||
| - var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000; | ||
| - if (!dist) dist = Math.abs(from.ch - start.ch); | ||
| - if (dist < nearestDist) { nearest = from; nearestDist = dist; } | ||
| - } | ||
| - if (!nearest) return null; | ||
| - | ||
| - if (before.length == 1) | ||
| - nearest.ch += before[0].length; | ||
| - else | ||
| - nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length); | ||
| - if (data.start.line == data.end.line) | ||
| - var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch)); | ||
| - else | ||
| - var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch); | ||
| - return {start: nearest, end: end}; | ||
| - } | ||
| - | ||
| - function atInterestingExpression(cm) { | ||
| - var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos); | ||
| - if (tok.start < pos.ch && (tok.type == "comment" || tok.type == "string")) return false; | ||
| - return /\w/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1)); | ||
| - } | ||
| - | ||
| - // Variable renaming | ||
| - | ||
| - function rename(ts, cm) { | ||
| - var token = cm.getTokenAt(cm.getCursor()); | ||
| - if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable"); | ||
| - dialog(cm, "New name for " + token.string, function(newName) { | ||
| - ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) { | ||
| - if (error) return showError(ts, cm, error); | ||
| - applyChanges(ts, data.changes); | ||
| - }); | ||
| - }); | ||
| - } | ||
| - | ||
| - function selectName(ts, cm) { | ||
| - var name = findDoc(ts, cm.doc).name; | ||
| - ts.request(cm, {type: "refs"}, function(error, data) { | ||
| - if (error) return showError(ts, cm, error); | ||
| - var ranges = [], cur = 0; | ||
| - for (var i = 0; i < data.refs.length; i++) { | ||
| - var ref = data.refs[i]; | ||
| - if (ref.file == name) { | ||
| - ranges.push({anchor: ref.start, head: ref.end}); | ||
| - if (cmpPos(cur, ref.start) >= 0 && cmpPos(cur, ref.end) <= 0) | ||
| - cur = ranges.length - 1; | ||
| - } | ||
| - } | ||
| - cm.setSelections(ranges, cur); | ||
| - }); | ||
| - } | ||
| - | ||
| - var nextChangeOrig = 0; | ||
| - function applyChanges(ts, changes) { | ||
| - var perFile = Object.create(null); | ||
| - for (var i = 0; i < changes.length; ++i) { | ||
| - var ch = changes[i]; | ||
| - (perFile[ch.file] || (perFile[ch.file] = [])).push(ch); | ||
| - } | ||
| - for (var file in perFile) { | ||
| - var known = ts.docs[file], chs = perFile[file];; | ||
| - if (!known) continue; | ||
| - chs.sort(function(a, b) { return cmpPos(b.start, a.start); }); | ||
| - var origin = "*rename" + (++nextChangeOrig); | ||
| - for (var i = 0; i < chs.length; ++i) { | ||
| - var ch = chs[i]; | ||
| - known.doc.replaceRange(ch.text, ch.start, ch.end, origin); | ||
| - } | ||
| - } | ||
| - } | ||
| - | ||
| - // Generic request-building helper | ||
| - | ||
| - function buildRequest(ts, doc, query, pos) { | ||
| - var files = [], offsetLines = 0, allowFragments = !query.fullDocs; | ||
| - if (!allowFragments) delete query.fullDocs; | ||
| - if (typeof query == "string") query = {type: query}; | ||
| - query.lineCharPositions = true; | ||
| - if (query.end == null) { | ||
| - query.end = pos || doc.doc.getCursor("end"); | ||
| - if (doc.doc.somethingSelected()) | ||
| - query.start = doc.doc.getCursor("start"); | ||
| - } | ||
| - var startPos = query.start || query.end; | ||
| - | ||
| - if (doc.changed) { | ||
| - if (doc.doc.lineCount() > bigDoc && allowFragments !== false && | ||
| - doc.changed.to - doc.changed.from < 100 && | ||
| - doc.changed.from <= startPos.line && doc.changed.to > query.end.line) { | ||
| - files.push(getFragmentAround(doc, startPos, query.end)); | ||
| - query.file = "#0"; | ||
| - var offsetLines = files[0].offsetLines; | ||
| - if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch); | ||
| - query.end = Pos(query.end.line - offsetLines, query.end.ch); | ||
| - } else { | ||
| - files.push({type: "full", | ||
| - name: doc.name, | ||
| - text: docValue(ts, doc)}); | ||
| - query.file = doc.name; | ||
| - doc.changed = null; | ||
| - } | ||
| - } else { | ||
| - query.file = doc.name; | ||
| - } | ||
| - for (var name in ts.docs) { | ||
| - var cur = ts.docs[name]; | ||
| - if (cur.changed && cur != doc) { | ||
| - files.push({type: "full", name: cur.name, text: docValue(ts, cur)}); | ||
| - cur.changed = null; | ||
| - } | ||
| - } | ||
| - | ||
| - return {query: query, files: files}; | ||
| - } | ||
| - | ||
| - function getFragmentAround(data, start, end) { | ||
| - var doc = data.doc; | ||
| - var minIndent = null, minLine = null, endLine, tabSize = 4; | ||
| - for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) { | ||
| - var line = doc.getLine(p), fn = line.search(/\bfunction\b/); | ||
| - if (fn < 0) continue; | ||
| - var indent = CodeMirror.countColumn(line, null, tabSize); | ||
| - if (minIndent != null && minIndent <= indent) continue; | ||
| - minIndent = indent; | ||
| - minLine = p; | ||
| - } | ||
| - if (minLine == null) minLine = min; | ||
| - var max = Math.min(doc.lastLine(), end.line + 20); | ||
| - if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize)) | ||
| - endLine = max; | ||
| - else for (endLine = end.line + 1; endLine < max; ++endLine) { | ||
| - var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize); | ||
| - if (indent <= minIndent) break; | ||
| - } | ||
| - var from = Pos(minLine, 0); | ||
| - | ||
| - return {type: "part", | ||
| - name: data.name, | ||
| - offsetLines: from.line, | ||
| - text: doc.getRange(from, Pos(endLine, 0))}; | ||
| - } | ||
| - | ||
| - // Generic utilities | ||
| - | ||
| - var cmpPos = CodeMirror.cmpPos; | ||
| - | ||
| - function elt(tagname, cls /*, ... elts*/) { | ||
| - var e = document.createElement(tagname); | ||
| - if (cls) e.className = cls; | ||
| - for (var i = 2; i < arguments.length; ++i) { | ||
| - var elt = arguments[i]; | ||
| - if (typeof elt == "string") elt = document.createTextNode(elt); | ||
| - e.appendChild(elt); | ||
| - } | ||
| - return e; | ||
| - } | ||
| - | ||
| - function dialog(cm, text, f) { | ||
| - if (cm.openDialog) | ||
| - cm.openDialog(text + ": <input type=text>", f); | ||
| - else | ||
| - f(prompt(text, "")); | ||
| - } | ||
| - | ||
| - // Tooltips | ||
| - | ||
| - function tempTooltip(cm, content) { | ||
| - var where = cm.cursorCoords(); | ||
| - var tip = makeTooltip(where.right + 1, where.bottom, content); | ||
| - function clear() { | ||
| - if (!tip.parentNode) return; | ||
| - cm.off("cursorActivity", clear); | ||
| - fadeOut(tip); | ||
| - } | ||
| - setTimeout(clear, 1700); | ||
| - cm.on("cursorActivity", clear); | ||
| - } | ||
| - | ||
| - function makeTooltip(x, y, content) { | ||
| - var node = elt("div", cls + "tooltip", content); | ||
| - node.style.left = x + "px"; | ||
| - node.style.top = y + "px"; | ||
| - document.body.appendChild(node); | ||
| - return node; | ||
| - } | ||
| - | ||
| - function remove(node) { | ||
| - var p = node && node.parentNode; | ||
| - if (p) p.removeChild(node); | ||
| - } | ||
| - | ||
| - function fadeOut(tooltip) { | ||
| - tooltip.style.opacity = "0"; | ||
| - setTimeout(function() { remove(tooltip); }, 1100); | ||
| - } | ||
| - | ||
| - function showError(ts, cm, msg) { | ||
| - if (ts.options.showError) | ||
| - ts.options.showError(cm, msg); | ||
| - else | ||
| - tempTooltip(cm, String(msg)); | ||
| - } | ||
| - | ||
| - function closeArgHints(ts) { | ||
| - if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; } | ||
| - } | ||
| - | ||
| - function docValue(ts, doc) { | ||
| - var val = doc.doc.getValue(); | ||
| - if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc); | ||
| - return val; | ||
| - } | ||
| - | ||
| - // Worker wrapper | ||
| - | ||
| - function WorkerServer(ts) { | ||
| - var worker = new Worker(ts.options.workerScript); | ||
| - worker.postMessage({type: "init", | ||
| - defs: ts.options.defs, | ||
| - plugins: ts.options.plugins, | ||
| - scripts: ts.options.workerDeps}); | ||
| - var msgId = 0, pending = {}; | ||
| - | ||
| - function send(data, c) { | ||
| - if (c) { | ||
| - data.id = ++msgId; | ||
| - pending[msgId] = c; | ||
| - } | ||
| - worker.postMessage(data); | ||
| - } | ||
| - worker.onmessage = function(e) { | ||
| - var data = e.data; | ||
| - if (data.type == "getFile") { | ||
| - getFile(ts, data.name, function(err, text) { | ||
| - send({type: "getFile", err: String(err), text: text, id: data.id}); | ||
| - }); | ||
| - } else if (data.type == "debug") { | ||
| - window.console.log(data.message); | ||
| - } else if (data.id && pending[data.id]) { | ||
| - pending[data.id](data.err, data.body); | ||
| - delete pending[data.id]; | ||
| - } | ||
| - }; | ||
| - worker.onerror = function(e) { | ||
| - for (var id in pending) pending[id](e); | ||
| - pending = {}; | ||
| - }; | ||
| - | ||
| - this.addFile = function(name, text) { send({type: "add", name: name, text: text}); }; | ||
| - this.delFile = function(name) { send({type: "del", name: name}); }; | ||
| - this.request = function(body, c) { send({type: "req", body: body}, c); }; | ||
| - } | ||
| -}); |
44
public/js/lib/codemirror/addon/tern/worker.js
| @@ -1,44 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -// declare global: tern, server | ||
| - | ||
| -var server; | ||
| - | ||
| -this.onmessage = function(e) { | ||
| - var data = e.data; | ||
| - switch (data.type) { | ||
| - case "init": return startServer(data.defs, data.plugins, data.scripts); | ||
| - case "add": return server.addFile(data.name, data.text); | ||
| - case "del": return server.delFile(data.name); | ||
| - case "req": return server.request(data.body, function(err, reqData) { | ||
| - postMessage({id: data.id, body: reqData, err: err && String(err)}); | ||
| - }); | ||
| - case "getFile": | ||
| - var c = pending[data.id]; | ||
| - delete pending[data.id]; | ||
| - return c(data.err, data.text); | ||
| - default: throw new Error("Unknown message type: " + data.type); | ||
| - } | ||
| -}; | ||
| - | ||
| -var nextId = 0, pending = {}; | ||
| -function getFile(file, c) { | ||
| - postMessage({type: "getFile", name: file, id: ++nextId}); | ||
| - pending[nextId] = c; | ||
| -} | ||
| - | ||
| -function startServer(defs, plugins, scripts) { | ||
| - if (scripts) importScripts.apply(null, scripts); | ||
| - | ||
| - server = new tern.Server({ | ||
| - getFile: getFile, | ||
| - async: true, | ||
| - defs: defs, | ||
| - plugins: plugins | ||
| - }); | ||
| -} | ||
| - | ||
| -var console = { | ||
| - log: function(v) { postMessage({type: "debug", message: v}); } | ||
| -}; |
139
public/js/lib/codemirror/addon/wrap/hardwrap.js
| @@ -1,139 +0,0 @@ | ||
| -// CodeMirror, copyright (c) by Marijn Haverbeke and others | ||
| -// Distributed under an MIT license: http://codemirror.net/LICENSE | ||
| - | ||
| -(function(mod) { | ||
| - if (typeof exports == "object" && typeof module == "object") // CommonJS | ||
| - mod(require("../../lib/codemirror")); | ||
| - else if (typeof define == "function" && define.amd) // AMD | ||
| - define(["../../lib/codemirror"], mod); | ||
| - else // Plain browser env | ||
| - mod(CodeMirror); | ||
| -})(function(CodeMirror) { | ||
| - "use strict"; | ||
| - | ||
| - var Pos = CodeMirror.Pos; | ||
| - | ||
| - function findParagraph(cm, pos, options) { | ||
| - var startRE = options.paragraphStart || cm.getHelper(pos, "paragraphStart"); | ||
| - for (var start = pos.line, first = cm.firstLine(); start > first; --start) { | ||
| - var line = cm.getLine(start); | ||
| - if (startRE && startRE.test(line)) break; | ||
| - if (!/\S/.test(line)) { ++start; break; } | ||
| - } | ||
| - var endRE = options.paragraphEnd || cm.getHelper(pos, "paragraphEnd"); | ||
| - for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) { | ||
| - var line = cm.getLine(end); | ||
| - if (endRE && endRE.test(line)) { ++end; break; } | ||
| - if (!/\S/.test(line)) break; | ||
| - } | ||
| - return {from: start, to: end}; | ||
| - } | ||
| - | ||
| - function findBreakPoint(text, column, wrapOn, killTrailingSpace) { | ||
| - for (var at = column; at > 0; --at) | ||
| - if (wrapOn.test(text.slice(at - 1, at + 1))) break; | ||
| - if (at == 0) at = column; | ||
| - var endOfText = at; | ||
| - if (killTrailingSpace) | ||
| - while (text.charAt(endOfText - 1) == " ") --endOfText; | ||
| - return {from: endOfText, to: at}; | ||
| - } | ||
| - | ||
| - function wrapRange(cm, from, to, options) { | ||
| - from = cm.clipPos(from); to = cm.clipPos(to); | ||
| - var column = options.column || 80; | ||
| - var wrapOn = options.wrapOn || /\s\S|-[^\.\d]/; | ||
| - var killTrailing = options.killTrailingSpace !== false; | ||
| - var changes = [], curLine = "", curNo = from.line; | ||
| - var lines = cm.getRange(from, to, false); | ||
| - if (!lines.length) return null; | ||
| - var leadingSpace = lines[0].match(/^[ \t]*/)[0]; | ||
| - | ||
| - for (var i = 0; i < lines.length; ++i) { | ||
| - var text = lines[i], oldLen = curLine.length, spaceInserted = 0; | ||
| - if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) { | ||
| - curLine += " "; | ||
| - spaceInserted = 1; | ||
| - } | ||
| - var spaceTrimmed = ""; | ||
| - if (i) { | ||
| - spaceTrimmed = text.match(/^\s*/)[0]; | ||
| - text = text.slice(spaceTrimmed.length); | ||
| - } | ||
| - curLine += text; | ||
| - if (i) { | ||
| - var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed && | ||
| - findBreakPoint(curLine, column, wrapOn, killTrailing); | ||
| - // If this isn't broken, or is broken at a different point, remove old break | ||
| - if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) { | ||
| - changes.push({text: [spaceInserted ? " " : ""], | ||
| - from: Pos(curNo, oldLen), | ||
| - to: Pos(curNo + 1, spaceTrimmed.length)}); | ||
| - } else { | ||
| - curLine = leadingSpace + text; | ||
| - ++curNo; | ||
| - } | ||
| - } | ||
| - while (curLine.length > column) { | ||
| - var bp = findBreakPoint(curLine, column, wrapOn, killTrailing); | ||
| - changes.push({text: ["", leadingSpace], | ||
| - from: Pos(curNo, bp.from), | ||
| - to: Pos(curNo, bp.to)}); | ||
| - curLine = leadingSpace + curLine.slice(bp.to); | ||
| - ++curNo; | ||
| - } | ||
| - } | ||
| - if (changes.length) cm.operation(function() { | ||
| - for (var i = 0; i < changes.length; ++i) { | ||
| - var change = changes[i]; | ||
| - cm.replaceRange(change.text, change.from, change.to); | ||
| - } | ||
| - }); | ||
| - return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null; | ||
| - } | ||
| - | ||
| - CodeMirror.defineExtension("wrapParagraph", function(pos, options) { | ||
| - options = options || {}; | ||
| - if (!pos) pos = this.getCursor(); | ||
| - var para = findParagraph(this, pos, options); | ||
| - return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options); | ||
| - }); | ||
| - | ||
| - CodeMirror.commands.wrapLines = function(cm) { | ||
| - cm.operation(function() { | ||
| - var ranges = cm.listSelections(), at = cm.lastLine() + 1; | ||
| - for (var i = ranges.length - 1; i >= 0; i--) { | ||
| - var range = ranges[i], span; | ||
| - if (range.empty()) { | ||
| - var para = findParagraph(cm, range.head, {}); | ||
| - span = {from: Pos(para.from, 0), to: Pos(para.to - 1)}; | ||
| - } else { | ||
| - span = {from: range.from(), to: range.to()}; | ||
| - } | ||
| - if (span.to.line >= at) continue; | ||
| - at = span.from.line; | ||
| - wrapRange(cm, span.from, span.to, {}); | ||
| - } | ||
| - }); | ||
| - }; | ||
| - | ||
| - CodeMirror.defineExtension("wrapRange", function(from, to, options) { | ||
| - return wrapRange(this, from, to, options || {}); | ||
| - }); | ||
| - | ||
| - CodeMirror.defineExtension("wrapParagraphsInRange", function(from, to, options) { | ||
| - options = options || {}; | ||
| - var cm = this, paras = []; | ||
| - for (var line = from.line; line <= to.line;) { | ||
| - var para = findParagraph(cm, Pos(line, 0), options); | ||
| - paras.push(para); | ||
| - line = para.to; | ||
| - } | ||
| - var madeChange = false; | ||
| - if (paras.length) cm.operation(function() { | ||
| - for (var i = paras.length - 1; i >= 0; --i) | ||
| - madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options); | ||
| - }); | ||
| - return madeChange; | ||
| - }); | ||
| -}); |
6
public/js/lib/codemirror/bin/authors.sh
| @@ -1,6 +0,0 @@ | ||
| -# Combine existing list of authors with everyone known in git, sort, add header. | ||
| -tail --lines=+3 AUTHORS > AUTHORS.tmp | ||
| -git log --format='%aN' >> AUTHORS.tmp | ||
| -echo -e "List of CodeMirror contributors. Updated before every release.\n" > AUTHORS | ||
| -sort -u AUTHORS.tmp >> AUTHORS | ||
| -rm -f AUTHORS.tmp |
92
public/js/lib/codemirror/bin/compress
| @@ -1,92 +0,0 @@ | ||
| -#!/usr/bin/env node | ||
| - | ||
| -// Compression helper for CodeMirror | ||
| -// | ||
| -// Example: | ||
| -// | ||
| -// bin/compress codemirror runmode javascript xml | ||
| -// | ||
| -// Will take lib/codemirror.js, addon/runmode/runmode.js, | ||
| -// mode/javascript/javascript.js, and mode/xml/xml.js, run them though | ||
| -// the online minifier at http://marijnhaverbeke.nl/uglifyjs, and spit | ||
| -// out the result. | ||
| -// | ||
| -// bin/compress codemirror --local /path/to/bin/UglifyJS | ||
| -// | ||
| -// Will use a local minifier instead of the online default one. | ||
| -// | ||
| -// Script files are specified without .js ending. Prefixing them with | ||
| -// their full (local) path is optional. So you may say lib/codemirror | ||
| -// or mode/xml/xml to be more precise. In fact, even the .js suffix | ||
| -// may be speficied, if wanted. | ||
| - | ||
| -"use strict"; | ||
| - | ||
| -var fs = require("fs"); | ||
| - | ||
| -function help(ok) { | ||
| - console.log("usage: " + process.argv[1] + " [--local /path/to/uglifyjs] files..."); | ||
| - process.exit(ok ? 0 : 1); | ||
| -} | ||
| - | ||
| -var local = null, args = [], extraArgs = null, files = [], blob = ""; | ||
| - | ||
| -for (var i = 2; i < process.argv.length; ++i) { | ||
| - var arg = process.argv[i]; | ||
| - if (arg == "--local" && i + 1 < process.argv.length) { | ||
| - var parts = process.argv[++i].split(/\s+/); | ||
| - local = parts[0]; | ||
| - extraArgs = parts.slice(1); | ||
| - if (!extraArgs.length) extraArgs = ["-c", "-m"]; | ||
| - } else if (arg == "--help") { | ||
| - help(true); | ||
| - } else if (arg[0] != "-") { | ||
| - files.push({name: arg, re: new RegExp("(?:\\/|^)" + arg + (/\.js$/.test(arg) ? "$" : "\\.js$"))}); | ||
| - } else help(false); | ||
| -} | ||
| - | ||
| -function walk(dir) { | ||
| - fs.readdirSync(dir).forEach(function(fname) { | ||
| - if (/^[_\.]/.test(fname)) return; | ||
| - var file = dir + fname; | ||
| - if (fs.statSync(file).isDirectory()) return walk(file + "/"); | ||
| - if (files.some(function(spec, i) { | ||
| - var match = spec.re.test(file); | ||
| - if (match) files.splice(i, 1); | ||
| - return match; | ||
| - })) { | ||
| - if (local) args.push(file); | ||
| - else blob += fs.readFileSync(file, "utf8"); | ||
| - } | ||
| - }); | ||
| -} | ||
| - | ||
| -walk("lib/"); | ||
| -walk("addon/"); | ||
| -walk("mode/"); | ||
| - | ||
| -if (!local && !blob) help(false); | ||
| - | ||
| -if (files.length) { | ||
| - console.log("Some speficied files were not found: " + | ||
| - files.map(function(a){return a.name;}).join(", ")); | ||
| - process.exit(1); | ||
| -} | ||
| - | ||
| -if (local) { | ||
| - require("child_process").spawn(local, args.concat(extraArgs), {stdio: ["ignore", process.stdout, process.stderr]}); | ||
| -} else { | ||
| - var data = new Buffer("js_code=" + require("querystring").escape(blob), "utf8"); | ||
| - var req = require("http").request({ | ||
| - host: "marijnhaverbeke.nl", | ||
| - port: 80, | ||
| - method: "POST", | ||
| - path: "/uglifyjs", | ||
| - headers: {"content-type": "application/x-www-form-urlencoded", | ||
| - "content-length": data.length} | ||
| - }); | ||
| - req.on("response", function(resp) { | ||
| - resp.on("data", function (chunk) { process.stdout.write(chunk); }); | ||
| - }); | ||
| - req.end(data); | ||
| -} |
16
public/js/lib/codemirror/bin/lint
| @@ -1,16 +0,0 @@ | ||
| -#!/usr/bin/env node | ||
| - | ||
| -var lint = require("../test/lint/lint"), | ||
| - path = require("path"); | ||
| - | ||
| -if (process.argv.length > 2) { | ||
| - lint.checkDir(process.argv[2]); | ||
| -} else { | ||
| - process.chdir(path.resolve(__dirname, "..")); | ||
| - lint.checkDir("lib"); | ||
| - lint.checkDir("mode"); | ||
| - lint.checkDir("addon"); | ||
| - lint.checkDir("keymap"); | ||
| -} | ||
| - | ||
| -process.exit(lint.success() ? 0 : 1); |
46
public/js/lib/codemirror/bin/release
| @@ -1,46 +0,0 @@ | ||
| -#!/usr/bin/env node | ||
| - | ||
| -var fs = require("fs"), child = require("child_process"); | ||
| - | ||
| -var number, bumpOnly; | ||
| - | ||
| -for (var i = 2; i < process.argv.length; i++) { | ||
| - if (process.argv[i] == "-bump") bumpOnly = true; | ||
| - else if (/^\d+\.\d+\.\d+$/.test(process.argv[i])) number = process.argv[i]; | ||
| - else { console.log("Bogus command line arg: " + process.argv[i]); process.exit(1); } | ||
| -} | ||
| - | ||
| -if (!number) { console.log("Must give a version"); process.exit(1); } | ||
| - | ||
| -function rewrite(file, f) { | ||
| - fs.writeFileSync(file, f(fs.readFileSync(file, "utf8")), "utf8"); | ||
| -} | ||
| - | ||
| -rewrite("lib/codemirror.js", function(lib) { | ||
| - return lib.replace(/CodeMirror\.version = "\d+\.\d+\.\d+"/, | ||
| - "CodeMirror.version = \"" + number + "\""); | ||
| -}); | ||
| -function rewriteJSON(pack) { | ||
| - return pack.replace(/"version":"\d+\.\d+\.\d+"/, "\"version\":\"" + number + "\""); | ||
| -} | ||
| -rewrite("package.json", rewriteJSON); | ||
| -rewrite("bower.json", rewriteJSON); | ||
| -rewrite("doc/manual.html", function(manual) { | ||
| - return manual.replace(/>version \d+\.\d+\.\d+<\/span>/, ">version " + number + "</span>"); | ||
| -}); | ||
| - | ||
| -if (bumpOnly) process.exit(0); | ||
| - | ||
| -child.exec("bash bin/authors.sh", function(){}); | ||
| - | ||
| -var simple = number.slice(0, number.lastIndexOf(".")); | ||
| - | ||
| -rewrite("doc/compress.html", function(cmp) { | ||
| - return cmp.replace(/<option value="http:\/\/codemirror.net\/">HEAD<\/option>/, | ||
| - "<option value=\"http://codemirror.net/\">HEAD</option>\n <option value=\"http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=" + number + ";f=\">" + simple + "</option>"); | ||
| -}); | ||
| - | ||
| -rewrite("index.html", function(index) { | ||
| - return index.replace(/<strong>version \d+\.\d+<\/strong>/, | ||
| - "<strong>version " + simple + "</strong>"); | ||
| -}); |
51
public/js/lib/codemirror/bin/source-highlight
| @@ -1,51 +0,0 @@ | ||
| -#!/usr/bin/env node | ||
| - | ||
| -// Simple command-line code highlighting tool. Reads code from stdin, | ||
| -// spits html to stdout. For example: | ||
| -// | ||
| -// echo 'function foo(a) { return a; }' | bin/source-highlight -s javascript | ||
| -// bin/source-highlight -s | ||
| - | ||
| -var fs = require("fs"); | ||
| - | ||
| -var CodeMirror = require("../addon/runmode/runmode.node.js"); | ||
| -require("../mode/meta.js"); | ||
| - | ||
| -var sPos = process.argv.indexOf("-s"); | ||
| -if (sPos == -1 || sPos == process.argv.length - 1) { | ||
| - console.error("Usage: source-highlight -s language"); | ||
| - process.exit(1); | ||
| -} | ||
| -var lang = process.argv[sPos + 1].toLowerCase(), modeName = lang; | ||
| -CodeMirror.modeInfo.forEach(function(info) { | ||
| - if (info.mime == lang) { | ||
| - modeName = info.mode; | ||
| - } else if (info.name.toLowerCase() == lang) { | ||
| - modeName = info.mode; | ||
| - lang = info.mime; | ||
| - } | ||
| -}); | ||
| - | ||
| -if (!CodeMirror.modes[modeName]) | ||
| - require("../mode/" + modeName + "/" + modeName + ".js"); | ||
| - | ||
| -function esc(str) { | ||
| - return str.replace(/[<&]/g, function(ch) { return ch == "&" ? "&" : "<"; }); | ||
| -} | ||
| - | ||
| -var code = fs.readFileSync("/dev/stdin", "utf8"); | ||
| -var curStyle = null, accum = ""; | ||
| -function flush() { | ||
| - if (curStyle) process.stdout.write("<span class=\"" + curStyle.replace(/(^|\s+)/g, "$1cm-") + "\">" + esc(accum) + "</span>"); | ||
| - else process.stdout.write(esc(accum)); | ||
| -} | ||
| - | ||
| -CodeMirror.runMode(code, lang, function(text, style) { | ||
| - if (style != curStyle) { | ||
| - flush(); | ||
| - curStyle = style; accum = text; | ||
| - } else { | ||
| - accum += text; | ||
| - } | ||
| -}); | ||
| -flush(); |
16
public/js/lib/codemirror/bower.json
| @@ -1,16 +0,0 @@ | ||
| -{ | ||
| - "name": "codemirror", | ||
| - "version":"4.10.0", | ||
| - "main": ["lib/codemirror.js", "lib/codemirror.css"], | ||
| - "ignore": [ | ||
| - "**/.*", | ||
| - "node_modules", | ||
| - "components", | ||
| - "bin", | ||
| - "demo", | ||
| - "doc", | ||
| - "test", | ||
| - "index.html", | ||
| - "package.json" | ||
| - ] | ||
| -} |
200
public/js/lib/codemirror/index.html
| @@ -1,200 +0,0 @@ | ||
| -<!doctype html> | ||
| - | ||
| -<title>CodeMirror</title> | ||
| -<meta charset="utf-8"/> | ||
| - | ||
| -<link rel=stylesheet href="lib/codemirror.css"> | ||
| -<link rel=stylesheet href="doc/docs.css"> | ||
| -<script src="lib/codemirror.js"></script> | ||
| -<script src="mode/xml/xml.js"></script> | ||
| -<script src="mode/javascript/javascript.js"></script> | ||
| -<script src="mode/css/css.js"></script> | ||
| -<script src="mode/htmlmixed/htmlmixed.js"></script> | ||
| -<script src="addon/edit/matchbrackets.js"></script> | ||
| - | ||
| -<script src="doc/activebookmark.js"></script> | ||
| - | ||
| -<style> | ||
| - .CodeMirror { height: auto; border: 1px solid #ddd; } | ||
| - .CodeMirror-scroll { max-height: 200px; } | ||
| - .CodeMirror pre { padding-left: 7px; line-height: 1.25; } | ||
| -</style> | ||
| - | ||
| -<div id=nav> | ||
| - <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="doc/logo.png"></a> | ||
| - | ||
| - <ul> | ||
| - <li><a class=active data-default="true" href="#description">Home</a> | ||
| - <li><a href="doc/manual.html">Manual</a> | ||
| - <li><a href="https://github.com/codemirror/codemirror">Code</a> | ||
| - </ul> | ||
| - <ul> | ||
| - <li><a href="#features">Features</a> | ||
| - <li><a href="#community">Community</a> | ||
| - <li><a href="#browsersupport">Browser support</a> | ||
| - </ul> | ||
| -</div> | ||
| - | ||
| -<article> | ||
| - | ||
| -<section id=description class=first> | ||
| - <p><strong>CodeMirror</strong> is a versatile text editor | ||
| - implemented in JavaScript for the browser. It is specialized for | ||
| - editing code, and comes with a number of <a href="mode/index.html">language modes</a> and <a href="doc/manual.html#addons">addons</a> | ||
| - that implement more advanced editing functionality.</p> | ||
| - | ||
| - <p>A rich <a href="doc/manual.html#api">programming API</a> and a | ||
| - CSS <a href="doc/manual.html#styling">theming</a> system are | ||
| - available for customizing CodeMirror to fit your application, and | ||
| - extending it with new functionality.</p> | ||
| -</section> | ||
| - | ||
| -<section id=demo> | ||
| - <h2>This is CodeMirror</h2> | ||
| - <form style="position: relative; margin-top: .5em;"><textarea id=demotext> | ||
| -<!-- Create a simple CodeMirror instance --> | ||
| -<link rel="stylesheet" href="lib/codemirror.css"> | ||
| -<script src="lib/codemirror.js"></script> | ||
| -<script> | ||
| - var editor = CodeMirror.fromTextArea(myTextarea, { | ||
| - lineNumbers: true | ||
| - }); | ||
| -</script></textarea> | ||
| - <select id="demolist" onchange="document.location = this.options[this.selectedIndex].value;"> | ||
| - <option value="#">Other demos...</option> | ||
| - <option value="demo/complete.html">Autocompletion</option> | ||
| - <option value="demo/folding.html">Code folding</option> | ||
| - <option value="demo/theme.html">Themes</option> | ||
| - <option value="mode/htmlmixed/index.html">Mixed language modes</option> | ||
| - <option value="demo/bidi.html">Bi-directional text</option> | ||
| - <option value="demo/variableheight.html">Variable font sizes</option> | ||
| - <option value="demo/search.html">Search interface</option> | ||
| - <option value="demo/vim.html">Vim bindings</option> | ||
| - <option value="demo/emacs.html">Emacs bindings</option> | ||
| - <option value="demo/sublime.html">Sublime Text bindings</option> | ||
| - <option value="demo/tern.html">Tern integration</option> | ||
| - <option value="demo/merge.html">Merge/diff interface</option> | ||
| - <option value="demo/fullscreen.html">Full-screen editor</option> | ||
| - <option value="demo/simplescrollbars.html">Custom scrollbars</option> | ||
| - </select></form> | ||
| - <script> | ||
| - var editor = CodeMirror.fromTextArea(document.getElementById("demotext"), { | ||
| - lineNumbers: true, | ||
| - mode: "text/html", | ||
| - matchBrackets: true | ||
| - }); | ||
| - </script> | ||
| - <div style="position: relative; margin: 1em 0;"> | ||
| - <a class="bigbutton left" href="http://codemirror.net/codemirror.zip">DOWNLOAD LATEST RELEASE</a> | ||
| - <div><strong>version 4.10</strong> (<a href="doc/releases.html">Release notes</a>)</div> | ||
| - <div>or use the <a href="doc/compress.html">minification helper</a></div> | ||
| - <div style="position: absolute; top: 0; right: 0; text-align: right"> | ||
| - <span class="bigbutton right" onclick="document.getElementById('paypal').submit();">DONATE WITH PAYPAL</span> | ||
| - <div style="position: relative"> | ||
| - or <span onclick="document.getElementById('bankinfo').style.display = 'block';" class=quasilink>Bank</span>, | ||
| - <span onclick="document.getElementById('bcinfo').style.display = 'block';" class=quasilink>Bitcoin</span>, | ||
| - <a href="http://www.patreon.com/marijn">Patreon</a><br> | ||
| - <a href="https://gratipay.com/marijnh/">Gratipay</a><br> | ||
| - <div id=bankinfo class=bankinfo> | ||
| - <span class=bankinfo_close onclick="document.getElementById('bankinfo').style.display = '';">×</span> | ||
| - Bank: <i>Rabobank</i><br/> | ||
| - Country: <i>Netherlands</i><br/> | ||
| - SWIFT: <i>RABONL2U</i><br/> | ||
| - Account: <i>147850770</i><br/> | ||
| - Name: <i>Marijn Haverbeke</i><br/> | ||
| - IBAN: <i>NL26 RABO 0147 8507 70</i> | ||
| - </div> | ||
| - <div id=bcinfo class=bankinfo> | ||
| - <span class=bankinfo_close onclick="document.getElementById('bcinfo').style.display = '';">×</span> | ||
| - Bitcoin address: 1HVnnU8E9yLPeFyNgNtUPB5deXBvUmZ6Nx | ||
| - </div> | ||
| - <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal"> | ||
| - <input type="hidden" name="cmd" value="_s-xclick"/> | ||
| - <input type="hidden" name="hosted_button_id" value="3FVHS5FGUY7CC"/> | ||
| - </form> | ||
| - </div> | ||
| - <div> | ||
| - Purchase <a href="http://codemirror.com">commercial support</a> | ||
| - </div> | ||
| - </div> | ||
| - </div> | ||
| -</section> | ||
| - | ||
| -<section id=features> | ||
| - <h2>Features</h2> | ||
| - <ul> | ||
| - <li>Support for <a href="mode/index.html">over 60 languages</a> out of the box | ||
| - <li>A powerful, <a href="mode/htmlmixed/index.html">composable</a> language mode <a href="doc/manual.html#modeapi">system</a> | ||
| - <li><a href="doc/manual.html#addon_show-hint">Autocompletion</a> (<a href="demo/xmlcomplete.html">XML</a>) | ||
| - <li><a href="doc/manual.html#addon_foldcode">Code folding</a> | ||
| - <li><a href="doc/manual.html#option_extraKeys">Configurable</a> keybindings | ||
| - <li><a href="demo/vim.html">Vim</a>, <a href="demo/emacs.html">Emacs</a>, and <a href="demo/sublime.html">Sublime Text</a> bindings | ||
| - <li><a href="doc/manual.html#addon_search">Search and replace</a> interface | ||
| - <li><a href="doc/manual.html#addon_matchbrackets">Bracket</a> and <a href="doc/manual.html#addon_matchtags">tag</a> matching | ||
| - <li>Support for <a href="demo/buffers.html">split views</a> | ||
| - <li><a href="doc/manual.html#addon_lint">Linter integration</a> | ||
| - <li><a href="demo/variableheight.html">Mixing font sizes and styles</a> | ||
| - <li><a href="demo/theme.html">Various themes</a> | ||
| - <li>Able to <a href="demo/resize.html">resize to fit content</a> | ||
| - <li><a href="doc/manual.html#mark_replacedWith">Inline</a> and <a href="doc/manual.html#addLineWidget">block</a> widgets | ||
| - <li>Programmable <a href="demo/marker.html">gutters</a> | ||
| - <li>Making ranges of text <a href="doc/manual.html#markText">styled, read-only, or atomic</a> | ||
| - <li><a href="demo/bidi.html">Bi-directional text</a> support | ||
| - <li>Many other <a href="doc/manual.html#api">methods</a> and <a href="doc/manual.html#addons">addons</a>... | ||
| - </ul> | ||
| -</section> | ||
| - | ||
| -<section id=community> | ||
| - <h2>Community</h2> | ||
| - | ||
| - <p>CodeMirror is an open-source project shared under | ||
| - an <a href="LICENSE">MIT license</a>. It is the editor used in the | ||
| - dev tools for | ||
| - both <a href="https://hacks.mozilla.org/2013/11/firefox-developer-tools-episode-27-edit-as-html-codemirror-more/">Firefox</a> | ||
| - and <a href="https://developers.google.com/chrome-developer-tools/">Chrome</a>, <a href="http://www.lighttable.com/">Light | ||
| - Table</a>, <a href="http://brackets.io/">Adobe | ||
| - Brackets</a>, <a href="http://blog.bitbucket.org/2013/05/14/edit-your-code-in-the-cloud-with-bitbucket/">Bitbucket</a>, | ||
| - and <a href="doc/realworld.html">many other projects</a>.</p> | ||
| - | ||
| - <p>Development and bug tracking happens | ||
| - on <a href="https://github.com/codemirror/CodeMirror/">github</a> | ||
| - (<a href="http://marijnhaverbeke.nl/git/codemirror">alternate git | ||
| - repository</a>). | ||
| - Please <a href="http://codemirror.net/doc/reporting.html">read these | ||
| - pointers</a> before submitting a bug. Use pull requests to submit | ||
| - patches. All contributions must be released under the same MIT | ||
| - license that CodeMirror uses.</p> | ||
| - | ||
| - <p>Discussion around the project is done on | ||
| - a <a href="http://discuss.codemirror.net">discussion forum</a>. | ||
| - There is also | ||
| - the <a href="http://groups.google.com/group/codemirror-announce">codemirror-announce</a> | ||
| - list, which is only used for major announcements (such as new | ||
| - versions). If needed, you can | ||
| - contact <a href="mailto:marijnh@gmail.com">the maintainer</a> | ||
| - directly.</p> | ||
| - | ||
| - <p>A list of CodeMirror-related software that is not part of the | ||
| - main distribution is maintained | ||
| - on <a href="https://github.com/codemirror/CodeMirror/wiki/CodeMirror-addons">our | ||
| - wiki</a>. Feel free to add your project.</p> | ||
| -</section> | ||
| - | ||
| -<section id=browsersupport> | ||
| - <h2>Browser support</h2> | ||
| - <p>The <em>desktop</em> versions of the following browsers, | ||
| - in <em>standards mode</em> (HTML5 <code><!doctype html></code> | ||
| - recommended) are supported:</p> | ||
| - <table style="margin-bottom: 1em"> | ||
| - <tr><th>Firefox</th><td>version 4 and up</td></tr> | ||
| - <tr><th>Chrome</th><td>any version</td></tr> | ||
| - <tr><th>Safari</th><td>version 5.2 and up</td></tr> | ||
| - <tr><th style="padding-right: 1em;">Internet Explorer</th><td>version 8 and up</td></tr> | ||
| - <tr><th>Opera</th><td>version 9 and up</td></tr> | ||
| - </table> | ||
| - <p>Modern mobile browsers tend to partly work. Bug reports and | ||
| - patches for mobile support are welcome, but the maintainer does not | ||
| - have the time or budget to actually work on it himself.</p> | ||
| -</section> | ||
| - | ||
| -</article> |
0
public/js/lib/codemirror/keymap/emacs.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/keymap/sublime.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/keymap/vim.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/lib/codemirror.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/lib/codemirror.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/css.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/less.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/less_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/scss.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/scss_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/css/test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/htmlembedded/htmlembedded.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/htmlembedded/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/htmlmixed/htmlmixed.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/htmlmixed/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/jade/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/jade/jade.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/javascript/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/javascript/javascript.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/javascript/json-ld.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/javascript/test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/javascript/typescript.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/markdown/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/markdown/markdown.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/markdown/test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/meta.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/xml/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/xml/test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/xml/xml.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/yaml/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/mode/yaml/yaml.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/package.json
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/comment_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/doc_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/driver.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/emacs_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/index.html
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/lint/acorn.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/lint/lint.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/lint/walk.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/mode_test.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/mode_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/multi_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/phantom_driver.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/run.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/scroll_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/search_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/sublime_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/test/vim_test.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/3024-day.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/3024-night.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/ambiance-mobile.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/ambiance.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/base16-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/base16-light.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/blackboard.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/cobalt.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/eclipse.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/elegant.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/erlang-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/lesser-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/mbo.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/mdn-like.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/midnight.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/monokai.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/neat.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/neo.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/night.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/paraiso-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/paraiso-light.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/pastel-on-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/rubyblue.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/solarized.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/the-matrix.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/tomorrow-night-bright.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/tomorrow-night-eighties.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/twilight.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/vibrant-ink.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/xq-dark.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/xq-light.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/codemirror/theme/zenburn.css
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/jquery-2.1.1.min.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/ramda/ramda.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
public/js/lib/ramda/ramda.min.js
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/coursewares/showBonfire.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/coursewares/showHTML.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/coursewares/showJS.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/coursewares/showStep.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/coursewares/showZiplineOrBasejump.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/partials/challenge-footer.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
server/views/partials/scripts.jade
Sorry, we could not display the changes to this file because there were too many other changes to display.
0 comments on commit
87fa381