poly-cms 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/Gemfile +27 -0
- data/Gemfile.lock +95 -0
- data/README.md +3 -0
- data/Rakefile +45 -0
- data/bin/poly +88 -0
- data/config.ru +3 -0
- data/core/admin/assets/images/icons/cache-clear.svg +11 -0
- data/core/admin/assets/images/icons/delete-dark.svg +10 -0
- data/core/admin/assets/images/icons/delete.svg +10 -0
- data/core/admin/assets/images/icons/handle.svg +12 -0
- data/core/admin/assets/images/icons/logout.svg +13 -0
- data/core/admin/assets/images/icons/move.svg +10 -0
- data/core/admin/assets/images/icons/new.svg +9 -0
- data/core/admin/assets/images/icons/prompt.svg +11 -0
- data/core/admin/assets/images/icons/refresh.svg +40 -0
- data/core/admin/assets/images/icons/save.svg +7 -0
- data/core/admin/assets/images/poly-small-boxed.svg +51 -0
- data/core/admin/assets/images/poly-small.svg +52 -0
- data/core/admin/assets/images/poly.svg +36 -0
- data/core/admin/assets/js/app/file-ext.js +15 -0
- data/core/admin/assets/js/app/views/editor.js +300 -0
- data/core/admin/assets/js/app/views/git.js +65 -0
- data/core/admin/assets/js/app/views/main.js +59 -0
- data/core/admin/assets/js/main.js +44 -0
- data/core/admin/assets/js/routes.js +25 -0
- data/core/admin/assets/js/vendor/backbone.js +4 -0
- data/core/admin/assets/js/vendor/codemirror/.gitattributes +8 -0
- data/core/admin/assets/js/vendor/codemirror/.gitignore +6 -0
- data/core/admin/assets/js/vendor/codemirror/.travis.yml +3 -0
- data/core/admin/assets/js/vendor/codemirror/addon/comment/comment.js +145 -0
- data/core/admin/assets/js/vendor/codemirror/addon/comment/continuecomment.js +54 -0
- data/core/admin/assets/js/vendor/codemirror/addon/dialog/dialog.css +32 -0
- data/core/admin/assets/js/vendor/codemirror/addon/dialog/dialog.js +80 -0
- data/core/admin/assets/js/vendor/codemirror/addon/display/fullscreen.css +6 -0
- data/core/admin/assets/js/vendor/codemirror/addon/display/fullscreen.js +30 -0
- data/core/admin/assets/js/vendor/codemirror/addon/display/placeholder.js +54 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/closebrackets.js +82 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/closetag.js +87 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/continuelist.js +25 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/matchbrackets.js +86 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/matchtags.js +56 -0
- data/core/admin/assets/js/vendor/codemirror/addon/edit/trailingspace.js +15 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/brace-fold.js +93 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/comment-fold.js +40 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/foldcode.js +75 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/foldgutter.css +21 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/foldgutter.js +124 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/indent-fold.js +26 -0
- data/core/admin/assets/js/vendor/codemirror/addon/fold/xml-fold.js +167 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/anyword-hint.js +34 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/css-hint.js +50 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/html-hint.js +337 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/javascript-hint.js +130 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/pig-hint.js +121 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/python-hint.js +95 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/show-hint.css +38 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/show-hint.js +274 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/sql-hint.js +105 -0
- data/core/admin/assets/js/vendor/codemirror/addon/hint/xml-hint.js +69 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/coffeescript-lint.js +27 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/css-lint.js +19 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/javascript-lint.js +126 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/json-lint.js +17 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/lint.css +73 -0
- data/core/admin/assets/js/vendor/codemirror/addon/lint/lint.js +203 -0
- data/core/admin/assets/js/vendor/codemirror/addon/merge/dep/diff_match_patch.js +50 -0
- data/core/admin/assets/js/vendor/codemirror/addon/merge/merge.css +92 -0
- data/core/admin/assets/js/vendor/codemirror/addon/merge/merge.js +474 -0
- data/core/admin/assets/js/vendor/codemirror/addon/mode/loadmode.js +51 -0
- data/core/admin/assets/js/vendor/codemirror/addon/mode/multiplex.js +101 -0
- data/core/admin/assets/js/vendor/codemirror/addon/mode/multiplex_test.js +30 -0
- data/core/admin/assets/js/vendor/codemirror/addon/mode/overlay.js +59 -0
- data/core/admin/assets/js/vendor/codemirror/addon/runmode/colorize.js +29 -0
- data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode-standalone.js +136 -0
- data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode.js +56 -0
- data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode.node.js +103 -0
- data/core/admin/assets/js/vendor/codemirror/addon/scroll/scrollpastend.js +34 -0
- data/core/admin/assets/js/vendor/codemirror/addon/search/match-highlighter.js +91 -0
- data/core/admin/assets/js/vendor/codemirror/addon/search/search.js +133 -0
- data/core/admin/assets/js/vendor/codemirror/addon/search/searchcursor.js +143 -0
- data/core/admin/assets/js/vendor/codemirror/addon/selection/active-line.js +39 -0
- data/core/admin/assets/js/vendor/codemirror/addon/selection/mark-selection.js +108 -0
- data/core/admin/assets/js/vendor/codemirror/addon/tern/tern.css +85 -0
- data/core/admin/assets/js/vendor/codemirror/addon/tern/tern.js +632 -0
- data/core/admin/assets/js/vendor/codemirror/addon/tern/worker.js +41 -0
- data/core/admin/assets/js/vendor/codemirror/addon/wrap/hardwrap.js +99 -0
- data/core/admin/assets/js/vendor/codemirror/bin/authors.sh +6 -0
- data/core/admin/assets/js/vendor/codemirror/bin/compress +92 -0
- data/core/admin/assets/js/vendor/codemirror/bin/lint +16 -0
- data/core/admin/assets/js/vendor/codemirror/bin/source-highlight +61 -0
- data/core/admin/assets/js/vendor/codemirror/bower.json +15 -0
- data/core/admin/assets/js/vendor/codemirror/demo/activeline.html +78 -0
- data/core/admin/assets/js/vendor/codemirror/demo/anywordhint.html +79 -0
- data/core/admin/assets/js/vendor/codemirror/demo/bidi.html +74 -0
- data/core/admin/assets/js/vendor/codemirror/demo/btree.html +86 -0
- data/core/admin/assets/js/vendor/codemirror/demo/buffers.html +109 -0
- data/core/admin/assets/js/vendor/codemirror/demo/changemode.html +59 -0
- data/core/admin/assets/js/vendor/codemirror/demo/closebrackets.html +63 -0
- data/core/admin/assets/js/vendor/codemirror/demo/closetag.html +40 -0
- data/core/admin/assets/js/vendor/codemirror/demo/complete.html +80 -0
- data/core/admin/assets/js/vendor/codemirror/demo/emacs.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/demo/folding.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/demo/fullscreen.html +130 -0
- data/core/admin/assets/js/vendor/codemirror/demo/hardwrap.html +69 -0
- data/core/admin/assets/js/vendor/codemirror/demo/html5complete.html +54 -0
- data/core/admin/assets/js/vendor/codemirror/demo/indentwrap.html +58 -0
- data/core/admin/assets/js/vendor/codemirror/demo/lint.html +171 -0
- data/core/admin/assets/js/vendor/codemirror/demo/loadmode.html +49 -0
- data/core/admin/assets/js/vendor/codemirror/demo/marker.html +52 -0
- data/core/admin/assets/js/vendor/codemirror/demo/markselection.html +45 -0
- data/core/admin/assets/js/vendor/codemirror/demo/matchhighlighter.html +47 -0
- data/core/admin/assets/js/vendor/codemirror/demo/matchtags.html +49 -0
- data/core/admin/assets/js/vendor/codemirror/demo/merge.html +82 -0
- data/core/admin/assets/js/vendor/codemirror/demo/multiplex.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/demo/mustache.html +68 -0
- data/core/admin/assets/js/vendor/codemirror/demo/placeholder.html +45 -0
- data/core/admin/assets/js/vendor/codemirror/demo/preview.html +88 -0
- data/core/admin/assets/js/vendor/codemirror/demo/resize.html +58 -0
- data/core/admin/assets/js/vendor/codemirror/demo/runmode.html +62 -0
- data/core/admin/assets/js/vendor/codemirror/demo/search.html +94 -0
- data/core/admin/assets/js/vendor/codemirror/demo/spanaffectswrapping_shim.html +85 -0
- data/core/admin/assets/js/vendor/codemirror/demo/tern.html +128 -0
- data/core/admin/assets/js/vendor/codemirror/demo/theme.html +121 -0
- data/core/admin/assets/js/vendor/codemirror/demo/trailingspace.html +48 -0
- data/core/admin/assets/js/vendor/codemirror/demo/variableheight.html +61 -0
- data/core/admin/assets/js/vendor/codemirror/demo/vim.html +74 -0
- data/core/admin/assets/js/vendor/codemirror/demo/visibletabs.html +62 -0
- data/core/admin/assets/js/vendor/codemirror/demo/widget.html +85 -0
- data/core/admin/assets/js/vendor/codemirror/demo/xmlcomplete.html +116 -0
- data/core/admin/assets/js/vendor/codemirror/doc/activebookmark.js +42 -0
- data/core/admin/assets/js/vendor/codemirror/doc/compress.html +231 -0
- data/core/admin/assets/js/vendor/codemirror/doc/docs.css +226 -0
- data/core/admin/assets/js/vendor/codemirror/doc/internals.html +503 -0
- data/core/admin/assets/js/vendor/codemirror/doc/logo.png +0 -0
- data/core/admin/assets/js/vendor/codemirror/doc/logo.svg +147 -0
- data/core/admin/assets/js/vendor/codemirror/doc/manual.html +2512 -0
- data/core/admin/assets/js/vendor/codemirror/doc/realworld.html +134 -0
- data/core/admin/assets/js/vendor/codemirror/doc/releases.html +779 -0
- data/core/admin/assets/js/vendor/codemirror/doc/reporting.html +61 -0
- data/core/admin/assets/js/vendor/codemirror/doc/upgrade_v2.2.html +96 -0
- data/core/admin/assets/js/vendor/codemirror/doc/upgrade_v3.html +230 -0
- data/core/admin/assets/js/vendor/codemirror/index.html +192 -0
- data/core/admin/assets/js/vendor/codemirror/keymap/emacs.js +387 -0
- data/core/admin/assets/js/vendor/codemirror/keymap/extra.js +43 -0
- data/core/admin/assets/js/vendor/codemirror/keymap/vim.js +3704 -0
- data/core/admin/assets/js/vendor/codemirror/lib/codemirror.css +263 -0
- data/core/admin/assets/js/vendor/codemirror/lib/codemirror.js +5910 -0
- data/core/admin/assets/js/vendor/codemirror/mode/apl/apl.js +160 -0
- data/core/admin/assets/js/vendor/codemirror/mode/apl/index.html +72 -0
- data/core/admin/assets/js/vendor/codemirror/mode/asterisk/asterisk.js +183 -0
- data/core/admin/assets/js/vendor/codemirror/mode/asterisk/index.html +154 -0
- data/core/admin/assets/js/vendor/codemirror/mode/clike/clike.js +362 -0
- data/core/admin/assets/js/vendor/codemirror/mode/clike/index.html +195 -0
- data/core/admin/assets/js/vendor/codemirror/mode/clike/scala.html +767 -0
- data/core/admin/assets/js/vendor/codemirror/mode/clojure/clojure.js +224 -0
- data/core/admin/assets/js/vendor/codemirror/mode/clojure/index.html +88 -0
- data/core/admin/assets/js/vendor/codemirror/mode/cobol/cobol.js +240 -0
- data/core/admin/assets/js/vendor/codemirror/mode/cobol/index.html +210 -0
- data/core/admin/assets/js/vendor/codemirror/mode/coffeescript/coffeescript.js +349 -0
- data/core/admin/assets/js/vendor/codemirror/mode/coffeescript/index.html +740 -0
- data/core/admin/assets/js/vendor/codemirror/mode/commonlisp/commonlisp.js +105 -0
- data/core/admin/assets/js/vendor/codemirror/mode/commonlisp/index.html +177 -0
- data/core/admin/assets/js/vendor/codemirror/mode/css/css.js +639 -0
- data/core/admin/assets/js/vendor/codemirror/mode/css/index.html +70 -0
- data/core/admin/assets/js/vendor/codemirror/mode/css/scss.html +157 -0
- data/core/admin/assets/js/vendor/codemirror/mode/css/scss_test.js +84 -0
- data/core/admin/assets/js/vendor/codemirror/mode/css/test.js +130 -0
- data/core/admin/assets/js/vendor/codemirror/mode/d/d.js +205 -0
- data/core/admin/assets/js/vendor/codemirror/mode/d/index.html +273 -0
- data/core/admin/assets/js/vendor/codemirror/mode/diff/diff.js +32 -0
- data/core/admin/assets/js/vendor/codemirror/mode/diff/index.html +117 -0
- data/core/admin/assets/js/vendor/codemirror/mode/dtd/dtd.js +127 -0
- data/core/admin/assets/js/vendor/codemirror/mode/dtd/index.html +89 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ecl/ecl.js +192 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ecl/index.html +52 -0
- data/core/admin/assets/js/vendor/codemirror/mode/eiffel/eiffel.js +147 -0
- data/core/admin/assets/js/vendor/codemirror/mode/eiffel/index.html +430 -0
- data/core/admin/assets/js/vendor/codemirror/mode/erlang/erlang.js +484 -0
- data/core/admin/assets/js/vendor/codemirror/mode/erlang/index.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/mode/fortran/fortran.js +173 -0
- data/core/admin/assets/js/vendor/codemirror/mode/fortran/index.html +81 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gas/gas.js +330 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gas/index.html +68 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gfm/gfm.js +97 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gfm/index.html +82 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gfm/test.js +112 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gherkin/gherkin.js +168 -0
- data/core/admin/assets/js/vendor/codemirror/mode/gherkin/index.html +48 -0
- data/core/admin/assets/js/vendor/codemirror/mode/go/go.js +168 -0
- data/core/admin/assets/js/vendor/codemirror/mode/go/index.html +85 -0
- data/core/admin/assets/js/vendor/codemirror/mode/groovy/groovy.js +211 -0
- data/core/admin/assets/js/vendor/codemirror/mode/groovy/index.html +84 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haml/haml.js +153 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haml/index.html +79 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haml/test.js +94 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haskell/haskell.js +250 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haskell/index.html +73 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haxe/haxe.js +429 -0
- data/core/admin/assets/js/vendor/codemirror/mode/haxe/index.html +103 -0
- data/core/admin/assets/js/vendor/codemirror/mode/htmlembedded/htmlembedded.js +73 -0
- data/core/admin/assets/js/vendor/codemirror/mode/htmlembedded/index.html +60 -0
- data/core/admin/assets/js/vendor/codemirror/mode/htmlmixed/htmlmixed.js +104 -0
- data/core/admin/assets/js/vendor/codemirror/mode/htmlmixed/index.html +85 -0
- data/core/admin/assets/js/vendor/codemirror/mode/http/http.js +98 -0
- data/core/admin/assets/js/vendor/codemirror/mode/http/index.html +45 -0
- data/core/admin/assets/js/vendor/codemirror/mode/index.html +112 -0
- data/core/admin/assets/js/vendor/codemirror/mode/jade/index.html +66 -0
- data/core/admin/assets/js/vendor/codemirror/mode/jade/jade.js +90 -0
- data/core/admin/assets/js/vendor/codemirror/mode/javascript/index.html +107 -0
- data/core/admin/assets/js/vendor/codemirror/mode/javascript/javascript.js +480 -0
- data/core/admin/assets/js/vendor/codemirror/mode/javascript/test.js +10 -0
- data/core/admin/assets/js/vendor/codemirror/mode/javascript/typescript.html +61 -0
- data/core/admin/assets/js/vendor/codemirror/mode/jinja2/index.html +50 -0
- data/core/admin/assets/js/vendor/codemirror/mode/jinja2/jinja2.js +42 -0
- data/core/admin/assets/js/vendor/codemirror/mode/less/index.html +753 -0
- data/core/admin/assets/js/vendor/codemirror/mode/less/less.js +344 -0
- data/core/admin/assets/js/vendor/codemirror/mode/livescript/index.html +459 -0
- data/core/admin/assets/js/vendor/codemirror/mode/livescript/livescript.js +267 -0
- data/core/admin/assets/js/vendor/codemirror/mode/livescript/livescript.ls +266 -0
- data/core/admin/assets/js/vendor/codemirror/mode/lua/index.html +86 -0
- data/core/admin/assets/js/vendor/codemirror/mode/lua/lua.js +144 -0
- data/core/admin/assets/js/vendor/codemirror/mode/markdown/index.html +359 -0
- data/core/admin/assets/js/vendor/codemirror/mode/markdown/markdown.js +551 -0
- data/core/admin/assets/js/vendor/codemirror/mode/markdown/test.js +656 -0
- data/core/admin/assets/js/vendor/codemirror/mode/meta.js +89 -0
- data/core/admin/assets/js/vendor/codemirror/mode/mirc/index.html +161 -0
- data/core/admin/assets/js/vendor/codemirror/mode/mirc/mirc.js +177 -0
- data/core/admin/assets/js/vendor/codemirror/mode/nginx/index.html +181 -0
- data/core/admin/assets/js/vendor/codemirror/mode/nginx/nginx.js +163 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ntriples/index.html +45 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ntriples/ntriples.js +170 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ocaml/index.html +146 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ocaml/ocaml.js +116 -0
- data/core/admin/assets/js/vendor/codemirror/mode/octave/index.html +95 -0
- data/core/admin/assets/js/vendor/codemirror/mode/octave/octave.js +118 -0
- data/core/admin/assets/js/vendor/codemirror/mode/pascal/index.html +61 -0
- data/core/admin/assets/js/vendor/codemirror/mode/pascal/pascal.js +94 -0
- data/core/admin/assets/js/vendor/codemirror/mode/perl/index.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/mode/perl/perl.js +816 -0
- data/core/admin/assets/js/vendor/codemirror/mode/php/index.html +62 -0
- data/core/admin/assets/js/vendor/codemirror/mode/php/php.js +132 -0
- data/core/admin/assets/js/vendor/codemirror/mode/pig/index.html +55 -0
- data/core/admin/assets/js/vendor/codemirror/mode/pig/pig.js +171 -0
- data/core/admin/assets/js/vendor/codemirror/mode/properties/index.html +53 -0
- data/core/admin/assets/js/vendor/codemirror/mode/properties/properties.js +63 -0
- data/core/admin/assets/js/vendor/codemirror/mode/python/index.html +187 -0
- data/core/admin/assets/js/vendor/codemirror/mode/python/python.js +368 -0
- data/core/admin/assets/js/vendor/codemirror/mode/q/index.html +144 -0
- data/core/admin/assets/js/vendor/codemirror/mode/q/q.js +124 -0
- data/core/admin/assets/js/vendor/codemirror/mode/r/index.html +86 -0
- data/core/admin/assets/js/vendor/codemirror/mode/r/r.js +141 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rpm/changes/changes.js +19 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rpm/changes/index.html +67 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/index.html +114 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/spec.css +5 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/spec.js +66 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rst/index.html +534 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rst/rst.js +560 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ruby/index.html +185 -0
- data/core/admin/assets/js/vendor/codemirror/mode/ruby/ruby.js +247 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rust/index.html +61 -0
- data/core/admin/assets/js/vendor/codemirror/mode/rust/rust.js +436 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sass/index.html +66 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sass/sass.js +330 -0
- data/core/admin/assets/js/vendor/codemirror/mode/scheme/index.html +77 -0
- data/core/admin/assets/js/vendor/codemirror/mode/scheme/scheme.js +232 -0
- data/core/admin/assets/js/vendor/codemirror/mode/shell/index.html +66 -0
- data/core/admin/assets/js/vendor/codemirror/mode/shell/shell.js +118 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sieve/index.html +93 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sieve/sieve.js +183 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smalltalk/index.html +68 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smalltalk/smalltalk.js +151 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smarty/index.html +136 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smarty/smarty.js +205 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smartymixed/index.html +114 -0
- data/core/admin/assets/js/vendor/codemirror/mode/smartymixed/smartymixed.js +175 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sparql/index.html +54 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sparql/sparql.js +145 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sql/index.html +75 -0
- data/core/admin/assets/js/vendor/codemirror/mode/sql/sql.js +365 -0
- data/core/admin/assets/js/vendor/codemirror/mode/stex/index.html +110 -0
- data/core/admin/assets/js/vendor/codemirror/mode/stex/stex.js +246 -0
- data/core/admin/assets/js/vendor/codemirror/mode/stex/test.js +120 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tcl/index.html +143 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tcl/tcl.js +131 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/index.html +155 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/tiddlywiki.js +353 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiki/index.html +95 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiki/tiki.css +26 -0
- data/core/admin/assets/js/vendor/codemirror/mode/tiki/tiki.js +308 -0
- data/core/admin/assets/js/vendor/codemirror/mode/toml/index.html +73 -0
- data/core/admin/assets/js/vendor/codemirror/mode/toml/toml.js +71 -0
- data/core/admin/assets/js/vendor/codemirror/mode/turtle/index.html +51 -0
- data/core/admin/assets/js/vendor/codemirror/mode/turtle/turtle.js +145 -0
- data/core/admin/assets/js/vendor/codemirror/mode/vb/index.html +103 -0
- data/core/admin/assets/js/vendor/codemirror/mode/vb/vb.js +259 -0
- data/core/admin/assets/js/vendor/codemirror/mode/vbscript/index.html +55 -0
- data/core/admin/assets/js/vendor/codemirror/mode/vbscript/vbscript.js +334 -0
- data/core/admin/assets/js/vendor/codemirror/mode/velocity/index.html +119 -0
- data/core/admin/assets/js/vendor/codemirror/mode/velocity/velocity.js +186 -0
- data/core/admin/assets/js/vendor/codemirror/mode/verilog/index.html +132 -0
- data/core/admin/assets/js/vendor/codemirror/mode/verilog/verilog.js +182 -0
- data/core/admin/assets/js/vendor/codemirror/mode/xml/index.html +57 -0
- data/core/admin/assets/js/vendor/codemirror/mode/xml/xml.js +345 -0
- data/core/admin/assets/js/vendor/codemirror/mode/xquery/index.html +210 -0
- data/core/admin/assets/js/vendor/codemirror/mode/xquery/test.js +64 -0
- data/core/admin/assets/js/vendor/codemirror/mode/xquery/xquery.js +432 -0
- data/core/admin/assets/js/vendor/codemirror/mode/yaml/index.html +80 -0
- data/core/admin/assets/js/vendor/codemirror/mode/yaml/yaml.js +97 -0
- data/core/admin/assets/js/vendor/codemirror/mode/z80/index.html +52 -0
- data/core/admin/assets/js/vendor/codemirror/mode/z80/z80.js +85 -0
- data/core/admin/assets/js/vendor/codemirror/package.json +19 -0
- data/core/admin/assets/js/vendor/codemirror/test/comment_test.js +51 -0
- data/core/admin/assets/js/vendor/codemirror/test/doc_test.js +329 -0
- data/core/admin/assets/js/vendor/codemirror/test/driver.js +139 -0
- data/core/admin/assets/js/vendor/codemirror/test/emacs_test.js +135 -0
- data/core/admin/assets/js/vendor/codemirror/test/index.html +209 -0
- data/core/admin/assets/js/vendor/codemirror/test/lint/acorn.js +1593 -0
- data/core/admin/assets/js/vendor/codemirror/test/lint/lint.js +139 -0
- data/core/admin/assets/js/vendor/codemirror/test/lint/walk.js +216 -0
- data/core/admin/assets/js/vendor/codemirror/test/mode_test.css +10 -0
- data/core/admin/assets/js/vendor/codemirror/test/mode_test.js +200 -0
- data/core/admin/assets/js/vendor/codemirror/test/phantom_driver.js +31 -0
- data/core/admin/assets/js/vendor/codemirror/test/run.js +34 -0
- data/core/admin/assets/js/vendor/codemirror/test/test.js +1562 -0
- data/core/admin/assets/js/vendor/codemirror/test/vim_test.js +2391 -0
- data/core/admin/assets/js/vendor/codemirror/theme/3024-day.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/3024-night.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/ambiance-mobile.css +5 -0
- data/core/admin/assets/js/vendor/codemirror/theme/ambiance.css +75 -0
- data/core/admin/assets/js/vendor/codemirror/theme/base16-dark.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/base16-light.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/blackboard.css +28 -0
- data/core/admin/assets/js/vendor/codemirror/theme/cobalt.css +21 -0
- data/core/admin/assets/js/vendor/codemirror/theme/eclipse.css +23 -0
- data/core/admin/assets/js/vendor/codemirror/theme/elegant.css +13 -0
- data/core/admin/assets/js/vendor/codemirror/theme/erlang-dark.css +30 -0
- data/core/admin/assets/js/vendor/codemirror/theme/lesser-dark.css +47 -0
- data/core/admin/assets/js/vendor/codemirror/theme/mbo.css +35 -0
- data/core/admin/assets/js/vendor/codemirror/theme/midnight.css +43 -0
- data/core/admin/assets/js/vendor/codemirror/theme/monokai.css +29 -0
- data/core/admin/assets/js/vendor/codemirror/theme/neat.css +12 -0
- data/core/admin/assets/js/vendor/codemirror/theme/night.css +24 -0
- data/core/admin/assets/js/vendor/codemirror/theme/paraiso-dark.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/paraiso-light.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/rubyblue.css +23 -0
- data/core/admin/assets/js/vendor/codemirror/theme/solarized-mod.css +181 -0
- data/core/admin/assets/js/vendor/codemirror/theme/solarized.css +180 -0
- data/core/admin/assets/js/vendor/codemirror/theme/the-matrix.css +26 -0
- data/core/admin/assets/js/vendor/codemirror/theme/tomorrow-night-eighties.css +34 -0
- data/core/admin/assets/js/vendor/codemirror/theme/twilight.css +28 -0
- data/core/admin/assets/js/vendor/codemirror/theme/vibrant-ink.css +30 -0
- data/core/admin/assets/js/vendor/codemirror/theme/xq-dark.css +49 -0
- data/core/admin/assets/js/vendor/codemirror/theme/xq-light.css +43 -0
- data/core/admin/assets/js/vendor/fastclick.js +777 -0
- data/core/admin/assets/js/vendor/jquery.js +6 -0
- data/core/admin/assets/js/vendor/lodash.underscore.js +38 -0
- data/core/admin/assets/js/vendor/require.js +36 -0
- data/core/admin/assets/scss/bootstrap.scss +18 -0
- data/core/admin/assets/scss/modules/_all.scss +7 -0
- data/core/admin/assets/scss/modules/_colors.scss +7 -0
- data/core/admin/assets/scss/modules/_extensions.scss +24 -0
- data/core/admin/assets/scss/modules/_mixins.scss +18 -0
- data/core/admin/assets/scss/modules/_susy.scss +7 -0
- data/core/admin/assets/scss/partials/_base.scss +33 -0
- data/core/admin/assets/scss/partials/_buttons.scss +9 -0
- data/core/admin/assets/scss/partials/_links.scss +15 -0
- data/core/admin/assets/scss/partials/_main.scss +14 -0
- data/core/admin/assets/scss/partials/_typography.scss +15 -0
- data/core/admin/assets/scss/sections/_editor.scss +274 -0
- data/core/admin/assets/scss/sections/_login.scss +34 -0
- data/core/admin/assets/scss/vendor/_normalize.scss +406 -0
- data/core/admin/layouts/admin.haml +67 -0
- data/core/admin/partials/_head.haml +23 -0
- data/core/admin/partials/_tree.haml +3 -0
- data/core/admin/partials/_treeitem.haml +4 -0
- data/core/admin/settings.yml +4 -0
- data/core/app.rb +21 -0
- data/core/classes/cached.rb +35 -0
- data/core/classes/checker.rb +37 -0
- data/core/classes/commit.rb +62 -0
- data/core/classes/error.rb +9 -0
- data/core/classes/page.rb +165 -0
- data/core/classes/partial.rb +13 -0
- data/core/classes/path.rb +30 -0
- data/core/classes/persona.rb +55 -0
- data/core/classes/sassfile.rb +95 -0
- data/core/classes/settings.rb +19 -0
- data/core/classes/theme.rb +55 -0
- data/core/helpers/base.rb +46 -0
- data/core/helpers/render.rb +26 -0
- data/core/helpers/truncate.rb +17 -0
- data/core/routes/admin.rb +139 -0
- data/core/routes/assetcompiler.rb +23 -0
- data/core/routes/base.rb +22 -0
- data/core/routes/bootstrap.rb +35 -0
- data/core/routes/cache.rb +52 -0
- data/core/routes/deploy.rb +16 -0
- data/core/routes/git.rb +23 -0
- data/poly.gemspec +29 -0
- data/sample/.cabi-data +0 -0
- data/sample/data/home/index.haml +22 -0
- data/sample/data/other/nav/links.yml +4 -0
- data/sample/data/page/about/index.haml +12 -0
- data/sample/data/page/contact-us/index.haml +11 -0
- data/sample/data/page/dynamic-page/index.haml +14 -0
- data/sample/data/page/error/index.haml +8 -0
- data/sample/data/page/html/index.html +4 -0
- data/sample/data/page/no-front-matter/index.haml +7 -0
- data/sample/data/page/not-found/index.haml +8 -0
- data/sample/data/page/static-page/index.haml +14 -0
- data/sample/data/post/about-life/index.md +12 -0
- data/sample/data/post/sample-post/index.haml +12 -0
- data/sample/data/post/technology/index.haml +12 -0
- data/sample/data/post/the-40-hour-workweek/index.haml +9 -0
- data/sample/data/post/things-are-changing/index.haml +9 -0
- data/sample/data/post/yet-another-post/index.haml +11 -0
- data/sample/plugins/my-plugin/plugin.rb +15 -0
- data/sample/settings.yml +21 -0
- data/sample/themes/base/assets/css/readme.txt +6 -0
- data/sample/themes/base/assets/images/poly.svg +36 -0
- data/sample/themes/base/assets/js/app/views/main.js +13 -0
- data/sample/themes/base/assets/js/main.js +31 -0
- data/sample/themes/base/assets/js/vendor/backbone.js +4 -0
- data/sample/themes/base/assets/js/vendor/jquery.js +6 -0
- data/sample/themes/base/assets/js/vendor/lodash.underscore.js +38 -0
- data/sample/themes/base/assets/js/vendor/require.js +36 -0
- data/sample/themes/base/assets/scss/bootstrap.scss +20 -0
- data/sample/themes/base/assets/scss/modules/_all.scss +7 -0
- data/sample/themes/base/assets/scss/modules/_colors.scss +7 -0
- data/sample/themes/base/assets/scss/modules/_extensions.scss +13 -0
- data/sample/themes/base/assets/scss/modules/_mixins.scss +11 -0
- data/sample/themes/base/assets/scss/modules/_susy.scss +7 -0
- data/sample/themes/base/assets/scss/partials/_base.scss +33 -0
- data/sample/themes/base/assets/scss/partials/_buttons.scss +0 -0
- data/sample/themes/base/assets/scss/partials/_links.scss +15 -0
- data/sample/themes/base/assets/scss/partials/_main.scss +39 -0
- data/sample/themes/base/assets/scss/partials/_typography.scss +15 -0
- data/sample/themes/base/assets/scss/sections/_footer.scss +22 -0
- data/sample/themes/base/assets/scss/sections/_header.scss +23 -0
- data/sample/themes/base/assets/scss/sections/_home.scss +13 -0
- data/sample/themes/base/assets/scss/sections/_pages.scss +11 -0
- data/sample/themes/base/assets/scss/vendor/_normalize.scss +406 -0
- data/sample/themes/base/layouts/default.haml +14 -0
- data/sample/themes/base/layouts/post.haml +15 -0
- data/sample/themes/base/partials/_footer.haml +9 -0
- data/sample/themes/base/partials/_ga.haml +10 -0
- data/sample/themes/base/partials/_head.haml +20 -0
- data/sample/themes/base/partials/_header.haml +5 -0
- data/sample/themes/base/settings.yml +4 -0
- data/test/data/post-receive-hook.json +146 -0
- data/test/test_basics.rb +50 -0
- data/test/test_data.rb +14 -0
- data/test/test_deploy.rb +23 -0
- data/test/test_includes.rb +43 -0
- data/test/test_page.rb +47 -0
- metadata +1049 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
// From https://code.google.com/p/google-diff-match-patch/ , licensed under the Apache License 2.0
|
2
|
+
(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}
|
3
|
+
diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,
|
4
|
+
b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};
|
5
|
+
diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,
|
6
|
+
d):this.diff_bisect_(a,b,d)};
|
7
|
+
diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a};
|
8
|
+
diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>=
|
9
|
+
u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]};
|
10
|
+
diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};
|
11
|
+
diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};
|
12
|
+
diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
|
13
|
+
diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
|
14
|
+
diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};
|
15
|
+
diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;
|
16
|
+
var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};
|
17
|
+
diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];
|
18
|
+
d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};
|
19
|
+
diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);
|
20
|
+
return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=
|
21
|
+
h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/;
|
22
|
+
diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};
|
23
|
+
diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-
|
24
|
+
g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,
|
25
|
+
a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};
|
26
|
+
diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&").replace(d,"<").replace(e,">").replace(f,"¶<br>");switch(h){case 1:b[g]='<ins style="background:#e6ffe6;">'+j+"</ins>";break;case -1:b[g]='<del style="background:#ffe6e6;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")};
|
27
|
+
diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};
|
28
|
+
diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case -1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")};
|
29
|
+
diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case "+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case "-":case "=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+
|
30
|
+
f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};
|
31
|
+
diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+
|
32
|
+
k)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h};
|
33
|
+
diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};
|
34
|
+
diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=
|
35
|
+
c.length+d.length;a.length2+=c.length+d.length}};
|
36
|
+
diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make.");
|
37
|
+
if(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&
|
38
|
+
e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};
|
39
|
+
diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);
|
40
|
+
if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0,
|
41
|
+
j+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};
|
42
|
+
diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,
|
43
|
+
c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};
|
44
|
+
diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;""!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),
|
45
|
+
j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&&
|
46
|
+
(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")};
|
47
|
+
diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split("\n");for(var c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2=
|
48
|
+
parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};
|
49
|
+
diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case -1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")};
|
50
|
+
this.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})()
|
@@ -0,0 +1,92 @@
|
|
1
|
+
.CodeMirror-merge {
|
2
|
+
position: relative;
|
3
|
+
border: 1px solid #ddd;
|
4
|
+
white-space: pre;
|
5
|
+
}
|
6
|
+
|
7
|
+
.CodeMirror-merge, .CodeMirror-merge .CodeMirror {
|
8
|
+
height: 350px;
|
9
|
+
}
|
10
|
+
|
11
|
+
.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }
|
12
|
+
.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }
|
13
|
+
.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
|
14
|
+
.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
|
15
|
+
|
16
|
+
.CodeMirror-merge-pane {
|
17
|
+
display: inline-block;
|
18
|
+
white-space: normal;
|
19
|
+
vertical-align: top;
|
20
|
+
}
|
21
|
+
.CodeMirror-merge-pane-rightmost {
|
22
|
+
position: absolute;
|
23
|
+
right: 0px;
|
24
|
+
z-index: 1;
|
25
|
+
}
|
26
|
+
|
27
|
+
.CodeMirror-merge-gap {
|
28
|
+
z-index: 2;
|
29
|
+
display: inline-block;
|
30
|
+
height: 100%;
|
31
|
+
-moz-box-sizing: border-box;
|
32
|
+
box-sizing: border-box;
|
33
|
+
overflow: hidden;
|
34
|
+
border-left: 1px solid #ddd;
|
35
|
+
border-right: 1px solid #ddd;
|
36
|
+
position: relative;
|
37
|
+
background: #f8f8f8;
|
38
|
+
}
|
39
|
+
|
40
|
+
.CodeMirror-merge-scrolllock-wrap {
|
41
|
+
position: absolute;
|
42
|
+
bottom: 0; left: 50%;
|
43
|
+
}
|
44
|
+
.CodeMirror-merge-scrolllock {
|
45
|
+
position: relative;
|
46
|
+
left: -50%;
|
47
|
+
cursor: pointer;
|
48
|
+
color: #555;
|
49
|
+
line-height: 1;
|
50
|
+
}
|
51
|
+
|
52
|
+
.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
|
53
|
+
position: absolute;
|
54
|
+
left: 0; top: 0;
|
55
|
+
right: 0; bottom: 0;
|
56
|
+
line-height: 1;
|
57
|
+
}
|
58
|
+
|
59
|
+
.CodeMirror-merge-copy {
|
60
|
+
position: absolute;
|
61
|
+
cursor: pointer;
|
62
|
+
color: #44c;
|
63
|
+
}
|
64
|
+
|
65
|
+
.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
|
66
|
+
.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
|
67
|
+
|
68
|
+
.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
|
69
|
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
|
70
|
+
background-position: bottom left;
|
71
|
+
background-repeat: repeat-x;
|
72
|
+
}
|
73
|
+
|
74
|
+
.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
|
75
|
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
|
76
|
+
background-position: bottom left;
|
77
|
+
background-repeat: repeat-x;
|
78
|
+
}
|
79
|
+
|
80
|
+
.CodeMirror-merge-r-chunk { background: #ffffe0; }
|
81
|
+
.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }
|
82
|
+
.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }
|
83
|
+
.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }
|
84
|
+
|
85
|
+
.CodeMirror-merge-l-chunk { background: #eef; }
|
86
|
+
.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
|
87
|
+
.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
|
88
|
+
.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
|
89
|
+
|
90
|
+
.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
|
91
|
+
.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
|
92
|
+
.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
|
@@ -0,0 +1,474 @@
|
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
3
|
+
// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL
|
4
|
+
|
5
|
+
var Pos = CodeMirror.Pos;
|
6
|
+
var svgNS = "http://www.w3.org/2000/svg";
|
7
|
+
|
8
|
+
function DiffView(mv, type) {
|
9
|
+
this.mv = mv;
|
10
|
+
this.type = type;
|
11
|
+
this.classes = type == "left"
|
12
|
+
? {chunk: "CodeMirror-merge-l-chunk",
|
13
|
+
start: "CodeMirror-merge-l-chunk-start",
|
14
|
+
end: "CodeMirror-merge-l-chunk-end",
|
15
|
+
insert: "CodeMirror-merge-l-inserted",
|
16
|
+
del: "CodeMirror-merge-l-deleted",
|
17
|
+
connect: "CodeMirror-merge-l-connect"}
|
18
|
+
: {chunk: "CodeMirror-merge-r-chunk",
|
19
|
+
start: "CodeMirror-merge-r-chunk-start",
|
20
|
+
end: "CodeMirror-merge-r-chunk-end",
|
21
|
+
insert: "CodeMirror-merge-r-inserted",
|
22
|
+
del: "CodeMirror-merge-r-deleted",
|
23
|
+
connect: "CodeMirror-merge-r-connect"};
|
24
|
+
}
|
25
|
+
|
26
|
+
DiffView.prototype = {
|
27
|
+
constructor: DiffView,
|
28
|
+
init: function(pane, orig, options) {
|
29
|
+
this.edit = this.mv.edit;
|
30
|
+
this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: true}, copyObj(options)));
|
31
|
+
|
32
|
+
this.diff = getDiff(orig, options.value);
|
33
|
+
this.diffOutOfDate = false;
|
34
|
+
|
35
|
+
this.showDifferences = options.showDifferences !== false;
|
36
|
+
this.forceUpdate = registerUpdate(this);
|
37
|
+
setScrollLock(this, true, false);
|
38
|
+
registerScroll(this);
|
39
|
+
},
|
40
|
+
setShowDifferences: function(val) {
|
41
|
+
val = val !== false;
|
42
|
+
if (val != this.showDifferences) {
|
43
|
+
this.showDifferences = val;
|
44
|
+
this.forceUpdate("full");
|
45
|
+
}
|
46
|
+
}
|
47
|
+
};
|
48
|
+
|
49
|
+
function registerUpdate(dv) {
|
50
|
+
var edit = {from: 0, to: 0, marked: []};
|
51
|
+
var orig = {from: 0, to: 0, marked: []};
|
52
|
+
var debounceChange;
|
53
|
+
function update(mode) {
|
54
|
+
if (mode == "full") {
|
55
|
+
if (dv.svg) clear(dv.svg);
|
56
|
+
clear(dv.copyButtons);
|
57
|
+
clearMarks(dv.edit, edit.marked, dv.classes);
|
58
|
+
clearMarks(dv.orig, orig.marked, dv.classes);
|
59
|
+
edit.from = edit.to = orig.from = orig.to = 0;
|
60
|
+
}
|
61
|
+
if (dv.diffOutOfDate) {
|
62
|
+
dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue());
|
63
|
+
dv.diffOutOfDate = false;
|
64
|
+
CodeMirror.signal(dv.edit, "updateDiff", dv.diff);
|
65
|
+
}
|
66
|
+
if (dv.showDifferences) {
|
67
|
+
updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);
|
68
|
+
updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);
|
69
|
+
}
|
70
|
+
drawConnectors(dv);
|
71
|
+
}
|
72
|
+
function set(slow) {
|
73
|
+
clearTimeout(debounceChange);
|
74
|
+
debounceChange = setTimeout(update, slow == true ? 250 : 100);
|
75
|
+
}
|
76
|
+
function change() {
|
77
|
+
if (!dv.diffOutOfDate) {
|
78
|
+
dv.diffOutOfDate = true;
|
79
|
+
edit.from = edit.to = orig.from = orig.to = 0;
|
80
|
+
}
|
81
|
+
set(true);
|
82
|
+
}
|
83
|
+
dv.edit.on("change", change);
|
84
|
+
dv.orig.on("change", change);
|
85
|
+
dv.edit.on("viewportChange", set);
|
86
|
+
dv.orig.on("viewportChange", set);
|
87
|
+
update();
|
88
|
+
return update;
|
89
|
+
}
|
90
|
+
|
91
|
+
function registerScroll(dv) {
|
92
|
+
dv.edit.on("scroll", function() {
|
93
|
+
syncScroll(dv, DIFF_INSERT) && drawConnectors(dv);
|
94
|
+
});
|
95
|
+
dv.orig.on("scroll", function() {
|
96
|
+
syncScroll(dv, DIFF_DELETE) && drawConnectors(dv);
|
97
|
+
});
|
98
|
+
}
|
99
|
+
|
100
|
+
function syncScroll(dv, type) {
|
101
|
+
// Change handler will do a refresh after a timeout when diff is out of date
|
102
|
+
if (dv.diffOutOfDate) return false;
|
103
|
+
if (!dv.lockScroll) return true;
|
104
|
+
var editor, other, now = +new Date;
|
105
|
+
if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; }
|
106
|
+
else { editor = dv.orig; other = dv.edit; }
|
107
|
+
// Don't take action if the position of this editor was recently set
|
108
|
+
// (to prevent feedback loops)
|
109
|
+
if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false;
|
110
|
+
|
111
|
+
var sInfo = editor.getScrollInfo(), halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;
|
112
|
+
var mid = editor.lineAtHeight(midY, "local");
|
113
|
+
var around = chunkBoundariesAround(dv.diff, mid, type == DIFF_INSERT);
|
114
|
+
var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig);
|
115
|
+
var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit);
|
116
|
+
var ratio = (midY - off.top) / (off.bot - off.top);
|
117
|
+
var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);
|
118
|
+
|
119
|
+
var botDist, mix;
|
120
|
+
// Some careful tweaking to make sure no space is left out of view
|
121
|
+
// when scrolling to top or bottom.
|
122
|
+
if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {
|
123
|
+
targetPos = targetPos * mix + sInfo.top * (1 - mix);
|
124
|
+
} else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {
|
125
|
+
var otherInfo = other.getScrollInfo();
|
126
|
+
var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;
|
127
|
+
if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)
|
128
|
+
targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);
|
129
|
+
}
|
130
|
+
|
131
|
+
other.scrollTo(sInfo.left, targetPos);
|
132
|
+
other.state.scrollSetAt = now;
|
133
|
+
other.state.scrollSetBy = dv;
|
134
|
+
return true;
|
135
|
+
}
|
136
|
+
|
137
|
+
function getOffsets(editor, around) {
|
138
|
+
var bot = around.after;
|
139
|
+
if (bot == null) bot = editor.lastLine() + 1;
|
140
|
+
return {top: editor.heightAtLine(around.before || 0, "local"),
|
141
|
+
bot: editor.heightAtLine(bot, "local")};
|
142
|
+
}
|
143
|
+
|
144
|
+
function setScrollLock(dv, val, action) {
|
145
|
+
dv.lockScroll = val;
|
146
|
+
if (val && action != false) syncScroll(dv, DIFF_INSERT) && drawConnectors(dv);
|
147
|
+
dv.lockButton.innerHTML = val ? "\u21db\u21da" : "\u21db \u21da";
|
148
|
+
}
|
149
|
+
|
150
|
+
// Updating the marks for editor content
|
151
|
+
|
152
|
+
function clearMarks(editor, arr, classes) {
|
153
|
+
for (var i = 0; i < arr.length; ++i) {
|
154
|
+
var mark = arr[i];
|
155
|
+
if (mark instanceof CodeMirror.TextMarker) {
|
156
|
+
mark.clear();
|
157
|
+
} else {
|
158
|
+
editor.removeLineClass(mark, "background", classes.chunk);
|
159
|
+
editor.removeLineClass(mark, "background", classes.start);
|
160
|
+
editor.removeLineClass(mark, "background", classes.end);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
arr.length = 0;
|
164
|
+
}
|
165
|
+
|
166
|
+
// FIXME maybe add a margin around viewport to prevent too many updates
|
167
|
+
function updateMarks(editor, diff, state, type, classes) {
|
168
|
+
var vp = editor.getViewport();
|
169
|
+
editor.operation(function() {
|
170
|
+
if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {
|
171
|
+
clearMarks(editor, state.marked, classes);
|
172
|
+
markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);
|
173
|
+
state.from = vp.from; state.to = vp.to;
|
174
|
+
} else {
|
175
|
+
if (vp.from < state.from) {
|
176
|
+
markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);
|
177
|
+
state.from = vp.from;
|
178
|
+
}
|
179
|
+
if (vp.to > state.to) {
|
180
|
+
markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);
|
181
|
+
state.to = vp.to;
|
182
|
+
}
|
183
|
+
}
|
184
|
+
});
|
185
|
+
}
|
186
|
+
|
187
|
+
function markChanges(editor, diff, type, marks, from, to, classes) {
|
188
|
+
var pos = Pos(0, 0);
|
189
|
+
var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));
|
190
|
+
var cls = type == DIFF_DELETE ? classes.del : classes.insert;
|
191
|
+
function markChunk(start, end) {
|
192
|
+
var bfrom = Math.max(from, start), bto = Math.min(to, end);
|
193
|
+
for (var i = bfrom; i < bto; ++i) {
|
194
|
+
var line = editor.addLineClass(i, "background", classes.chunk);
|
195
|
+
if (i == start) editor.addLineClass(line, "background", classes.start);
|
196
|
+
if (i == end - 1) editor.addLineClass(line, "background", classes.end);
|
197
|
+
marks.push(line);
|
198
|
+
}
|
199
|
+
// When the chunk is empty, make sure a horizontal line shows up
|
200
|
+
if (start == end && bfrom == end && bto == end) {
|
201
|
+
if (bfrom)
|
202
|
+
marks.push(editor.addLineClass(bfrom - 1, "background", classes.end));
|
203
|
+
else
|
204
|
+
marks.push(editor.addLineClass(bfrom, "background", classes.start));
|
205
|
+
}
|
206
|
+
}
|
207
|
+
|
208
|
+
var chunkStart = 0;
|
209
|
+
for (var i = 0; i < diff.length; ++i) {
|
210
|
+
var part = diff[i], tp = part[0], str = part[1];
|
211
|
+
if (tp == DIFF_EQUAL) {
|
212
|
+
var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);
|
213
|
+
moveOver(pos, str);
|
214
|
+
var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);
|
215
|
+
if (cleanTo > cleanFrom) {
|
216
|
+
if (i) markChunk(chunkStart, cleanFrom);
|
217
|
+
chunkStart = cleanTo;
|
218
|
+
}
|
219
|
+
} else {
|
220
|
+
if (tp == type) {
|
221
|
+
var end = moveOver(pos, str, true);
|
222
|
+
var a = posMax(top, pos), b = posMin(bot, end);
|
223
|
+
if (!posEq(a, b))
|
224
|
+
marks.push(editor.markText(a, b, {className: cls}));
|
225
|
+
pos = end;
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}
|
229
|
+
if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1);
|
230
|
+
}
|
231
|
+
|
232
|
+
// Updating the gap between editor and original
|
233
|
+
|
234
|
+
function drawConnectors(dv) {
|
235
|
+
if (!dv.showDifferences) return;
|
236
|
+
|
237
|
+
if (dv.svg) {
|
238
|
+
clear(dv.svg);
|
239
|
+
var w = dv.gap.offsetWidth;
|
240
|
+
attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight);
|
241
|
+
}
|
242
|
+
clear(dv.copyButtons);
|
243
|
+
|
244
|
+
var flip = dv.type == "left";
|
245
|
+
var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();
|
246
|
+
var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top;
|
247
|
+
iterateChunks(dv.diff, function(topOrig, botOrig, topEdit, botEdit) {
|
248
|
+
if (topEdit > vpEdit.to || botEdit < vpEdit.from ||
|
249
|
+
topOrig > vpOrig.to || botOrig < vpOrig.from)
|
250
|
+
return;
|
251
|
+
var topLpx = dv.orig.heightAtLine(topOrig, "local") - sTopOrig, top = topLpx;
|
252
|
+
if (dv.svg) {
|
253
|
+
var topRpx = dv.edit.heightAtLine(topEdit, "local") - sTopEdit;
|
254
|
+
if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }
|
255
|
+
var botLpx = dv.orig.heightAtLine(botOrig, "local") - sTopOrig;
|
256
|
+
var botRpx = dv.edit.heightAtLine(botEdit, "local") - sTopEdit;
|
257
|
+
if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }
|
258
|
+
var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx;
|
259
|
+
var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx;
|
260
|
+
attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")),
|
261
|
+
"d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z",
|
262
|
+
"class", dv.classes.connect);
|
263
|
+
}
|
264
|
+
var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc",
|
265
|
+
"CodeMirror-merge-copy"));
|
266
|
+
copy.title = "Revert chunk";
|
267
|
+
copy.chunk = {topEdit: topEdit, botEdit: botEdit, topOrig: topOrig, botOrig: botOrig};
|
268
|
+
copy.style.top = top + "px";
|
269
|
+
});
|
270
|
+
}
|
271
|
+
|
272
|
+
function copyChunk(dv, chunk) {
|
273
|
+
if (dv.diffOutOfDate) return;
|
274
|
+
dv.edit.replaceRange(dv.orig.getRange(Pos(chunk.topOrig, 0), Pos(chunk.botOrig, 0)),
|
275
|
+
Pos(chunk.topEdit, 0), Pos(chunk.botEdit, 0));
|
276
|
+
}
|
277
|
+
|
278
|
+
// Merge view, containing 0, 1, or 2 diff views.
|
279
|
+
|
280
|
+
var MergeView = CodeMirror.MergeView = function(node, options) {
|
281
|
+
if (!(this instanceof MergeView)) return new MergeView(node, options);
|
282
|
+
|
283
|
+
var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;
|
284
|
+
var hasLeft = origLeft != null, hasRight = origRight != null;
|
285
|
+
var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);
|
286
|
+
var wrap = [], left = this.left = null, right = this.right = null;
|
287
|
+
|
288
|
+
if (hasLeft) {
|
289
|
+
left = this.left = new DiffView(this, "left");
|
290
|
+
var leftPane = elt("div", null, "CodeMirror-merge-pane");
|
291
|
+
wrap.push(leftPane);
|
292
|
+
wrap.push(buildGap(left));
|
293
|
+
}
|
294
|
+
|
295
|
+
var editPane = elt("div", null, "CodeMirror-merge-pane");
|
296
|
+
wrap.push(editPane);
|
297
|
+
|
298
|
+
if (hasRight) {
|
299
|
+
right = this.right = new DiffView(this, "right");
|
300
|
+
wrap.push(buildGap(right));
|
301
|
+
var rightPane = elt("div", null, "CodeMirror-merge-pane");
|
302
|
+
wrap.push(rightPane);
|
303
|
+
}
|
304
|
+
|
305
|
+
(hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost";
|
306
|
+
|
307
|
+
wrap.push(elt("div", null, null, "height: 0; clear: both;"));
|
308
|
+
var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane"));
|
309
|
+
this.edit = CodeMirror(editPane, copyObj(options));
|
310
|
+
|
311
|
+
if (left) left.init(leftPane, origLeft, options);
|
312
|
+
if (right) right.init(rightPane, origRight, options);
|
313
|
+
|
314
|
+
var onResize = function() {
|
315
|
+
if (left) drawConnectors(left);
|
316
|
+
if (right) drawConnectors(right);
|
317
|
+
};
|
318
|
+
CodeMirror.on(window, "resize", onResize);
|
319
|
+
var resizeInterval = setInterval(function() {
|
320
|
+
for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}
|
321
|
+
if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); }
|
322
|
+
}, 5000);
|
323
|
+
};
|
324
|
+
|
325
|
+
function buildGap(dv) {
|
326
|
+
var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock");
|
327
|
+
lock.title = "Toggle locked scrolling";
|
328
|
+
var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap");
|
329
|
+
CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); });
|
330
|
+
dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type);
|
331
|
+
CodeMirror.on(dv.copyButtons, "click", function(e) {
|
332
|
+
var node = e.target || e.srcElement;
|
333
|
+
if (node.chunk) copyChunk(dv, node.chunk);
|
334
|
+
});
|
335
|
+
var gapElts = [dv.copyButtons, lockWrap];
|
336
|
+
var svg = document.createElementNS && document.createElementNS(svgNS, "svg");
|
337
|
+
if (svg && !svg.createSVGRect) svg = null;
|
338
|
+
dv.svg = svg;
|
339
|
+
if (svg) gapElts.push(svg);
|
340
|
+
|
341
|
+
return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap");
|
342
|
+
}
|
343
|
+
|
344
|
+
MergeView.prototype = {
|
345
|
+
constuctor: MergeView,
|
346
|
+
editor: function() { return this.edit; },
|
347
|
+
rightOriginal: function() { return this.right && this.right.orig; },
|
348
|
+
leftOriginal: function() { return this.left && this.left.orig; },
|
349
|
+
setShowDifferences: function(val) {
|
350
|
+
if (this.right) this.right.setShowDifferences(val);
|
351
|
+
if (this.left) this.left.setShowDifferences(val);
|
352
|
+
}
|
353
|
+
};
|
354
|
+
|
355
|
+
// Operations on diffs
|
356
|
+
|
357
|
+
var dmp = new diff_match_patch();
|
358
|
+
function getDiff(a, b) {
|
359
|
+
var diff = dmp.diff_main(a, b);
|
360
|
+
dmp.diff_cleanupSemantic(diff);
|
361
|
+
// The library sometimes leaves in empty parts, which confuse the algorithm
|
362
|
+
for (var i = 0; i < diff.length; ++i) {
|
363
|
+
var part = diff[i];
|
364
|
+
if (!part[1]) {
|
365
|
+
diff.splice(i--, 1);
|
366
|
+
} else if (i && diff[i - 1][0] == part[0]) {
|
367
|
+
diff.splice(i--, 1);
|
368
|
+
diff[i][1] += part[1];
|
369
|
+
}
|
370
|
+
}
|
371
|
+
return diff;
|
372
|
+
}
|
373
|
+
|
374
|
+
function iterateChunks(diff, f) {
|
375
|
+
var startEdit = 0, startOrig = 0;
|
376
|
+
var edit = Pos(0, 0), orig = Pos(0, 0);
|
377
|
+
for (var i = 0; i < diff.length; ++i) {
|
378
|
+
var part = diff[i], tp = part[0];
|
379
|
+
if (tp == DIFF_EQUAL) {
|
380
|
+
var startOff = startOfLineClean(diff, i) ? 0 : 1;
|
381
|
+
var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;
|
382
|
+
moveOver(edit, part[1], null, orig);
|
383
|
+
var endOff = endOfLineClean(diff, i) ? 1 : 0;
|
384
|
+
var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;
|
385
|
+
if (cleanToEdit > cleanFromEdit) {
|
386
|
+
if (i) f(startOrig, cleanFromOrig, startEdit, cleanFromEdit);
|
387
|
+
startEdit = cleanToEdit; startOrig = cleanToOrig;
|
388
|
+
}
|
389
|
+
} else {
|
390
|
+
moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);
|
391
|
+
}
|
392
|
+
}
|
393
|
+
if (startEdit <= edit.line || startOrig <= orig.line)
|
394
|
+
f(startOrig, orig.line + 1, startEdit, edit.line + 1);
|
395
|
+
}
|
396
|
+
|
397
|
+
function endOfLineClean(diff, i) {
|
398
|
+
if (i == diff.length - 1) return true;
|
399
|
+
var next = diff[i + 1][1];
|
400
|
+
if (next.length == 1 || next.charCodeAt(0) != 10) return false;
|
401
|
+
if (i == diff.length - 2) return true;
|
402
|
+
next = diff[i + 2][1];
|
403
|
+
return next.length > 1 && next.charCodeAt(0) == 10;
|
404
|
+
}
|
405
|
+
|
406
|
+
function startOfLineClean(diff, i) {
|
407
|
+
if (i == 0) return true;
|
408
|
+
var last = diff[i - 1][1];
|
409
|
+
if (last.charCodeAt(last.length - 1) != 10) return false;
|
410
|
+
if (i == 1) return true;
|
411
|
+
last = diff[i - 2][1];
|
412
|
+
return last.charCodeAt(last.length - 1) == 10;
|
413
|
+
}
|
414
|
+
|
415
|
+
function chunkBoundariesAround(diff, n, nInEdit) {
|
416
|
+
var beforeE, afterE, beforeO, afterO;
|
417
|
+
iterateChunks(diff, function(fromOrig, toOrig, fromEdit, toEdit) {
|
418
|
+
var fromLocal = nInEdit ? fromEdit : fromOrig;
|
419
|
+
var toLocal = nInEdit ? toEdit : toOrig;
|
420
|
+
if (afterE == null) {
|
421
|
+
if (fromLocal > n) { afterE = fromEdit; afterO = fromOrig; }
|
422
|
+
else if (toLocal > n) { afterE = toEdit; afterO = toOrig; }
|
423
|
+
}
|
424
|
+
if (toLocal <= n) { beforeE = toEdit; beforeO = toOrig; }
|
425
|
+
else if (fromLocal <= n) { beforeE = fromEdit; beforeO = fromOrig; }
|
426
|
+
});
|
427
|
+
return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};
|
428
|
+
}
|
429
|
+
|
430
|
+
// General utilities
|
431
|
+
|
432
|
+
function elt(tag, content, className, style) {
|
433
|
+
var e = document.createElement(tag);
|
434
|
+
if (className) e.className = className;
|
435
|
+
if (style) e.style.cssText = style;
|
436
|
+
if (typeof content == "string") e.appendChild(document.createTextNode(content));
|
437
|
+
else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);
|
438
|
+
return e;
|
439
|
+
}
|
440
|
+
|
441
|
+
function clear(node) {
|
442
|
+
for (var count = node.childNodes.length; count > 0; --count)
|
443
|
+
node.removeChild(node.firstChild);
|
444
|
+
}
|
445
|
+
|
446
|
+
function attrs(elt) {
|
447
|
+
for (var i = 1; i < arguments.length; i += 2)
|
448
|
+
elt.setAttribute(arguments[i], arguments[i+1]);
|
449
|
+
}
|
450
|
+
|
451
|
+
function copyObj(obj, target) {
|
452
|
+
if (!target) target = {};
|
453
|
+
for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];
|
454
|
+
return target;
|
455
|
+
}
|
456
|
+
|
457
|
+
function moveOver(pos, str, copy, other) {
|
458
|
+
var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;
|
459
|
+
for (;;) {
|
460
|
+
var nl = str.indexOf("\n", at);
|
461
|
+
if (nl == -1) break;
|
462
|
+
++out.line;
|
463
|
+
if (other) ++other.line;
|
464
|
+
at = nl + 1;
|
465
|
+
}
|
466
|
+
out.ch = (at ? 0 : out.ch) + (str.length - at);
|
467
|
+
if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);
|
468
|
+
return out;
|
469
|
+
}
|
470
|
+
|
471
|
+
function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }
|
472
|
+
function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }
|
473
|
+
function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }
|
474
|
+
})();
|