├── .gitignore ├── .idea ├── .name ├── hornibills.iml ├── misc.xml ├── modules.xml ├── scopes │ └── scope_settings.xml └── vcs.xml ├── README.md ├── bower_components ├── angular-ui-codemirror │ ├── .bower.json │ ├── LICENSE │ ├── README.md │ ├── bower.json │ └── ui-codemirror.js ├── angular │ ├── .bower.json │ ├── README.md │ ├── angular-csp.css │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.gzip │ ├── angular.min.js.map │ └── bower.json └── codemirror │ ├── .bower.json │ ├── AUTHORS │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── addon │ ├── comment │ │ ├── comment.js │ │ └── continuecomment.js │ ├── dialog │ │ ├── dialog.css │ │ └── dialog.js │ ├── display │ │ ├── fullscreen.css │ │ ├── fullscreen.js │ │ └── placeholder.js │ ├── edit │ │ ├── closebrackets.js │ │ ├── closetag.js │ │ ├── continuelist.js │ │ ├── matchbrackets.js │ │ ├── matchtags.js │ │ └── trailingspace.js │ ├── fold │ │ ├── brace-fold.js │ │ ├── comment-fold.js │ │ ├── foldcode.js │ │ ├── foldgutter.css │ │ ├── foldgutter.js │ │ ├── indent-fold.js │ │ └── xml-fold.js │ ├── hint │ │ ├── anyword-hint.js │ │ ├── css-hint.js │ │ ├── html-hint.js │ │ ├── javascript-hint.js │ │ ├── pig-hint.js │ │ ├── python-hint.js │ │ ├── show-hint.css │ │ ├── show-hint.js │ │ ├── sql-hint.js │ │ └── xml-hint.js │ ├── lint │ │ ├── coffeescript-lint.js │ │ ├── css-lint.js │ │ ├── javascript-lint.js │ │ ├── json-lint.js │ │ ├── lint.css │ │ └── lint.js │ ├── merge │ │ ├── dep │ │ │ └── diff_match_patch.js │ │ ├── merge.css │ │ └── merge.js │ ├── mode │ │ ├── loadmode.js │ │ ├── multiplex.js │ │ ├── multiplex_test.js │ │ └── overlay.js │ ├── runmode │ │ ├── colorize.js │ │ ├── runmode-standalone.js │ │ ├── runmode.js │ │ └── runmode.node.js │ ├── scroll │ │ └── scrollpastend.js │ ├── search │ │ ├── match-highlighter.js │ │ ├── search.js │ │ └── searchcursor.js │ ├── selection │ │ ├── active-line.js │ │ └── mark-selection.js │ ├── tern │ │ ├── tern.css │ │ ├── tern.js │ │ └── worker.js │ └── wrap │ │ └── hardwrap.js │ ├── bower.json │ ├── keymap │ ├── emacs.js │ ├── extra.js │ └── vim.js │ ├── lib │ ├── codemirror.css │ └── codemirror.js │ ├── mode │ ├── apl │ │ └── apl.js │ ├── asterisk │ │ └── asterisk.js │ ├── clike │ │ ├── clike.js │ │ └── scala.html │ ├── clojure │ │ └── clojure.js │ ├── cobol │ │ └── cobol.js │ ├── coffeescript │ │ └── coffeescript.js │ ├── commonlisp │ │ └── commonlisp.js │ ├── css │ │ ├── css.js │ │ ├── scss.html │ │ ├── scss_test.js │ │ └── test.js │ ├── d │ │ └── d.js │ ├── diff │ │ └── diff.js │ ├── dtd │ │ └── dtd.js │ ├── ecl │ │ └── ecl.js │ ├── eiffel │ │ └── eiffel.js │ ├── erlang │ │ └── erlang.js │ ├── fortran │ │ └── fortran.js │ ├── gas │ │ └── gas.js │ ├── gfm │ │ ├── gfm.js │ │ └── test.js │ ├── gherkin │ │ └── gherkin.js │ ├── go │ │ └── go.js │ ├── groovy │ │ └── groovy.js │ ├── haml │ │ ├── haml.js │ │ └── test.js │ ├── haskell │ │ └── haskell.js │ ├── haxe │ │ └── haxe.js │ ├── htmlembedded │ │ └── htmlembedded.js │ ├── htmlmixed │ │ └── htmlmixed.js │ ├── http │ │ └── http.js │ ├── jade │ │ └── jade.js │ ├── javascript │ │ ├── javascript.js │ │ ├── test.js │ │ └── typescript.html │ ├── jinja2 │ │ └── jinja2.js │ ├── less │ │ └── less.js │ ├── livescript │ │ ├── livescript.js │ │ └── livescript.ls │ ├── lua │ │ └── lua.js │ ├── markdown │ │ ├── markdown.js │ │ └── test.js │ ├── meta.js │ ├── mirc │ │ └── mirc.js │ ├── nginx │ │ └── nginx.js │ ├── ntriples │ │ └── ntriples.js │ ├── ocaml │ │ └── ocaml.js │ ├── octave │ │ └── octave.js │ ├── pascal │ │ └── pascal.js │ ├── perl │ │ └── perl.js │ ├── php │ │ └── php.js │ ├── pig │ │ └── pig.js │ ├── properties │ │ └── properties.js │ ├── python │ │ └── python.js │ ├── q │ │ └── q.js │ ├── r │ │ └── r.js │ ├── rpm │ │ ├── changes │ │ │ └── changes.js │ │ └── spec │ │ │ ├── spec.css │ │ │ └── spec.js │ ├── rst │ │ └── rst.js │ ├── ruby │ │ └── ruby.js │ ├── rust │ │ └── rust.js │ ├── sass │ │ └── sass.js │ ├── scheme │ │ └── scheme.js │ ├── shell │ │ └── shell.js │ ├── sieve │ │ └── sieve.js │ ├── smalltalk │ │ └── smalltalk.js │ ├── smarty │ │ └── smarty.js │ ├── smartymixed │ │ └── smartymixed.js │ ├── sparql │ │ └── sparql.js │ ├── sql │ │ └── sql.js │ ├── stex │ │ ├── stex.js │ │ └── test.js │ ├── tcl │ │ └── tcl.js │ ├── tiddlywiki │ │ ├── tiddlywiki.css │ │ └── tiddlywiki.js │ ├── tiki │ │ ├── tiki.css │ │ └── tiki.js │ ├── toml │ │ └── toml.js │ ├── turtle │ │ └── turtle.js │ ├── vb │ │ └── vb.js │ ├── vbscript │ │ └── vbscript.js │ ├── velocity │ │ └── velocity.js │ ├── verilog │ │ └── verilog.js │ ├── xml │ │ └── xml.js │ ├── xquery │ │ ├── test.js │ │ └── xquery.js │ ├── yaml │ │ └── yaml.js │ └── z80 │ │ └── z80.js │ └── theme │ ├── 3024-day.css │ ├── 3024-night.css │ ├── ambiance-mobile.css │ ├── ambiance.css │ ├── base16-dark.css │ ├── base16-light.css │ ├── blackboard.css │ ├── cobalt.css │ ├── eclipse.css │ ├── elegant.css │ ├── erlang-dark.css │ ├── lesser-dark.css │ ├── mbo.css │ ├── midnight.css │ ├── monokai.css │ ├── neat.css │ ├── night.css │ ├── paraiso-dark.css │ ├── paraiso-light.css │ ├── rubyblue.css │ ├── solarized.css │ ├── the-matrix.css │ ├── tomorrow-night-eighties.css │ ├── twilight.css │ ├── vibrant-ink.css │ ├── xq-dark.css │ └── xq-light.css ├── data ├── type-2014-01-01-1388557136.json ├── type.json ├── type1-2014-01-01-1388557148.json └── type1.json ├── html ├── about.html ├── add.html ├── api.html └── index.html ├── img ├── 0.jpg ├── 1.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── bird.jpg └── bird.png ├── index.html ├── js ├── About.js ├── Add.js ├── Api.js └── Index.js ├── lib ├── angular.min.js ├── angular.ngRoute.js ├── bootstrap.min.css ├── codemirror.css ├── codemirror.js └── sanitize.min.js └── php ├── delete.php └── save.php /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.xml 3 | 4 | .idea/encodings.xml 5 | 6 | .idea/workspace.xml 7 | 8 | .idea/encodings.xml 9 | 10 | php/aip.php 11 | 12 | data/type.json 13 | 14 | data/*.json -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | hornibills -------------------------------------------------------------------------------- /.idea/hornibills.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | hornibills 2 | ========== 3 | 4 | ##什么是犀鸟? 5 | 6 | 犀鸟是一个在线文档系统,致力于快速解决团队内部接口文档的编写和沉淀。 7 | 8 | 力求用最简单的方式部署您的文档系统,拥有最方便的文档管理。 9 | 10 | 一些想法借鉴了[iodocs](http://github.com/mashery/iodocs) 11 | 12 | ##长啥样? 13 | 14 | [示例](http://xiniao.sinaapp.com/) 15 | 16 | 因为用的是sae,所以不支持本地修改,但是看看样子足够了。 17 | 18 | ##犀鸟如何部署? 19 | 20 | 犀鸟采用**bootstrap**+**angularjs**+**php**开发。 21 | 22 | 获取源文件,部署到您支持php的webserver的可访问目录即可。 23 | 24 | enjoy! 25 | 26 | 27 | ##常见问题 28 | ###如何解决版本问题? 29 | 30 | 每次修改动作触发后,都会在**data/**目录下留下修改文件的一个快照。 31 | 32 | 例如:**data/type[2013-12-29]1388326575.json**,适当人工就可以操作一次回滚,或者diff下修改。 33 | 34 | ###我有很多现成的接口在word里,我如何快速弄到犀鸟里? 35 | 36 | 犀鸟没有db,所有接口在**data/各种.json**里维护。 37 | 38 | **data/type.json**是一个特殊的json,里面存储的是您接口的分类,格式简单 39 | 40 | ```javascript 41 | 42 | [{"name":"notes模块文档","href":"notes","description":"123"},...] 43 | ``` 44 | 其中href是当前分类的类似主键的东西。 45 | 46 | 那么**data/notes.json**对应此分类,维护此分类下的所有接口,样例如下: 47 | 48 | ```javascript 49 | 50 | [ 51 | { 52 | "name": "一个接口的名字", 53 | "url": "该接口的url", 54 | "method": "POST", 55 | "description": " 接口的描述", 56 | "params": [ 57 | { 58 | "Name": "param_1_name", 59 | "Required": "Y", 60 | "Default": "", 61 | "Type": "string", 62 | "Description": "Description of the first parameter." 63 | }, 64 | { 65 | "Name": "userId", 66 | "Required": "Y", 67 | "Default": "", 68 | "Type": "string", 69 | "Description": "The userId parameter that is in the URI." 70 | } 71 | ], 72 | "response": [ 73 | { 74 | "Name": "param_1_name", 75 | "Required": "Y", 76 | "Default": "", 77 | "Type": "string", 78 | "Description": "Description of the first parameter." 79 | }, 80 | { 81 | "Name": "userId", 82 | "Required": "Y", 83 | "Default": "", 84 | "Type": "string", 85 | "Description": "The userId parameter that is in the URI." 86 | } 87 | ], 88 | "demo": "=1.0.x", 25 | "codemirror": "~3.19.0" 26 | }, 27 | "devDependencies": { 28 | "angular-mocks": ">=1.0.x", 29 | "angular-ui-bootstrap-bower": "~0.5.0", 30 | "angular-ui-docs": "angular-ui/angular-ui-docs" 31 | }, 32 | "_release": "0.0.7", 33 | "_resolution": { 34 | "type": "version", 35 | "tag": "v0.0.7", 36 | "commit": "7d4c80c15f06b03249f2873e8665a9e1b62e7d4d" 37 | }, 38 | "_source": "git://github.com/angular-ui/ui-codemirror.git", 39 | "_target": "~0.0.7", 40 | "_originalSource": "angular-ui-codemirror", 41 | "_direct": true 42 | } -------------------------------------------------------------------------------- /bower_components/angular-ui-codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bower_components/angular-ui-codemirror/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-codemirror", 3 | "version": "0.0.7", 4 | "description": "This directive allows you to add CodeMirror to your textarea elements.", 5 | "author": "https://github.com/angular-ui/ui-codemirror/contributors", 6 | "license": "MIT", 7 | "homepage": "http://angular-ui.github.com", 8 | "main": "./ui-codemirror.js", 9 | "ignore": [ 10 | "**/.*", 11 | "node_modules", 12 | "bower_components", 13 | "out", 14 | "test*", 15 | "demo*", 16 | "gruntFile.js", 17 | "package.json" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/angular-ui/ui-codemirror.git" 22 | }, 23 | "dependencies": { 24 | "angular": ">=1.0.x", 25 | "codemirror": "~3.19.0" 26 | }, 27 | "devDependencies": { 28 | "angular-mocks": ">=1.0.x", 29 | "angular-ui-bootstrap-bower": "~0.5.0", 30 | "angular-ui-docs": "angular-ui/angular-ui-docs" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /bower_components/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.2.7-build.2026+sha.7d6e5a2", 4 | "main": "./angular.js", 5 | "dependencies": {}, 6 | "homepage": "https://github.com/angular/bower-angular", 7 | "_release": "1.2.7-build.2026+sha.7d6e5a2", 8 | "_resolution": { 9 | "type": "version", 10 | "tag": "v1.2.7-build.2026+sha.7d6e5a2", 11 | "commit": "5f2117108e42b004095786fbbc3c524795d3dbca" 12 | }, 13 | "_source": "git://github.com/angular/bower-angular.git", 14 | "_target": ">=1.0.x", 15 | "_originalSource": "angular" 16 | } -------------------------------------------------------------------------------- /bower_components/angular/README.md: -------------------------------------------------------------------------------- 1 | # bower-angular 2 | 3 | This repo is for distribution on `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | Install with `bower`: 10 | 11 | ```shell 12 | bower install angular 13 | ``` 14 | 15 | Add a ` 19 | ``` 20 | 21 | ## Documentation 22 | 23 | Documentation is available on the 24 | [AngularJS docs site](http://docs.angularjs.org/). 25 | 26 | ## License 27 | 28 | The MIT License 29 | 30 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 31 | 32 | Permission is hereby granted, free of charge, to any person obtaining a copy 33 | of this software and associated documentation files (the "Software"), to deal 34 | in the Software without restriction, including without limitation the rights 35 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 36 | copies of the Software, and to permit persons to whom the Software is 37 | furnished to do so, subject to the following conditions: 38 | 39 | The above copyright notice and this permission notice shall be included in 40 | all copies or substantial portions of the Software. 41 | 42 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 43 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 44 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 45 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 46 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 47 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 48 | THE SOFTWARE. 49 | -------------------------------------------------------------------------------- /bower_components/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /bower_components/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/bower_components/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /bower_components/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.2.7-build.2026+sha.7d6e5a2", 4 | "main": "./angular.js", 5 | "dependencies": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /bower_components/codemirror/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CodeMirror", 3 | "main": [ 4 | "lib/codemirror.js", 5 | "lib/codemirror.css" 6 | ], 7 | "ignore": [ 8 | "**/.*", 9 | "node_modules", 10 | "components", 11 | "bin", 12 | "demo", 13 | "doc", 14 | "test", 15 | "index.html", 16 | "package.json" 17 | ], 18 | "homepage": "https://github.com/marijnh/CodeMirror", 19 | "version": "3.19.0", 20 | "_release": "3.19.0", 21 | "_resolution": { 22 | "type": "version", 23 | "tag": "3.19.0", 24 | "commit": "231e235b07ce03d46baac93b2da5c3447ccfdd1f" 25 | }, 26 | "_source": "git://github.com/marijnh/CodeMirror.git", 27 | "_target": "~3.19.0", 28 | "_originalSource": "codemirror" 29 | } -------------------------------------------------------------------------------- /bower_components/codemirror/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | - [Getting help](#getting-help-) 4 | - [Submitting bug reports](#submitting-bug-reports-) 5 | - [Contributing code](#contributing-code-) 6 | 7 | ## Getting help 8 | 9 | Community discussion, questions, and informal bug reporting is done on the 10 | [CodeMirror Google group](http://groups.google.com/group/codemirror). 11 | 12 | ## Submitting bug reports 13 | 14 | The preferred way to report bugs is to use the 15 | [GitHub issue tracker](http://github.com/marijnh/CodeMirror/issues). Before 16 | reporting a bug, read these pointers. 17 | 18 | **Note:** The issue tracker is for *bugs*, not requests for help. Questions 19 | should be asked on the 20 | [CodeMirror Google group](http://groups.google.com/group/codemirror) instead. 21 | 22 | ### Reporting bugs effectively 23 | 24 | - CodeMirror is maintained by volunteers. They don't owe you anything, so be 25 | polite. Reports with an indignant or belligerent tone tend to be moved to the 26 | bottom of the pile. 27 | 28 | - Include information about **the browser in which the problem occurred**. Even 29 | if you tested several browsers, and the problem occurred in all of them, 30 | mention this fact in the bug report. Also include browser version numbers and 31 | the operating system that you're on. 32 | 33 | - Mention which release of CodeMirror you're using. Preferably, try also with 34 | the current development snapshot, to ensure the problem has not already been 35 | fixed. 36 | 37 | - Mention very precisely what went wrong. "X is broken" is not a good bug 38 | report. What did you expect to happen? What happened instead? Describe the 39 | exact steps a maintainer has to take to make the problem occur. We can not 40 | fix something that we can not observe. 41 | 42 | - If the problem can not be reproduced in any of the demos included in the 43 | CodeMirror distribution, please provide an HTML document that demonstrates 44 | the problem. The best way to do this is to go to 45 | [jsbin.com](http://jsbin.com/ihunin/edit), enter it there, press save, and 46 | include the resulting link in your bug report. 47 | 48 | ## Contributing code 49 | 50 | - Make sure you have a [GitHub Account](https://github.com/signup/free) 51 | - Fork [CodeMirror](https://github.com/marijnh/CodeMirror/) 52 | ([how to fork a repo](https://help.github.com/articles/fork-a-repo)) 53 | - Make your changes 54 | - If your changes are easy to test or likely to regress, add tests. 55 | Tests for the core go into `test/test.js`, some modes have their own 56 | test suite under `mode/XXX/test.js`. Feel free to add new test 57 | suites to modes that don't have one yet (be sure to link the new 58 | tests into `test/index.html`). 59 | - Follow the general code style of the rest of the project (see 60 | below). Run `bin/lint` to verify that the linter is happy. 61 | - Make sure all tests pass. Visit `test/index.html` in your browser to 62 | run them. 63 | - Submit a pull request 64 | ([how to create a pull request](https://help.github.com/articles/fork-a-repo)) 65 | 66 | ### Coding standards 67 | 68 | - 2 spaces per indentation level, no tabs. 69 | - Include semicolons after statements. 70 | - Note that the linter (`bin/lint`) which is run after each commit 71 | complains about unused variables and functions. Prefix their names 72 | with an underscore to muffle it. 73 | -------------------------------------------------------------------------------- /bower_components/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2013 by Marijn Haverbeke and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /bower_components/codemirror/README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror 2 | [![Build Status](https://secure.travis-ci.org/marijnh/CodeMirror.png?branch=master)](http://travis-ci.org/marijnh/CodeMirror) 3 | [![NPM version](https://badge.fury.io/js/codemirror.png)](http://badge.fury.io/js/codemirror) 4 | 5 | CodeMirror is a JavaScript component that provides a code editor in 6 | the browser. When a mode is available for the language you are coding 7 | in, it will color your code, and optionally help with indentation. 8 | 9 | The project page is http://codemirror.net 10 | The manual is at http://codemirror.net/doc/manual.html 11 | The contributing guidelines are in [CONTRIBUTING.md](https://github.com/marijnh/CodeMirror/blob/master/CONTRIBUTING.md) 12 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/comment/continuecomment.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var modes = ["clike", "css", "javascript"]; 3 | for (var i = 0; i < modes.length; ++i) 4 | CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "}); 5 | 6 | function continueComment(cm) { 7 | var pos = cm.getCursor(), token = cm.getTokenAt(pos); 8 | if (token.type != "comment") return CodeMirror.Pass; 9 | var mode = CodeMirror.innerMode(cm.getMode(), token.state).mode; 10 | 11 | var insert; 12 | if (mode.blockCommentStart && mode.blockCommentContinue) { 13 | var end = token.string.indexOf(mode.blockCommentEnd); 14 | var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; 15 | if (end != -1 && end == token.string.length - mode.blockCommentEnd.length) { 16 | // Comment ended, don't continue it 17 | } else if (token.string.indexOf(mode.blockCommentStart) == 0) { 18 | insert = full.slice(0, token.start); 19 | if (!/^\s*$/.test(insert)) { 20 | insert = ""; 21 | for (var i = 0; i < token.start; ++i) insert += " "; 22 | } 23 | } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && 24 | found + mode.blockCommentContinue.length > token.start && 25 | /^\s*$/.test(full.slice(0, found))) { 26 | insert = full.slice(0, found); 27 | } 28 | if (insert != null) insert += mode.blockCommentContinue; 29 | } 30 | if (insert == null && mode.lineComment) { 31 | var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); 32 | if (found > -1) { 33 | insert = line.slice(0, found); 34 | if (/\S/.test(insert)) insert = null; 35 | else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0]; 36 | } 37 | } 38 | 39 | if (insert != null) 40 | cm.replaceSelection("\n" + insert, "end"); 41 | else 42 | return CodeMirror.Pass; 43 | } 44 | 45 | CodeMirror.defineOption("continueComments", null, function(cm, val, prev) { 46 | if (prev && prev != CodeMirror.Init) 47 | cm.removeKeyMap("continueComment"); 48 | if (val) { 49 | var map = {name: "continueComment"}; 50 | map[typeof val == "string" ? val : "Enter"] = continueComment; 51 | cm.addKeyMap(map); 52 | } 53 | }); 54 | })(); 55 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: white; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: #333; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/dialog/dialog.js: -------------------------------------------------------------------------------- 1 | // Open simple dialogs on top of an editor. Relies on dialog.css. 2 | 3 | (function() { 4 | function dialogDiv(cm, template, bottom) { 5 | var wrap = cm.getWrapperElement(); 6 | var dialog; 7 | dialog = wrap.appendChild(document.createElement("div")); 8 | if (bottom) { 9 | dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; 10 | } else { 11 | dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; 12 | } 13 | dialog.innerHTML = template; 14 | return dialog; 15 | } 16 | 17 | CodeMirror.defineExtension("openDialog", function(template, callback, options) { 18 | var dialog = dialogDiv(this, template, options && options.bottom); 19 | var closed = false, me = this; 20 | function close() { 21 | if (closed) return; 22 | closed = true; 23 | dialog.parentNode.removeChild(dialog); 24 | } 25 | var inp = dialog.getElementsByTagName("input")[0], button; 26 | if (inp) { 27 | CodeMirror.on(inp, "keydown", function(e) { 28 | if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } 29 | if (e.keyCode == 13 || e.keyCode == 27) { 30 | CodeMirror.e_stop(e); 31 | close(); 32 | me.focus(); 33 | if (e.keyCode == 13) callback(inp.value); 34 | } 35 | }); 36 | if (options && options.onKeyUp) { 37 | CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); 38 | } 39 | if (options && options.value) inp.value = options.value; 40 | inp.focus(); 41 | CodeMirror.on(inp, "blur", close); 42 | } else if (button = dialog.getElementsByTagName("button")[0]) { 43 | CodeMirror.on(button, "click", function() { 44 | close(); 45 | me.focus(); 46 | }); 47 | button.focus(); 48 | CodeMirror.on(button, "blur", close); 49 | } 50 | return close; 51 | }); 52 | 53 | CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { 54 | var dialog = dialogDiv(this, template, options && options.bottom); 55 | var buttons = dialog.getElementsByTagName("button"); 56 | var closed = false, me = this, blurring = 1; 57 | function close() { 58 | if (closed) return; 59 | closed = true; 60 | dialog.parentNode.removeChild(dialog); 61 | me.focus(); 62 | } 63 | buttons[0].focus(); 64 | for (var i = 0; i < buttons.length; ++i) { 65 | var b = buttons[i]; 66 | (function(callback) { 67 | CodeMirror.on(b, "click", function(e) { 68 | CodeMirror.e_preventDefault(e); 69 | close(); 70 | if (callback) callback(me); 71 | }); 72 | })(callbacks[i]); 73 | CodeMirror.on(b, "blur", function() { 74 | --blurring; 75 | setTimeout(function() { if (blurring <= 0) close(); }, 200); 76 | }); 77 | CodeMirror.on(b, "focus", function() { ++blurring; }); 78 | } 79 | }); 80 | })(); 81 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/display/fullscreen.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { 5 | if (old == CodeMirror.Init) old = false; 6 | if (!old == !val) return; 7 | if (val) setFullscreen(cm); 8 | else setNormal(cm); 9 | }); 10 | 11 | function setFullscreen(cm) { 12 | var wrap = cm.getWrapperElement(); 13 | cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, 14 | width: wrap.style.width, height: wrap.style.height}; 15 | wrap.style.width = wrap.style.height = ""; 16 | wrap.className += " CodeMirror-fullscreen"; 17 | document.documentElement.style.overflow = "hidden"; 18 | cm.refresh(); 19 | } 20 | 21 | function setNormal(cm) { 22 | var wrap = cm.getWrapperElement(); 23 | wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); 24 | document.documentElement.style.overflow = ""; 25 | var info = cm.state.fullScreenRestore; 26 | wrap.style.width = info.width; wrap.style.height = info.height; 27 | window.scrollTo(info.scrollLeft, info.scrollTop); 28 | cm.refresh(); 29 | } 30 | })(); 31 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/display/placeholder.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | CodeMirror.defineOption("placeholder", "", function(cm, val, old) { 3 | var prev = old && old != CodeMirror.Init; 4 | if (val && !prev) { 5 | cm.on("focus", onFocus); 6 | cm.on("blur", onBlur); 7 | cm.on("change", onChange); 8 | onChange(cm); 9 | } else if (!val && prev) { 10 | cm.off("focus", onFocus); 11 | cm.off("blur", onBlur); 12 | cm.off("change", onChange); 13 | clearPlaceholder(cm); 14 | var wrapper = cm.getWrapperElement(); 15 | wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); 16 | } 17 | 18 | if (val && !cm.hasFocus()) onBlur(cm); 19 | }); 20 | 21 | function clearPlaceholder(cm) { 22 | if (cm.state.placeholder) { 23 | cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); 24 | cm.state.placeholder = null; 25 | } 26 | } 27 | function setPlaceholder(cm) { 28 | clearPlaceholder(cm); 29 | var elt = cm.state.placeholder = document.createElement("pre"); 30 | elt.style.cssText = "height: 0; overflow: visible"; 31 | elt.className = "CodeMirror-placeholder"; 32 | elt.appendChild(document.createTextNode(cm.getOption("placeholder"))); 33 | cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); 34 | } 35 | 36 | function onFocus(cm) { 37 | clearPlaceholder(cm); 38 | } 39 | function onBlur(cm) { 40 | if (isEmpty(cm)) setPlaceholder(cm); 41 | } 42 | function onChange(cm) { 43 | var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); 44 | wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); 45 | 46 | if (cm.hasFocus()) return; 47 | if (empty) setPlaceholder(cm); 48 | else clearPlaceholder(cm); 49 | } 50 | 51 | function isEmpty(cm) { 52 | return (cm.lineCount() === 1) && (cm.getLine(0) === ""); 53 | } 54 | })(); 55 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/edit/closebrackets.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var DEFAULT_BRACKETS = "()[]{}''\"\""; 3 | var DEFAULT_EXPLODE_ON_ENTER = "[]{}"; 4 | var SPACE_CHAR_REGEX = /\s/; 5 | 6 | CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { 7 | if (old != CodeMirror.Init && old) 8 | cm.removeKeyMap("autoCloseBrackets"); 9 | if (!val) return; 10 | var pairs = DEFAULT_BRACKETS, explode = DEFAULT_EXPLODE_ON_ENTER; 11 | if (typeof val == "string") pairs = val; 12 | else if (typeof val == "object") { 13 | if (val.pairs != null) pairs = val.pairs; 14 | if (val.explode != null) explode = val.explode; 15 | } 16 | var map = buildKeymap(pairs); 17 | if (explode) map.Enter = buildExplodeHandler(explode); 18 | cm.addKeyMap(map); 19 | }); 20 | 21 | function charsAround(cm, pos) { 22 | var str = cm.getRange(CodeMirror.Pos(pos.line, pos.ch - 1), 23 | CodeMirror.Pos(pos.line, pos.ch + 1)); 24 | return str.length == 2 ? str : null; 25 | } 26 | 27 | function buildKeymap(pairs) { 28 | var map = { 29 | name : "autoCloseBrackets", 30 | Backspace: function(cm) { 31 | if (cm.somethingSelected()) return CodeMirror.Pass; 32 | var cur = cm.getCursor(), around = charsAround(cm, cur); 33 | if (around && pairs.indexOf(around) % 2 == 0) 34 | cm.replaceRange("", CodeMirror.Pos(cur.line, cur.ch - 1), CodeMirror.Pos(cur.line, cur.ch + 1)); 35 | else 36 | return CodeMirror.Pass; 37 | } 38 | }; 39 | var closingBrackets = ""; 40 | for (var i = 0; i < pairs.length; i += 2) (function(left, right) { 41 | if (left != right) closingBrackets += right; 42 | function surround(cm) { 43 | var selection = cm.getSelection(); 44 | cm.replaceSelection(left + selection + right); 45 | } 46 | function maybeOverwrite(cm) { 47 | var cur = cm.getCursor(), ahead = cm.getRange(cur, CodeMirror.Pos(cur.line, cur.ch + 1)); 48 | if (ahead != right || cm.somethingSelected()) return CodeMirror.Pass; 49 | else cm.execCommand("goCharRight"); 50 | } 51 | map["'" + left + "'"] = function(cm) { 52 | if (left == "'" && cm.getTokenAt(cm.getCursor()).type == "comment") 53 | return CodeMirror.Pass; 54 | if (cm.somethingSelected()) return surround(cm); 55 | if (left == right && maybeOverwrite(cm) != CodeMirror.Pass) return; 56 | var cur = cm.getCursor(), ahead = CodeMirror.Pos(cur.line, cur.ch + 1); 57 | var line = cm.getLine(cur.line), nextChar = line.charAt(cur.ch), curChar = cur.ch > 0 ? line.charAt(cur.ch - 1) : ""; 58 | if (left == right && CodeMirror.isWordChar(curChar)) 59 | return CodeMirror.Pass; 60 | if (line.length == cur.ch || closingBrackets.indexOf(nextChar) >= 0 || SPACE_CHAR_REGEX.test(nextChar)) 61 | cm.replaceSelection(left + right, {head: ahead, anchor: ahead}); 62 | else 63 | return CodeMirror.Pass; 64 | }; 65 | if (left != right) map["'" + right + "'"] = maybeOverwrite; 66 | })(pairs.charAt(i), pairs.charAt(i + 1)); 67 | return map; 68 | } 69 | 70 | function buildExplodeHandler(pairs) { 71 | return function(cm) { 72 | var cur = cm.getCursor(), around = charsAround(cm, cur); 73 | if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; 74 | cm.operation(function() { 75 | var newPos = CodeMirror.Pos(cur.line + 1, 0); 76 | cm.replaceSelection("\n\n", {anchor: newPos, head: newPos}, "+input"); 77 | cm.indentLine(cur.line + 1, null, true); 78 | cm.indentLine(cur.line + 2, null, true); 79 | }); 80 | }; 81 | } 82 | })(); 83 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/edit/continuelist.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var listRE = /^(\s*)([*+-]|(\d+)\.)(\s*)/, 5 | unorderedBullets = '*+-'; 6 | 7 | CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { 8 | var pos = cm.getCursor(), 9 | inList = cm.getStateAfter(pos.line).list !== false, 10 | match; 11 | 12 | if (!inList || !(match = cm.getLine(pos.line).match(listRE))) { 13 | cm.execCommand('newlineAndIndent'); 14 | return; 15 | } 16 | 17 | var indent = match[1], after = match[4]; 18 | var bullet = unorderedBullets.indexOf(match[2]) >= 0 19 | ? match[2] 20 | : (parseInt(match[3], 10) + 1) + '.'; 21 | 22 | cm.replaceSelection('\n' + indent + bullet + after, 'end'); 23 | }; 24 | 25 | }()); 26 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/edit/matchtags.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | CodeMirror.defineOption("matchTags", false, function(cm, val, old) { 5 | if (old && old != CodeMirror.Init) { 6 | cm.off("cursorActivity", doMatchTags); 7 | cm.off("viewportChange", maybeUpdateMatch); 8 | clear(cm); 9 | } 10 | if (val) { 11 | cm.state.matchBothTags = typeof val == "object" && val.bothTags; 12 | cm.on("cursorActivity", doMatchTags); 13 | cm.on("viewportChange", maybeUpdateMatch); 14 | doMatchTags(cm); 15 | } 16 | }); 17 | 18 | function clear(cm) { 19 | if (cm.state.tagHit) cm.state.tagHit.clear(); 20 | if (cm.state.tagOther) cm.state.tagOther.clear(); 21 | cm.state.tagHit = cm.state.tagOther = null; 22 | } 23 | 24 | function doMatchTags(cm) { 25 | cm.state.failedTagMatch = false; 26 | cm.operation(function() { 27 | clear(cm); 28 | if (cm.somethingSelected()) return; 29 | var cur = cm.getCursor(), range = cm.getViewport(); 30 | range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); 31 | var match = CodeMirror.findMatchingTag(cm, cur, range); 32 | if (!match) return; 33 | if (cm.state.matchBothTags) { 34 | var hit = match.at == "open" ? match.open : match.close; 35 | if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); 36 | } 37 | var other = match.at == "close" ? match.open : match.close; 38 | if (other) 39 | cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); 40 | else 41 | cm.state.failedTagMatch = true; 42 | }); 43 | } 44 | 45 | function maybeUpdateMatch(cm) { 46 | if (cm.state.failedTagMatch) doMatchTags(cm); 47 | } 48 | 49 | CodeMirror.commands.toMatchingTag = function(cm) { 50 | var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); 51 | if (found) { 52 | var other = found.at == "close" ? found.open : found.close; 53 | if (other) cm.setSelection(other.to, other.from); 54 | } 55 | }; 56 | })(); 57 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/edit/trailingspace.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 2 | if (prev == CodeMirror.Init) prev = false; 3 | if (prev && !val) 4 | cm.removeOverlay("trailingspace"); 5 | else if (!prev && val) 6 | cm.addOverlay({ 7 | token: function(stream) { 8 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 9 | if (i > stream.pos) { stream.pos = i; return null; } 10 | stream.pos = l; 11 | return "trailingspace"; 12 | }, 13 | name: "trailingspace" 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/fold/brace-fold.js: -------------------------------------------------------------------------------- 1 | CodeMirror.registerHelper("fold", "brace", function(cm, start) { 2 | var line = start.line, lineText = cm.getLine(line); 3 | var startCh, tokenType; 4 | 5 | function findOpening(openCh) { 6 | for (var at = start.ch, pass = 0;;) { 7 | var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); 8 | if (found == -1) { 9 | if (pass == 1) break; 10 | pass = 1; 11 | at = lineText.length; 12 | continue; 13 | } 14 | if (pass == 1 && found < start.ch) break; 15 | tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); 16 | if (!/^(comment|string)/.test(tokenType)) return found + 1; 17 | at = found - 1; 18 | } 19 | } 20 | 21 | var startToken = "{", endToken = "}", startCh = findOpening("{"); 22 | if (startCh == null) { 23 | startToken = "[", endToken = "]"; 24 | startCh = findOpening("["); 25 | } 26 | 27 | if (startCh == null) return; 28 | var count = 1, lastLine = cm.lastLine(), end, endCh; 29 | outer: for (var i = line; i <= lastLine; ++i) { 30 | var text = cm.getLine(i), pos = i == line ? startCh : 0; 31 | for (;;) { 32 | var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); 33 | if (nextOpen < 0) nextOpen = text.length; 34 | if (nextClose < 0) nextClose = text.length; 35 | pos = Math.min(nextOpen, nextClose); 36 | if (pos == text.length) break; 37 | if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { 38 | if (pos == nextOpen) ++count; 39 | else if (!--count) { end = i; endCh = pos; break outer; } 40 | } 41 | ++pos; 42 | } 43 | } 44 | if (end == null || line == end && endCh == startCh) return; 45 | return {from: CodeMirror.Pos(line, startCh), 46 | to: CodeMirror.Pos(end, endCh)}; 47 | }); 48 | CodeMirror.braceRangeFinder = CodeMirror.fold.brace; // deprecated 49 | 50 | CodeMirror.registerHelper("fold", "import", function(cm, start) { 51 | function hasImport(line) { 52 | if (line < cm.firstLine() || line > cm.lastLine()) return null; 53 | var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); 54 | if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); 55 | if (start.type != "keyword" || start.string != "import") return null; 56 | // Now find closing semicolon, return its position 57 | for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { 58 | var text = cm.getLine(i), semi = text.indexOf(";"); 59 | if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; 60 | } 61 | } 62 | 63 | var start = start.line, has = hasImport(start), prev; 64 | if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) 65 | return null; 66 | for (var end = has.end;;) { 67 | var next = hasImport(end.line + 1); 68 | if (next == null) break; 69 | end = next.end; 70 | } 71 | return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; 72 | }); 73 | CodeMirror.importRangeFinder = CodeMirror.fold["import"]; // deprecated 74 | 75 | CodeMirror.registerHelper("fold", "include", function(cm, start) { 76 | function hasInclude(line) { 77 | if (line < cm.firstLine() || line > cm.lastLine()) return null; 78 | var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); 79 | if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); 80 | if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; 81 | } 82 | 83 | var start = start.line, has = hasInclude(start); 84 | if (has == null || hasInclude(start - 1) != null) return null; 85 | for (var end = start;;) { 86 | var next = hasInclude(end + 1); 87 | if (next == null) break; 88 | ++end; 89 | } 90 | return {from: CodeMirror.Pos(start, has + 1), 91 | to: cm.clipPos(CodeMirror.Pos(end))}; 92 | }); 93 | CodeMirror.includeRangeFinder = CodeMirror.fold.include; // deprecated 94 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/fold/comment-fold.js: -------------------------------------------------------------------------------- 1 | CodeMirror.registerHelper("fold", "comment", function(cm, start) { 2 | var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; 3 | if (!startToken || !endToken) return; 4 | var line = start.line, lineText = cm.getLine(line); 5 | 6 | var startCh; 7 | for (var at = start.ch, pass = 0;;) { 8 | var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); 9 | if (found == -1) { 10 | if (pass == 1) return; 11 | pass = 1; 12 | at = lineText.length; 13 | continue; 14 | } 15 | if (pass == 1 && found < start.ch) return; 16 | if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { 17 | startCh = found + startToken.length; 18 | break; 19 | } 20 | at = found - 1; 21 | } 22 | 23 | var depth = 1, lastLine = cm.lastLine(), end, endCh; 24 | outer: for (var i = line; i <= lastLine; ++i) { 25 | var text = cm.getLine(i), pos = i == line ? startCh : 0; 26 | for (;;) { 27 | var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); 28 | if (nextOpen < 0) nextOpen = text.length; 29 | if (nextClose < 0) nextClose = text.length; 30 | pos = Math.min(nextOpen, nextClose); 31 | if (pos == text.length) break; 32 | if (pos == nextOpen) ++depth; 33 | else if (!--depth) { end = i; endCh = pos; break outer; } 34 | ++pos; 35 | } 36 | } 37 | if (end == null || line == end && endCh == startCh) return; 38 | return {from: CodeMirror.Pos(line, startCh), 39 | to: CodeMirror.Pos(end, endCh)}; 40 | }); 41 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/fold/foldcode.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | function doFold(cm, pos, options, force) { 5 | var finder = options && (options.call ? options : options.rangeFinder); 6 | if (!finder) finder = cm.getHelper(pos, "fold"); 7 | if (!finder) return; 8 | if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); 9 | var minSize = options && options.minFoldSize || 0; 10 | 11 | function getRange(allowFolded) { 12 | var range = finder(cm, pos); 13 | if (!range || range.to.line - range.from.line < minSize) return null; 14 | var marks = cm.findMarksAt(range.from); 15 | for (var i = 0; i < marks.length; ++i) { 16 | if (marks[i].__isFold && force !== "fold") { 17 | if (!allowFolded) return null; 18 | range.cleared = true; 19 | marks[i].clear(); 20 | } 21 | } 22 | return range; 23 | } 24 | 25 | var range = getRange(true); 26 | if (options && options.scanUp) while (!range && pos.line > cm.firstLine()) { 27 | pos = CodeMirror.Pos(pos.line - 1, 0); 28 | range = getRange(false); 29 | } 30 | if (!range || range.cleared || force === "unfold") return; 31 | 32 | var myWidget = makeWidget(options); 33 | CodeMirror.on(myWidget, "mousedown", function() { myRange.clear(); }); 34 | var myRange = cm.markText(range.from, range.to, { 35 | replacedWith: myWidget, 36 | clearOnEnter: true, 37 | __isFold: true 38 | }); 39 | myRange.on("clear", function(from, to) { 40 | CodeMirror.signal(cm, "unfold", cm, from, to); 41 | }); 42 | CodeMirror.signal(cm, "fold", cm, range.from, range.to); 43 | } 44 | 45 | function makeWidget(options) { 46 | var widget = (options && options.widget) || "\u2194"; 47 | if (typeof widget == "string") { 48 | var text = document.createTextNode(widget); 49 | widget = document.createElement("span"); 50 | widget.appendChild(text); 51 | widget.className = "CodeMirror-foldmarker"; 52 | } 53 | return widget; 54 | } 55 | 56 | // Clumsy backwards-compatible interface 57 | CodeMirror.newFoldFunction = function(rangeFinder, widget) { 58 | return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; 59 | }; 60 | 61 | // New-style interface 62 | CodeMirror.defineExtension("foldCode", function(pos, options, force) { 63 | doFold(this, pos, options, force); 64 | }); 65 | 66 | CodeMirror.registerHelper("fold", "combine", function() { 67 | var funcs = Array.prototype.slice.call(arguments, 0); 68 | return function(cm, start) { 69 | for (var i = 0; i < funcs.length; ++i) { 70 | var found = funcs[i](cm, start); 71 | if (found) return found; 72 | } 73 | }; 74 | }); 75 | })(); 76 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | color: #555; 14 | cursor: pointer; 15 | } 16 | .CodeMirror-foldgutter-open:after { 17 | content: "\25BE"; 18 | } 19 | .CodeMirror-foldgutter-folded:after { 20 | content: "\25B8"; 21 | } 22 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/fold/indent-fold.js: -------------------------------------------------------------------------------- 1 | CodeMirror.registerHelper("fold", "indent", function(cm, start) { 2 | var lastLine = cm.lastLine(), 3 | tabSize = cm.getOption("tabSize"), 4 | firstLine = cm.getLine(start.line), 5 | myIndent = CodeMirror.countColumn(firstLine, null, tabSize); 6 | 7 | function foldEnded(curColumn, prevColumn) { 8 | return curColumn < myIndent || 9 | (curColumn == myIndent && prevColumn >= myIndent) || 10 | (curColumn > myIndent && i == lastLine); 11 | } 12 | 13 | for (var i = start.line + 1; i <= lastLine; i++) { 14 | var curColumn = CodeMirror.countColumn(cm.getLine(i), null, tabSize); 15 | var prevColumn = CodeMirror.countColumn(cm.getLine(i-1), null, tabSize); 16 | 17 | if (foldEnded(curColumn, prevColumn)) { 18 | var lastFoldLineNumber = curColumn > myIndent && i == lastLine ? i : i-1; 19 | var lastFoldLine = cm.getLine(lastFoldLineNumber); 20 | return {from: CodeMirror.Pos(start.line, firstLine.length), 21 | to: CodeMirror.Pos(lastFoldLineNumber, lastFoldLine.length)}; 22 | } 23 | } 24 | }); 25 | 26 | CodeMirror.indentRangeFinder = CodeMirror.fold.indent; // deprecated 27 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/anyword-hint.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | var WORD = /[\w$]+/, RANGE = 500; 5 | 6 | CodeMirror.registerHelper("hint", "anyword", function(editor, options) { 7 | var word = options && options.word || WORD; 8 | var range = options && options.range || RANGE; 9 | var cur = editor.getCursor(), curLine = editor.getLine(cur.line); 10 | var start = cur.ch, end = start; 11 | while (end < curLine.length && word.test(curLine.charAt(end))) ++end; 12 | while (start && word.test(curLine.charAt(start - 1))) --start; 13 | var curWord = start != end && curLine.slice(start, end); 14 | 15 | var list = [], seen = {}; 16 | function scan(dir) { 17 | var line = cur.line, end = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; 18 | for (; line != end; line += dir) { 19 | var text = editor.getLine(line), m; 20 | var re = new RegExp(word.source, "g"); 21 | while (m = re.exec(text)) { 22 | if (line == cur.line && m[0] === curWord) continue; 23 | if ((!curWord || m[0].indexOf(curWord) == 0) && !seen.hasOwnProperty(m[0])) { 24 | seen[m[0]] = true; 25 | list.push(m[0]); 26 | } 27 | } 28 | } 29 | } 30 | scan(-1); 31 | scan(1); 32 | return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; 33 | }); 34 | })(); 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/css-hint.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | "use strict"; 3 | 4 | function getHints(cm) { 5 | var cur = cm.getCursor(), token = cm.getTokenAt(cur); 6 | var inner = CodeMirror.innerMode(cm.getMode(), token.state); 7 | if (inner.mode.name != "css") return; 8 | 9 | // If it's not a 'word-style' token, ignore the token. 10 | if (!/^[\w$_-]*$/.test(token.string)) { 11 | token = { 12 | start: cur.ch, end: cur.ch, string: "", state: token.state, 13 | type: null 14 | }; 15 | var stack = token.state.stack; 16 | var lastToken = stack && stack.length > 0 ? stack[stack.length - 1] : ""; 17 | if (token.string == ":" || lastToken.indexOf("property") == 0) 18 | token.type = "variable"; 19 | else if (token.string == "{" || lastToken.indexOf("rule") == 0) 20 | token.type = "property"; 21 | } 22 | 23 | if (!token.type) 24 | return; 25 | 26 | var spec = CodeMirror.resolveMode("text/css"); 27 | var keywords = null; 28 | if (token.type.indexOf("property") == 0) 29 | keywords = spec.propertyKeywords; 30 | else if (token.type.indexOf("variable") == 0) 31 | keywords = spec.valueKeywords; 32 | 33 | if (!keywords) 34 | return; 35 | 36 | var result = []; 37 | for (var name in keywords) { 38 | if (name.indexOf(token.string) == 0 /* > -1 */) 39 | result.push(name); 40 | } 41 | 42 | return { 43 | list: result, 44 | from: CodeMirror.Pos(cur.line, token.start), 45 | to: CodeMirror.Pos(cur.line, token.end) 46 | }; 47 | } 48 | 49 | CodeMirror.registerHelper("hint", "css", getHints); 50 | })(); 51 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/python-hint.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | function forEach(arr, f) { 3 | for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); 4 | } 5 | 6 | function arrayContains(arr, item) { 7 | if (!Array.prototype.indexOf) { 8 | var i = arr.length; 9 | while (i--) { 10 | if (arr[i] === item) { 11 | return true; 12 | } 13 | } 14 | return false; 15 | } 16 | return arr.indexOf(item) != -1; 17 | } 18 | 19 | function scriptHint(editor, _keywords, getToken) { 20 | // Find the token at the cursor 21 | var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token; 22 | // If it's not a 'word-style' token, ignore the token. 23 | 24 | if (!/^[\w$_]*$/.test(token.string)) { 25 | token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state, 26 | className: token.string == ":" ? "python-type" : null}; 27 | } 28 | 29 | if (!context) var context = []; 30 | context.push(tprop); 31 | 32 | var completionList = getCompletions(token, context); 33 | completionList = completionList.sort(); 34 | //prevent autocomplete for last word, instead show dropdown with one word 35 | if(completionList.length == 1) { 36 | completionList.push(" "); 37 | } 38 | 39 | return {list: completionList, 40 | from: CodeMirror.Pos(cur.line, token.start), 41 | to: CodeMirror.Pos(cur.line, token.end)}; 42 | } 43 | 44 | function pythonHint(editor) { 45 | return scriptHint(editor, pythonKeywordsU, function (e, cur) {return e.getTokenAt(cur);}); 46 | } 47 | CodeMirror.pythonHint = pythonHint; // deprecated 48 | CodeMirror.registerHelper("hint", "python", pythonHint); 49 | 50 | var pythonKeywords = "and del from not while as elif global or with assert else if pass yield" 51 | + "break except import print class exec in raise continue finally is return def for lambda try"; 52 | var pythonKeywordsL = pythonKeywords.split(" "); 53 | var pythonKeywordsU = pythonKeywords.toUpperCase().split(" "); 54 | 55 | var pythonBuiltins = "abs divmod input open staticmethod all enumerate int ord str " 56 | + "any eval isinstance pow sum basestring execfile issubclass print super" 57 | + "bin file iter property tuple bool filter len range type" 58 | + "bytearray float list raw_input unichr callable format locals reduce unicode" 59 | + "chr frozenset long reload vars classmethod getattr map repr xrange" 60 | + "cmp globals max reversed zip compile hasattr memoryview round __import__" 61 | + "complex hash min set apply delattr help next setattr buffer" 62 | + "dict hex object slice coerce dir id oct sorted intern "; 63 | var pythonBuiltinsL = pythonBuiltins.split(" ").join("() ").split(" "); 64 | var pythonBuiltinsU = pythonBuiltins.toUpperCase().split(" ").join("() ").split(" "); 65 | 66 | function getCompletions(token, context) { 67 | var found = [], start = token.string; 68 | function maybeAdd(str) { 69 | if (str.indexOf(start) == 0 && !arrayContains(found, str)) found.push(str); 70 | } 71 | 72 | function gatherCompletions(_obj) { 73 | forEach(pythonBuiltinsL, maybeAdd); 74 | forEach(pythonBuiltinsU, maybeAdd); 75 | forEach(pythonKeywordsL, maybeAdd); 76 | forEach(pythonKeywordsU, maybeAdd); 77 | } 78 | 79 | if (context) { 80 | // If this is a property, see if it belongs to some object we can 81 | // find in the current environment. 82 | var obj = context.pop(), base; 83 | 84 | if (obj.type == "variable") 85 | base = obj.string; 86 | else if(obj.type == "variable-3") 87 | base = ":" + obj.string; 88 | 89 | while (base != null && context.length) 90 | base = base[context.pop().string]; 91 | if (base != null) gatherCompletions(base); 92 | } 93 | return found; 94 | } 95 | })(); 96 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | .CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/sql-hint.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | "use strict"; 3 | 4 | var tables; 5 | var keywords; 6 | 7 | function getKeywords(editor) { 8 | var mode = editor.doc.modeOption; 9 | if(mode === "sql") mode = "text/x-sql"; 10 | return CodeMirror.resolveMode(mode).keywords; 11 | } 12 | 13 | function match(string, word) { 14 | var len = string.length; 15 | var sub = word.substr(0, len); 16 | return string.toUpperCase() === sub.toUpperCase(); 17 | } 18 | 19 | function addMatches(result, search, wordlist, formatter) { 20 | for(var word in wordlist) { 21 | if(!wordlist.hasOwnProperty(word)) continue; 22 | if(Array.isArray(wordlist)) { 23 | word = wordlist[word]; 24 | } 25 | if(match(search, word)) { 26 | result.push(formatter(word)); 27 | } 28 | } 29 | } 30 | 31 | function columnCompletion(result, editor) { 32 | var cur = editor.getCursor(); 33 | var token = editor.getTokenAt(cur); 34 | var string = token.string.substr(1); 35 | var prevCur = CodeMirror.Pos(cur.line, token.start); 36 | var table = editor.getTokenAt(prevCur).string; 37 | var columns = tables[table]; 38 | if(!columns) { 39 | table = findTableByAlias(table, editor); 40 | } 41 | columns = tables[table]; 42 | if(!columns) { 43 | return; 44 | } 45 | addMatches(result, string, columns, 46 | function(w) {return "." + w;}); 47 | } 48 | 49 | function eachWord(line, f) { 50 | var words = line.text.split(" "); 51 | for(var i = 0; i < words.length; i++) { 52 | f(words[i]); 53 | } 54 | } 55 | 56 | // Tries to find possible table name from alias. 57 | function findTableByAlias(alias, editor) { 58 | var aliasUpperCase = alias.toUpperCase(); 59 | var previousWord = ""; 60 | var table = ""; 61 | 62 | editor.eachLine(function(line) { 63 | eachWord(line, function(word) { 64 | var wordUpperCase = word.toUpperCase(); 65 | if(wordUpperCase === aliasUpperCase) { 66 | if(tables.hasOwnProperty(previousWord)) { 67 | table = previousWord; 68 | } 69 | } 70 | if(wordUpperCase !== "AS") { 71 | previousWord = word; 72 | } 73 | }); 74 | }); 75 | return table; 76 | } 77 | 78 | function sqlHint(editor, options) { 79 | tables = (options && options.tables) || {}; 80 | keywords = keywords || getKeywords(editor); 81 | var cur = editor.getCursor(); 82 | var token = editor.getTokenAt(cur); 83 | 84 | var result = []; 85 | 86 | var search = token.string.trim(); 87 | 88 | addMatches(result, search, keywords, 89 | function(w) {return w.toUpperCase();}); 90 | 91 | addMatches(result, search, tables, 92 | function(w) {return w;}); 93 | 94 | if(search.lastIndexOf('.') === 0) { 95 | columnCompletion(result, editor); 96 | } 97 | 98 | return { 99 | list: result, 100 | from: CodeMirror.Pos(cur.line, token.start), 101 | to: CodeMirror.Pos(cur.line, token.end) 102 | }; 103 | } 104 | CodeMirror.registerHelper("hint", "sql", sqlHint); 105 | })(); 106 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/hint/xml-hint.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | var Pos = CodeMirror.Pos; 5 | 6 | function getHints(cm, options) { 7 | var tags = options && options.schemaInfo; 8 | var quote = (options && options.quoteChar) || '"'; 9 | if (!tags) return; 10 | var cur = cm.getCursor(), token = cm.getTokenAt(cur); 11 | var inner = CodeMirror.innerMode(cm.getMode(), token.state); 12 | if (inner.mode.name != "xml") return; 13 | var result = [], replaceToken = false, prefix; 14 | var isTag = token.string.charAt(0) == "<"; 15 | if (!inner.state.tagName || isTag) { // Tag completion 16 | if (isTag) { 17 | prefix = token.string.slice(1); 18 | replaceToken = true; 19 | } 20 | var cx = inner.state.context, curTag = cx && tags[cx.tagName]; 21 | var childList = cx ? curTag && curTag.children : tags["!top"]; 22 | if (childList) { 23 | for (var i = 0; i < childList.length; ++i) if (!prefix || childList[i].indexOf(prefix) == 0) 24 | result.push("<" + childList[i]); 25 | } else { 26 | for (var name in tags) if (tags.hasOwnProperty(name) && name != "!top" && (!prefix || name.indexOf(prefix) == 0)) 27 | result.push("<" + name); 28 | } 29 | if (cx && (!prefix || ("/" + cx.tagName).indexOf(prefix) == 0)) 30 | result.push(""); 31 | } else { 32 | // Attribute completion 33 | var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs; 34 | if (!attrs) return; 35 | if (token.type == "string" || token.string == "=") { // A value 36 | var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)), 37 | Pos(cur.line, token.type == "string" ? token.start : token.end)); 38 | var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues; 39 | if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return; 40 | if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget 41 | if (token.type == "string") { 42 | prefix = token.string; 43 | if (/['"]/.test(token.string.charAt(0))) { 44 | quote = token.string.charAt(0); 45 | prefix = token.string.slice(1); 46 | } 47 | replaceToken = true; 48 | } 49 | for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].indexOf(prefix) == 0) 50 | result.push(quote + atValues[i] + quote); 51 | } else { // An attribute name 52 | if (token.type == "attribute") { 53 | prefix = token.string; 54 | replaceToken = true; 55 | } 56 | for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.indexOf(prefix) == 0)) 57 | result.push(attr); 58 | } 59 | } 60 | return { 61 | list: result, 62 | from: replaceToken ? Pos(cur.line, token.start) : cur, 63 | to: replaceToken ? Pos(cur.line, token.end) : cur 64 | }; 65 | } 66 | 67 | CodeMirror.xmlHint = getHints; // deprecated 68 | CodeMirror.registerHelper("hint", "xml", getHints); 69 | })(); 70 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 2 | 3 | // declare global: coffeelint 4 | 5 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 6 | var found = []; 7 | var parseError = function(err) { 8 | var loc = err.lineNumber; 9 | found.push({from: CodeMirror.Pos(loc-1, 0), 10 | to: CodeMirror.Pos(loc, 0), 11 | severity: err.level, 12 | message: err.message}); 13 | }; 14 | try { 15 | var res = coffeelint.lint(text); 16 | for(var i = 0; i < res.length; i++) { 17 | parseError(res[i]); 18 | } 19 | } catch(e) { 20 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 21 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 22 | severity: 'error', 23 | message: e.message}); 24 | } 25 | return found; 26 | }); 27 | CodeMirror.coffeeValidator = CodeMirror.lint.coffeescript; // deprecated 28 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // Depends on csslint.js from https://github.com/stubbornella/csslint 2 | 3 | // declare global: CSSLint 4 | 5 | CodeMirror.registerHelper("lint", "css", function(text) { 6 | var found = []; 7 | var results = CSSLint.verify(text), messages = results.messages, message = null; 8 | for ( var i = 0; i < messages.length; i++) { 9 | message = messages[i]; 10 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 11 | found.push({ 12 | from: CodeMirror.Pos(startLine, startCol), 13 | to: CodeMirror.Pos(endLine, endCol), 14 | message: message.message, 15 | severity : message.type 16 | }); 17 | } 18 | return found; 19 | }); 20 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 2 | 3 | // declare global: jsonlint 4 | 5 | CodeMirror.registerHelper("lint", "json", function(text) { 6 | var found = []; 7 | jsonlint.parseError = function(str, hash) { 8 | var loc = hash.loc; 9 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 10 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 11 | message: str}); 12 | }; 13 | try { jsonlint.parse(text); } 14 | catch(e) {} 15 | return found; 16 | }); 17 | CodeMirror.jsonValidator = CodeMirror.lint.json; // deprecated 18 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/lint/lint.css: -------------------------------------------------------------------------------- 1 | /* The lint marker gutter */ 2 | .CodeMirror-lint-markers { 3 | width: 16px; 4 | } 5 | 6 | .CodeMirror-lint-tooltip { 7 | background-color: infobackground; 8 | border: 1px solid black; 9 | border-radius: 4px 4px 4px 4px; 10 | color: infotext; 11 | font-family: monospace; 12 | font-size: 10pt; 13 | overflow: hidden; 14 | padding: 2px 5px; 15 | position: fixed; 16 | white-space: pre; 17 | white-space: pre-wrap; 18 | z-index: 100; 19 | max-width: 600px; 20 | opacity: 0; 21 | transition: opacity .4s; 22 | -moz-transition: opacity .4s; 23 | -webkit-transition: opacity .4s; 24 | -o-transition: opacity .4s; 25 | -ms-transition: opacity .4s; 26 | } 27 | 28 | .CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { 29 | background-position: left bottom; 30 | background-repeat: repeat-x; 31 | } 32 | 33 | .CodeMirror-lint-mark-error { 34 | background-image: 35 | url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==") 36 | ; 37 | } 38 | 39 | .CodeMirror-lint-mark-warning { 40 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); 41 | } 42 | 43 | .CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { 44 | background-position: center center; 45 | background-repeat: no-repeat; 46 | cursor: pointer; 47 | display: inline-block; 48 | height: 16px; 49 | width: 16px; 50 | vertical-align: middle; 51 | position: relative; 52 | } 53 | 54 | .CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { 55 | padding-left: 18px; 56 | background-position: top left; 57 | background-repeat: no-repeat; 58 | } 59 | 60 | .CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { 61 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); 62 | } 63 | 64 | .CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { 65 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); 66 | } 67 | 68 | .CodeMirror-lint-marker-multiple { 69 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); 70 | background-repeat: no-repeat; 71 | background-position: right bottom; 72 | width: 100%; height: 100%; 73 | } 74 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/merge/merge.css: -------------------------------------------------------------------------------- 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; } 93 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/mode/loadmode.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; 3 | 4 | var loading = {}; 5 | function splitCallback(cont, n) { 6 | var countDown = n; 7 | return function() { if (--countDown == 0) cont(); }; 8 | } 9 | function ensureDeps(mode, cont) { 10 | var deps = CodeMirror.modes[mode].dependencies; 11 | if (!deps) return cont(); 12 | var missing = []; 13 | for (var i = 0; i < deps.length; ++i) { 14 | if (!CodeMirror.modes.hasOwnProperty(deps[i])) 15 | missing.push(deps[i]); 16 | } 17 | if (!missing.length) return cont(); 18 | var split = splitCallback(cont, missing.length); 19 | for (var i = 0; i < missing.length; ++i) 20 | CodeMirror.requireMode(missing[i], split); 21 | } 22 | 23 | CodeMirror.requireMode = function(mode, cont) { 24 | if (typeof mode != "string") mode = mode.name; 25 | if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); 26 | if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); 27 | 28 | var script = document.createElement("script"); 29 | script.src = CodeMirror.modeURL.replace(/%N/g, mode); 30 | var others = document.getElementsByTagName("script")[0]; 31 | others.parentNode.insertBefore(script, others); 32 | var list = loading[mode] = [cont]; 33 | var count = 0, poll = setInterval(function() { 34 | if (++count > 100) return clearInterval(poll); 35 | if (CodeMirror.modes.hasOwnProperty(mode)) { 36 | clearInterval(poll); 37 | loading[mode] = null; 38 | ensureDeps(mode, function() { 39 | for (var i = 0; i < list.length; ++i) list[i](); 40 | }); 41 | } 42 | }, 200); 43 | }; 44 | 45 | CodeMirror.autoLoadMode = function(instance, mode) { 46 | if (!CodeMirror.modes.hasOwnProperty(mode)) 47 | CodeMirror.requireMode(mode, function() { 48 | instance.setOption("mode", instance.getOption("mode")); 49 | }); 50 | }; 51 | }()); 52 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/mode/multiplex_test.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | CodeMirror.defineMode("markdown_with_stex", function(){ 3 | var inner = CodeMirror.getMode({}, "stex"); 4 | var outer = CodeMirror.getMode({}, "markdown"); 5 | 6 | var innerOptions = { 7 | open: '$', 8 | close: '$', 9 | mode: inner, 10 | delimStyle: 'delim', 11 | innerStyle: 'inner' 12 | }; 13 | 14 | return CodeMirror.multiplexingMode(outer, innerOptions); 15 | }); 16 | 17 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 18 | 19 | function MT(name) { 20 | test.mode( 21 | name, 22 | mode, 23 | Array.prototype.slice.call(arguments, 1), 24 | 'multiplexing'); 25 | } 26 | 27 | MT( 28 | "stexInsideMarkdown", 29 | "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); 30 | })(); 31 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/mode/overlay.js: -------------------------------------------------------------------------------- 1 | // Utility function that allows modes to be combined. The mode given 2 | // as the base argument takes care of most of the normal mode 3 | // functionality, but a second (typically simple) mode is used, which 4 | // can override the style of text. Both modes get to parse all of the 5 | // text, but when both assign a non-null style to a piece of code, the 6 | // overlay wins, unless the combine argument was true, in which case 7 | // the styles are combined. 8 | 9 | // overlayParser is the old, deprecated name 10 | CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, combine) { 11 | return { 12 | startState: function() { 13 | return { 14 | base: CodeMirror.startState(base), 15 | overlay: CodeMirror.startState(overlay), 16 | basePos: 0, baseCur: null, 17 | overlayPos: 0, overlayCur: null 18 | }; 19 | }, 20 | copyState: function(state) { 21 | return { 22 | base: CodeMirror.copyState(base, state.base), 23 | overlay: CodeMirror.copyState(overlay, state.overlay), 24 | basePos: state.basePos, baseCur: null, 25 | overlayPos: state.overlayPos, overlayCur: null 26 | }; 27 | }, 28 | 29 | token: function(stream, state) { 30 | if (stream.start == state.basePos) { 31 | state.baseCur = base.token(stream, state.base); 32 | state.basePos = stream.pos; 33 | } 34 | if (stream.start == state.overlayPos) { 35 | stream.pos = stream.start; 36 | state.overlayCur = overlay.token(stream, state.overlay); 37 | state.overlayPos = stream.pos; 38 | } 39 | stream.pos = Math.min(state.basePos, state.overlayPos); 40 | if (stream.eol()) state.basePos = state.overlayPos = 0; 41 | 42 | if (state.overlayCur == null) return state.baseCur; 43 | if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur; 44 | else return state.overlayCur; 45 | }, 46 | 47 | indent: base.indent && function(state, textAfter) { 48 | return base.indent(state.base, textAfter); 49 | }, 50 | electricChars: base.electricChars, 51 | 52 | innerMode: function(state) { return {state: state.base, mode: base}; }, 53 | 54 | blankLine: function(state) { 55 | if (base.blankLine) base.blankLine(state.base); 56 | if (overlay.blankLine) overlay.blankLine(state.overlay); 57 | } 58 | }; 59 | }; 60 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/runmode/colorize.js: -------------------------------------------------------------------------------- 1 | CodeMirror.colorize = (function() { 2 | 3 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 4 | 5 | function textContent(node, out) { 6 | if (node.nodeType == 3) return out.push(node.nodeValue); 7 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 8 | textContent(ch, out); 9 | if (isBlock.test(node.nodeType)) out.push("\n"); 10 | } 11 | } 12 | 13 | return function(collection, defaultMode) { 14 | if (!collection) collection = document.body.getElementsByTagName("pre"); 15 | 16 | for (var i = 0; i < collection.length; ++i) { 17 | var node = collection[i]; 18 | var mode = node.getAttribute("data-lang") || defaultMode; 19 | if (!mode) continue; 20 | 21 | var text = []; 22 | textContent(node, text); 23 | node.innerHTML = ""; 24 | CodeMirror.runMode(text.join(""), mode, node); 25 | 26 | node.className += " cm-s-default"; 27 | } 28 | }; 29 | })(); 30 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/runmode/runmode.js: -------------------------------------------------------------------------------- 1 | CodeMirror.runMode = function(string, modespec, callback, options) { 2 | var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); 3 | var ie = /MSIE \d/.test(navigator.userAgent); 4 | var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); 5 | 6 | if (callback.nodeType == 1) { 7 | var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; 8 | var node = callback, col = 0; 9 | node.innerHTML = ""; 10 | callback = function(text, style) { 11 | if (text == "\n") { 12 | // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. 13 | // Emitting a carriage return makes everything ok. 14 | node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); 15 | col = 0; 16 | return; 17 | } 18 | var content = ""; 19 | // replace tabs 20 | for (var pos = 0;;) { 21 | var idx = text.indexOf("\t", pos); 22 | if (idx == -1) { 23 | content += text.slice(pos); 24 | col += text.length - pos; 25 | break; 26 | } else { 27 | col += idx - pos; 28 | content += text.slice(pos, idx); 29 | var size = tabSize - col % tabSize; 30 | col += size; 31 | for (var i = 0; i < size; ++i) content += " "; 32 | pos = idx + 1; 33 | } 34 | } 35 | 36 | if (style) { 37 | var sp = node.appendChild(document.createElement("span")); 38 | sp.className = "cm-" + style.replace(/ +/g, " cm-"); 39 | sp.appendChild(document.createTextNode(content)); 40 | } else { 41 | node.appendChild(document.createTextNode(content)); 42 | } 43 | }; 44 | } 45 | 46 | var lines = CodeMirror.splitLines(string), state = CodeMirror.startState(mode); 47 | for (var i = 0, e = lines.length; i < e; ++i) { 48 | if (i) callback("\n"); 49 | var stream = new CodeMirror.StringStream(lines[i]); 50 | while (!stream.eol()) { 51 | var style = mode.token(stream, state); 52 | callback(stream.current(), style, i, stream.start, state); 53 | stream.start = stream.pos; 54 | } 55 | } 56 | }; 57 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/runmode/runmode.node.js: -------------------------------------------------------------------------------- 1 | /* Just enough of CodeMirror to run runMode under node.js */ 2 | 3 | function splitLines(string){ return string.split(/\r?\n|\r/); }; 4 | 5 | function StringStream(string) { 6 | this.pos = this.start = 0; 7 | this.string = string; 8 | } 9 | StringStream.prototype = { 10 | eol: function() {return this.pos >= this.string.length;}, 11 | sol: function() {return this.pos == 0;}, 12 | peek: function() {return this.string.charAt(this.pos) || null;}, 13 | next: function() { 14 | if (this.pos < this.string.length) 15 | return this.string.charAt(this.pos++); 16 | }, 17 | eat: function(match) { 18 | var ch = this.string.charAt(this.pos); 19 | if (typeof match == "string") var ok = ch == match; 20 | else var ok = ch && (match.test ? match.test(ch) : match(ch)); 21 | if (ok) {++this.pos; return ch;} 22 | }, 23 | eatWhile: function(match) { 24 | var start = this.pos; 25 | while (this.eat(match)){} 26 | return this.pos > start; 27 | }, 28 | eatSpace: function() { 29 | var start = this.pos; 30 | while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; 31 | return this.pos > start; 32 | }, 33 | skipToEnd: function() {this.pos = this.string.length;}, 34 | skipTo: function(ch) { 35 | var found = this.string.indexOf(ch, this.pos); 36 | if (found > -1) {this.pos = found; return true;} 37 | }, 38 | backUp: function(n) {this.pos -= n;}, 39 | column: function() {return this.start;}, 40 | indentation: function() {return 0;}, 41 | match: function(pattern, consume, caseInsensitive) { 42 | if (typeof pattern == "string") { 43 | var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; 44 | var substr = this.string.substr(this.pos, pattern.length); 45 | if (cased(substr) == cased(pattern)) { 46 | if (consume !== false) this.pos += pattern.length; 47 | return true; 48 | } 49 | } else { 50 | var match = this.string.slice(this.pos).match(pattern); 51 | if (match && match.index > 0) return null; 52 | if (match && consume !== false) this.pos += match[0].length; 53 | return match; 54 | } 55 | }, 56 | current: function(){return this.string.slice(this.start, this.pos);} 57 | }; 58 | exports.StringStream = StringStream; 59 | 60 | exports.startState = function(mode, a1, a2) { 61 | return mode.startState ? mode.startState(a1, a2) : true; 62 | }; 63 | 64 | var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; 65 | exports.defineMode = function(name, mode) { 66 | if (arguments.length > 2) { 67 | mode.dependencies = []; 68 | for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); 69 | } 70 | modes[name] = mode; 71 | }; 72 | exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; 73 | 74 | exports.defineMode("null", function() { 75 | return {token: function(stream) {stream.skipToEnd();}}; 76 | }); 77 | exports.defineMIME("text/plain", "null"); 78 | 79 | exports.getMode = function(options, spec) { 80 | if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) 81 | spec = mimeModes[spec]; 82 | if (typeof spec == "string") 83 | var mname = spec, config = {}; 84 | else if (spec != null) 85 | var mname = spec.name, config = spec; 86 | var mfactory = modes[mname]; 87 | if (!mfactory) throw new Error("Unknown mode: " + spec); 88 | return mfactory(options, config || {}); 89 | }; 90 | 91 | exports.runMode = function(string, modespec, callback) { 92 | var mode = exports.getMode({indentUnit: 2}, modespec); 93 | var lines = splitLines(string), state = exports.startState(mode); 94 | for (var i = 0, e = lines.length; i < e; ++i) { 95 | if (i) callback("\n"); 96 | var stream = new exports.StringStream(lines[i]); 97 | while (!stream.eol()) { 98 | var style = mode.token(stream, state); 99 | callback(stream.current(), style, i, stream.start, state); 100 | stream.start = stream.pos; 101 | } 102 | } 103 | }; 104 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/scroll/scrollpastend.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { 5 | if (old && old != CodeMirror.Init) { 6 | cm.off("change", onChange); 7 | cm.display.lineSpace.parentNode.style.paddingBottom = ""; 8 | cm.state.scrollPastEndPadding = null; 9 | } 10 | if (val) { 11 | cm.on("change", onChange); 12 | updateBottomMargin(cm); 13 | } 14 | }); 15 | 16 | function onChange(cm, change) { 17 | if (CodeMirror.changeEnd(change).line == cm.lastLine()) 18 | updateBottomMargin(cm); 19 | } 20 | 21 | function updateBottomMargin(cm) { 22 | var padding = ""; 23 | if (cm.lineCount() > 1) { 24 | var totalH = cm.display.scroller.clientHeight - 30, 25 | lastLineH = cm.getLineHandle(cm.lastLine()).height; 26 | padding = (totalH - lastLineH) + "px"; 27 | } 28 | if (cm.state.scrollPastEndPadding != padding) { 29 | cm.state.scrollPastEndPadding = padding; 30 | cm.display.lineSpace.parentNode.style.paddingBottom = padding; 31 | cm.setSize(); 32 | } 33 | } 34 | })(); 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/search/match-highlighter.js: -------------------------------------------------------------------------------- 1 | // Highlighting text that matches the selection 2 | // 3 | // Defines an option highlightSelectionMatches, which, when enabled, 4 | // will style strings that match the selection throughout the 5 | // document. 6 | // 7 | // The option can be set to true to simply enable it, or to a 8 | // {minChars, style, showToken} object to explicitly configure it. 9 | // minChars is the minimum amount of characters that should be 10 | // selected for the behavior to occur, and style is the token style to 11 | // apply to the matches. This will be prefixed by "cm-" to create an 12 | // actual CSS class name. showToken, when enabled, will cause the 13 | // current token to be highlighted when nothing is selected. 14 | 15 | (function() { 16 | var DEFAULT_MIN_CHARS = 2; 17 | var DEFAULT_TOKEN_STYLE = "matchhighlight"; 18 | var DEFAULT_DELAY = 100; 19 | 20 | function State(options) { 21 | if (typeof options == "object") { 22 | this.minChars = options.minChars; 23 | this.style = options.style; 24 | this.showToken = options.showToken; 25 | this.delay = options.delay; 26 | } 27 | if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; 28 | if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; 29 | if (this.delay == null) this.delay = DEFAULT_DELAY; 30 | this.overlay = this.timeout = null; 31 | } 32 | 33 | CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { 34 | if (old && old != CodeMirror.Init) { 35 | var over = cm.state.matchHighlighter.overlay; 36 | if (over) cm.removeOverlay(over); 37 | clearTimeout(cm.state.matchHighlighter.timeout); 38 | cm.state.matchHighlighter = null; 39 | cm.off("cursorActivity", cursorActivity); 40 | } 41 | if (val) { 42 | cm.state.matchHighlighter = new State(val); 43 | highlightMatches(cm); 44 | cm.on("cursorActivity", cursorActivity); 45 | } 46 | }); 47 | 48 | function cursorActivity(cm) { 49 | var state = cm.state.matchHighlighter; 50 | clearTimeout(state.timeout); 51 | state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); 52 | } 53 | 54 | function highlightMatches(cm) { 55 | cm.operation(function() { 56 | var state = cm.state.matchHighlighter; 57 | if (state.overlay) { 58 | cm.removeOverlay(state.overlay); 59 | state.overlay = null; 60 | } 61 | if (!cm.somethingSelected() && state.showToken) { 62 | var re = state.showToken === true ? /[\w$]/ : state.showToken; 63 | var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; 64 | while (start && re.test(line.charAt(start - 1))) --start; 65 | while (end < line.length && re.test(line.charAt(end))) ++end; 66 | if (start < end) 67 | cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style)); 68 | return; 69 | } 70 | if (cm.getCursor("head").line != cm.getCursor("anchor").line) return; 71 | var selection = cm.getSelection().replace(/^\s+|\s+$/g, ""); 72 | if (selection.length >= state.minChars) 73 | cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style)); 74 | }); 75 | } 76 | 77 | function boundariesAround(stream, re) { 78 | return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && 79 | (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); 80 | } 81 | 82 | function makeOverlay(query, hasBoundary, style) { 83 | return {token: function(stream) { 84 | if (stream.match(query) && 85 | (!hasBoundary || boundariesAround(stream, hasBoundary))) 86 | return style; 87 | stream.next(); 88 | stream.skipTo(query.charAt(0)) || stream.skipToEnd(); 89 | }}; 90 | } 91 | })(); 92 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/selection/active-line.js: -------------------------------------------------------------------------------- 1 | // Because sometimes you need to style the cursor's line. 2 | // 3 | // Adds an option 'styleActiveLine' which, when enabled, gives the 4 | // active line's wrapping
the CSS class "CodeMirror-activeline", 5 | // and gives its background
the class "CodeMirror-activeline-background". 6 | 7 | (function() { 8 | "use strict"; 9 | var WRAP_CLASS = "CodeMirror-activeline"; 10 | var BACK_CLASS = "CodeMirror-activeline-background"; 11 | 12 | CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { 13 | var prev = old && old != CodeMirror.Init; 14 | if (val && !prev) { 15 | updateActiveLine(cm); 16 | cm.on("cursorActivity", updateActiveLine); 17 | } else if (!val && prev) { 18 | cm.off("cursorActivity", updateActiveLine); 19 | clearActiveLine(cm); 20 | delete cm.state.activeLine; 21 | } 22 | }); 23 | 24 | function clearActiveLine(cm) { 25 | if ("activeLine" in cm.state) { 26 | cm.removeLineClass(cm.state.activeLine, "wrap", WRAP_CLASS); 27 | cm.removeLineClass(cm.state.activeLine, "background", BACK_CLASS); 28 | } 29 | } 30 | 31 | function updateActiveLine(cm) { 32 | var line = cm.getLineHandleVisualStart(cm.getCursor().line); 33 | if (cm.state.activeLine == line) return; 34 | clearActiveLine(cm); 35 | cm.addLineClass(line, "wrap", WRAP_CLASS); 36 | cm.addLineClass(line, "background", BACK_CLASS); 37 | cm.state.activeLine = line; 38 | } 39 | })(); 40 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/selection/mark-selection.js: -------------------------------------------------------------------------------- 1 | // Because sometimes you need to mark the selected *text*. 2 | // 3 | // Adds an option 'styleSelectedText' which, when enabled, gives 4 | // selected text the CSS class given as option value, or 5 | // "CodeMirror-selectedtext" when the value is not a string. 6 | 7 | (function() { 8 | "use strict"; 9 | 10 | CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { 11 | var prev = old && old != CodeMirror.Init; 12 | if (val && !prev) { 13 | cm.state.markedSelection = []; 14 | cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; 15 | reset(cm); 16 | cm.on("cursorActivity", onCursorActivity); 17 | cm.on("change", onChange); 18 | } else if (!val && prev) { 19 | cm.off("cursorActivity", onCursorActivity); 20 | cm.off("change", onChange); 21 | clear(cm); 22 | cm.state.markedSelection = cm.state.markedSelectionStyle = null; 23 | } 24 | }); 25 | 26 | function onCursorActivity(cm) { 27 | cm.operation(function() { update(cm); }); 28 | } 29 | 30 | function onChange(cm) { 31 | if (cm.state.markedSelection.length) 32 | cm.operation(function() { clear(cm); }); 33 | } 34 | 35 | var CHUNK_SIZE = 8; 36 | var Pos = CodeMirror.Pos; 37 | 38 | function cmp(pos1, pos2) { 39 | return pos1.line - pos2.line || pos1.ch - pos2.ch; 40 | } 41 | 42 | function coverRange(cm, from, to, addAt) { 43 | if (cmp(from, to) == 0) return; 44 | var array = cm.state.markedSelection; 45 | var cls = cm.state.markedSelectionStyle; 46 | for (var line = from.line;;) { 47 | var start = line == from.line ? from : Pos(line, 0); 48 | var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; 49 | var end = atEnd ? to : Pos(endLine, 0); 50 | var mark = cm.markText(start, end, {className: cls}); 51 | if (addAt == null) array.push(mark); 52 | else array.splice(addAt++, 0, mark); 53 | if (atEnd) break; 54 | line = endLine; 55 | } 56 | } 57 | 58 | function clear(cm) { 59 | var array = cm.state.markedSelection; 60 | for (var i = 0; i < array.length; ++i) array[i].clear(); 61 | array.length = 0; 62 | } 63 | 64 | function reset(cm) { 65 | clear(cm); 66 | var from = cm.getCursor("start"), to = cm.getCursor("end"); 67 | coverRange(cm, from, to); 68 | } 69 | 70 | function update(cm) { 71 | var from = cm.getCursor("start"), to = cm.getCursor("end"); 72 | if (cmp(from, to) == 0) return clear(cm); 73 | 74 | var array = cm.state.markedSelection; 75 | if (!array.length) return coverRange(cm, from, to); 76 | 77 | var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); 78 | if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE || 79 | cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) 80 | return reset(cm); 81 | 82 | while (cmp(from, coverStart.from) > 0) { 83 | array.shift().clear(); 84 | coverStart = array[0].find(); 85 | } 86 | if (cmp(from, coverStart.from) < 0) { 87 | if (coverStart.to.line - from.line < CHUNK_SIZE) { 88 | array.shift().clear(); 89 | coverRange(cm, from, coverStart.to, 0); 90 | } else { 91 | coverRange(cm, from, coverStart.from, 0); 92 | } 93 | } 94 | 95 | while (cmp(to, coverEnd.to) < 0) { 96 | array.pop().clear(); 97 | coverEnd = array[array.length - 1].find(); 98 | } 99 | if (cmp(to, coverEnd.to) > 0) { 100 | if (to.line - coverEnd.from.line < CHUNK_SIZE) { 101 | array.pop().clear(); 102 | coverRange(cm, coverEnd.from, to); 103 | } else { 104 | coverRange(cm, coverEnd.to, to); 105 | } 106 | } 107 | } 108 | })(); 109 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/tern/tern.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-Tern-completion { 2 | padding-left: 22px; 3 | position: relative; 4 | } 5 | .CodeMirror-Tern-completion:before { 6 | position: absolute; 7 | left: 2px; 8 | bottom: 2px; 9 | border-radius: 50%; 10 | font-size: 12px; 11 | font-weight: bold; 12 | height: 15px; 13 | width: 15px; 14 | line-height: 16px; 15 | text-align: center; 16 | color: white; 17 | -moz-box-sizing: border-box; 18 | box-sizing: border-box; 19 | } 20 | .CodeMirror-Tern-completion-unknown:before { 21 | content: "?"; 22 | background: #4bb; 23 | } 24 | .CodeMirror-Tern-completion-object:before { 25 | content: "O"; 26 | background: #77c; 27 | } 28 | .CodeMirror-Tern-completion-fn:before { 29 | content: "F"; 30 | background: #7c7; 31 | } 32 | .CodeMirror-Tern-completion-array:before { 33 | content: "A"; 34 | background: #c66; 35 | } 36 | .CodeMirror-Tern-completion-number:before { 37 | content: "1"; 38 | background: #999; 39 | } 40 | .CodeMirror-Tern-completion-string:before { 41 | content: "S"; 42 | background: #999; 43 | } 44 | .CodeMirror-Tern-completion-bool:before { 45 | content: "B"; 46 | background: #999; 47 | } 48 | 49 | .CodeMirror-Tern-completion-guess { 50 | color: #999; 51 | } 52 | 53 | .CodeMirror-Tern-tooltip { 54 | border: 1px solid silver; 55 | border-radius: 3px; 56 | color: #444; 57 | padding: 2px 5px; 58 | font-size: 90%; 59 | font-family: monospace; 60 | background-color: white; 61 | white-space: pre-wrap; 62 | 63 | max-width: 40em; 64 | position: absolute; 65 | z-index: 10; 66 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 67 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 68 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 69 | 70 | transition: opacity 1s; 71 | -moz-transition: opacity 1s; 72 | -webkit-transition: opacity 1s; 73 | -o-transition: opacity 1s; 74 | -ms-transition: opacity 1s; 75 | } 76 | 77 | .CodeMirror-Tern-hint-doc { 78 | max-width: 25em; 79 | } 80 | 81 | .CodeMirror-Tern-fname { color: black; } 82 | .CodeMirror-Tern-farg { color: #70a; } 83 | .CodeMirror-Tern-farg-current { text-decoration: underline; } 84 | .CodeMirror-Tern-type { color: #07c; } 85 | .CodeMirror-Tern-fhint-guess { opacity: .7; } 86 | -------------------------------------------------------------------------------- /bower_components/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // declare global: tern, server 2 | 3 | var server; 4 | 5 | this.onmessage = function(e) { 6 | var data = e.data; 7 | switch (data.type) { 8 | case "init": return startServer(data.defs, data.plugins, data.scripts); 9 | case "add": return server.addFile(data.name, data.text); 10 | case "del": return server.delFile(data.name); 11 | case "req": return server.request(data.body, function(err, reqData) { 12 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 13 | }); 14 | case "getFile": 15 | var c = pending[data.id]; 16 | delete pending[data.id]; 17 | return c(data.err, data.text); 18 | default: throw new Error("Unknown message type: " + data.type); 19 | } 20 | }; 21 | 22 | var nextId = 0, pending = {}; 23 | function getFile(file, c) { 24 | postMessage({type: "getFile", name: file, id: ++nextId}); 25 | pending[nextId] = c; 26 | } 27 | 28 | function startServer(defs, plugins, scripts) { 29 | if (scripts) importScripts.apply(null, scripts); 30 | 31 | server = new tern.Server({ 32 | getFile: getFile, 33 | async: true, 34 | defs: defs, 35 | plugins: plugins 36 | }); 37 | } 38 | 39 | var console = { 40 | log: function(v) { postMessage({type: "debug", message: v}); } 41 | }; 42 | -------------------------------------------------------------------------------- /bower_components/codemirror/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CodeMirror", 3 | "main": ["lib/codemirror.js", "lib/codemirror.css"], 4 | "ignore": [ 5 | "**/.*", 6 | "node_modules", 7 | "components", 8 | "bin", 9 | "demo", 10 | "doc", 11 | "test", 12 | "index.html", 13 | "package.json" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/codemirror/keymap/extra.js: -------------------------------------------------------------------------------- 1 | // A number of additional default bindings that are too obscure to 2 | // include in the core codemirror.js file. 3 | 4 | (function() { 5 | "use strict"; 6 | 7 | var Pos = CodeMirror.Pos; 8 | 9 | function moveLines(cm, start, end, dist) { 10 | if (!dist || start > end) return 0; 11 | 12 | var from = cm.clipPos(Pos(start, 0)), to = cm.clipPos(Pos(end)); 13 | var text = cm.getRange(from, to); 14 | 15 | if (start <= cm.firstLine()) 16 | cm.replaceRange("", from, Pos(to.line + 1, 0)); 17 | else 18 | cm.replaceRange("", Pos(from.line - 1), to); 19 | var target = from.line + dist; 20 | if (target <= cm.firstLine()) { 21 | cm.replaceRange(text + "\n", Pos(target, 0)); 22 | return cm.firstLine() - from.line; 23 | } else { 24 | var targetPos = cm.clipPos(Pos(target - 1)); 25 | cm.replaceRange("\n" + text, targetPos); 26 | return targetPos.line + 1 - from.line; 27 | } 28 | } 29 | 30 | function moveSelectedLines(cm, dist) { 31 | var head = cm.getCursor("head"), anchor = cm.getCursor("anchor"); 32 | cm.operation(function() { 33 | var moved = moveLines(cm, Math.min(head.line, anchor.line), Math.max(head.line, anchor.line), dist); 34 | cm.setSelection(Pos(anchor.line + moved, anchor.ch), Pos(head.line + moved, head.ch)); 35 | }); 36 | } 37 | 38 | CodeMirror.commands.moveLinesUp = function(cm) { moveSelectedLines(cm, -1); }; 39 | CodeMirror.commands.moveLinesDown = function(cm) { moveSelectedLines(cm, 1); }; 40 | 41 | CodeMirror.keyMap["default"]["Alt-Up"] = "moveLinesUp"; 42 | CodeMirror.keyMap["default"]["Alt-Down"] = "moveLinesDown"; 43 | })(); 44 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/css/scss.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: SCSS mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

SCSS mode

27 |
145 | 152 | 153 |

MIME types defined: text/scss.

154 | 155 |

Parsing/Highlighting Tests: normal, verbose.

156 | 157 |
158 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/css/scss_test.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var mode = CodeMirror.getMode({tabSize: 1}, "text/x-scss"); 3 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } 4 | function IT(name) { test.indentation(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } 5 | 6 | MT('url_with_quotation', 7 | "[tag foo] { [property background][operator :][string-2 url]([string test.jpg]) }"); 8 | 9 | MT('url_with_double_quotes', 10 | "[tag foo] { [property background][operator :][string-2 url]([string \"test.jpg\"]) }"); 11 | 12 | MT('url_with_single_quotes', 13 | "[tag foo] { [property background][operator :][string-2 url]([string \'test.jpg\']) }"); 14 | 15 | MT('string', 16 | "[def @import] [string \"compass/css3\"]"); 17 | 18 | MT('important_keyword', 19 | "[tag foo] { [property background][operator :][string-2 url]([string \'test.jpg\']) [keyword !important] }"); 20 | 21 | MT('variable', 22 | "[variable-2 $blue][operator :][atom #333]"); 23 | 24 | MT('variable_as_attribute', 25 | "[tag foo] { [property color][operator :][variable-2 $blue] }"); 26 | 27 | MT('numbers', 28 | "[tag foo] { [property padding][operator :][number 10px] [number 10] [number 10em] [number 8in] }"); 29 | 30 | MT('number_percentage', 31 | "[tag foo] { [property width][operator :][number 80%] }"); 32 | 33 | MT('selector', 34 | "[builtin #hello][qualifier .world]{}"); 35 | 36 | MT('singleline_comment', 37 | "[comment // this is a comment]"); 38 | 39 | MT('multiline_comment', 40 | "[comment /*foobar*/]"); 41 | 42 | MT('attribute_with_hyphen', 43 | "[tag foo] { [property font-size][operator :][number 10px] }"); 44 | 45 | MT('string_after_attribute', 46 | "[tag foo] { [property content][operator :][string \"::\"] }"); 47 | 48 | MT('directives', 49 | "[def @include] [qualifier .mixin]"); 50 | 51 | MT('basic_structure', 52 | "[tag p] { [property background][operator :][keyword red]; }"); 53 | 54 | MT('nested_structure', 55 | "[tag p] { [tag a] { [property color][operator :][keyword red]; } }"); 56 | 57 | MT('mixin', 58 | "[def @mixin] [tag table-base] {}"); 59 | 60 | MT('number_without_semicolon', 61 | "[tag p] {[property width][operator :][number 12]}", 62 | "[tag a] {[property color][operator :][keyword red];}"); 63 | 64 | MT('atom_in_nested_block', 65 | "[tag p] { [tag a] { [property color][operator :][atom #000]; } }"); 66 | 67 | MT('interpolation_in_property', 68 | "[tag foo] { [operator #{][variable-2 $hello][operator }:][number 2]; }"); 69 | 70 | MT('interpolation_in_selector', 71 | "[tag foo][operator #{][variable-2 $hello][operator }] { [property color][operator :][atom #000]; }"); 72 | 73 | MT('interpolation_error', 74 | "[tag foo][operator #{][error foo][operator }] { [property color][operator :][atom #000]; }"); 75 | 76 | MT("divide_operator", 77 | "[tag foo] { [property width][operator :][number 4] [operator /] [number 2] }"); 78 | 79 | MT('nested_structure_with_id_selector', 80 | "[tag p] { [builtin #hello] { [property color][operator :][keyword red]; } }"); 81 | 82 | IT('mixin', 83 | "@mixin container[1 (][2 $a: 10][1 , ][2 $b: 10][1 , ][2 $c: 10]) [1 {]}"); 84 | })(); 85 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("diff", function() { 2 | 3 | var TOKEN_NAMES = { 4 | '+': 'positive', 5 | '-': 'negative', 6 | '@': 'meta' 7 | }; 8 | 9 | return { 10 | token: function(stream) { 11 | var tw_pos = stream.string.search(/[\t ]+?$/); 12 | 13 | if (!stream.sol() || tw_pos === 0) { 14 | stream.skipToEnd(); 15 | return ("error " + ( 16 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 17 | } 18 | 19 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 20 | 21 | if (tw_pos === -1) { 22 | stream.skipToEnd(); 23 | } else { 24 | stream.pos = tw_pos; 25 | } 26 | 27 | return token_name; 28 | } 29 | }; 30 | }); 31 | 32 | CodeMirror.defineMIME("text/x-diff", "diff"); 33 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/eiffel/eiffel.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("eiffel", function() { 2 | function wordObj(words) { 3 | var o = {}; 4 | for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; 5 | return o; 6 | } 7 | var keywords = wordObj([ 8 | 'note', 9 | 'across', 10 | 'when', 11 | 'variant', 12 | 'until', 13 | 'unique', 14 | 'undefine', 15 | 'then', 16 | 'strip', 17 | 'select', 18 | 'retry', 19 | 'rescue', 20 | 'require', 21 | 'rename', 22 | 'reference', 23 | 'redefine', 24 | 'prefix', 25 | 'once', 26 | 'old', 27 | 'obsolete', 28 | 'loop', 29 | 'local', 30 | 'like', 31 | 'is', 32 | 'inspect', 33 | 'infix', 34 | 'include', 35 | 'if', 36 | 'frozen', 37 | 'from', 38 | 'external', 39 | 'export', 40 | 'ensure', 41 | 'end', 42 | 'elseif', 43 | 'else', 44 | 'do', 45 | 'creation', 46 | 'create', 47 | 'check', 48 | 'alias', 49 | 'agent', 50 | 'separate', 51 | 'invariant', 52 | 'inherit', 53 | 'indexing', 54 | 'feature', 55 | 'expanded', 56 | 'deferred', 57 | 'class', 58 | 'Void', 59 | 'True', 60 | 'Result', 61 | 'Precursor', 62 | 'False', 63 | 'Current', 64 | 'create', 65 | 'attached', 66 | 'detachable', 67 | 'as', 68 | 'and', 69 | 'implies', 70 | 'not', 71 | 'or' 72 | ]); 73 | var operators = wordObj([":=", "and then","and", "or","<<",">>"]); 74 | var curPunc; 75 | 76 | function chain(newtok, stream, state) { 77 | state.tokenize.push(newtok); 78 | return newtok(stream, state); 79 | } 80 | 81 | function tokenBase(stream, state) { 82 | curPunc = null; 83 | if (stream.eatSpace()) return null; 84 | var ch = stream.next(); 85 | if (ch == '"'||ch == "'") { 86 | return chain(readQuoted(ch, "string"), stream, state); 87 | } else if (ch == "-"&&stream.eat("-")) { 88 | stream.skipToEnd(); 89 | return "comment"; 90 | } else if (ch == ":"&&stream.eat("=")) { 91 | return "operator"; 92 | } else if (/[0-9]/.test(ch)) { 93 | stream.eatWhile(/[xXbBCc0-9\.]/); 94 | stream.eat(/[\?\!]/); 95 | return "ident"; 96 | } else if (/[a-zA-Z_0-9]/.test(ch)) { 97 | stream.eatWhile(/[a-zA-Z_0-9]/); 98 | stream.eat(/[\?\!]/); 99 | return "ident"; 100 | } else if (/[=+\-\/*^%<>~]/.test(ch)) { 101 | stream.eatWhile(/[=+\-\/*^%<>~]/); 102 | return "operator"; 103 | } else { 104 | return null; 105 | } 106 | } 107 | 108 | function readQuoted(quote, style, unescaped) { 109 | return function(stream, state) { 110 | var escaped = false, ch; 111 | while ((ch = stream.next()) != null) { 112 | if (ch == quote && (unescaped || !escaped)) { 113 | state.tokenize.pop(); 114 | break; 115 | } 116 | escaped = !escaped && ch == "%"; 117 | } 118 | return style; 119 | }; 120 | } 121 | 122 | return { 123 | startState: function() { 124 | return {tokenize: [tokenBase]}; 125 | }, 126 | 127 | token: function(stream, state) { 128 | var style = state.tokenize[state.tokenize.length-1](stream, state); 129 | if (style == "ident") { 130 | var word = stream.current(); 131 | style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" 132 | : operators.propertyIsEnumerable(stream.current()) ? "operator" 133 | : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" 134 | : /^0[bB][0-1]+$/g.test(word) ? "number" 135 | : /^0[cC][0-7]+$/g.test(word) ? "number" 136 | : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" 137 | : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" 138 | : /^[0-9]+$/g.test(word) ? "number" 139 | : "variable"; 140 | } 141 | return style; 142 | }, 143 | lineComment: "--" 144 | }; 145 | }); 146 | 147 | CodeMirror.defineMIME("text/x-eiffel", "eiffel"); 148 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/gfm/gfm.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("gfm", function(config) { 2 | var codeDepth = 0; 3 | function blankLine(state) { 4 | state.code = false; 5 | return null; 6 | } 7 | var gfmOverlay = { 8 | startState: function() { 9 | return { 10 | code: false, 11 | codeBlock: false, 12 | ateSpace: false 13 | }; 14 | }, 15 | copyState: function(s) { 16 | return { 17 | code: s.code, 18 | codeBlock: s.codeBlock, 19 | ateSpace: s.ateSpace 20 | }; 21 | }, 22 | token: function(stream, state) { 23 | // Hack to prevent formatting override inside code blocks (block and inline) 24 | if (state.codeBlock) { 25 | if (stream.match(/^```/)) { 26 | state.codeBlock = false; 27 | return null; 28 | } 29 | stream.skipToEnd(); 30 | return null; 31 | } 32 | if (stream.sol()) { 33 | state.code = false; 34 | } 35 | if (stream.sol() && stream.match(/^```/)) { 36 | stream.skipToEnd(); 37 | state.codeBlock = true; 38 | return null; 39 | } 40 | // If this block is changed, it may need to be updated in Markdown mode 41 | if (stream.peek() === '`') { 42 | stream.next(); 43 | var before = stream.pos; 44 | stream.eatWhile('`'); 45 | var difference = 1 + stream.pos - before; 46 | if (!state.code) { 47 | codeDepth = difference; 48 | state.code = true; 49 | } else { 50 | if (difference === codeDepth) { // Must be exact 51 | state.code = false; 52 | } 53 | } 54 | return null; 55 | } else if (state.code) { 56 | stream.next(); 57 | return null; 58 | } 59 | // Check if space. If so, links can be formatted later on 60 | if (stream.eatSpace()) { 61 | state.ateSpace = true; 62 | return null; 63 | } 64 | if (stream.sol() || state.ateSpace) { 65 | state.ateSpace = false; 66 | if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { 67 | // User/Project@SHA 68 | // User@SHA 69 | // SHA 70 | return "link"; 71 | } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { 72 | // User/Project#Num 73 | // User#Num 74 | // #Num 75 | return "link"; 76 | } 77 | } 78 | if (stream.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i) && 79 | stream.string.slice(stream.start - 2, stream.start) != "](") { 80 | // URLs 81 | // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls 82 | // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine 83 | return "link"; 84 | } 85 | stream.next(); 86 | return null; 87 | }, 88 | blankLine: blankLine 89 | }; 90 | CodeMirror.defineMIME("gfmBase", { 91 | name: "markdown", 92 | underscoresBreakWords: false, 93 | taskLists: true, 94 | fencedCodeBlocks: true 95 | }); 96 | return CodeMirror.overlayMode(CodeMirror.getMode(config, "gfmBase"), gfmOverlay); 97 | }, "markdown"); 98 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/haml/test.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var mode = CodeMirror.getMode({tabSize: 4}, "haml"); 3 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 4 | 5 | // Requires at least one media query 6 | MT("elementName", 7 | "[tag %h1] Hey There"); 8 | 9 | MT("oneElementPerLine", 10 | "[tag %h1] Hey There %h2"); 11 | 12 | MT("idSelector", 13 | "[tag %h1][attribute #test] Hey There"); 14 | 15 | MT("classSelector", 16 | "[tag %h1][attribute .hello] Hey There"); 17 | 18 | MT("docType", 19 | "[tag !!! XML]"); 20 | 21 | MT("comment", 22 | "[comment / Hello WORLD]"); 23 | 24 | MT("notComment", 25 | "[tag %h1] This is not a / comment "); 26 | 27 | MT("attributes", 28 | "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); 29 | 30 | MT("htmlCode", 31 | "[tag

]Title[tag

]"); 32 | 33 | MT("rubyBlock", 34 | "[operator =][variable-2 @item]"); 35 | 36 | MT("selectorRubyBlock", 37 | "[tag %a.selector=] [variable-2 @item]"); 38 | 39 | MT("nestedRubyBlock", 40 | "[tag %a]", 41 | " [operator =][variable puts] [string \"test\"]"); 42 | 43 | MT("multilinePlaintext", 44 | "[tag %p]", 45 | " Hello,", 46 | " World"); 47 | 48 | MT("multilineRuby", 49 | "[tag %p]", 50 | " [comment -# this is a comment]", 51 | " [comment and this is a comment too]", 52 | " Date/Time", 53 | " [operator -] [variable now] [operator =] [tag DateTime][operator .][variable now]", 54 | " [tag %strong=] [variable now]", 55 | " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][variable parse]([string \"December 31, 2006\"])", 56 | " [operator =][string \"Happy\"]", 57 | " [operator =][string \"Belated\"]", 58 | " [operator =][string \"Birthday\"]"); 59 | 60 | MT("multilineComment", 61 | "[comment /]", 62 | " [comment Multiline]", 63 | " [comment Comment]"); 64 | 65 | MT("hamlComment", 66 | "[comment -# this is a comment]"); 67 | 68 | MT("multilineHamlComment", 69 | "[comment -# this is a comment]", 70 | " [comment and this is a comment too]"); 71 | 72 | MT("multilineHTMLComment", 73 | "[comment ]"); 76 | 77 | MT("hamlAfterRubyTag", 78 | "[attribute .block]", 79 | " [tag %strong=] [variable now]", 80 | " [attribute .test]", 81 | " [operator =][variable now]", 82 | " [attribute .right]"); 83 | 84 | MT("stretchedRuby", 85 | "[operator =] [variable puts] [string \"Hello\"],", 86 | " [string \"World\"]"); 87 | 88 | MT("interpolationInHashAttribute", 89 | //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); 90 | "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); 91 | 92 | MT("interpolationInHTMLAttribute", 93 | "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); 94 | })(); 95 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/htmlembedded/htmlembedded.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { 2 | 3 | //config settings 4 | var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i, 5 | scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i; 6 | 7 | //inner modes 8 | var scriptingMode, htmlMixedMode; 9 | 10 | //tokenizer when in html mode 11 | function htmlDispatch(stream, state) { 12 | if (stream.match(scriptStartRegex, false)) { 13 | state.token=scriptingDispatch; 14 | return scriptingMode.token(stream, state.scriptState); 15 | } 16 | else 17 | return htmlMixedMode.token(stream, state.htmlState); 18 | } 19 | 20 | //tokenizer when in scripting mode 21 | function scriptingDispatch(stream, state) { 22 | if (stream.match(scriptEndRegex, false)) { 23 | state.token=htmlDispatch; 24 | return htmlMixedMode.token(stream, state.htmlState); 25 | } 26 | else 27 | return scriptingMode.token(stream, state.scriptState); 28 | } 29 | 30 | 31 | return { 32 | startState: function() { 33 | scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec); 34 | htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed"); 35 | return { 36 | token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch, 37 | htmlState : CodeMirror.startState(htmlMixedMode), 38 | scriptState : CodeMirror.startState(scriptingMode) 39 | }; 40 | }, 41 | 42 | token: function(stream, state) { 43 | return state.token(stream, state); 44 | }, 45 | 46 | indent: function(state, textAfter) { 47 | if (state.token == htmlDispatch) 48 | return htmlMixedMode.indent(state.htmlState, textAfter); 49 | else if (scriptingMode.indent) 50 | return scriptingMode.indent(state.scriptState, textAfter); 51 | }, 52 | 53 | copyState: function(state) { 54 | return { 55 | token : state.token, 56 | htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState), 57 | scriptState : CodeMirror.copyState(scriptingMode, state.scriptState) 58 | }; 59 | }, 60 | 61 | electricChars: "/{}:", 62 | 63 | innerMode: function(state) { 64 | if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode}; 65 | else return {state: state.htmlState, mode: htmlMixedMode}; 66 | } 67 | }; 68 | }, "htmlmixed"); 69 | 70 | CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"}); 71 | CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); 72 | CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"}); 73 | CodeMirror.defineMIME("application/x-erb", { name: "htmlembedded", scriptingModeSpec:"ruby"}); 74 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/http/http.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("http", function() { 2 | function failFirstLine(stream, state) { 3 | stream.skipToEnd(); 4 | state.cur = header; 5 | return "error"; 6 | } 7 | 8 | function start(stream, state) { 9 | if (stream.match(/^HTTP\/\d\.\d/)) { 10 | state.cur = responseStatusCode; 11 | return "keyword"; 12 | } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { 13 | state.cur = requestPath; 14 | return "keyword"; 15 | } else { 16 | return failFirstLine(stream, state); 17 | } 18 | } 19 | 20 | function responseStatusCode(stream, state) { 21 | var code = stream.match(/^\d+/); 22 | if (!code) return failFirstLine(stream, state); 23 | 24 | state.cur = responseStatusText; 25 | var status = Number(code[0]); 26 | if (status >= 100 && status < 200) { 27 | return "positive informational"; 28 | } else if (status >= 200 && status < 300) { 29 | return "positive success"; 30 | } else if (status >= 300 && status < 400) { 31 | return "positive redirect"; 32 | } else if (status >= 400 && status < 500) { 33 | return "negative client-error"; 34 | } else if (status >= 500 && status < 600) { 35 | return "negative server-error"; 36 | } else { 37 | return "error"; 38 | } 39 | } 40 | 41 | function responseStatusText(stream, state) { 42 | stream.skipToEnd(); 43 | state.cur = header; 44 | return null; 45 | } 46 | 47 | function requestPath(stream, state) { 48 | stream.eatWhile(/\S/); 49 | state.cur = requestProtocol; 50 | return "string-2"; 51 | } 52 | 53 | function requestProtocol(stream, state) { 54 | if (stream.match(/^HTTP\/\d\.\d$/)) { 55 | state.cur = header; 56 | return "keyword"; 57 | } else { 58 | return failFirstLine(stream, state); 59 | } 60 | } 61 | 62 | function header(stream) { 63 | if (stream.sol() && !stream.eat(/[ \t]/)) { 64 | if (stream.match(/^.*?:/)) { 65 | return "atom"; 66 | } else { 67 | stream.skipToEnd(); 68 | return "error"; 69 | } 70 | } else { 71 | stream.skipToEnd(); 72 | return "string"; 73 | } 74 | } 75 | 76 | function body(stream) { 77 | stream.skipToEnd(); 78 | return null; 79 | } 80 | 81 | return { 82 | token: function(stream, state) { 83 | var cur = state.cur; 84 | if (cur != header && cur != body && stream.eatSpace()) return null; 85 | return cur(stream, state); 86 | }, 87 | 88 | blankLine: function(state) { 89 | state.cur = body; 90 | }, 91 | 92 | startState: function() { 93 | return {cur: start}; 94 | } 95 | }; 96 | }); 97 | 98 | CodeMirror.defineMIME("message/http", "http"); 99 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/jade/jade.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("jade", function () { 2 | var symbol_regex1 = /^(?:~|!|%|\^|\*|\+|=|\\|:|;|,|\/|\?|&|<|>|\|)/; 3 | var open_paren_regex = /^(\(|\[)/; 4 | var close_paren_regex = /^(\)|\])/; 5 | var keyword_regex1 = /^(if|else|return|var|function|include|doctype|each)/; 6 | var keyword_regex2 = /^(#|{|}|\.)/; 7 | var keyword_regex3 = /^(in)/; 8 | var html_regex1 = /^(html|head|title|meta|link|script|body|br|div|input|span|a|img)/; 9 | var html_regex2 = /^(h1|h2|h3|h4|h5|p|strong|em)/; 10 | return { 11 | startState: function () { 12 | return { 13 | inString: false, 14 | stringType: "", 15 | beforeTag: true, 16 | justMatchedKeyword: false, 17 | afterParen: false 18 | }; 19 | }, 20 | token: function (stream, state) { 21 | //check for state changes 22 | if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { 23 | state.stringType = stream.peek(); 24 | stream.next(); // Skip quote 25 | state.inString = true; // Update state 26 | } 27 | 28 | //return state 29 | if (state.inString) { 30 | if (stream.skipTo(state.stringType)) { // Quote found on this line 31 | stream.next(); // Skip quote 32 | state.inString = false; // Clear flag 33 | } else { 34 | stream.skipToEnd(); // Rest of line is string 35 | } 36 | state.justMatchedKeyword = false; 37 | return "string"; // Token style 38 | } else if (stream.sol() && stream.eatSpace()) { 39 | if (stream.match(keyword_regex1)) { 40 | state.justMatchedKeyword = true; 41 | stream.eatSpace(); 42 | return "keyword"; 43 | } 44 | if (stream.match(html_regex1) || stream.match(html_regex2)) { 45 | state.justMatchedKeyword = true; 46 | return "variable"; 47 | } 48 | } else if (stream.sol() && stream.match(keyword_regex1)) { 49 | state.justMatchedKeyword = true; 50 | stream.eatSpace(); 51 | return "keyword"; 52 | } else if (stream.sol() && (stream.match(html_regex1) || stream.match(html_regex2))) { 53 | state.justMatchedKeyword = true; 54 | return "variable"; 55 | } else if (stream.eatSpace()) { 56 | state.justMatchedKeyword = false; 57 | if (stream.match(keyword_regex3) && stream.eatSpace()) { 58 | state.justMatchedKeyword = true; 59 | return "keyword"; 60 | } 61 | } else if (stream.match(symbol_regex1)) { 62 | state.justMatchedKeyword = false; 63 | return "atom"; 64 | } else if (stream.match(open_paren_regex)) { 65 | state.afterParen = true; 66 | state.justMatchedKeyword = true; 67 | return "def"; 68 | } else if (stream.match(close_paren_regex)) { 69 | state.afterParen = false; 70 | state.justMatchedKeyword = true; 71 | return "def"; 72 | } else if (stream.match(keyword_regex2)) { 73 | state.justMatchedKeyword = true; 74 | return "keyword"; 75 | } else if (stream.eatSpace()) { 76 | state.justMatchedKeyword = false; 77 | } else { 78 | stream.next(); 79 | if (state.justMatchedKeyword) { 80 | return "property"; 81 | } else if (state.afterParen) { 82 | return "property"; 83 | } 84 | } 85 | return null; 86 | } 87 | }; 88 | }); 89 | 90 | CodeMirror.defineMIME('text/x-jade', 'jade'); 91 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/javascript/test.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); 3 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 4 | 5 | MT("locals", 6 | "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] = [number 10]; [keyword return] [variable-2 a] + [variable-2 c] + [variable d]; }"); 7 | 8 | MT("comma-and-binop", 9 | "[keyword function](){ [keyword var] [def x] = [number 1] + [number 2], [def y]; }"); 10 | })(); 11 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/javascript/typescript.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: TypeScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

TypeScript mode

27 | 28 | 29 |
51 | 52 | 59 | 60 |

This is a specialization of the JavaScript mode.

61 |
62 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/jinja2/jinja2.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("jinja2", function() { 2 | var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false", 3 | "loop", "none", "self", "super", "if", "as", "not", "and", 4 | "else", "import", "with", "without", "context"]; 5 | keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); 6 | 7 | function tokenBase (stream, state) { 8 | var ch = stream.next(); 9 | if (ch == "{") { 10 | if (ch = stream.eat(/\{|%|#/)) { 11 | stream.eat("-"); 12 | state.tokenize = inTag(ch); 13 | return "tag"; 14 | } 15 | } 16 | } 17 | function inTag (close) { 18 | if (close == "{") { 19 | close = "}"; 20 | } 21 | return function (stream, state) { 22 | var ch = stream.next(); 23 | if ((ch == close || (ch == "-" && stream.eat(close))) 24 | && stream.eat("}")) { 25 | state.tokenize = tokenBase; 26 | return "tag"; 27 | } 28 | if (stream.match(keywords)) { 29 | return "keyword"; 30 | } 31 | return close == "#" ? "comment" : "string"; 32 | }; 33 | } 34 | return { 35 | startState: function () { 36 | return {tokenize: tokenBase}; 37 | }, 38 | token: function (stream, state) { 39 | return state.tokenize(stream, state); 40 | } 41 | }; 42 | }); 43 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/ocaml/ocaml.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode('ocaml', function() { 2 | 3 | var words = { 4 | 'true': 'atom', 5 | 'false': 'atom', 6 | 'let': 'keyword', 7 | 'rec': 'keyword', 8 | 'in': 'keyword', 9 | 'of': 'keyword', 10 | 'and': 'keyword', 11 | 'succ': 'keyword', 12 | 'if': 'keyword', 13 | 'then': 'keyword', 14 | 'else': 'keyword', 15 | 'for': 'keyword', 16 | 'to': 'keyword', 17 | 'while': 'keyword', 18 | 'do': 'keyword', 19 | 'done': 'keyword', 20 | 'fun': 'keyword', 21 | 'function': 'keyword', 22 | 'val': 'keyword', 23 | 'type': 'keyword', 24 | 'mutable': 'keyword', 25 | 'match': 'keyword', 26 | 'with': 'keyword', 27 | 'try': 'keyword', 28 | 'raise': 'keyword', 29 | 'begin': 'keyword', 30 | 'end': 'keyword', 31 | 'open': 'builtin', 32 | 'trace': 'builtin', 33 | 'ignore': 'builtin', 34 | 'exit': 'builtin', 35 | 'print_string': 'builtin', 36 | 'print_endline': 'builtin' 37 | }; 38 | 39 | function tokenBase(stream, state) { 40 | var ch = stream.next(); 41 | 42 | if (ch === '"') { 43 | state.tokenize = tokenString; 44 | return state.tokenize(stream, state); 45 | } 46 | if (ch === '(') { 47 | if (stream.eat('*')) { 48 | state.commentLevel++; 49 | state.tokenize = tokenComment; 50 | return state.tokenize(stream, state); 51 | } 52 | } 53 | if (ch === '~') { 54 | stream.eatWhile(/\w/); 55 | return 'variable-2'; 56 | } 57 | if (ch === '`') { 58 | stream.eatWhile(/\w/); 59 | return 'quote'; 60 | } 61 | if (/\d/.test(ch)) { 62 | stream.eatWhile(/[\d]/); 63 | if (stream.eat('.')) { 64 | stream.eatWhile(/[\d]/); 65 | } 66 | return 'number'; 67 | } 68 | if ( /[+\-*&%=<>!?|]/.test(ch)) { 69 | return 'operator'; 70 | } 71 | stream.eatWhile(/\w/); 72 | var cur = stream.current(); 73 | return words[cur] || 'variable'; 74 | } 75 | 76 | function tokenString(stream, state) { 77 | var next, end = false, escaped = false; 78 | while ((next = stream.next()) != null) { 79 | if (next === '"' && !escaped) { 80 | end = true; 81 | break; 82 | } 83 | escaped = !escaped && next === '\\'; 84 | } 85 | if (end && !escaped) { 86 | state.tokenize = tokenBase; 87 | } 88 | return 'string'; 89 | }; 90 | 91 | function tokenComment(stream, state) { 92 | var prev, next; 93 | while(state.commentLevel > 0 && (next = stream.next()) != null) { 94 | if (prev === '(' && next === '*') state.commentLevel++; 95 | if (prev === '*' && next === ')') state.commentLevel--; 96 | prev = next; 97 | } 98 | if (state.commentLevel <= 0) { 99 | state.tokenize = tokenBase; 100 | } 101 | return 'comment'; 102 | } 103 | 104 | return { 105 | startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, 106 | token: function(stream, state) { 107 | if (stream.eatSpace()) return null; 108 | return state.tokenize(stream, state); 109 | }, 110 | 111 | blockCommentStart: "(*", 112 | blockCommentEnd: "*)" 113 | }; 114 | }); 115 | 116 | CodeMirror.defineMIME('text/x-ocaml', 'ocaml'); 117 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/pascal/pascal.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("pascal", function() { 2 | function words(str) { 3 | var obj = {}, words = str.split(" "); 4 | for (var i = 0; i < words.length; ++i) obj[words[i]] = true; 5 | return obj; 6 | } 7 | var keywords = words("and array begin case const div do downto else end file for forward integer " + 8 | "boolean char function goto if in label mod nil not of or packed procedure " + 9 | "program record repeat set string then to type until var while with"); 10 | var atoms = {"null": true}; 11 | 12 | var isOperatorChar = /[+\-*&%=<>!?|\/]/; 13 | 14 | function tokenBase(stream, state) { 15 | var ch = stream.next(); 16 | if (ch == "#" && state.startOfLine) { 17 | stream.skipToEnd(); 18 | return "meta"; 19 | } 20 | if (ch == '"' || ch == "'") { 21 | state.tokenize = tokenString(ch); 22 | return state.tokenize(stream, state); 23 | } 24 | if (ch == "(" && stream.eat("*")) { 25 | state.tokenize = tokenComment; 26 | return tokenComment(stream, state); 27 | } 28 | if (/[\[\]{}\(\),;\:\.]/.test(ch)) { 29 | return null; 30 | } 31 | if (/\d/.test(ch)) { 32 | stream.eatWhile(/[\w\.]/); 33 | return "number"; 34 | } 35 | if (ch == "/") { 36 | if (stream.eat("/")) { 37 | stream.skipToEnd(); 38 | return "comment"; 39 | } 40 | } 41 | if (isOperatorChar.test(ch)) { 42 | stream.eatWhile(isOperatorChar); 43 | return "operator"; 44 | } 45 | stream.eatWhile(/[\w\$_]/); 46 | var cur = stream.current(); 47 | if (keywords.propertyIsEnumerable(cur)) return "keyword"; 48 | if (atoms.propertyIsEnumerable(cur)) return "atom"; 49 | return "variable"; 50 | } 51 | 52 | function tokenString(quote) { 53 | return function(stream, state) { 54 | var escaped = false, next, end = false; 55 | while ((next = stream.next()) != null) { 56 | if (next == quote && !escaped) {end = true; break;} 57 | escaped = !escaped && next == "\\"; 58 | } 59 | if (end || !escaped) state.tokenize = null; 60 | return "string"; 61 | }; 62 | } 63 | 64 | function tokenComment(stream, state) { 65 | var maybeEnd = false, ch; 66 | while (ch = stream.next()) { 67 | if (ch == ")" && maybeEnd) { 68 | state.tokenize = null; 69 | break; 70 | } 71 | maybeEnd = (ch == "*"); 72 | } 73 | return "comment"; 74 | } 75 | 76 | // Interface 77 | 78 | return { 79 | startState: function() { 80 | return {tokenize: null}; 81 | }, 82 | 83 | token: function(stream, state) { 84 | if (stream.eatSpace()) return null; 85 | var style = (state.tokenize || tokenBase)(stream, state); 86 | if (style == "comment" || style == "meta") return style; 87 | return style; 88 | }, 89 | 90 | electricChars: "{}" 91 | }; 92 | }); 93 | 94 | CodeMirror.defineMIME("text/x-pascal", "pascal"); 95 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/properties/properties.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("properties", function() { 2 | return { 3 | token: function(stream, state) { 4 | var sol = stream.sol() || state.afterSection; 5 | var eol = stream.eol(); 6 | 7 | state.afterSection = false; 8 | 9 | if (sol) { 10 | if (state.nextMultiline) { 11 | state.inMultiline = true; 12 | state.nextMultiline = false; 13 | } else { 14 | state.position = "def"; 15 | } 16 | } 17 | 18 | if (eol && ! state.nextMultiline) { 19 | state.inMultiline = false; 20 | state.position = "def"; 21 | } 22 | 23 | if (sol) { 24 | while(stream.eatSpace()); 25 | } 26 | 27 | var ch = stream.next(); 28 | 29 | if (sol && (ch === "#" || ch === "!" || ch === ";")) { 30 | state.position = "comment"; 31 | stream.skipToEnd(); 32 | return "comment"; 33 | } else if (sol && ch === "[") { 34 | state.afterSection = true; 35 | stream.skipTo("]"); stream.eat("]"); 36 | return "header"; 37 | } else if (ch === "=" || ch === ":") { 38 | state.position = "quote"; 39 | return null; 40 | } else if (ch === "\\" && state.position === "quote") { 41 | if (stream.next() !== "u") { // u = Unicode sequence \u1234 42 | // Multiline value 43 | state.nextMultiline = true; 44 | } 45 | } 46 | 47 | return state.position; 48 | }, 49 | 50 | startState: function() { 51 | return { 52 | position : "def", // Current position, "def", "quote" or "comment" 53 | nextMultiline : false, // Is the next line multiline value 54 | inMultiline : false, // Is the current line a multiline value 55 | afterSection : false // Did we just open a section 56 | }; 57 | } 58 | 59 | }; 60 | }); 61 | 62 | CodeMirror.defineMIME("text/x-properties", "properties"); 63 | CodeMirror.defineMIME("text/x-ini", "properties"); 64 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/rpm/changes/changes.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("changes", function() { 2 | var headerSeperator = /^-+$/; 3 | var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; 4 | var simpleEmail = /^[\w+.-]+@[\w.-]+/; 5 | 6 | return { 7 | token: function(stream) { 8 | if (stream.sol()) { 9 | if (stream.match(headerSeperator)) { return 'tag'; } 10 | if (stream.match(headerLine)) { return 'tag'; } 11 | } 12 | if (stream.match(simpleEmail)) { return 'string'; } 13 | stream.next(); 14 | return null; 15 | } 16 | }; 17 | }); 18 | 19 | CodeMirror.defineMIME("text/x-rpm-changes", "changes"); 20 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/rpm/spec/spec.css: -------------------------------------------------------------------------------- 1 | .cm-s-default span.cm-preamble {color: #b26818; font-weight: bold;} 2 | .cm-s-default span.cm-macro {color: #b218b2;} 3 | .cm-s-default span.cm-section {color: green; font-weight: bold;} 4 | .cm-s-default span.cm-script {color: red;} 5 | .cm-s-default span.cm-issue {color: yellow;} 6 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/rpm/spec/spec.js: -------------------------------------------------------------------------------- 1 | // Quick and dirty spec file highlighting 2 | 3 | CodeMirror.defineMode("spec", function() { 4 | var arch = /^(i386|i586|i686|x86_64|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; 5 | 6 | var preamble = /^(Name|Version|Release|License|Summary|Url|Group|Source|BuildArch|BuildRequires|BuildRoot|AutoReqProv|Provides|Requires(\(\w+\))?|Obsoletes|Conflicts|Recommends|Source\d*|Patch\d*|ExclusiveArch|NoSource|Supplements):/; 7 | var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preun|postun|pre|post|triggerin|triggerun|pretrans|posttrans|verifyscript|check|triggerpostun|triggerprein|trigger)/; 8 | var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros 9 | var control_flow_simple = /^%(else|endif)/; // rpm control flow macros 10 | var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros 11 | 12 | return { 13 | startState: function () { 14 | return { 15 | controlFlow: false, 16 | macroParameters: false, 17 | section: false 18 | }; 19 | }, 20 | token: function (stream, state) { 21 | var ch = stream.peek(); 22 | if (ch == "#") { stream.skipToEnd(); return "comment"; } 23 | 24 | if (stream.sol()) { 25 | if (stream.match(preamble)) { return "preamble"; } 26 | if (stream.match(section)) { return "section"; } 27 | } 28 | 29 | if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' 30 | if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' 31 | 32 | if (stream.match(control_flow_simple)) { return "keyword"; } 33 | if (stream.match(control_flow_complex)) { 34 | state.controlFlow = true; 35 | return "keyword"; 36 | } 37 | if (state.controlFlow) { 38 | if (stream.match(operators)) { return "operator"; } 39 | if (stream.match(/^(\d+)/)) { return "number"; } 40 | if (stream.eol()) { state.controlFlow = false; } 41 | } 42 | 43 | if (stream.match(arch)) { return "number"; } 44 | 45 | // Macros like '%make_install' or '%attr(0775,root,root)' 46 | if (stream.match(/^%[\w]+/)) { 47 | if (stream.match(/^\(/)) { state.macroParameters = true; } 48 | return "macro"; 49 | } 50 | if (state.macroParameters) { 51 | if (stream.match(/^\d+/)) { return "number";} 52 | if (stream.match(/^\)/)) { 53 | state.macroParameters = false; 54 | return "macro"; 55 | } 56 | } 57 | if (stream.match(/^%\{\??[\w \-]+\}/)) { return "macro"; } // Macros like '%{defined fedora}' 58 | 59 | //TODO: Include bash script sub-parser (CodeMirror supports that) 60 | stream.next(); 61 | return null; 62 | } 63 | }; 64 | }); 65 | 66 | CodeMirror.defineMIME("text/x-rpm-spec", "spec"); 67 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/shell/shell.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode('shell', function() { 2 | 3 | var words = {}; 4 | function define(style, string) { 5 | var split = string.split(' '); 6 | for(var i = 0; i < split.length; i++) { 7 | words[split[i]] = style; 8 | } 9 | }; 10 | 11 | // Atoms 12 | define('atom', 'true false'); 13 | 14 | // Keywords 15 | define('keyword', 'if then do else elif while until for in esac fi fin ' + 16 | 'fil done exit set unset export function'); 17 | 18 | // Commands 19 | define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + 20 | 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + 21 | 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + 22 | 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + 23 | 'touch vi vim wall wc wget who write yes zsh'); 24 | 25 | function tokenBase(stream, state) { 26 | 27 | var sol = stream.sol(); 28 | var ch = stream.next(); 29 | 30 | if (ch === '\'' || ch === '"' || ch === '`') { 31 | state.tokens.unshift(tokenString(ch)); 32 | return tokenize(stream, state); 33 | } 34 | if (ch === '#') { 35 | if (sol && stream.eat('!')) { 36 | stream.skipToEnd(); 37 | return 'meta'; // 'comment'? 38 | } 39 | stream.skipToEnd(); 40 | return 'comment'; 41 | } 42 | if (ch === '$') { 43 | state.tokens.unshift(tokenDollar); 44 | return tokenize(stream, state); 45 | } 46 | if (ch === '+' || ch === '=') { 47 | return 'operator'; 48 | } 49 | if (ch === '-') { 50 | stream.eat('-'); 51 | stream.eatWhile(/\w/); 52 | return 'attribute'; 53 | } 54 | if (/\d/.test(ch)) { 55 | stream.eatWhile(/\d/); 56 | if(!/\w/.test(stream.peek())) { 57 | return 'number'; 58 | } 59 | } 60 | stream.eatWhile(/[\w-]/); 61 | var cur = stream.current(); 62 | if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; 63 | return words.hasOwnProperty(cur) ? words[cur] : null; 64 | } 65 | 66 | function tokenString(quote) { 67 | return function(stream, state) { 68 | var next, end = false, escaped = false; 69 | while ((next = stream.next()) != null) { 70 | if (next === quote && !escaped) { 71 | end = true; 72 | break; 73 | } 74 | if (next === '$' && !escaped && quote !== '\'') { 75 | escaped = true; 76 | stream.backUp(1); 77 | state.tokens.unshift(tokenDollar); 78 | break; 79 | } 80 | escaped = !escaped && next === '\\'; 81 | } 82 | if (end || !escaped) { 83 | state.tokens.shift(); 84 | } 85 | return (quote === '`' || quote === ')' ? 'quote' : 'string'); 86 | }; 87 | }; 88 | 89 | var tokenDollar = function(stream, state) { 90 | if (state.tokens.length > 1) stream.eat('$'); 91 | var ch = stream.next(), hungry = /\w/; 92 | if (ch === '{') hungry = /[^}]/; 93 | if (ch === '(') { 94 | state.tokens[0] = tokenString(')'); 95 | return tokenize(stream, state); 96 | } 97 | if (!/\d/.test(ch)) { 98 | stream.eatWhile(hungry); 99 | stream.eat('}'); 100 | } 101 | state.tokens.shift(); 102 | return 'def'; 103 | }; 104 | 105 | function tokenize(stream, state) { 106 | return (state.tokens[0] || tokenBase) (stream, state); 107 | }; 108 | 109 | return { 110 | startState: function() {return {tokens:[]};}, 111 | token: function(stream, state) { 112 | if (stream.eatSpace()) return null; 113 | return tokenize(stream, state); 114 | } 115 | }; 116 | }); 117 | 118 | CodeMirror.defineMIME('text/x-sh', 'shell'); 119 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/stex/test.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var mode = CodeMirror.getMode({tabSize: 4}, "stex"); 3 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 4 | 5 | MT("word", 6 | "foo"); 7 | 8 | MT("twoWords", 9 | "foo bar"); 10 | 11 | MT("beginEndDocument", 12 | "[tag \\begin][bracket {][atom document][bracket }]", 13 | "[tag \\end][bracket {][atom document][bracket }]"); 14 | 15 | MT("beginEndEquation", 16 | "[tag \\begin][bracket {][atom equation][bracket }]", 17 | " E=mc^2", 18 | "[tag \\end][bracket {][atom equation][bracket }]"); 19 | 20 | MT("beginModule", 21 | "[tag \\begin][bracket {][atom module][bracket }[[]]]"); 22 | 23 | MT("beginModuleId", 24 | "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); 25 | 26 | MT("importModule", 27 | "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); 28 | 29 | MT("importModulePath", 30 | "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); 31 | 32 | MT("psForPDF", 33 | "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); 34 | 35 | MT("comment", 36 | "[comment % foo]"); 37 | 38 | MT("tagComment", 39 | "[tag \\item][comment % bar]"); 40 | 41 | MT("commentTag", 42 | " [comment % \\item]"); 43 | 44 | MT("commentLineBreak", 45 | "[comment %]", 46 | "foo"); 47 | 48 | MT("tagErrorCurly", 49 | "[tag \\begin][error }][bracket {]"); 50 | 51 | MT("tagErrorSquare", 52 | "[tag \\item][error ]]][bracket {]"); 53 | 54 | MT("commentCurly", 55 | "[comment % }]"); 56 | 57 | MT("tagHash", 58 | "the [tag \\#] key"); 59 | 60 | MT("tagNumber", 61 | "a [tag \\$][atom 5] stetson"); 62 | 63 | MT("tagPercent", 64 | "[atom 100][tag \\%] beef"); 65 | 66 | MT("tagAmpersand", 67 | "L [tag \\&] N"); 68 | 69 | MT("tagUnderscore", 70 | "foo[tag \\_]bar"); 71 | 72 | MT("tagBracketOpen", 73 | "[tag \\emph][bracket {][tag \\{][bracket }]"); 74 | 75 | MT("tagBracketClose", 76 | "[tag \\emph][bracket {][tag \\}][bracket }]"); 77 | 78 | MT("tagLetterNumber", 79 | "section [tag \\S][atom 1]"); 80 | 81 | MT("textTagNumber", 82 | "para [tag \\P][atom 2]"); 83 | 84 | MT("thinspace", 85 | "x[tag \\,]y"); 86 | 87 | MT("thickspace", 88 | "x[tag \\;]y"); 89 | 90 | MT("negativeThinspace", 91 | "x[tag \\!]y"); 92 | 93 | MT("periodNotSentence", 94 | "J.\\ L.\\ is"); 95 | 96 | MT("periodSentence", 97 | "X[tag \\@]. The"); 98 | 99 | MT("italicCorrection", 100 | "[bracket {][tag \\em] If[tag \\/][bracket }] I"); 101 | 102 | MT("tagBracket", 103 | "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); 104 | 105 | MT("inlineMathTagFollowedByNumber", 106 | "[keyword $][tag \\pi][number 2][keyword $]"); 107 | 108 | MT("inlineMath", 109 | "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); 110 | 111 | MT("displayMath", 112 | "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); 113 | 114 | MT("mathWithComment", 115 | "[keyword $][variable-2 x] [comment % $]", 116 | "[variable-2 y][keyword $] other text"); 117 | 118 | MT("lineBreakArgument", 119 | "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); 120 | })(); 121 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /bower_components/codemirror/mode/toml/toml.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("toml", function () { 2 | return { 3 | startState: function () { 4 | return { 5 | inString: false, 6 | stringType: "", 7 | lhs: true, 8 | inArray: 0 9 | }; 10 | }, 11 | token: function (stream, state) { 12 | //check for state changes 13 | if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { 14 | state.stringType = stream.peek(); 15 | stream.next(); // Skip quote 16 | state.inString = true; // Update state 17 | } 18 | if (stream.sol() && state.inArray === 0) { 19 | state.lhs = true; 20 | } 21 | //return state 22 | if (state.inString) { 23 | while (state.inString && !stream.eol()) { 24 | if (stream.peek() === state.stringType) { 25 | stream.next(); // Skip quote 26 | state.inString = false; // Clear flag 27 | } else if (stream.peek() === '\\') { 28 | stream.next(); 29 | stream.next(); 30 | } else { 31 | stream.match(/^.[^\\\"\']*/); 32 | } 33 | } 34 | return state.lhs ? "property string" : "string"; // Token style 35 | } else if (state.inArray && stream.peek() === ']') { 36 | stream.next(); 37 | state.inArray--; 38 | return 'bracket'; 39 | } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { 40 | stream.next();//skip closing ] 41 | return "atom"; 42 | } else if (stream.peek() === "#") { 43 | stream.skipToEnd(); 44 | return "comment"; 45 | } else if (stream.eatSpace()) { 46 | return null; 47 | } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { 48 | return "property"; 49 | } else if (state.lhs && stream.peek() === "=") { 50 | stream.next(); 51 | state.lhs = false; 52 | return null; 53 | } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { 54 | return 'atom'; //date 55 | } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { 56 | return 'atom'; 57 | } else if (!state.lhs && stream.peek() === '[') { 58 | state.inArray++; 59 | stream.next(); 60 | return 'bracket'; 61 | } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { 62 | return 'number'; 63 | } else if (!stream.eatSpace()) { 64 | stream.next(); 65 | } 66 | return null; 67 | } 68 | }; 69 | }); 70 | 71 | CodeMirror.defineMIME('text/x-toml', 'toml'); 72 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/yaml/yaml.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode("yaml", function() { 2 | 3 | var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; 4 | var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); 5 | 6 | return { 7 | token: function(stream, state) { 8 | var ch = stream.peek(); 9 | var esc = state.escaped; 10 | state.escaped = false; 11 | /* comments */ 12 | if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { 13 | stream.skipToEnd(); return "comment"; 14 | } 15 | if (state.literal && stream.indentation() > state.keyCol) { 16 | stream.skipToEnd(); return "string"; 17 | } else if (state.literal) { state.literal = false; } 18 | if (stream.sol()) { 19 | state.keyCol = 0; 20 | state.pair = false; 21 | state.pairStart = false; 22 | /* document start */ 23 | if(stream.match(/---/)) { return "def"; } 24 | /* document end */ 25 | if (stream.match(/\.\.\./)) { return "def"; } 26 | /* array list item */ 27 | if (stream.match(/\s*-\s+/)) { return 'meta'; } 28 | } 29 | /* inline pairs/lists */ 30 | if (stream.match(/^(\{|\}|\[|\])/)) { 31 | if (ch == '{') 32 | state.inlinePairs++; 33 | else if (ch == '}') 34 | state.inlinePairs--; 35 | else if (ch == '[') 36 | state.inlineList++; 37 | else 38 | state.inlineList--; 39 | return 'meta'; 40 | } 41 | 42 | /* list seperator */ 43 | if (state.inlineList > 0 && !esc && ch == ',') { 44 | stream.next(); 45 | return 'meta'; 46 | } 47 | /* pairs seperator */ 48 | if (state.inlinePairs > 0 && !esc && ch == ',') { 49 | state.keyCol = 0; 50 | state.pair = false; 51 | state.pairStart = false; 52 | stream.next(); 53 | return 'meta'; 54 | } 55 | 56 | /* start of value of a pair */ 57 | if (state.pairStart) { 58 | /* block literals */ 59 | if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; 60 | /* references */ 61 | if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } 62 | /* numbers */ 63 | if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } 64 | if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } 65 | /* keywords */ 66 | if (stream.match(keywordRegex)) { return 'keyword'; } 67 | } 68 | 69 | /* pairs (associative arrays) -> key */ 70 | if (!state.pair && stream.match(/^\s*\S+(?=\s*:($|\s))/i)) { 71 | state.pair = true; 72 | state.keyCol = stream.indentation(); 73 | return "atom"; 74 | } 75 | if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } 76 | 77 | /* nothing found, continue */ 78 | state.pairStart = false; 79 | state.escaped = (ch == '\\'); 80 | stream.next(); 81 | return null; 82 | }, 83 | startState: function() { 84 | return { 85 | pair: false, 86 | pairStart: false, 87 | keyCol: 0, 88 | inlinePairs: 0, 89 | inlineList: 0, 90 | literal: false, 91 | escaped: false 92 | }; 93 | } 94 | }; 95 | }); 96 | 97 | CodeMirror.defineMIME("text/x-yaml", "yaml"); 98 | -------------------------------------------------------------------------------- /bower_components/codemirror/mode/z80/z80.js: -------------------------------------------------------------------------------- 1 | CodeMirror.defineMode('z80', function() { 2 | var keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; 3 | var keywords2 = /^(call|j[pr]|ret[in]?)\b/i; 4 | var keywords3 = /^b_?(call|jump)\b/i; 5 | var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; 6 | var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; 7 | var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; 8 | var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+)\b/i; 9 | 10 | return { 11 | startState: function() { 12 | return {context: 0}; 13 | }, 14 | token: function(stream, state) { 15 | if (!stream.column()) 16 | state.context = 0; 17 | 18 | if (stream.eatSpace()) 19 | return null; 20 | 21 | var w; 22 | 23 | if (stream.eatWhile(/\w/)) { 24 | w = stream.current(); 25 | 26 | if (stream.indentation()) { 27 | if (state.context == 1 && variables1.test(w)) 28 | return 'variable-2'; 29 | 30 | if (state.context == 2 && variables2.test(w)) 31 | return 'variable-3'; 32 | 33 | if (keywords1.test(w)) { 34 | state.context = 1; 35 | return 'keyword'; 36 | } else if (keywords2.test(w)) { 37 | state.context = 2; 38 | return 'keyword'; 39 | } else if (keywords3.test(w)) { 40 | state.context = 3; 41 | return 'keyword'; 42 | } 43 | 44 | if (errors.test(w)) 45 | return 'error'; 46 | } else if (numbers.test(w)) { 47 | return 'number'; 48 | } else { 49 | return null; 50 | } 51 | } else if (stream.eat(';')) { 52 | stream.skipToEnd(); 53 | return 'comment'; 54 | } else if (stream.eat('"')) { 55 | while (w = stream.next()) { 56 | if (w == '"') 57 | break; 58 | 59 | if (w == '\\') 60 | stream.next(); 61 | } 62 | return 'string'; 63 | } else if (stream.eat('\'')) { 64 | if (stream.match(/\\?.'/)) 65 | return 'number'; 66 | } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { 67 | state.context = 4; 68 | 69 | if (stream.eatWhile(/\w/)) 70 | return 'def'; 71 | } else if (stream.eat('$')) { 72 | if (stream.eatWhile(/[\da-f]/i)) 73 | return 'number'; 74 | } else if (stream.eat('%')) { 75 | if (stream.eatWhile(/[01]/)) 76 | return 'number'; 77 | } else { 78 | stream.next(); 79 | } 80 | return null; 81 | } 82 | }; 83 | }); 84 | 85 | CodeMirror.defineMIME("text/x-z80", "z80"); 86 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/3024-day.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: 3024 day 4 | Author: Jan T. Sott (http://github.com/idleberg) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} 12 | .cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} 13 | .cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} 14 | .cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} 15 | .cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} 16 | 17 | .cm-s-3024-day span.cm-comment {color: #cdab53;} 18 | .cm-s-3024-day span.cm-atom {color: #a16a94;} 19 | .cm-s-3024-day span.cm-number {color: #a16a94;} 20 | 21 | .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} 22 | .cm-s-3024-day span.cm-keyword {color: #db2d20;} 23 | .cm-s-3024-day span.cm-string {color: #fded02;} 24 | 25 | .cm-s-3024-day span.cm-variable {color: #01a252;} 26 | .cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} 27 | .cm-s-3024-day span.cm-def {color: #e8bbd0;} 28 | .cm-s-3024-day span.cm-bracket {color: #3a3432;} 29 | .cm-s-3024-day span.cm-tag {color: #db2d20;} 30 | .cm-s-3024-day span.cm-link {color: #a16a94;} 31 | .cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} 32 | 33 | .cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;} 34 | .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/3024-night.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: 3024 night 4 | Author: Jan T. Sott (http://github.com/idleberg) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} 12 | .cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} 13 | .cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} 14 | .cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} 15 | .cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} 16 | 17 | .cm-s-3024-night span.cm-comment {color: #cdab53;} 18 | .cm-s-3024-night span.cm-atom {color: #a16a94;} 19 | .cm-s-3024-night span.cm-number {color: #a16a94;} 20 | 21 | .cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} 22 | .cm-s-3024-night span.cm-keyword {color: #db2d20;} 23 | .cm-s-3024-night span.cm-string {color: #fded02;} 24 | 25 | .cm-s-3024-night span.cm-variable {color: #01a252;} 26 | .cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} 27 | .cm-s-3024-night span.cm-def {color: #e8bbd0;} 28 | .cm-s-3024-night span.cm-bracket {color: #d6d5d4;} 29 | .cm-s-3024-night span.cm-tag {color: #db2d20;} 30 | .cm-s-3024-night span.cm-link {color: #a16a94;} 31 | .cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} 32 | 33 | .cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;} 34 | .cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/base16-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Base16 Default Dark 4 | Author: Chris Kempson (http://chriskempson.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} 12 | .cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;} 13 | .cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} 14 | .cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} 15 | .cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} 16 | 17 | .cm-s-base16-dark span.cm-comment {color: #8f5536;} 18 | .cm-s-base16-dark span.cm-atom {color: #aa759f;} 19 | .cm-s-base16-dark span.cm-number {color: #aa759f;} 20 | 21 | .cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} 22 | .cm-s-base16-dark span.cm-keyword {color: #ac4142;} 23 | .cm-s-base16-dark span.cm-string {color: #f4bf75;} 24 | 25 | .cm-s-base16-dark span.cm-variable {color: #90a959;} 26 | .cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} 27 | .cm-s-base16-dark span.cm-def {color: #d28445;} 28 | .cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} 29 | .cm-s-base16-dark span.cm-tag {color: #ac4142;} 30 | .cm-s-base16-dark span.cm-link {color: #aa759f;} 31 | .cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} 32 | 33 | .cm-s-base16-dark .CodeMirror-activeline-background {background: #2F2F2F !important;} 34 | .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/base16-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Base16 Default Light 4 | Author: Chris Kempson (http://chriskempson.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} 12 | .cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} 13 | .cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} 14 | .cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} 15 | .cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} 16 | 17 | .cm-s-base16-light span.cm-comment {color: #8f5536;} 18 | .cm-s-base16-light span.cm-atom {color: #aa759f;} 19 | .cm-s-base16-light span.cm-number {color: #aa759f;} 20 | 21 | .cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} 22 | .cm-s-base16-light span.cm-keyword {color: #ac4142;} 23 | .cm-s-base16-light span.cm-string {color: #f4bf75;} 24 | 25 | .cm-s-base16-light span.cm-variable {color: #90a959;} 26 | .cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} 27 | .cm-s-base16-light span.cm-def {color: #d28445;} 28 | .cm-s-base16-light span.cm-bracket {color: #202020;} 29 | .cm-s-base16-light span.cm-tag {color: #ac4142;} 30 | .cm-s-base16-light span.cm-link {color: #aa759f;} 31 | .cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} 32 | 33 | .cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;} 34 | .cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/blackboard.css: -------------------------------------------------------------------------------- 1 | /* Port of TextMate's Blackboard theme */ 2 | 3 | .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } 4 | .cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } 5 | .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } 6 | .cm-s-blackboard .CodeMirror-linenumber { color: #888; } 7 | .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } 8 | 9 | .cm-s-blackboard .cm-keyword { color: #FBDE2D; } 10 | .cm-s-blackboard .cm-atom { color: #D8FA3C; } 11 | .cm-s-blackboard .cm-number { color: #D8FA3C; } 12 | .cm-s-blackboard .cm-def { color: #8DA6CE; } 13 | .cm-s-blackboard .cm-variable { color: #FF6400; } 14 | .cm-s-blackboard .cm-operator { color: #FBDE2D;} 15 | .cm-s-blackboard .cm-comment { color: #AEAEAE; } 16 | .cm-s-blackboard .cm-string { color: #61CE3C; } 17 | .cm-s-blackboard .cm-string-2 { color: #61CE3C; } 18 | .cm-s-blackboard .cm-meta { color: #D8FA3C; } 19 | .cm-s-blackboard .cm-builtin { color: #8DA6CE; } 20 | .cm-s-blackboard .cm-tag { color: #8DA6CE; } 21 | .cm-s-blackboard .cm-attribute { color: #8DA6CE; } 22 | .cm-s-blackboard .cm-header { color: #FF6400; } 23 | .cm-s-blackboard .cm-hr { color: #AEAEAE; } 24 | .cm-s-blackboard .cm-link { color: #8DA6CE; } 25 | .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } 26 | 27 | .cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;} 28 | .cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} -------------------------------------------------------------------------------- /bower_components/codemirror/theme/cobalt.css: -------------------------------------------------------------------------------- 1 | .cm-s-cobalt.CodeMirror { background: #002240; color: white; } 2 | .cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } 3 | .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 4 | .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } 5 | .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; } 6 | 7 | .cm-s-cobalt span.cm-comment { color: #08f; } 8 | .cm-s-cobalt span.cm-atom { color: #845dc4; } 9 | .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } 10 | .cm-s-cobalt span.cm-keyword { color: #ffee80; } 11 | .cm-s-cobalt span.cm-string { color: #3ad900; } 12 | .cm-s-cobalt span.cm-meta { color: #ff9d00; } 13 | .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } 14 | .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } 15 | .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } 16 | .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } 17 | .cm-s-cobalt span.cm-link { color: #845dc4; } 18 | .cm-s-cobalt span.cm-error { color: #9d1e15; } 19 | 20 | .cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;} 21 | .cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} 22 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta {color: #FF1717;} 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom {color: #219;} 4 | .cm-s-eclipse span.cm-number {color: #164;} 5 | .cm-s-eclipse span.cm-def {color: #00f;} 6 | .cm-s-eclipse span.cm-variable {color: black;} 7 | .cm-s-eclipse span.cm-variable-2 {color: #0000C0;} 8 | .cm-s-eclipse span.cm-variable-3 {color: #0000C0;} 9 | .cm-s-eclipse span.cm-property {color: black;} 10 | .cm-s-eclipse span.cm-operator {color: black;} 11 | .cm-s-eclipse span.cm-comment {color: #3F7F5F;} 12 | .cm-s-eclipse span.cm-string {color: #2A00FF;} 13 | .cm-s-eclipse span.cm-string-2 {color: #f50;} 14 | .cm-s-eclipse span.cm-qualifier {color: #555;} 15 | .cm-s-eclipse span.cm-builtin {color: #30a;} 16 | .cm-s-eclipse span.cm-bracket {color: #cc7;} 17 | .cm-s-eclipse span.cm-tag {color: #170;} 18 | .cm-s-eclipse span.cm-attribute {color: #00c;} 19 | .cm-s-eclipse span.cm-link {color: #219;} 20 | .cm-s-eclipse span.cm-error {color: #f00;} 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} 23 | .cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 24 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} 2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} 3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} 4 | .cm-s-elegant span.cm-variable {color: black;} 5 | .cm-s-elegant span.cm-variable-2 {color: #b11;} 6 | .cm-s-elegant span.cm-qualifier {color: #555;} 7 | .cm-s-elegant span.cm-keyword {color: #730;} 8 | .cm-s-elegant span.cm-builtin {color: #30a;} 9 | .cm-s-elegant span.cm-link {color: #762;} 10 | .cm-s-elegant span.cm-error {background-color: #fdd;} 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} 13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 14 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/erlang-dark.css: -------------------------------------------------------------------------------- 1 | .cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } 2 | .cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; } 3 | .cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 4 | .cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } 5 | .cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 6 | 7 | .cm-s-erlang-dark span.cm-atom { color: #f133f1; } 8 | .cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } 9 | .cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } 10 | .cm-s-erlang-dark span.cm-builtin { color: #eaa; } 11 | .cm-s-erlang-dark span.cm-comment { color: #77f; } 12 | .cm-s-erlang-dark span.cm-def { color: #e7a; } 13 | .cm-s-erlang-dark span.cm-keyword { color: #ffee80; } 14 | .cm-s-erlang-dark span.cm-meta { color: #50fefe; } 15 | .cm-s-erlang-dark span.cm-number { color: #ffd0d0; } 16 | .cm-s-erlang-dark span.cm-operator { color: #d55; } 17 | .cm-s-erlang-dark span.cm-property { color: #ccc; } 18 | .cm-s-erlang-dark span.cm-qualifier { color: #ccc; } 19 | .cm-s-erlang-dark span.cm-quote { color: #ccc; } 20 | .cm-s-erlang-dark span.cm-special { color: #ffbbbb; } 21 | .cm-s-erlang-dark span.cm-string { color: #3ad900; } 22 | .cm-s-erlang-dark span.cm-string-2 { color: #ccc; } 23 | .cm-s-erlang-dark span.cm-tag { color: #9effff; } 24 | .cm-s-erlang-dark span.cm-variable { color: #50fe50; } 25 | .cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } 26 | .cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } 27 | .cm-s-erlang-dark span.cm-error { color: #9d1e15; } 28 | 29 | .cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;} 30 | .cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 31 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/lesser-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | http://lesscss.org/ dark theme 3 | Ported to CodeMirror by Peter Kroon 4 | */ 5 | .cm-s-lesser-dark { 6 | line-height: 1.3em; 7 | } 8 | .cm-s-lesser-dark { 9 | font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important; 10 | } 11 | 12 | .cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } 13 | .cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/ 14 | .cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 15 | .cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ 16 | 17 | .cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ 18 | 19 | .cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } 20 | .cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } 21 | 22 | .cm-s-lesser-dark span.cm-keyword { color: #599eff; } 23 | .cm-s-lesser-dark span.cm-atom { color: #C2B470; } 24 | .cm-s-lesser-dark span.cm-number { color: #B35E4D; } 25 | .cm-s-lesser-dark span.cm-def {color: white;} 26 | .cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } 27 | .cm-s-lesser-dark span.cm-variable-2 { color: #669199; } 28 | .cm-s-lesser-dark span.cm-variable-3 { color: white; } 29 | .cm-s-lesser-dark span.cm-property {color: #92A75C;} 30 | .cm-s-lesser-dark span.cm-operator {color: #92A75C;} 31 | .cm-s-lesser-dark span.cm-comment { color: #666; } 32 | .cm-s-lesser-dark span.cm-string { color: #BCD279; } 33 | .cm-s-lesser-dark span.cm-string-2 {color: #f50;} 34 | .cm-s-lesser-dark span.cm-meta { color: #738C73; } 35 | .cm-s-lesser-dark span.cm-qualifier {color: #555;} 36 | .cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } 37 | .cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } 38 | .cm-s-lesser-dark span.cm-tag { color: #669199; } 39 | .cm-s-lesser-dark span.cm-attribute {color: #00c;} 40 | .cm-s-lesser-dark span.cm-header {color: #a0a;} 41 | .cm-s-lesser-dark span.cm-quote {color: #090;} 42 | .cm-s-lesser-dark span.cm-hr {color: #999;} 43 | .cm-s-lesser-dark span.cm-link {color: #00c;} 44 | .cm-s-lesser-dark span.cm-error { color: #9d1e15; } 45 | 46 | .cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;} 47 | .cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 48 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/mbo.css: -------------------------------------------------------------------------------- 1 | /* Based on mbonaci's Brackets mbo theme */ 2 | 3 | .cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffe9;} 4 | .cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;} 5 | .cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;} 6 | .cm-s-mbo .CodeMirror-linenumber {color: #dadada;} 7 | .cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;} 8 | 9 | .cm-s-mbo span.cm-comment {color: #95958a;} 10 | .cm-s-mbo span.cm-atom {color: #00a8c6;} 11 | .cm-s-mbo span.cm-number {color: #00a8c6;} 12 | 13 | .cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;} 14 | .cm-s-mbo span.cm-keyword {color: #ffb928;} 15 | .cm-s-mbo span.cm-string {color: #ffcf6c;} 16 | 17 | .cm-s-mbo span.cm-variable {color: #ffffec;} 18 | .cm-s-mbo span.cm-variable-2 {color: #00a8c6;} 19 | .cm-s-mbo span.cm-def {color: #ffffec;} 20 | .cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;} 21 | .cm-s-mbo span.cm-tag {color: #9ddfe9;} 22 | .cm-s-mbo span.cm-link {color: #f54b07;} 23 | .cm-s-mbo span.cm-error {background: #636363; color: #ffffec;} 24 | 25 | .cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;} 26 | .cm-s-mbo .CodeMirror-matchingbracket { 27 | text-decoration: underline; 28 | color: #f5e107 !important; 29 | } 30 | 31 | div.CodeMirror span.CodeMirror-searching { 32 | background-color: none; 33 | background: none; 34 | box-shadow: 0 0 0 1px #ffffec; 35 | } 36 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/midnight.css: -------------------------------------------------------------------------------- 1 | /* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ 2 | 3 | /**/ 4 | .cm-s-midnight span.CodeMirror-matchhighlight { background: #494949 } 5 | .cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } 6 | 7 | /**/ 8 | .cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;} 9 | 10 | .cm-s-midnight.CodeMirror { 11 | background: #0F192A; 12 | color: #D1EDFF; 13 | } 14 | 15 | .cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;} 16 | 17 | .cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;} 18 | .cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;} 19 | .cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;} 20 | .cm-s-midnight .CodeMirror-cursor { 21 | border-left: 1px solid #F8F8F0 !important; 22 | } 23 | 24 | .cm-s-midnight span.cm-comment {color: #428BDD;} 25 | .cm-s-midnight span.cm-atom {color: #AE81FF;} 26 | .cm-s-midnight span.cm-number {color: #D1EDFF;} 27 | 28 | .cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;} 29 | .cm-s-midnight span.cm-keyword {color: #E83737;} 30 | .cm-s-midnight span.cm-string {color: #1DC116;} 31 | 32 | .cm-s-midnight span.cm-variable {color: #FFAA3E;} 33 | .cm-s-midnight span.cm-variable-2 {color: #FFAA3E;} 34 | .cm-s-midnight span.cm-def {color: #4DD;} 35 | .cm-s-midnight span.cm-bracket {color: #D1EDFF;} 36 | .cm-s-midnight span.cm-tag {color: #449;} 37 | .cm-s-midnight span.cm-link {color: #AE81FF;} 38 | .cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;} 39 | 40 | .cm-s-midnight .CodeMirror-matchingbracket { 41 | text-decoration: underline; 42 | color: white !important; 43 | } 44 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/monokai.css: -------------------------------------------------------------------------------- 1 | /* Based on Sublime Text's Monokai theme */ 2 | 3 | .cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;} 4 | .cm-s-monokai div.CodeMirror-selected {background: #49483E !important;} 5 | .cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;} 6 | .cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;} 7 | .cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;} 8 | 9 | .cm-s-monokai span.cm-comment {color: #75715e;} 10 | .cm-s-monokai span.cm-atom {color: #ae81ff;} 11 | .cm-s-monokai span.cm-number {color: #ae81ff;} 12 | 13 | .cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;} 14 | .cm-s-monokai span.cm-keyword {color: #f92672;} 15 | .cm-s-monokai span.cm-string {color: #e6db74;} 16 | 17 | .cm-s-monokai span.cm-variable {color: #a6e22e;} 18 | .cm-s-monokai span.cm-variable-2 {color: #9effff;} 19 | .cm-s-monokai span.cm-def {color: #fd971f;} 20 | .cm-s-monokai span.cm-bracket {color: #f8f8f2;} 21 | .cm-s-monokai span.cm-tag {color: #f92672;} 22 | .cm-s-monokai span.cm-link {color: #ae81ff;} 23 | .cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;} 24 | 25 | .cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;} 26 | .cm-s-monokai .CodeMirror-matchingbracket { 27 | text-decoration: underline; 28 | color: white !important; 29 | } 30 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta {color: #555;} 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} 12 | .cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 13 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/night.css: -------------------------------------------------------------------------------- 1 | /* Loosely based on the Midnight Textmate theme */ 2 | 3 | .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } 4 | .cm-s-night div.CodeMirror-selected { background: #447 !important; } 5 | .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 6 | .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } 7 | .cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; } 8 | 9 | .cm-s-night span.cm-comment { color: #6900a1; } 10 | .cm-s-night span.cm-atom { color: #845dc4; } 11 | .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } 12 | .cm-s-night span.cm-keyword { color: #599eff; } 13 | .cm-s-night span.cm-string { color: #37f14a; } 14 | .cm-s-night span.cm-meta { color: #7678e2; } 15 | .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } 16 | .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } 17 | .cm-s-night span.cm-bracket { color: #8da6ce; } 18 | .cm-s-night span.cm-comment { color: #6900a1; } 19 | .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } 20 | .cm-s-night span.cm-link { color: #845dc4; } 21 | .cm-s-night span.cm-error { color: #9d1e15; } 22 | 23 | .cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;} 24 | .cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 25 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/paraiso-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Paraíso (Dark) 4 | Author: Jan T. Sott 5 | 6 | Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) 7 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 8 | 9 | */ 10 | 11 | .cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;} 12 | .cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;} 13 | .cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;} 14 | .cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;} 15 | .cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;} 16 | 17 | .cm-s-paraiso-dark span.cm-comment {color: #e96ba8;} 18 | .cm-s-paraiso-dark span.cm-atom {color: #815ba4;} 19 | .cm-s-paraiso-dark span.cm-number {color: #815ba4;} 20 | 21 | .cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;} 22 | .cm-s-paraiso-dark span.cm-keyword {color: #ef6155;} 23 | .cm-s-paraiso-dark span.cm-string {color: #fec418;} 24 | 25 | .cm-s-paraiso-dark span.cm-variable {color: #48b685;} 26 | .cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;} 27 | .cm-s-paraiso-dark span.cm-def {color: #f99b15;} 28 | .cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;} 29 | .cm-s-paraiso-dark span.cm-tag {color: #ef6155;} 30 | .cm-s-paraiso-dark span.cm-link {color: #815ba4;} 31 | .cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;} 32 | 33 | .cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;} 34 | .cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/paraiso-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Paraíso (Light) 4 | Author: Jan T. Sott 5 | 6 | Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) 7 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 8 | 9 | */ 10 | 11 | .cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;} 12 | .cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;} 13 | .cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;} 14 | .cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;} 15 | .cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;} 16 | 17 | .cm-s-paraiso-light span.cm-comment {color: #e96ba8;} 18 | .cm-s-paraiso-light span.cm-atom {color: #815ba4;} 19 | .cm-s-paraiso-light span.cm-number {color: #815ba4;} 20 | 21 | .cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;} 22 | .cm-s-paraiso-light span.cm-keyword {color: #ef6155;} 23 | .cm-s-paraiso-light span.cm-string {color: #fec418;} 24 | 25 | .cm-s-paraiso-light span.cm-variable {color: #48b685;} 26 | .cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;} 27 | .cm-s-paraiso-light span.cm-def {color: #f99b15;} 28 | .cm-s-paraiso-light span.cm-bracket {color: #41323f;} 29 | .cm-s-paraiso-light span.cm-tag {color: #ef6155;} 30 | .cm-s-paraiso-light span.cm-link {color: #815ba4;} 31 | .cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;} 32 | 33 | .cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;} 34 | .cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/rubyblue.css: -------------------------------------------------------------------------------- 1 | .cm-s-rubyblue { font-family: Trebuchet, Verdana, sans-serif; } /* - customized editor font - */ 2 | 3 | .cm-s-rubyblue.CodeMirror { background: #112435; color: white; } 4 | .cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; } 5 | .cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } 6 | .cm-s-rubyblue .CodeMirror-linenumber { color: white; } 7 | .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; } 8 | 9 | .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } 10 | .cm-s-rubyblue span.cm-atom { color: #F4C20B; } 11 | .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } 12 | .cm-s-rubyblue span.cm-keyword { color: #F0F; } 13 | .cm-s-rubyblue span.cm-string { color: #F08047; } 14 | .cm-s-rubyblue span.cm-meta { color: #F0F; } 15 | .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } 16 | .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } 17 | .cm-s-rubyblue span.cm-bracket { color: #F0F; } 18 | .cm-s-rubyblue span.cm-link { color: #F4C20B; } 19 | .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } 20 | .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } 21 | .cm-s-rubyblue span.cm-error { color: #AF2018; } 22 | 23 | .cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;} 24 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/the-matrix.css: -------------------------------------------------------------------------------- 1 | .cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } 2 | .cm-s-the-matrix span.CodeMirror-selected { background: #a8f !important; } 3 | .cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } 4 | .cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } 5 | .cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; } 6 | 7 | .cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;} 8 | .cm-s-the-matrix span.cm-atom {color: #3FF;} 9 | .cm-s-the-matrix span.cm-number {color: #FFB94F;} 10 | .cm-s-the-matrix span.cm-def {color: #99C;} 11 | .cm-s-the-matrix span.cm-variable {color: #F6C;} 12 | .cm-s-the-matrix span.cm-variable-2 {color: #C6F;} 13 | .cm-s-the-matrix span.cm-variable-3 {color: #96F;} 14 | .cm-s-the-matrix span.cm-property {color: #62FFA0;} 15 | .cm-s-the-matrix span.cm-operator {color: #999} 16 | .cm-s-the-matrix span.cm-comment {color: #CCCCCC;} 17 | .cm-s-the-matrix span.cm-string {color: #39C;} 18 | .cm-s-the-matrix span.cm-meta {color: #C9F;} 19 | .cm-s-the-matrix span.cm-qualifier {color: #FFF700;} 20 | .cm-s-the-matrix span.cm-builtin {color: #30a;} 21 | .cm-s-the-matrix span.cm-bracket {color: #cc7;} 22 | .cm-s-the-matrix span.cm-tag {color: #FFBD40;} 23 | .cm-s-the-matrix span.cm-attribute {color: #FFF700;} 24 | .cm-s-the-matrix span.cm-error {color: #FF0000;} 25 | 26 | .cm-s-the-matrix .CodeMirror-activeline-background {background: #040;} 27 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Tomorrow Night - Eighties 4 | Author: Chris Kempson 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} 12 | .cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} 13 | .cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} 14 | .cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} 15 | .cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} 16 | 17 | .cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} 18 | .cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} 19 | .cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} 20 | 21 | .cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} 22 | .cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} 23 | .cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} 24 | 25 | .cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} 26 | .cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} 27 | .cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} 28 | .cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} 29 | .cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} 30 | .cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} 31 | .cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} 32 | 33 | .cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;} 34 | .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 35 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/twilight.css: -------------------------------------------------------------------------------- 1 | .cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ 2 | .cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/ 3 | 4 | .cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } 5 | .cm-s-twilight .CodeMirror-linenumber { color: #aaa; } 6 | .cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; } 7 | 8 | .cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ 9 | .cm-s-twilight .cm-atom { color: #FC0; } 10 | .cm-s-twilight .cm-number { color: #ca7841; } /**/ 11 | .cm-s-twilight .cm-def { color: #8DA6CE; } 12 | .cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ 13 | .cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ 14 | .cm-s-twilight .cm-operator { color: #cda869; } /**/ 15 | .cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ 16 | .cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ 17 | .cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/ 18 | .cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ 19 | .cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ 20 | .cm-s-twilight .cm-tag { color: #997643; } /**/ 21 | .cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ 22 | .cm-s-twilight .cm-header { color: #FF6400; } 23 | .cm-s-twilight .cm-hr { color: #AEAEAE; } 24 | .cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ 25 | .cm-s-twilight .cm-error { border-bottom: 1px solid red; } 26 | 27 | .cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;} 28 | .cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 29 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/vibrant-ink.css: -------------------------------------------------------------------------------- 1 | /* Taken from the popular Visual Studio Vibrant Ink Schema */ 2 | 3 | .cm-s-vibrant-ink.CodeMirror { background: black; color: white; } 4 | .cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; } 5 | 6 | .cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 7 | .cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } 8 | .cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; } 9 | 10 | .cm-s-vibrant-ink .cm-keyword { color: #CC7832; } 11 | .cm-s-vibrant-ink .cm-atom { color: #FC0; } 12 | .cm-s-vibrant-ink .cm-number { color: #FFEE98; } 13 | .cm-s-vibrant-ink .cm-def { color: #8DA6CE; } 14 | .cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D } 15 | .cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D } 16 | .cm-s-vibrant-ink .cm-operator { color: #888; } 17 | .cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } 18 | .cm-s-vibrant-ink .cm-string { color: #A5C25C } 19 | .cm-s-vibrant-ink .cm-string-2 { color: red } 20 | .cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } 21 | .cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } 22 | .cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } 23 | .cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } 24 | .cm-s-vibrant-ink .cm-header { color: #FF6400; } 25 | .cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } 26 | .cm-s-vibrant-ink .cm-link { color: blue; } 27 | .cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } 28 | 29 | .cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;} 30 | .cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 31 | -------------------------------------------------------------------------------- /bower_components/codemirror/theme/xq-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 by MarkLogic Corporation 3 | Author: Mike Brevoort 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | */ 23 | .cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } 24 | .cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; } 25 | .cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 26 | .cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } 27 | .cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 28 | 29 | .cm-s-xq-dark span.cm-keyword {color: #FFBD40;} 30 | .cm-s-xq-dark span.cm-atom {color: #6C8CD5;} 31 | .cm-s-xq-dark span.cm-number {color: #164;} 32 | .cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;} 33 | .cm-s-xq-dark span.cm-variable {color: #FFF;} 34 | .cm-s-xq-dark span.cm-variable-2 {color: #EEE;} 35 | .cm-s-xq-dark span.cm-variable-3 {color: #DDD;} 36 | .cm-s-xq-dark span.cm-property {} 37 | .cm-s-xq-dark span.cm-operator {} 38 | .cm-s-xq-dark span.cm-comment {color: gray;} 39 | .cm-s-xq-dark span.cm-string {color: #9FEE00;} 40 | .cm-s-xq-dark span.cm-meta {color: yellow;} 41 | .cm-s-xq-dark span.cm-qualifier {color: #FFF700;} 42 | .cm-s-xq-dark span.cm-builtin {color: #30a;} 43 | .cm-s-xq-dark span.cm-bracket {color: #cc7;} 44 | .cm-s-xq-dark span.cm-tag {color: #FFBD40;} 45 | .cm-s-xq-dark span.cm-attribute {color: #FFF700;} 46 | .cm-s-xq-dark span.cm-error {color: #f00;} 47 | 48 | .cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;} 49 | .cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} -------------------------------------------------------------------------------- /bower_components/codemirror/theme/xq-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 by MarkLogic Corporation 3 | Author: Mike Brevoort 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | */ 23 | .cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; } 24 | .cm-s-xq-light span.cm-atom {color: #6C8CD5;} 25 | .cm-s-xq-light span.cm-number {color: #164;} 26 | .cm-s-xq-light span.cm-def {text-decoration:underline;} 27 | .cm-s-xq-light span.cm-variable {color: black; } 28 | .cm-s-xq-light span.cm-variable-2 {color:black;} 29 | .cm-s-xq-light span.cm-variable-3 {color: black; } 30 | .cm-s-xq-light span.cm-property {} 31 | .cm-s-xq-light span.cm-operator {} 32 | .cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;} 33 | .cm-s-xq-light span.cm-string {color: red;} 34 | .cm-s-xq-light span.cm-meta {color: yellow;} 35 | .cm-s-xq-light span.cm-qualifier {color: grey} 36 | .cm-s-xq-light span.cm-builtin {color: #7EA656;} 37 | .cm-s-xq-light span.cm-bracket {color: #cc7;} 38 | .cm-s-xq-light span.cm-tag {color: #3F7F7F;} 39 | .cm-s-xq-light span.cm-attribute {color: #7F007F;} 40 | .cm-s-xq-light span.cm-error {color: #f00;} 41 | 42 | .cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;} 43 | .cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;} -------------------------------------------------------------------------------- /data/type-2014-01-01-1388557136.json: -------------------------------------------------------------------------------- 1 | [{"name":"Type1","href":"type1","description":"this is type1"}] -------------------------------------------------------------------------------- /data/type.json: -------------------------------------------------------------------------------- 1 | [{"name":"Type1","href":"type1","description":"this is type1"}] -------------------------------------------------------------------------------- /data/type1-2014-01-01-1388557148.json: -------------------------------------------------------------------------------- 1 | [{"name": 2 | "\u63a5\u53e3\u540d","url":"\u63a5\u53e3url","method":"GET","description":"\u63a5\u53e3\u63cf\u8ff0","params":[{"Name":"param_1_name","Required":"Y","Default":"","Type":"string","Description":"Description of the first parameter."},{"Name":"userId","Required":"Y","Default":"","Type":"string","Description":"The userId parameter that is in the URI."}],"response":[{"Name":"param_1_name","Required":"Y","Default":"","Type":"string","Description":"Description of the first parameter."},{"Name":"userId","Required":"Y","Default":"","Type":"string","Description":"The userId parameter that is in the URI."}],"demo":" 2 |
  • Home
  • 3 |
  • 关于犀鸟
  • 4 | 5 | 6 | 7 |

    什么是犀鸟?

    8 | 9 |

    犀鸟是一个在线文档系统,致力于快速解决团队内部接口文档的编写和沉淀。你可以从 https://github.com/edgeSuperman/hornibills获取源码

    10 | 11 |

    力求用最简单的方式部署您的文档系统,拥有最方便的文档管理。 12 | 13 |

    14 | 15 |

    一些想法借鉴了iodocs 16 | 17 |

    18 | 19 |

    犀鸟如何部署?

    20 | 21 |

    犀鸟采用bootstrap+angularjs+php开发。 22 | 23 |

    24 | 25 |

    获取源文件,部署到您支持php的webserver的可访问目录即可。 26 | 27 |

    28 | 29 |

    enjoy! 30 | 31 |

    32 |

    常见问题

    33 |

    如何解决版本问题?

    34 |

    35 | 每次修改动作触发后,都会在 data/ 目录下留下修改文件的一个快照。 36 |

    37 |

    例如: data/type[2013-12-29]1388326575.json ,适当人工就可以操作一次回滚,或者diff下修改。

    38 |

    我有很多现成的接口在word里,我如何快速弄到犀鸟里?

    39 | 40 |

    犀鸟没有db,所有接口在data/各种.json里维护。 41 | 42 |

    43 | 44 |

    data/type.json是一个特殊的json,里面存储的是您接口的分类,格式简单 45 | 46 |

    47 |
    [{"name":"notes模块文档","href":"notes","description":"123"},...]
    48 |

    其中href是当前分类的类似主键的东西。 49 | 50 |

    51 | 52 |

    那么data/notes.json对应此分类,维护此分类下的所有接口,样例如下: 53 | 54 |

    55 |
    
     56 |     [
     57 |         {
     58 |             "name": "一个接口的名字",
     59 |             "url": "该接口的url",
     60 |             "method": "POST",
     61 |             "description": " 接口的描述",
     62 |             "params": [
     63 |                 {
     64 |                     "Name": "param_1_name",
     65 |                     "Required": "Y",
     66 |                     "Default": "",
     67 |                     "Type": "string",
     68 |                     "Description": "Description of the first parameter."
     69 |                 },
     70 |                 {
     71 |                     "Name": "userId",
     72 |                     "Required": "Y",
     73 |                     "Default": "",
     74 |                     "Type": "string",
     75 |                     "Description": "The userId parameter that is in the URI."
     76 |                 }
     77 |             ],
     78 |             "response": [
     79 |                 {
     80 |                     "Name": "param_1_name",
     81 |                     "Required": "Y",
     82 |                     "Default": "",
     83 |                     "Type": "string",
     84 |                     "Description": "Description of the first parameter."
     85 |                 },
     86 |                 {
     87 |                     "Name": "userId",
     88 |                     "Required": "Y",
     89 |                     "Default": "",
     90 |                     "Type": "string",
     91 |                     "Description": "The userId parameter that is in the URI."
     92 |                 }
     93 |             ],
     94 |             "demo": "<?php \n\r var_dump(123);"
     95 |         }
     96 |     ]
    97 |

    聪明的你一定已经看明白了,你可以自行写一个程序,跑下你之前的接口格式,跑成这样的json文件就可以了。 98 | 99 | 100 |

    -------------------------------------------------------------------------------- /html/add.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
    9 |
    10 | 11 |
    12 | 13 | 请填写分类名 14 |
    15 |
    16 |
    17 | 18 |
    19 | 20 | 请填写分类名 21 |
    22 |
    23 |
    24 | 25 |
    26 | 27 |
    28 |
    29 |
    30 |
    31 | 32 |
    33 |
    34 |
    -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 |
    7 |
    8 |

    分类 - 9 | 10 |

    11 |
    12 |
    13 | 14 | 31 | 32 | 33 |
    34 | 37 |
    38 | 39 | 40 | -------------------------------------------------------------------------------- /img/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/0.jpg -------------------------------------------------------------------------------- /img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/1.jpg -------------------------------------------------------------------------------- /img/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/2.jpg -------------------------------------------------------------------------------- /img/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/3.jpg -------------------------------------------------------------------------------- /img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/4.jpg -------------------------------------------------------------------------------- /img/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/5.jpg -------------------------------------------------------------------------------- /img/bird.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/bird.jpg -------------------------------------------------------------------------------- /img/bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgeSuperman/hornibills/3700f191a09c4daeb5d4c22a5ef6475f33f6130f/img/bird.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 犀鸟 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 22 | 23 | 24 |
    25 |

    犀鸟

    26 |
    27 | 32 |
    33 | 34 | 35 | 36 | 37 | 74 | 75 | -------------------------------------------------------------------------------- /js/About.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danghongyang on 13-12-29. 3 | */ 4 | function About($scope){ 5 | 6 | } -------------------------------------------------------------------------------- /js/Add.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danghongyang on 13-12-26. 3 | */ 4 | function Add($scope, $http, $location, $routeParams) { 5 | var json = "data/type.json"; 6 | 7 | var href = $routeParams.href; 8 | $scope.href = href; 9 | $http.get(json + "?t=" + (new Date()).getTime()).success(function (data) { 10 | $scope.list = data || []; 11 | 12 | if (href) { 13 | angular.forEach($scope.list, function (item) { 14 | if (item.href == href) { 15 | $scope.current = item; 16 | } 17 | 18 | }); 19 | } 20 | else { 21 | $scope.current = { 22 | "name": "", 23 | "href": "", 24 | "description": "" 25 | }; 26 | } 27 | console.log($scope.list); 28 | }).error(function(){ 29 | $scope.list = []; 30 | }); 31 | 32 | var check_unique = function(){ 33 | var r = true; 34 | 35 | //是新增的需要检查主键冲突哈哈哈我太蛋疼了 36 | if(!href) { 37 | angular.forEach($scope.list, function (item) { 38 | if ($scope.current.href == item.href) { 39 | r = false; 40 | } 41 | 42 | }); 43 | } 44 | return r; 45 | }; 46 | $scope.save_me = function () { 47 | $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 48 | $http.post("php/save.php", 49 | "content=" + encodeURIComponent(angular.toJson($scope.list, true)) + "&href=type" 50 | ).success(function (data) { 51 | $location.path("/"); 52 | }).error(function (data, status, headers, config) { 53 | alert("add failed"); 54 | console.log(arguments); 55 | }); 56 | }; 57 | $scope.save = function () { 58 | console.log($scope.typeForm); 59 | if($scope.typeForm.$invalid) { 60 | return; 61 | } 62 | if (!href) { 63 | if(check_unique() == false) { 64 | alert("英文名和别的分类冲突了,换一个吧"); 65 | return false; 66 | } 67 | $scope.list.push({ 68 | "name": $scope.current.name, 69 | "href": $scope.current.href, 70 | "description": $scope.current.description 71 | }); 72 | } 73 | $scope.save_me(); 74 | }; 75 | } -------------------------------------------------------------------------------- /js/Index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danghongyang on 13-12-26. 3 | */ 4 | 5 | function Index($scope, $http){ 6 | var json = "data/type.json"; 7 | $http.get(json + "?t=" + (new Date()).getTime()).success(function(data){ 8 | $scope.list = data; 9 | }); 10 | 11 | 12 | $scope.save_me = function (callback) { 13 | $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 14 | $http.post("php/save.php", 15 | "content=" + encodeURIComponent(angular.toJson($scope.list, true)) + "&href=type" 16 | ).success(function (data) { 17 | callback(); 18 | }).error(function (data, status, headers, config) { 19 | alert("add failed"); 20 | console.log(arguments); 21 | }); 22 | }; 23 | var remove_href = function(href){ 24 | $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 25 | $http.post("php/delete.php","href=" + href 26 | ).success(function (data) { 27 | }).error(function (data, status, headers, config) { 28 | alert("add failed"); 29 | console.log(arguments); 30 | }); 31 | }; 32 | $scope.remove = function(target) { 33 | if(!confirm("确认删除")) { 34 | return; 35 | } 36 | var href = target.href; 37 | angular.forEach($scope.list, function(item, i){ 38 | if(target == item) { 39 | $scope.list.splice(i, 1); 40 | } 41 | }); 42 | $scope.save_me(function(){ 43 | remove_href(href); 44 | }); 45 | }; 46 | } -------------------------------------------------------------------------------- /lib/angular.ngRoute.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.5 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(h,e,A){'use strict';function u(w,q,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,n){function y(){l&&(l.$destroy(),l=null);g&&(k.leave(g),g=null)}function v(){var b=w.current&&w.current.locals;if(b&&b.$template){var b=a.$new(),f=w.current;g=n(b,function(d){k.enter(d,null,g||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||q()});y()});l=f.scope=b;l.$emit("$viewContentLoaded");l.$eval(h)}else y()}var l,g,t=b.autoscroll,h=b.onload||"";a.$on("$routeChangeSuccess", 7 | v);v()}}}function z(e,h,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var n=e(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));n(a)}}}h=e.module("ngRoute",["ng"]).provider("$route",function(){function h(a,c){return e.extend(new (e.extend(function(){},{prototype:a})),c)}function q(a,e){var b=e.caseInsensitiveMatch, 8 | f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?|\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&q(a,c));if(a){var b="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a}, 9 | q(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,n,q,v,l){function g(){var d=t(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!x)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)x=!1,a.$broadcast("$routeChangeStart",d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)? 10 | c.path(u(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?n.get(d):n.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=l.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=b,c=q.get(b,{cache:v}).then(function(a){return a.data}))); 11 | e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function t(){var a,b;e.forEach(k,function(f,k){var p;if(p=!b){var s=c.path();p=f.keys;var l={};if(f.regexp)if(s=f.regexp.exec(s)){for(var g=1,q=s.length;g