Full Code of bocoup/jqfundamentals.com for AI

main ce94e75c1fcc cached
252 files
2.2 MB
591.8k tokens
857 symbols
1 requests
Download .txt
Showing preview only (2,366K chars total). Download the full file or copy to clipboard to get everything.
Repository: bocoup/jqfundamentals.com
Branch: main
Commit: ce94e75c1fcc
Files: 252
Total size: 2.2 MB

Directory structure:
gitextract_n4ofu0cp/

├── .gitignore
├── .jshintrc
├── .travis.yml
├── Gruntfile.js
├── README.md
├── assets/
│   ├── css/
│   │   └── base.css
│   ├── js/
│   │   ├── chapter.js
│   │   ├── controllers/
│   │   │   └── chapter.js
│   │   ├── sandbox.js
│   │   └── widgets/
│   │       ├── _evented.js
│   │       ├── editor.js
│   │       ├── example.js
│   │       └── results.js
│   ├── main.js
│   └── vendor/
│       ├── CodeMirror-2.25/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── demo/
│       │   │   ├── activeline.html
│       │   │   ├── changemode.html
│       │   │   ├── closetag.html
│       │   │   ├── complete.html
│       │   │   ├── emacs.html
│       │   │   ├── folding.html
│       │   │   ├── formatting.html
│       │   │   ├── fullscreen.html
│       │   │   ├── loadmode.html
│       │   │   ├── marker.html
│       │   │   ├── matchhighlighter.html
│       │   │   ├── mustache.html
│       │   │   ├── preview.html
│       │   │   ├── resize.html
│       │   │   ├── runmode.html
│       │   │   ├── search.html
│       │   │   ├── theme.html
│       │   │   ├── vim.html
│       │   │   └── visibletabs.html
│       │   ├── doc/
│       │   │   ├── compress.html
│       │   │   ├── docs.css
│       │   │   ├── internals.html
│       │   │   ├── manual.html
│       │   │   ├── oldrelease.html
│       │   │   ├── reporting.html
│       │   │   └── upgrade_v2.2.html
│       │   ├── index.html
│       │   ├── keymap/
│       │   │   ├── emacs.js
│       │   │   └── vim.js
│       │   ├── lib/
│       │   │   ├── codemirror.css
│       │   │   ├── codemirror.js
│       │   │   └── util/
│       │   │       ├── closetag.js
│       │   │       ├── dialog.css
│       │   │       ├── dialog.js
│       │   │       ├── foldcode.js
│       │   │       ├── formatting.js
│       │   │       ├── javascript-hint.js
│       │   │       ├── loadmode.js
│       │   │       ├── match-highlighter.js
│       │   │       ├── overlay.js
│       │   │       ├── runmode.js
│       │   │       ├── search.js
│       │   │       ├── searchcursor.js
│       │   │       ├── simple-hint.css
│       │   │       └── simple-hint.js
│       │   ├── mode/
│       │   │   ├── clike/
│       │   │   │   ├── clike.js
│       │   │   │   └── index.html
│       │   │   ├── clojure/
│       │   │   │   ├── clojure.js
│       │   │   │   └── index.html
│       │   │   ├── coffeescript/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── coffeescript.js
│       │   │   │   └── index.html
│       │   │   ├── css/
│       │   │   │   ├── css.js
│       │   │   │   └── index.html
│       │   │   ├── diff/
│       │   │   │   ├── diff.js
│       │   │   │   └── index.html
│       │   │   ├── ecl/
│       │   │   │   ├── ecl.js
│       │   │   │   └── index.html
│       │   │   ├── erlang/
│       │   │   │   ├── erlang.js
│       │   │   │   └── index.html
│       │   │   ├── gfm/
│       │   │   │   ├── gfm.js
│       │   │   │   └── index.html
│       │   │   ├── go/
│       │   │   │   ├── go.js
│       │   │   │   └── index.html
│       │   │   ├── groovy/
│       │   │   │   ├── groovy.js
│       │   │   │   └── index.html
│       │   │   ├── haskell/
│       │   │   │   ├── haskell.js
│       │   │   │   └── index.html
│       │   │   ├── htmlembedded/
│       │   │   │   ├── htmlembedded.js
│       │   │   │   └── index.html
│       │   │   ├── htmlmixed/
│       │   │   │   ├── htmlmixed.js
│       │   │   │   └── index.html
│       │   │   ├── javascript/
│       │   │   │   ├── index.html
│       │   │   │   └── javascript.js
│       │   │   ├── jinja2/
│       │   │   │   ├── index.html
│       │   │   │   └── jinja2.js
│       │   │   ├── less/
│       │   │   │   ├── index.html
│       │   │   │   └── less.js
│       │   │   ├── lua/
│       │   │   │   ├── index.html
│       │   │   │   └── lua.js
│       │   │   ├── markdown/
│       │   │   │   ├── index.html
│       │   │   │   └── markdown.js
│       │   │   ├── mysql/
│       │   │   │   ├── index.html
│       │   │   │   └── mysql.js
│       │   │   ├── ntriples/
│       │   │   │   ├── index.html
│       │   │   │   └── ntriples.js
│       │   │   ├── pascal/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── pascal.js
│       │   │   ├── perl/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── perl.js
│       │   │   ├── php/
│       │   │   │   ├── index.html
│       │   │   │   └── php.js
│       │   │   ├── pig/
│       │   │   │   ├── index.html
│       │   │   │   └── pig.js
│       │   │   ├── plsql/
│       │   │   │   ├── index.html
│       │   │   │   └── plsql.js
│       │   │   ├── properties/
│       │   │   │   ├── index.html
│       │   │   │   └── properties.js
│       │   │   ├── python/
│       │   │   │   ├── LICENSE.txt
│       │   │   │   ├── index.html
│       │   │   │   └── python.js
│       │   │   ├── r/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── r.js
│       │   │   ├── rpm/
│       │   │   │   ├── changes/
│       │   │   │   │   ├── changes.js
│       │   │   │   │   └── index.html
│       │   │   │   └── spec/
│       │   │   │       ├── index.html
│       │   │   │       ├── spec.css
│       │   │   │       └── spec.js
│       │   │   ├── rst/
│       │   │   │   ├── index.html
│       │   │   │   └── rst.js
│       │   │   ├── ruby/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── ruby.js
│       │   │   ├── rust/
│       │   │   │   ├── index.html
│       │   │   │   └── rust.js
│       │   │   ├── scheme/
│       │   │   │   ├── index.html
│       │   │   │   └── scheme.js
│       │   │   ├── shell/
│       │   │   │   ├── index.html
│       │   │   │   └── shell.js
│       │   │   ├── smalltalk/
│       │   │   │   ├── index.html
│       │   │   │   └── smalltalk.js
│       │   │   ├── smarty/
│       │   │   │   ├── index.html
│       │   │   │   └── smarty.js
│       │   │   ├── sparql/
│       │   │   │   ├── index.html
│       │   │   │   └── sparql.js
│       │   │   ├── stex/
│       │   │   │   ├── index.html
│       │   │   │   ├── stex.js
│       │   │   │   └── test.html
│       │   │   ├── tiddlywiki/
│       │   │   │   ├── index.html
│       │   │   │   ├── tiddlywiki.css
│       │   │   │   └── tiddlywiki.js
│       │   │   ├── tiki/
│       │   │   │   ├── index.html
│       │   │   │   ├── tiki.css
│       │   │   │   └── tiki.js
│       │   │   ├── vbscript/
│       │   │   │   ├── index.html
│       │   │   │   └── vbscript.js
│       │   │   ├── velocity/
│       │   │   │   ├── index.html
│       │   │   │   └── velocity.js
│       │   │   ├── verilog/
│       │   │   │   ├── index.html
│       │   │   │   └── verilog.js
│       │   │   ├── xml/
│       │   │   │   ├── index.html
│       │   │   │   └── xml.js
│       │   │   ├── xquery/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   ├── test/
│       │   │   │   │   ├── index.html
│       │   │   │   │   ├── testBase.js
│       │   │   │   │   ├── testEmptySequenceKeyword.js
│       │   │   │   │   ├── testMultiAttr.js
│       │   │   │   │   ├── testNamespaces.js
│       │   │   │   │   ├── testProcessingInstructions.js
│       │   │   │   │   └── testQuotes.js
│       │   │   │   └── xquery.js
│       │   │   └── yaml/
│       │   │       ├── index.html
│       │   │       └── yaml.js
│       │   ├── test/
│       │   │   ├── index.html
│       │   │   ├── mode_test.css
│       │   │   ├── mode_test.js
│       │   │   └── test.js
│       │   └── theme/
│       │       ├── ambiance.css
│       │       ├── blackboard.css
│       │       ├── cobalt.css
│       │       ├── eclipse.css
│       │       ├── elegant.css
│       │       ├── erlang-dark.css
│       │       ├── lesser-dark.css
│       │       ├── monokai.css
│       │       ├── neat.css
│       │       ├── night.css
│       │       ├── rubyblue.css
│       │       ├── solarized.css
│       │       └── xq-dark.css
│       ├── bootstrap/
│       │   ├── css/
│       │   │   └── bootstrap.css
│       │   └── js/
│       │       └── bootstrap.js
│       ├── codemirror.js
│       ├── jquery.js
│       └── require.js
├── content/
│   ├── ajax-deferreds/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── effects/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── events/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── index.md
│   ├── javascript-basics/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── jquery-basics/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   └── traversing-manipulating/
│       ├── index.md
│       └── sandbox/
│           └── index.html
├── data/
│   ├── people.html
│   └── people.json
├── deploy/
│   ├── ansible/
│   │   ├── deploy.yml
│   │   ├── group_vars/
│   │   │   └── all.yml
│   │   ├── host_vars/
│   │   │   └── jqfundamentals.com
│   │   ├── inventory/
│   │   │   └── production
│   │   ├── provision.yml
│   │   └── roles/
│   │       ├── base/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── configure/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── deploy/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── nginx/
│   │       │   ├── tasks/
│   │       │   │   └── main.yml
│   │       │   └── templates/
│   │       │       └── jqf.conf
│   │       └── services/
│   │           ├── tasks/
│   │           │   └── main.yml
│   │           └── templates/
│   │               └── app.service.j2
│   └── id_ed25519-robocoup-jqfundamentals.com
├── legacy/
│   ├── assets/
│   │   ├── jquery.js
│   │   ├── shBrushJScript.js
│   │   ├── shCore.css
│   │   ├── shCore.js
│   │   ├── shThemeRDark.css
│   │   └── style.css
│   └── index.html
├── package.json
├── server/
│   └── index.js
├── templates/
│   ├── chapter/
│   │   └── index.pug
│   ├── error.pug
│   ├── header.pug
│   ├── home/
│   │   └── index.pug
│   ├── iframe.pug
│   ├── layout.pug
│   └── nav.pug
├── test/
│   ├── index.html
│   ├── runner.js
│   ├── vendor/
│   │   ├── chai.js
│   │   ├── expect.js
│   │   ├── jquery.js
│   │   ├── mocha.css
│   │   ├── mocha.js
│   │   ├── require.js
│   │   └── sinon.js
│   └── widgets/
│       ├── editor.js
│       ├── example.js
│       └── results.js
└── testimonials.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
node_modules/
public/
.DS_Store
npm-debug.log


================================================
FILE: .jshintrc
================================================
{
	"curly": true,
	"eqeqeq": true,
	"immed": true,
	"latedef": true,
	"newcap": true,
	"noarg": true,
	"sub": true,
	"undef": true,
	"boss": true,
	"eqnull": true,
	"browser": true,
	"globals": {
		"CodeMirror": true,
		"define": true,
		"require": true,
		"_gaq": true
	}
}


================================================
FILE: .travis.yml
================================================
branches:
  only:
    - master
before_install:
  - sudo apt update
  - sudo apt install software-properties-common
  - sudo apt-add-repository --yes --update ppa:ansible/ansible
  - sudo apt install -y ansible
  # The private SSH key checked into this repository is protected with a
  # passphrase. The passphrase is stored in the `SSH_PASSPHRASE` environment
  # variable in the TravisCI environment. Create a utility script to allow SSH
  # key to be unlocked during the "script" lifecyle event (see below) without
  # prompting for command-line input.
  - echo 'echo $SSH_PASSPHRASE' > ./dummy-askpass.sh
  - chmod +x ./dummy-askpass.sh
  - chmod 0600 ./deploy/id_ed25519-robocoup-jqfundamentals.com
  # Add the SSH fingerprint of the production system so that SSH connections
  # are not susceptible to man-in-the-middle attacks.
  - echo 'jqfundamentals.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG9H/L3aKp9ZP7Vx+v0xjD2nYeIHWS9K4L1MTlwet8c9Jh8Qngd1Z3mz4esFmK1sE38PsUKoqdCMhoBOGsGxcIk=' >> $HOME/.ssh/known_hosts
script:
  - eval "$(ssh-agent -s)"
  - DISPLAY=1 SSH_ASKPASS=./dummy-askpass.sh ssh-add ./deploy/id_ed25519-robocoup-jqfundamentals.com < /dev/null
  - ansible-playbook deploy/ansible/deploy.yml --user robocoup --inventory=deploy/ansible/inventory/production


================================================
FILE: Gruntfile.js
================================================
/*jshint node:true*/
module.exports = function(grunt) {

  require( "load-grunt-tasks" )( grunt );

  grunt.initConfig({
    watch: {
      files: '<%= jshint.files %>',
      tasks: 'default'
    },
    jshint: {
      options: {
        jshintrc: true
      },
      files: ['Gruntfile.js', 'assets/js/**/*.js' ]
    },
    requirejs: {
      compile: {
        options: {
          mainConfigFile: "assets/main.js",
          baseUrl: "assets/",
          dir: "public"
        }
      }
    },
    mocha: {
      index: [ 'test/index.html' ]
    }
  });

  grunt.registerTask('default', 'jshint');
};


================================================
FILE: README.md
================================================
### This site was retired on 2023-08-16.

# [jQuery Fundamentals]

> jQuery Fundamentals is designed to get you comfortable working through common problems you'll be called upon to solve using jQuery. To get the most out of this site, you'll want to read the content and try the various interactive examples. Each chapter will cover a concept and give you a chance to try example code related to the concept.

## Install and development

You first need to have [`git`][git] and [`nodejs`][nodejs] installed in your machine.

- Clone this repository
- run `npm install` from the repo's root.
- run `node server` to run the server at http://localhost:4444

## Deploy

With the rights to deploy to the production server, you also need [Ansible] to be installed on your machine.

After that, you can simply run

- `npm run provision` to provision the production machine; or
- `npm run deploy` to just deploy content changes

[jQuery Fundamentals]: http://jqfundamentals.com/
[git]: http://www.git-scm.com/
[nodejs]: http://nodejs.org/
[Ansible]: http://www.ansible.com/home


================================================
FILE: assets/css/base.css
================================================
* { box-sizing: border-box; }

#adzerk_ad {
  vertical-align: top;
}

.navbar .brand {
  margin-left: 0;
  padding-left: 0;
}

.navbar-inner {
  z-index: 13;
  position: relative;
}

.row {
  margin-top: 60px;
}

.editor {
  border: 1px solid #eee;
  margin: 0 0 10px 0;
}

.CodeMirror pre {
  line-height: 1.5em;
  letter-spacing: 1.5;
}

.editor-buttons {
  background-color: #f7f7f7;
  text-align: right;
  padding: 5px;
  border-bottom: 1px solid #eee;
}

.editor-buttons i {
  margin-left: 5px;
  cursor: pointer;
}

.editor-info {
  margin-top: 20px;
  padding-top: 10px;
  border-top: 1px solid #eee;
  font-weight: bold;
  text-transform: uppercase;
  font-size: 80%;
}

.editor-info .caution {
  color: red;
  padding-right: 5px;
}

.CodeMirror {
  font-family: Monaco, Menlo,"Andale Mono","lucida console","Courier New",monospace !important;
  font-size: 90%;
}

.editor .CodeMirror-scroll {
  height: 250px;
}

.editor-container {
  border: 1px solid #eee;
  margin: 20px 0;
}

.editor-container .CodeMirror-scroll {
  height: auto;
  overflow-y: hidden;
  overflow-x: auto;
}

.btn + .btn {
  margin: 0 10px;
}

.CodeMirror .cm-s-default span.cm-comment {
  color: #888;
}

#main, .sandbox-visible #main, #sandbox, .sandbox-visible #sandbox {
  -webkit-transition: all 0.2s ease;
  -moz-transition: all 0.2s ease;
  transition: all 0.2s ease;
}

#main {
  margin-top: 80px;
}

#sandbox {
  position: fixed;
  padding: 20px 0;
  z-index: 12;
  margin-top: -400px;
}

.sandbox-visible #main {
  margin-top: 460px;
}

.sandbox-visible #sandbox {
  margin-top: 20px;
}

#results, #editor {
  background-color: #fff;
}

#sandbox:before {
  position: absolute;
  z-index: -1;
  width: 3000px;
  height: 365px;
  background: #eaeaea;
  left: -500px;
  top: -20px;
}

footer {
  height: 50px;
  font-size: 11px;
  background-repeat: no-repeat;
  background-size: 25px;
  background-position: right 0%;
  background-image: url('../img/bob-bust.png');
  padding-right: 33px;
  text-align: right;
  margin-top: 43px
}

footer p {
  margin-bottom: 5px;
}

#links {
  padding: 8px 0;
}

.centered {
  text-align: center;
}

.alert {
  margin: 20px 0;
}

.alert a {
  text-decoration: underline;
}

.home-page-header {
  padding-top: 0;
  margin-top: 0;
}

.home-page-header h1 {
  margin-top: 0;
}

@media (max-width: 979px){

  .navbar-fixed-top, .navbar-fixed-bottom {
    position: fixed;
  }

  .navbar .container {
    width: 724px;
    padding: 0;
  }

}

@media (max-width: 979px) and (min-width: 768px) {

  .span4 {
    width: 287px;
  }

  .span8 {
    width: 406px;
  }

}

@media (max-width: 767px) {

  [class*="span"], .row-fluid [class*="span"] {
    width: none;
  }

  .navbar-fixed-top, .navbar-fixed-bottom {
    margin-left: 0;
    }

  .navbar .navbar-inner {
    padding-right: 35px;
  }

  .navbar .container {
    width: 100%;
  }

  #sandbox {
    width: 100%;
    padding: 0 20px 0 20px;
   }

  .sandbox-visible #main {
    margin-top: 420px;
  }

  #sandbox .span8 {
    width: 50%;
    float: left;
  }

  #sandbox .span4 {
    float: left;
  }

  #sandbox::before {
    height: 325px;
  }

}

@media (max-width: 637px) {
  .navbar .nav {
    margin: 0;
  }

  .btn-primary {
    font-size: 12px;
    padding: 4px 4px;
  }

}

@media (max-width: 633px) {
  #sandbox .span8 {
    width: 47%;
    float: left;
  }

}

@media (max-width: 600px) {

  .btn-primary, #sandbox {
    display: none;
  }

  .sandbox-visible #main {
    margin-top: 80px;
  }

}

.results-container {
  height: 100%;
  width: 100%;
}

#sandbox .results-container {
  height: 283px;
}

iframe {
  width: 100%;
  height: 100%;
}

#results .results-container {
  padding: 10px;
  border: 1px solid #eee;
}

.adsbybocoup {
  font-size: 10px;
  font-style: italic;
  padding: 10px 0 0 0;
}

.advertisements p {
  display: inline-block;
  width: 200px;
  margin: 3px 0 0 10px;
  line-height: 1.4;
  font-size: 12px;
}

.github-ribbon {
  position: absolute;
  top: 40px;
  right: 0;
  border: 0;
}

@media (max-width: 420px) {
  .github-ribbon {
    display: none;
  }
}


================================================
FILE: assets/js/chapter.js
================================================
/*! jQuery Fundamentals is Copyright 2012 Bocoup LLC */

require([ 'controllers/chapter' ], function(ChapterController) {
  new ChapterController();
});

================================================
FILE: assets/js/controllers/chapter.js
================================================
define([
  'jquery',
  'widgets/editor',
  'widgets/example',
  'widgets/results',

  'bootstrap'
], function($, Editor, Example, Results) {
  return function() {

    var cls = 'sandbox-visible';

    var chapter = $('#main').attr('data-chapter');
    var body = $('body');
    var editorBtn = $('#editor-btn');
    var editor, results;

    var editorEnabled = $(window).width() > 600;

    // set up code examples
    $('#main pre > code').each(function(idx, el) {
      var example = new Example(el, {
        editorEnabled : editorEnabled,
        onExplore : editorEnabled ? function(content) {
          editor.setValue(content);
          body.addClass(cls);
          editorBtn.html('Hide Editor');
          _gaq.push([ '_trackEvent', 'code', 'explore' ]);
        } : $.noop
      });
    });

    if ( editorEnabled ) {

      editor = new Editor( $('#editor')[0] );
      results = new Results( $('#results')[0], chapter );

      $('#sandbox').on('scroll', function(e) {
        e.preventDefault();
        e.stopPropagation();
      });

      editor.on('execute', function(code) {
        results.executeCode(code);
        _gaq.push([ '_trackEvent', 'code', 'execute' ]);
      });

      editor.on('reset', function() {
        results.reset();
        _gaq.push([ '_trackEvent', 'editor', 'reset' ]);
      });

      editorBtn.click(function() {
        body.toggleClass(cls);

        var visible = body.hasClass(cls);

        editorBtn.html( visible ? 'Hide Editor' : 'Show Editor' );
        _gaq.push([ '_trackEvent', 'editor', visible ? 'show' : 'hide' ]);
      });

    } else {

      editorBtn.remove();

    }


  };
});

================================================
FILE: assets/js/sandbox.js
================================================
var log = window.log = function(msg) {
  var p = document.createElement('p');
  p.innerHTML = msg;
  document.body.appendChild(p);
};

================================================
FILE: assets/js/widgets/_evented.js
================================================
define([ 'jquery' ], function($) {
  return {
    on : function(evt, fn) {
      this._listeners = this._listeners || {};
      this._listeners[evt] = this._listeners[evt] || [];
      this._listeners[evt].push(fn);
    },

    trigger : function(evt, data) {
      if (
        this._listeners &&
        this._listeners[evt] &&
        this._listeners[evt].length
      ) {
        $.each(this._listeners[evt], function(idx, fn) {
          fn(data);
        });
      }
    }
  };
});

================================================
FILE: assets/js/widgets/editor.js
================================================
define([
  'jquery',
  'widgets/_evented',
  'vendor/codemirror'
], function($, _evented, CodeMirror) {
  var Editor = function(el) {
    var self = this;

    var destination = $('<div>', {
      'class' : 'editor'
    }).appendTo(el)[0];

    var editor = this.editor = new CodeMirror(destination, {
      value : ' ',
      mode : 'javascript',
      lineNumbers : true,
      theme : 'default',
      readOnly : false
    });

    var buttonArea = $('<div>', {
      'class' : 'editor-buttons'
    }).prependTo(destination);

    $('<i>', {
      'class' : 'icon-play',
      'title' : 'Execute Code'
    })
    .appendTo(buttonArea)
    .click(function() { self.trigger('execute', editor.getValue()); });

    $('<i>', {
      'class' : 'icon-repeat',
      'title' : 'Reset to original'
    })
    .appendTo(buttonArea)
    .click(function() { self.trigger('reset'); });
  };

  Editor.prototype = $.extend({
    setValue : function(content) {
      this.editor.setValue(content);
    },

    getValue : function(content) {
      return this.editor.getValue(content);
    }
  }, _evented);

  return Editor;
});

================================================
FILE: assets/js/widgets/example.js
================================================
define([
  'jquery',
  'widgets/_evented',
  'vendor/codemirror'
], function($, _evented, CodeMirror) {
  var Example = function(el, config) {
    this.onExplore = config.onExplore || $.noop;

    var code = $(el);
    var pre = code.parent();
    var self = this;

    var container = $('<div>', {
      'class' : 'editor-container'
    }).insertBefore(pre)[0];

    var content = $.trim(code.text());
    var editorInfo = content.match(/^```(.+)\n/);

    if ( editorInfo ) {
      content = content.replace(/^.+\n/, '');
    }

    var mode = /^</.test(content) ?
                { name : 'xml', htmlMode : true } :
                'javascript';

    var editor = this.editor = new CodeMirror(container, {
      value : content,
      mode : mode,
      lineNumbers : true,
      theme : 'default',
      readOnly : true
    });

    pre.remove();

    if ( editorInfo ) {
      $('<div>', {
        'class' : 'editor-info'
      })
      .insertBefore( container )
      .html( editorInfo[1] );
    }

    if ( !config.editorEnabled ) {
      return;
    }

    if ( mode !== 'javascript' ) {
      return;
    }

    var buttonArea = $('<div>', {
      'class' : 'editor-buttons'
    }).prependTo(container);

    var exploreButton = $('<i>', {
      'class' : 'icon-eye-open',
      'title' : 'Try in editor'
    }).appendTo(buttonArea);

    exploreButton.click(function() {
      var content = editor.getValue();
      self.onExplore( content );
      self.trigger( 'explore', content );
    });

  };

  Example.prototype = $.extend({}, _evented);

  return Example;
});


================================================
FILE: assets/js/widgets/results.js
================================================
define([ 'jquery', 'widgets/_evented' ], function($, _evented) {
  var Results = function(el, src) {
    this.el = el;
    this.src = src;

    this._createIframe();
  };

  Results.prototype = $.extend({
    _createIframe : function() {
      var self = this;
      var el = $(this.el);
      this.ready = false;

      el.empty();
      var container = $('<div>', {
        'class' : 'results-container'
      }).appendTo(el);

      var iframe = $('<iframe>', {
        src : this.src,
        frameBorder : 0
      }).appendTo(container);

      this.contentWindow = iframe[0].contentWindow;

      this.contentWindow.onload = function() {
        self._ready.call(self);
      };
    },

    _ready : function() {
      this.ready = true;
    },

    executeCode : function(code) {
      if (!this.ready) {
        setTimeout(this.executeCode, 200);
        return;
      }

      (new this.contentWindow.Function(code))();
    },

    reset : function() {
      this._createIframe();
    }
  }, _evented);

  return Results;
});

================================================
FILE: assets/main.js
================================================
requirejs.config({
  baseUrl : '/public/',
  shim : {
    'vendor/codemirror' : {
      deps : [ 'vendor/CodeMirror-2.25/lib/codemirror'],
      exports : 'CodeMirror'
    }
  },
  paths : {
    bootstrap : 'vendor/bootstrap/js/bootstrap',
    jquery : 'vendor/jquery',
    widgets : 'js/widgets',
    controllers : 'js/controllers'
  },
  dir: '../public'
});

================================================
FILE: assets/vendor/CodeMirror-2.25/LICENSE
================================================
Copyright (C) 2012 by Marijn Haverbeke <marijnh@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Please note that some subdirectories of the CodeMirror distribution
include their own LICENSE files, and are released under different
licences.


================================================
FILE: assets/vendor/CodeMirror-2.25/README.md
================================================
# CodeMirror 2

CodeMirror 2 is a rewrite of [CodeMirror
1](http://github.com/marijnh/CodeMirror). The docs live
[here](http://codemirror.net/doc/manual.html), and the project page is
[http://codemirror.net/](http://codemirror.net/).


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/activeline.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Active Line Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
      .activeline {background: #e8f2ff !important;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Active Line Demo</h1>

    <form><textarea id="code" name="code">
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"
     xmlns:georss="http://www.georss.org/georss"
     xmlns:twitter="http://api.twitter.com">
  <channel>
    <title>Twitter / codemirror</title>
    <link>http://twitter.com/codemirror</link>
    <atom:link type="application/rss+xml"
               href="http://twitter.com/statuses/user_timeline/242283288.rss" rel="self"/>
    <description>Twitter updates from CodeMirror / codemirror.</description>
    <language>en-us</language>
    <ttl>40</ttl>
  <item>
    <title>codemirror: http://cloud-ide.com &#8212; they're springing up like mushrooms. This one
      uses CodeMirror as its editor.</title>
    <description>codemirror: http://cloud-ide.com &#8212; they're springing up like mushrooms. This
      one uses CodeMirror as its editor.</description>
    <pubDate>Thu, 17 Mar 2011 23:34:47 +0000</pubDate>
    <guid>http://twitter.com/codemirror/statuses/48527733722058752</guid>
    <link>http://twitter.com/codemirror/statuses/48527733722058752</link>
    <twitter:source>web</twitter:source>
    <twitter:place/>
  </item>
  <item>
    <title>codemirror: Posted a description of the CodeMirror 2 internals at
      http://codemirror.net/2/internals.html</title>
    <description>codemirror: Posted a description of the CodeMirror 2 internals at
      http://codemirror.net/2/internals.html</description>
    <pubDate>Wed, 02 Mar 2011 12:15:09 +0000</pubDate>
    <guid>http://twitter.com/codemirror/statuses/42920879788789760</guid>
    <link>http://twitter.com/codemirror/statuses/42920879788789760</link>
    <twitter:source>web</twitter:source>
    <twitter:place/>
  </item>
  </channel>
</rss></textarea></form>

    <script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
  mode: "application/xml",
  lineNumbers: true,
  lineWrapping: true,
  onCursorActivity: function() {
    editor.setLineClass(hlLine, null, null);
    hlLine = editor.setLineClass(editor.getCursor().line, null, "activeline");
  }
});
var hlLine = editor.setLineClass(0, "activeline");
</script>

    <p>Styling the current cursor line.</p>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/changemode.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Mode-Changing Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/javascript/javascript.js"></script>
    <script src="../mode/scheme/scheme.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border: 1px solid black;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Mode-Changing demo</h1>

    <form><textarea id="code" name="code">
;; If there is Scheme code in here, the editor will be in Scheme mode.
;; If you put in JS instead, it'll switch to JS mode.

(define (double x)
  (* x x))
</textarea></form>

<p>On changes to the content of the above editor, a (crude) script
tries to auto-detect the language used, and switches the editor to
either JavaScript or Scheme mode based on that.</p>

<script>
  var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
    mode: "scheme",
    lineNumbers: true,
    matchBrackets: true,
    tabMode: "indent",
    onChange: function() {
      clearTimeout(pending);
      setTimeout(update, 400);
    }
  });
  var pending;
  function looksLikeScheme(code) {
    return !/^\s*\(\s*function\b/.test(code) && /^\s*[;\(]/.test(code);
  }
  function update() {
    editor.setOption("mode", looksLikeScheme(editor.getValue()) ? "scheme" : "javascript");
  }
</script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/closetag.html
================================================
<!doctype html>
<html>
	<head>
		<title>CodeMirror: Close-Tag Demo</title>
		<link rel="stylesheet" href="../lib/codemirror.css">
		<script src="../lib/codemirror.js"></script>
		<script src="../lib/util/closetag.js"></script>
		<script src="../mode/xml/xml.js"></script>
		<script src="../mode/javascript/javascript.js"></script>
		<script src="../mode/css/css.js"></script>
		<script src="../mode/htmlmixed/htmlmixed.js"></script>
		<link rel="stylesheet" href="../doc/docs.css">
		<style type="text/css">
			.CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee;}
		</style>
	</head>
	<body>
	
		<h1>Close-Tag Demo</h1>
		<ul>
			<li>Type an html tag.  When you type '>' or '/', the tag will auto-close/complete.  Block-level tags will indent.</li>
			<li>There are options for disabling tag closing or customizing the list of tags to indent.</li>
			<li>Works with "text/html" (based on htmlmixed.js or xml.js) mode.</li>
			<li>View source for key binding details.</li>
		</p>

		<form><textarea id="code" name="code"></textarea></form>

		<script type="text/javascript">
		var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
			mode: 'text/html',
			
			//closeTagEnabled: false, // Set this option to disable tag closing behavior without having to remove the key bindings.
			//closeTagIndent: false, // Pass false or an array of tag names to override the default indentation behavior.
			
			extraKeys: {
				"'>'": function(cm) { cm.closeTag(cm, '>'); },
				"'/'": function(cm) { cm.closeTag(cm, '/'); }
			},
			
			/*
			// extraKeys is the easier way to go, but if you need native key event processing, this should work too.
			onKeyEvent: function(cm, e) {
				if (e.type == 'keydown') {
					var c = e.keyCode || e.which;
					if (c == 190 || c == 191) {
						try {
							cm.closeTag(cm, c == 190 ? '>' : '/');
							e.stop();
							return true;
						} catch (e) {
							if (e != CodeMirror.Pass) throw e;
						}
					}
				}
				return false;
			},
			*/
			
			wordWrap: true
		});
		</script>

	</body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/complete.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Autocomplete Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/simple-hint.js"></script>
    <link rel="stylesheet" href="../lib/util/simple-hint.css">
    <script src="../lib/util/javascript-hint.js"></script>
    <script src="../mode/javascript/javascript.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">
    <style type="text/css">.CodeMirror {border: 1px solid #eee;} .CodeMirror-scroll { height: 100% }</style>
  </head>
  <body>
    <h1>CodeMirror: Autocomplete demo</h1>

    <form><textarea id="code" name="code">
function getCompletions(token, context) {
  var found = [], start = token.string;
  function maybeAdd(str) {
    if (str.indexOf(start) == 0) found.push(str);
  }
  function gatherCompletions(obj) {
    if (typeof obj == "string") forEach(stringProps, maybeAdd);
    else if (obj instanceof Array) forEach(arrayProps, maybeAdd);
    else if (obj instanceof Function) forEach(funcProps, maybeAdd);
    for (var name in obj) maybeAdd(name);
  }

  if (context) {
    // If this is a property, see if it belongs to some object we can
    // find in the current environment.
    var obj = context.pop(), base;
    if (obj.className == "js-variable")
      base = window[obj.string];
    else if (obj.className == "js-string")
      base = "";
    else if (obj.className == "js-atom")
      base = 1;
    while (base != null && context.length)
      base = base[context.pop().string];
    if (base != null) gatherCompletions(base);
  }
  else {
    // If not, just look in the window object and any local scope
    // (reading into JS mode internals to get at the local variables)
    for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);
    gatherCompletions(window);
    forEach(keywords, maybeAdd);
  }
  return found;
}
</textarea></form>

<p>Press <strong>ctrl-space</strong> to activate autocompletion. See
the code (<a href="../lib/util/simple-hint.js">here</a>
and <a href="../lib/util/javascript-hint.js">here</a>) to figure out
how it works.</p>

    <script>
      CodeMirror.commands.autocomplete = function(cm) {
        CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);
      }
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        extraKeys: {"Ctrl-Space": "autocomplete"}
      });
    </script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/emacs.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Emacs bindings demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/clike/clike.js"></script>
    <script src="../keymap/emacs.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Emacs bindings demo</h1>

    <form><textarea id="code" name="code">
#include "syscalls.h"
/* getchar:  simple buffered version */
int getchar(void)
{
  static char buf[BUFSIZ];
  static char *bufp = buf;
  static int n = 0;
  if (n == 0) {  /* buffer is empty */
    n = read(0, buf, sizeof buf);
    bufp = buf;
  }
  return (--n >= 0) ? (unsigned char) *bufp++ : EOF;
}
</textarea></form>

<p>The emacs keybindings are enabled by
including <a href="../keymap/emacs.js">keymap/emacs.js</a> and setting
the <code>keyMap</code> option to <code>"emacs"</code>. Because
CodeMirror's internal API is quite different from Emacs, they are only
a loose approximation of actual emacs bindings, though.</p>

<p>Also note that a lot of browsers disallow certain keys from being
captured. For example, Chrome blocks both Ctrl-W and Ctrl-N, with the
result that idiomatic use of Emacs keys will constantly close your tab
or open a new window.</p>

    <script>
      CodeMirror.commands.save = function() {
        var elt = editor.getWrapperElement();
        elt.style.background = "#def";
        setTimeout(function() { elt.style.background = ""; }, 300);
      };
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        mode: "text/x-csrc",
        keyMap: "emacs"
      });
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/folding.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Code Folding Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/foldcode.js"></script>
    <script src="../mode/javascript/javascript.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
      .CodeMirror-gutter {min-width: 2.6em; cursor: pointer;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Code Folding Demo</h1>

    <p>Demonstration of code folding using the code
    in <a href="../lib/util/foldcode.js"><code>foldcode.js</code></a>.
    Press ctrl-q or click on the gutter to fold a block, again
    to unfold.</p>
    <form>
      <div style="max-width: 50em; margin-bottom: 1em">JavaScript:<br><textarea id="code" name="code"></textarea></div>
      <div style="max-width: 50em">HTML:<br><textarea id="code-html" name="code-html"></textarea></div>
    </form>
    <script id="script">
window.onload = function() {
  var te = document.getElementById("code");
  var sc = document.getElementById("script");
  te.value = (sc.textContent || sc.innerText || sc.innerHTML).replace(/^\s*/, "");
  sc.innerHTML = "";
  var te_html = document.getElementById("code-html");
  te_html.value = "<html>\n  " + document.documentElement.innerHTML + "\n</html>";

  var foldFunc = CodeMirror.newFoldFunction(CodeMirror.braceRangeFinder);
  window.editor = CodeMirror.fromTextArea(te, {
    mode: "javascript",
    lineNumbers: true,
    lineWrapping: true,
    onGutterClick: foldFunc,
    extraKeys: {"Ctrl-Q": function(cm){foldFunc(cm, cm.getCursor().line);}}
  });
  foldFunc(editor, 9);
  foldFunc(editor, 20);

  var foldFunc_html = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder);
  window.editor_html = CodeMirror.fromTextArea(te_html, {
    mode: "text/html",
    lineNumbers: true,
    lineWrapping: true,
    onGutterClick: foldFunc_html,
    extraKeys: {"Ctrl-Q": function(cm){foldFunc_html(cm, cm.getCursor().line);}}
  })
  foldFunc_html(editor_html, 1);
  foldFunc_html(editor_html, 15);
};
</script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/formatting.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Formatting Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/formatting.js"></script>
    <script src="../mode/css/css.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <script src="../mode/javascript/javascript.js"></script>
    <script src="../mode/htmlmixed/htmlmixed.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {
        border: 1px solid #eee;
      }
      td {
        padding-right: 20px;
      }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Formatting demo</h1>

    <form><textarea id="code" name="code"><script> function (s,e){ for(var i=0; i < 1; i++) test("test();a=1");} </script>
<script>
function test(c){  for (var i = 0; i < 10; i++){	          process("a.b();c = null;", 300);}
}
</script>
<table><tr><td>test 1</td></tr><tr><td>test 2</td></tr></table>
<script> function test() { return 1;} </script>
<style> .test { font-size: medium; font-family: monospace; }
</style></textarea></form>

<p>Select a piece of code and click one of the links below to apply automatic formatting to the selected text or comment/uncomment the selected text. Note that the formatting behavior depends on the current block's mode.
    <table>
      <tr>
        <td>
          <a href="javascript:autoFormatSelection()">
            Autoformat Selected
          </a>
        </td>
        <td>
          <a href="javascript:commentSelection(true)">
            Comment Selected
          </a>
        </td>
        <td>
          <a href="javascript:commentSelection(false)">
            Uncomment Selected
          </a>
        </td>
      </tr>
    </table>
</p>    
    <script>
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        mode: "htmlmixed"
      });
      CodeMirror.commands["selectAll"](editor);
      
      function getSelectedRange() {
        return { from: editor.getCursor(true), to: editor.getCursor(false) };
      }
      
      function autoFormatSelection() {
        var range = getSelectedRange();
        editor.autoFormatRange(range.from, range.to);
      }
      
      function commentSelection(isComment) {
        var range = getSelectedRange();
        editor.commentRange(isComment, range.from, range.to);
      }      
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/fullscreen.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Full Screen Editing</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <link rel="stylesheet" href="../theme/night.css">
    <script src="../mode/xml/xml.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
        .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
        .CodeMirror-fullscreen {
            display: block;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 9999;
            margin: 0;
            padding: 0;
            border: 0px solid #BBBBBB;
            opacity: 1;
        }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Full Screen Editing</h1>

    <form><textarea id="code" name="code" rows="5">
  <dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt>
  <dd>Whether, when indenting, the first N*8 spaces should be
  replaced by N tabs. Default is false.</dd>

  <dt id="option_tabMode"><code>tabMode (string)</code></dt>
  <dd>Determines what happens when the user presses the tab key.
  Must be one of the following:
    <dl>
      <dt><code>"classic" (the default)</code></dt>
      <dd>When nothing is selected, insert a tab. Otherwise,
      behave like the <code>"shift"</code> mode. (When shift is
      held, this behaves like the <code>"indent"</code> mode.)</dd>
      <dt><code>"shift"</code></dt>
      <dd>Indent all selected lines by
      one <a href="#option_indentUnit"><code>indentUnit</code></a>.
      If shift was held while pressing tab, un-indent all selected
      lines one unit.</dd>
      <dt><code>"indent"</code></dt>
      <dd>Indent the line the 'correctly', based on its syntactic
      context. Only works if the
      mode <a href="#indent">supports</a> it.</dd>
      <dt><code>"default"</code></dt>
      <dd>Do not capture tab presses, let the browser apply its
      default behaviour (which usually means it skips to the next
      control).</dd>
    </dl></dd>

  <dt id="option_enterMode"><code>enterMode (string)</code></dt>
  <dd>Determines whether and how new lines are indented when the
  enter key is pressed. The following modes are supported:
    <dl>
      <dt><code>"indent" (the default)</code></dt>
      <dd>Use the mode's indentation rules to give the new line
      the correct indentation.</dd>
      <dt><code>"keep"</code></dt>
      <dd>Indent the line the same as the previous line.</dd>
      <dt><code>"flat"</code></dt>
      <dd>Do not indent the new line.</dd>
    </dl></dd>

  <dt id="option_enterMode"><code>enterMode (string)</code></dt>
  <dd>Determines whether and how new lines are indented when the
  enter key is pressed. The following modes are supported:
    <dl>
      <dt><code>"indent" (the default)</code></dt>
      <dd>Use the mode's indentation rules to give the new line
      the correct indentation.</dd>
      <dt><code>"keep"</code></dt>
      <dd>Indent the line the same as the previous line.</dd>
      <dt><code>"flat"</code></dt>
      <dd>Do not indent the new line.</dd>
    </dl></dd>

  <dt id="option_enterMode"><code>enterMode (string)</code></dt>
  <dd>Determines whether and how new lines are indented when the
  enter key is pressed. The following modes are supported:
    <dl>
      <dt><code>"indent" (the default)</code></dt>
      <dd>Use the mode's indentation rules to give the new line
      the correct indentation.</dd>
      <dt><code>"keep"</code></dt>
      <dd>Indent the line the same as the previous line.</dd>
      <dt><code>"flat"</code></dt>
      <dd>Do not indent the new line.</dd>
    </dl></dd>

  <dt id="option_enterMode"><code>enterMode (string)</code></dt>
  <dd>Determines whether and how new lines are indented when the
  enter key is pressed. The following modes are supported:
    <dl>
      <dt><code>"indent" (the default)</code></dt>
      <dd>Use the mode's indentation rules to give the new line
      the correct indentation.</dd>
      <dt><code>"keep"</code></dt>
      <dd>Indent the line the same as the previous line.</dd>
      <dt><code>"flat"</code></dt>
      <dd>Do not indent the new line.</dd>
    </dl></dd>

</textarea></form>
 <script>
    var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        theme: "night",
        extraKeys: {
            "F11": function() {
              var scroller = editor.getScrollerElement();
              if (scroller.className.search(/\bCodeMirror-fullscreen\b/) === -1) {
                scroller.className += " CodeMirror-fullscreen";
                scroller.style.height = "100%";
                scroller.style.width = "100%";
                editor.refresh();
              } else {
                scroller.className = scroller.className.replace(" CodeMirror-fullscreen", "");
                scroller.style.height = '';
                scroller.style.width = '';
                editor.refresh();
              }
            },
            "Esc": function() {
              var scroller = editor.getScrollerElement();
              if (scroller.className.search(/\bCodeMirror-fullscreen\b/) !== -1) {
                scroller.className = scroller.className.replace(" CodeMirror-fullscreen", "");
                scroller.style.height = '';
                scroller.style.width = '';
                editor.refresh();
              }
            }
        }
    });

</script>

    <p>Press <strong>F11</strong> when cursor is in the editor to toggle full screen editing. <strong>Esc</strong> can also be used to <i>exit</i> full screen editing.</p>

    <p><strong>Note:</strong> Does not currently work correctly in IE
    6 and 7, where setting the height of something
    to <code>100%</code> doesn't make it full screen.</p>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/loadmode.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Lazy Mode Loading Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/loadmode.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Lazy Mode Loading</h1>

    <form><textarea id="code" name="code">This is the editor.
// It starts out in plain text mode,
#  use the control below to load and apply a mode
  "you'll see the highlighting of" this text /*change*/.
</textarea></form>
<p><input type=text value=javascript id=mode> <button type=button onclick="change()">change mode</button></p>

    <script>
CodeMirror.modeURL = "../mode/%N/%N.js";
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
  lineNumbers: true
});
var modeInput = document.getElementById("mode");
CodeMirror.connect(modeInput, "keypress", function(e) {
  if (e.keyCode == 13) change();
});
function change() {
   editor.setOption("mode", modeInput.value);
   CodeMirror.autoLoadMode(editor, modeInput.value);
}
</script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/marker.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Breakpoint Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/javascript/javascript.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror-gutter {
        width: 3em;
        background: white;
      }
      .CodeMirror {
        border: 1px solid #aaa;
      }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Breakpoint demo</h1>

    <form><textarea id="code" name="code">
CodeMirror.fromTextArea(document.getElementById("code"), {
  lineNumbers: true,
  onGutterClick: function(cm, n) {
    var info = cm.lineInfo(n);
    if (info.markerText)
      cm.clearMarker(n);
    else
      cm.setMarker(n, "<span style=\"color: #900\">●</span> %N%");
  }
});
</textarea></form>

<p>Click the line-number gutter to add or remove 'breakpoints'.</p>

    <script>
      CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        onGutterClick: function(cm, n) {
          var info = cm.lineInfo(n);
          if (info.markerText)
            cm.clearMarker(n);
          else
            cm.setMarker(n, "<span style=\"color: #900\">●</span> %N%");
        }
      });
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/matchhighlighter.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Match Highlighter Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/searchcursor.js"></script>
    <script src="../lib/util/match-highlighter.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
	  
      span.CodeMirror-matchhighlight { background: #e9e9e9 }
      .CodeMirror-focused span.CodeMirror-matchhighlight { background: #e7e4ff; !important }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Match Highlighter Demo</h1>

    <form><textarea id="code" name="code">Select this text: hardToSpotVar
	And everywhere else in your code where hardToSpotVar appears will automatically illuminate.
Give it a try!  No more hardToSpotVars.</textarea></form>

    <script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
  lineNumbers : true,
  onCursorActivity: function() {
    editor.matchHighlight("CodeMirror-matchhighlight");
  }
});
</script>

    <p>Highlight matches of selected text on select</p>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/mustache.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Overlay Parser Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/overlay.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border: 1px solid black;}
      .cm-mustache {color: #0ca;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Overlay Parser Demo</h1>

    <form><textarea id="code" name="code">
<html>
  <body>
    <h1>{{title}}</h1>
    <p>These are links to {{things}}:</p>
    <ul>{{#links}}
      <li><a href="{{url}}">{{text}}</a></li>
    {{/links}}</ul>
  </body>
</html>
</textarea></form>

    <script>
CodeMirror.defineMode("mustache", function(config, parserConfig) {
  var mustacheOverlay = {
    token: function(stream, state) {
      var ch;
      if (stream.match("{{")) {
        while ((ch = stream.next()) != null)
          if (ch == "}" && stream.next() == "}") break;
        return "mustache";
      }
      while (stream.next() != null && !stream.match("{{", false)) {}
      return null;
    }
  };
  return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay);
});
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "mustache"});
</script>

    <p>Demonstration of a mode that parses HTML, highlighting
    the <a href="http://mustache.github.com/">Mustache</a> templating
    directives inside of it by using the code
    in <a href="../lib/util/overlay.js"><code>overlay.js</code></a>. View
    source to see the 15 lines of code needed to accomplish this.</p>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/preview.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: HTML5 preview</title>
    <meta charset=utf-8>
    <script src=../lib/codemirror.js></script>
    <script src=../mode/xml/xml.js></script>
    <script src=../mode/javascript/javascript.js></script>
    <script src=../mode/css/css.js></script>
    <script src=../mode/htmlmixed/htmlmixed.js></script>
    <link rel=stylesheet href=../lib/codemirror.css>
    <link rel=stylesheet href=../doc/docs.css>
    <style type=text/css>
      .CodeMirror {
        float: left;
        width: 50%;
        border: 1px solid black;
      }
      iframe {
        width: 49%;
        float: left;
        height: 300px;
        border: 1px solid black;
        border-left: 0px;
      }
    </style>
  </head>
  <body>
    <h1>CodeMirror: HTML5 preview</h1>
    <textarea id=code name=code>
<!doctype html>
<html>
  <head>
    <meta charset=utf-8>
    <title>HTML5 canvas demo</title>
    <style>p {font-family: monospace;}</style>
  </head>
  <body>
    <p>Canvas pane goes here:</p>
    <canvas id=pane width=300 height=200></canvas>
    <script>
      var canvas = document.getElementById('pane');
      var context = canvas.getContext('2d');

      context.fillStyle = 'rgb(250,0,0)';
      context.fillRect(10, 10, 55, 50);

      context.fillStyle = 'rgba(0, 0, 250, 0.5)';
      context.fillRect(30, 30, 55, 50);
    </script>
  </body>
</html></textarea>
    <iframe id=preview></iframe>
    <script>
      var delay;
      // Initialize CodeMirror editor with a nice html5 canvas demo.
      var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
        mode: 'text/html',
        tabMode: 'indent',
        onChange: function() {
          clearTimeout(delay);
          delay = setTimeout(updatePreview, 300);
        }
      });
      
      function updatePreview() {
        var previewFrame = document.getElementById('preview');
        var preview =  previewFrame.contentDocument ||  previewFrame.contentWindow.document;
        preview.open();
        preview.write(editor.getValue());
        preview.close();
      }
      setTimeout(updatePreview, 300);
    </script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/resize.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Autoresize Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/css/css.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {
        border: 1px solid #eee;
      }
      .CodeMirror-scroll {
        height: auto;
        overflow-y: hidden;
        overflow-x: auto;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Autoresize demo</h1>

    <form><textarea id="code" name="code">
.CodeMirror-scroll {
  height: auto;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%
}</textarea></form>

<p>By setting a few CSS properties, CodeMirror can be made to
automatically resize to fit its content.</p>

    <script>
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true
      });
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/runmode.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Mode Runner Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../lib/util/runmode.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">
  </head>
  <body>
    <h1>CodeMirror: Mode Runner Demo</h1>

    <textarea id="code" style="width: 90%; height: 7em; border: 1px solid black; padding: .2em .4em;">
<foobar>
  <blah>Enter your xml here and press the button below to display
    it as highlighted by the CodeMirror XML mode</blah>
  <tag2 foo="2" bar="&amp;quot;bar&amp;quot;"/>
</foobar></textarea><br>
    <button onclick="doHighlight();">Highlight!</button>
    <pre id="output" class="cm-s-default"></pre>

    <script>
function doHighlight() {
  CodeMirror.runMode(document.getElementById("code").value, "application/xml",
                     document.getElementById("output"));
}
</script>

    <p>Running a CodeMirror mode outside of the editor.
    The <code>CodeMirror.runMode</code> function, defined
    in <code><a href="../lib/util/runmode.js">lib/runmode.js</a></code> takes the following arguments:</p>

    <dl>
      <dt><code>text (string)</code></dt>
      <dd>The document to run through the highlighter.</dd>
      <dt><code>mode (<a href="../doc/manual.html#option_mode">mode spec</a>)</code></dt>
      <dd>The mode to use (must be loaded as normal).</dd>
      <dt><code>output (function or DOM node)</code></dt>
      <dd>If this is a function, it will be called for each token with
      two arguments, the token's text and the token's style class (may
      be <code>null</code> for unstyled tokens). If it is a DOM node,
      the tokens will be converted to <code>span</code> elements as in
      an editor, and inserted into the node
      (through <code>innerHTML</code>).</dd>
    </dl>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/search.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Search/Replace Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/xml/xml.js"></script>
    <script src="../lib/util/dialog.js"></script>
    <link rel="stylesheet" href="../lib/util/dialog.css">
    <script src="../lib/util/searchcursor.js"></script>
    <script src="../lib/util/search.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
      dt {font-family: monospace; color: #666;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Search/Replace Demo</h1>

    <form><textarea id="code" name="code">
  <dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt>
  <dd>Whether, when indenting, the first N*8 spaces should be
  replaced by N tabs. Default is false.</dd>

  <dt id="option_tabMode"><code>tabMode (string)</code></dt>
  <dd>Determines what happens when the user presses the tab key.
  Must be one of the following:
    <dl>
      <dt><code>"classic" (the default)</code></dt>
      <dd>When nothing is selected, insert a tab. Otherwise,
      behave like the <code>"shift"</code> mode. (When shift is
      held, this behaves like the <code>"indent"</code> mode.)</dd>
      <dt><code>"shift"</code></dt>
      <dd>Indent all selected lines by
      one <a href="#option_indentUnit"><code>indentUnit</code></a>.
      If shift was held while pressing tab, un-indent all selected
      lines one unit.</dd>
      <dt><code>"indent"</code></dt>
      <dd>Indent the line the 'correctly', based on its syntactic
      context. Only works if the
      mode <a href="#indent">supports</a> it.</dd>
      <dt><code>"default"</code></dt>
      <dd>Do not capture tab presses, let the browser apply its
      default behaviour (which usually means it skips to the next
      control).</dd>
    </dl></dd>

  <dt id="option_enterMode"><code>enterMode (string)</code></dt>
  <dd>Determines whether and how new lines are indented when the
  enter key is pressed. The following modes are supported:
    <dl>
      <dt><code>"indent" (the default)</code></dt>
      <dd>Use the mode's indentation rules to give the new line
      the correct indentation.</dd>
      <dt><code>"keep"</code></dt>
      <dd>Indent the line the same as the previous line.</dd>
      <dt><code>"flat"</code></dt>
      <dd>Do not indent the new line.</dd>
    </dl></dd>
</textarea></form>

    <script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "text/html", lineNumbers: true});
</script>

    <p>Demonstration of primitive search/replace functionality. The
    keybindings (which can be overridden by custom keymaps) are:</p>
    <dl>
      <dt>Ctrl-F / Cmd-F</dt><dd>Start searching</dd>
      <dt>Ctrl-G / Cmd-G</dt><dd>Find next</dd>
      <dt>Shift-Ctrl-G / Shift-Cmd-G</dt><dd>Find previous</dd>
      <dt>Shift-Ctrl-F / Cmd-Option-F</dt><dd>Replace</dd>
      <dt>Shift-Ctrl-R / Shift-Cmd-Option-F</dt><dd>Replace all</dd>
    </dl>
    <p>Searching is enabled by
    including <a href="../lib/util/search.js">lib/util/search.js</a>.
    For good-looking input dialogs, you also want to include
    <a href="../lib/util/dialog.js">lib/util/dialog.js</a>
    and <a href="../lib/util/dialog.css">lib/util/dialog.css</a>.</p>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/theme.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Theme Demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <link rel="stylesheet" href="../theme/neat.css">
    <link rel="stylesheet" href="../theme/elegant.css">
    <link rel="stylesheet" href="../theme/erlang-dark.css">
    <link rel="stylesheet" href="../theme/night.css">
    <link rel="stylesheet" href="../theme/monokai.css">
    <link rel="stylesheet" href="../theme/cobalt.css">
    <link rel="stylesheet" href="../theme/eclipse.css">
    <link rel="stylesheet" href="../theme/rubyblue.css">
    <link rel="stylesheet" href="../theme/lesser-dark.css">
    <link rel="stylesheet" href="../theme/xq-dark.css">
    <link rel="stylesheet" href="../theme/ambiance.css">
    <link rel="stylesheet" href="../theme/blackboard.css">
    <script src="../mode/javascript/javascript.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border: 1px solid black;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Theme demo</h1>

    <form><textarea id="code" name="code">
function findSequence(goal) {
  function find(start, history) {
    if (start == goal)
      return history;
    else if (start > goal)
      return null;
    else
      return find(start + 5, "(" + history + " + 5)") ||
             find(start * 3, "(" + history + " * 3)");
  }
  return find(1, "1");
}</textarea></form>

<p>Select a theme: <select onchange="selectTheme()" id=select>
    <option selected>default</option>
    <option>ambiance</option>
    <option>blackboard</option>
    <option>cobalt</option>
    <option>eclipse</option>
    <option>elegant</option>
    <option>erlang-dark</option>
    <option>lesser-dark</option>
    <option>monokai</option>
    <option>neat</option>
    <option>night</option>
    <option>rubyblue</option>
    <option>xq-dark</option>
</select>
</p>

<script>
  var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
    lineNumbers: true
  });
  var input = document.getElementById("select");
  function selectTheme() {
    var theme = input.options[input.selectedIndex].innerHTML;
    editor.setOption("theme", theme);
  }
  var choice = document.location.search && document.location.search.slice(1);
  if (choice) {
    input.value = choice;
    editor.setOption("theme", choice);
  }
</script>
  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/vim.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Vim bindings demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/clike/clike.js"></script>
    <script src="../keymap/vim.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee;}
    </style>
  </head>
  <body>
    <h1>CodeMirror: Vim bindings demo</h1>

    <form><textarea id="code" name="code">
#include "syscalls.h"
/* getchar:  simple buffered version */
int getchar(void)
{
  static char buf[BUFSIZ];
  static char *bufp = buf;
  static int n = 0;
  if (n == 0) {  /* buffer is empty */
    n = read(0, buf, sizeof buf);
    bufp = buf;
  }
  return (--n >= 0) ? (unsigned char) *bufp++ : EOF;
}
</textarea></form>

<p>The vim keybindings are enabled by
including <a href="../keymap/vim.js">keymap/vim.js</a> and setting
the <code>keyMap</code> option to <code>"vim"</code>. Because
CodeMirror's internal API is quite different from Vim, they are only
a loose approximation of actual vim bindings, though.</p>

    <script>
      CodeMirror.commands.save = function(){ alert("Saving"); };
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        mode: "text/x-csrc",
        keyMap: "vim"
      });
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/demo/visibletabs.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Visible tabs demo</title>
    <link rel="stylesheet" href="../lib/codemirror.css">
    <script src="../lib/codemirror.js"></script>
    <script src="../mode/clike/clike.js"></script>
    <link rel="stylesheet" href="../doc/docs.css">

    <style type="text/css">
      .CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee;}
      .cm-tab:after {
        content: "\21e5";
        display: -moz-inline-block;
        display: -webkit-inline-block;
        display: inline-block;
        width: 0px;
        position: relative;
        overflow: visible;
        left: -1.4em;
        color: #aaa;
      }
    </style>
  </head>
  <body>
    <h1>CodeMirror: Visible tabs demo</h1>

    <form><textarea id="code" name="code">
#include "syscalls.h"
/* getchar:  simple buffered version */
int getchar(void)
{
	static char buf[BUFSIZ];
	static char *bufp = buf;
	static int n = 0;
	if (n == 0) {  /* buffer is empty */
		n = read(0, buf, sizeof buf);
		bufp = buf;
	}
	return (--n >= 0) ? (unsigned char) *bufp++ : EOF;
}
</textarea></form>

<p>Tabs inside the editor are spans with the
class <code>cm-tab</code>, and can be styled. This demo uses
an <code>:after</code> pseudo-class CSS hack that will not work on old
browsers. You can use a more conservative technique like a background
image as an alternative.</p>

    <script>
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
        lineNumbers: true,
        tabSize: 4,
        indentUnit: 4,
        indentWithTabs: true,
        mode: "text/x-csrc"
      });
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/compress.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Compression Helper</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* Script compression
   helper */
</pre>

    <p>To optimize loading CodeMirror, especially when including a
    bunch of different modes, it is recommended that you combine and
    minify (and preferably also gzip) the scripts. This page makes
    those first two steps very easy. Simply select the version and
    scripts you need in the form below, and
    click <strong>Compress</strong> to download the minified script
    file.</p>

    <form id="form" action="http://marijnhaverbeke.nl/uglifyjs" method="post">
      <input type="hidden" id="download" name="download" value="codemirror-compressed.js"/>
      <p>Version: <select id="version" onchange="setVersion(this);" style="padding: 1px">
        <option value="http://codemirror.net/">HEAD</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.24;f=">2.24</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.23;f=">2.23</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.22;f=">2.22</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.21;f=">2.21</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.2;f=">2.2</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.18;f=">2.18</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.16;f=">2.16</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.15;f=">2.15</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.13;f=">2.13</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.12;f=">2.12</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.11;f=">2.11</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.1;f=">2.1</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.02;f=">2.02</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.01;f=">2.01</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=v2.0;f=">2.0</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=beta2;f=">beta2</option>
        <option value="http://marijnhaverbeke.nl/git/codemirror2?a=blob_plain;hb=beta1;f=">beta1</option>
      </select></p>

      <select multiple="multiple" size="20" name="code_url" style="width: 40em;" class="field" id="files">
        <optgroup label="CodeMirror Library">
          <option value="http://codemirror.net/lib/codemirror.js" selected>codemirror.js</option>
        </optgroup>
        <optgroup label="Modes">
          <option value="http://codemirror.net/mode/clike/clike.js">clike.js</option>
          <option value="http://codemirror.net/mode/clojure/clojure.js">clojure.js</option>
          <option value="http://codemirror.net/mode/coffeescript/coffeescript.js">coffeescript.js</option>
          <option value="http://codemirror.net/mode/css/css.js">css.js</option>
          <option value="http://codemirror.net/mode/diff/diff.js">diff.js</option>
          <option value="http://codemirror.net/mode/ecl/ecl.js">ecl.js</option>
          <option value="http://codemirror.net/mode/erlang/erlang.js">erlang.js</option>
          <option value="http://codemirror.net/mode/gfm/gfm.js">gfm.js</option>
          <option value="http://codemirror.net/mode/go/go.js">go.js</option>
          <option value="http://codemirror.net/mode/groovy/groovy.js">groovy.js</option>
          <option value="http://codemirror.net/mode/haskell/haskell.js">haskell.js</option>
          <option value="http://codemirror.net/mode/htmlembedded/htmlembedded.js">htmlembedded.js</option>
          <option value="http://codemirror.net/mode/htmlmixed/htmlmixed.js">htmlmixed.js</option>
          <option value="http://codemirror.net/mode/javascript/javascript.js">javascript.js</option>
          <option value="http://codemirror.net/mode/jinja2/jinja2.js">jinja2.js</option>
          <option value="http://codemirror.net/mode/less/less.js">less.js</option>
          <option value="http://codemirror.net/mode/lua/lua.js">lua.js</option>
          <option value="http://codemirror.net/mode/markdown/markdown.js">markdown.js</option>
          <option value="http://codemirror.net/mode/mysql/mysql.js">mysql.js</option>
          <option value="http://codemirror.net/mode/ntriples/ntriples.js">ntriples.js</option>
          <option value="http://codemirror.net/mode/pascal/pascal.js">pascal.js</option>
          <option value="http://codemirror.net/mode/perl/perl.js">perl.js</option>
          <option value="http://codemirror.net/mode/php/php.js">php.js</option>
          <option value="http://codemirror.net/mode/pig/pig.js">pig.js</option>
          <option value="http://codemirror.net/mode/plsql/plsql.js">plsql.js</option>
          <option value="http://codemirror.net/mode/properties/properties.js">properties.js</option>
          <option value="http://codemirror.net/mode/python/python.js">python.js</option>
          <option value="http://codemirror.net/mode/r/r.js">r.js</option>
          <option value="http://codemirror.net/mode/rpm/changes/changes.js">rpm/changes.js</option>
          <option value="http://codemirror.net/mode/rpm/spec/spec.js">rpm/spec.js</option>
          <option value="http://codemirror.net/mode/rst/rst.js">rst.js</option>
          <option value="http://codemirror.net/mode/ruby/ruby.js">ruby.js</option>
          <option value="http://codemirror.net/mode/rust/rust.js">rust.js</option>
          <option value="http://codemirror.net/mode/scheme/scheme.js">scheme.js</option>
          <option value="http://codemirror.net/mode/shell/shell.js">shell.js</option>
          <option value="http://codemirror.net/mode/smalltalk/smalltalk.js">smalltalk.js</option>
          <option value="http://codemirror.net/mode/smarty/smarty.js">smarty.js</option>
          <option value="http://codemirror.net/mode/sparql/sparql.js">sparql.js</option>
          <option value="http://codemirror.net/mode/stex/stex.js">stex.js</option>
          <option value="http://codemirror.net/mode/tiddlywiki/tiddlywiki.js">tiddlywiki.js</option>
          <option value="http://codemirror.net/mode/tiki/tiki.js">tiki.js</option>
          <option value="http://codemirror.net/mode/vbscript/vbscript.js">vbscript.js</option>
          <option value="http://codemirror.net/mode/velocity/velocity.js">velocity.js</option>
          <option value="http://codemirror.net/mode/verilog/verilog.js">verilog.js</option>
          <option value="http://codemirror.net/mode/xml/xml.js">xml.js</option>
          <option value="http://codemirror.net/mode/xquery/xquery.js">xquery.js</option>
          <option value="http://codemirror.net/mode/yaml/yaml.js">yaml.js</option>
        </optgroup>
        <optgroup label="Utilities and add-ons">
          <option value="http://codemirror.net/lib/util/overlay.js">overlay.js</option>
          <option value="http://codemirror.net/lib/util/runmode.js">runmode.js</option>
          <option value="http://codemirror.net/lib/util/simple-hint.js">simple-hint.js</option>
          <option value="http://codemirror.net/lib/util/javascript-hint.js">javascript-hint.js</option>
          <option value="http://codemirror.net/lib/util/foldcode.js">foldcode.js</option>
          <option value="http://codemirror.net/lib/util/dialog.js">dialog.js</option>
          <option value="http://codemirror.net/lib/util/search.js">search.js</option>
          <option value="http://codemirror.net/lib/util/searchcursor.js">searchcursor.js</option>
          <option value="http://codemirror.net/lib/util/formatting.js">formatting.js</option>
          <option value="http://codemirror.net/lib/util/match-highlighter.js">match-highlighter.js</option>
          <option value="http://codemirror.net/lib/util/closetag.js">closetag.js</option>
          <option value="http://codemirror.net/lib/util/loadmode.js">loadmode.js</option>
        </optgroup>
        <optgroup label="Keymaps">
          <option value="http://codemirror.net/keymap/emacs.js">emacs.js</option>
          <option value="http://codemirror.net/keymap/vim.js">vim.js</option>
        </optgroup>
      </select></p>

      <p>
        <button type="submit">Compress</button> with <a href="http://github.com/mishoo/UglifyJS/">UglifyJS</a>
      </p>

      <p>Custom code to add to the compressed file:<textarea name="js_code" style="width: 100%; height: 15em;" class="field"></textarea></p>
    </form>

    <script type="text/javascript">
      function setVersion(ver) {
        var urlprefix = ver.options[ver.selectedIndex].value;
        var select = document.getElementById("files"), m;
        for (var optgr = select.firstChild; optgr; optgr = optgr.nextSibling)
          for (var opt = optgr.firstChild; opt; opt = opt.nextSibling) {
            if (opt.nodeName != "OPTION")
              continue;
            else if (m = opt.value.match(/^http:\/\/codemirror.net\/(.*)$/))
              opt.value = urlprefix + m[1];
            else if (m = opt.value.match(/http:\/\/marijnhaverbeke.nl\/git\/codemirror2\?a=blob_plain;hb=[^;]+;f=(.*)$/))
              opt.value = urlprefix + m[1];
          }
       }
    </script>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/docs.css
================================================
body {
  font-family: Droid Sans, Arial, sans-serif;
  line-height: 1.5;
  max-width: 64.3em;
  margin: 3em auto;
  padding: 0 1em;
}

h1 {
  letter-spacing: -3px;
  font-size: 3.23em;
  font-weight: bold;
  margin: 0;
}

h2 {
  font-size: 1.23em;
  font-weight: bold;
  margin: .5em 0;
  letter-spacing: -1px;
}

h3 {
  font-size: 1em;
  font-weight: bold;
  margin: .4em 0;
}

pre {
  background-color: #eee;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  border-radius: 6px;
  padding: 1em;
}

pre.code {
  margin: 0 1em;
}

.grey {
  font-size: 2.2em;
  padding: .5em 1em;
  line-height: 1.2em;
  margin-top: .5em;
  position: relative;
}

img.logo {
  position: absolute;
  right: -25px;
  bottom: 4px;
}

a:link, a:visited, .quasilink {
  color: #df0019;
  cursor: pointer;
  text-decoration: none;
}

a:hover, .quasilink:hover {
  color: #800004;
}

h1 a:link, h1 a:visited, h1 a:hover {
  color: black;
}

ul {
  margin: 0;
  padding-left: 1.2em;
}

a.download {
  color: white;
  background-color: #df0019;
  width: 100%;
  display: block;
  text-align: center;
  font-size: 1.23em;
  font-weight: bold;
  text-decoration: none;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  border-radius: 6px;
  padding: .5em 0;
  margin-bottom: 1em;
}

a.download:hover {
  background-color: #bb0010;
}

.rel {
  margin-bottom: 0;
}

.rel-note {
  color: #777;
  font-size: .9em;
  margin-top: .1em;
}

.logo-braces {
  color: #df0019;
  position: relative;
  top: -4px;
}

.blk {
  float: left;
}

.left {
  width: 37em;
  padding-right: 6.53em;
  padding-bottom: 1em;
}

.left1 {
  width: 15.24em;
  padding-right: 6.45em;
}

.left2 {
  width: 15.24em;
}

.right {
  width: 20.68em;
}

.leftbig {
  width: 42.44em;
  padding-right: 6.53em;
}

.rightsmall {
  width: 15.24em;
}

.clear:after {
  visibility: hidden;
  display: block;
  font-size: 0;
  content: " ";
  clear: both;
  height: 0;
}
.clear { display: inline-block; }
/* start commented backslash hack \*/
* html .clear { height: 1%; }
.clear { display: block; }
/* close commented backslash hack */


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/internals.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Internals</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style>dl dl {margin: 0;} .update {color: #d40 !important}</style>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* (Re-) Implementing A Syntax-
   Highlighting Editor in JavaScript */
</pre>

<div class="clear"><div class="leftbig blk">

<p style="font-size: 85%" id="intro">
  <strong>Topic:</strong> JavaScript, code editor implementation<br>
  <strong>Author:</strong> Marijn Haverbeke<br>
  <strong>Date:</strong> March 2nd 2011 (updated November 13th 2011)
</p>

<p>This is a followup to
my <a href="http://codemirror.net/story.html">Brutal Odyssey to the
Dark Side of the DOM Tree</a> story. That one describes the
mind-bending process of implementing (what would become) CodeMirror 1.
This one describes the internals of CodeMirror 2, a complete rewrite
and rethink of the old code base. I wanted to give this piece another
Hunter Thompson copycat subtitle, but somehow that would be out of
place—the process this time around was one of straightforward
engineering, requiring no serious mind-bending whatsoever.</p>

<p>So, what is wrong with CodeMirror 1? I'd estimate, by mailing list
activity and general search-engine presence, that it has been
integrated into about a thousand systems by now. The most prominent
one, since a few weeks,
being <a href="http://googlecode.blogspot.com/2011/01/make-quick-fixes-quicker-on-google.html">Google
code's project hosting</a>. It works, and it's being used widely.</a>

<p>Still, I did not start replacing it because I was bored. CodeMirror
1 was heavily reliant on <code>designMode</code>
or <code>contentEditable</code> (depending on the browser). Neither of
these are well specified (HTML5 tries
to <a href="http://www.w3.org/TR/html5/editing.html#contenteditable">specify</a>
their basics), and, more importantly, they tend to be one of the more
obscure and buggy areas of browser functionality—CodeMirror, by using
this functionality in a non-typical way, was constantly running up
against browser bugs. WebKit wouldn't show an empty line at the end of
the document, and in some releases would suddenly get unbearably slow.
Firefox would show the cursor in the wrong place. Internet Explorer
would insist on linkifying everything that looked like a URL or email
address, a behaviour that can't be turned off. Some bugs I managed to
work around (which was often a frustrating, painful process), others,
such as the Firefox cursor placement, I gave up on, and had to tell
user after user that they were known problems, but not something I
could help.</p>

<p>Also, there is the fact that <code>designMode</code> (which seemed
to be less buggy than <code>contentEditable</code> in Webkit and
Firefox, and was thus used by CodeMirror 1 in those browsers) requires
a frame. Frames are another tricky area. It takes some effort to
prevent getting tripped up by domain restrictions, they don't
initialize synchronously, behave strangely in response to the back
button, and, on several browsers, can't be moved around the DOM
without having them re-initialize. They did provide a very nice way to
namespace the library, though—CodeMirror 1 could freely pollute the
namespace inside the frame.</p>

<p>Finally, working with an editable document means working with
selection in arbitrary DOM structures. Internet Explorer (8 and
before) has an utterly different (and awkward) selection API than all
of the other browsers, and even among the different implementations of
<code>document.selection</code>, details about how exactly a selection
is represented vary quite a bit. Add to that the fact that Opera's
selection support tended to be very buggy until recently, and you can
imagine why CodeMirror 1 contains 700 lines of selection-handling
code.</p>

<p>And that brings us to the main issue with the CodeMirror 1
code base: The proportion of browser-bug-workarounds to real
application code was getting dangerously high. By building on top of a
few dodgy features, I put the system in a vulnerable position—any
incompatibility and bugginess in these features, I had to paper over
with my own code. Not only did I have to do some serious stunt-work to
get it to work on older browsers (as detailed in the
previous <a href="http://codemirror.net/story.html">story</a>), things
also kept breaking in newly released versions, requiring me to come up
with <em>new</em> scary hacks in order to keep up. This was starting
to lose its appeal.</p>

<h2 id="approach">General Approach</h2>

<p>What CodeMirror 2 does is try to sidestep most of the hairy hacks
that came up in version 1. I owe a lot to the
<a href="http://ace.ajax.org">ACE</a> editor for inspiration on how to
approach this.</p>

<p>I absolutely did not want to be completely reliant on key events to
generate my input. Every JavaScript programmer knows that key event
information is horrible and incomplete. Some people (most awesomely
Mihai Bazon with <a href="http://ymacs.org">Ymacs</a>) have been able
to build more or less functioning editors by directly reading key
events, but it takes a lot of work (the kind of never-ending, fragile
work I described earlier), and will never be able to properly support
things like multi-keystoke international character
input. <a href="#keymap" class="update">[see below for caveat]</a></p>

<p>So what I do is focus a hidden textarea, and let the browser
believe that the user is typing into that. What we show to the user is
a DOM structure we built to represent his document. If this is updated
quickly enough, and shows some kind of believable cursor, it feels
like a real text-input control.</p>

<p>Another big win is that this DOM representation does not have to
span the whole document. Some CodeMirror 1 users insisted that they
needed to put a 30 thousand line XML document into CodeMirror. Putting
all that into the DOM takes a while, especially since, for some
reason, an editable DOM tree is slower than a normal one on most
browsers. If we have full control over what we show, we must only
ensure that the visible part of the document has been added, and can
do the rest only when needed. (Fortunately, the <code>onscroll</code>
event works almost the same on all browsers, and lends itself well to
displaying things only as they are scrolled into view.)</p>

<h2 id="input">Input</h2>

<p>ACE uses its hidden textarea only as a text input shim, and does
all cursor movement and things like text deletion itself by directly
handling key events. CodeMirror's way is to let the browser do its
thing as much as possible, and not, for example, define its own set of
key bindings. One way to do this would have been to have the whole
document inside the hidden textarea, and after each key event update
the display DOM to reflect what's in that textarea.</p>

<p>That'd be simple, but it is not realistic. For even medium-sized
document the editor would be constantly munging huge strings, and get
terribly slow. What CodeMirror 2 does is put the current selection,
along with an extra line on the top and on the bottom, into the
textarea.</p>

<p>This means that the arrow keys (and their ctrl-variations), home,
end, etcetera, do not have to be handled specially. We just read the
cursor position in the textarea, and update our cursor to match it.
Also, copy and paste work pretty much for free, and people get their
native key bindings, without any special work on my part. For example,
I have emacs key bindings configured for Chrome and Firefox. There is
no way for a script to detect this. <a class="update"
href="#keymap">[no longer the case]</a></p>

<p>Of course, since only a small part of the document sits in the
textarea, keys like page up and ctrl-end won't do the right thing.
CodeMirror is catching those events and handling them itself.</p>

<h2 id="selection">Selection</h2>

<p>Getting and setting the selection range of a textarea in modern
browsers is trivial—you just use the <code>selectionStart</code>
and <code>selectionEnd</code> properties. On IE you have to do some
insane stuff with temporary ranges and compensating for the fact that
moving the selection by a 'character' will treat \r\n as a single
character, but even there it is possible to build functions that
reliably set and get the selection range.</p>

<p>But consider this typical case: When I'm somewhere in my document,
press shift, and press the up arrow, something gets selected. Then, if
I, still holding shift, press the up arrow again, the top of my
selection is adjusted. The selection remembers where its <em>head</em>
and its <em>anchor</em> are, and moves the head when we shift-move.
This is a generally accepted property of selections, and done right by
every editing component built in the past twenty years.</p>

<p>But not something that the browser selection APIs expose.</p>

<p>Great. So when someone creates an 'upside-down' selection, the next
time CodeMirror has to update the textarea, it'll re-create the
selection as an 'upside-up' selection, with the anchor at the top, and
the next cursor motion will behave in an unexpected way—our second
up-arrow press in the example above will not do anything, since it is
interpreted in exactly the same way as the first.</p>

<p>No problem. We'll just, ehm, detect that the selection is
upside-down (you can tell by the way it was created), and then, when
an upside-down selection is present, and a cursor-moving key is
pressed in combination with shift, we quickly collapse the selection
in the textarea to its start, allow the key to take effect, and then
combine its new head with its old anchor to get the <em>real</em>
selection.</p>

<p>In short, scary hacks could not be avoided entirely in CodeMirror
2.</p>

<p>And, the observant reader might ask, how do you even know that a
key combo is a cursor-moving combo, if you claim you support any
native key bindings? Well, we don't, but we can learn. The editor
keeps a set known cursor-movement combos (initialized to the
predictable defaults), and updates this set when it observes that
pressing a certain key had (only) the effect of moving the cursor.
This, of course, doesn't work if the first time the key is used was
for extending an inverted selection, but it works most of the
time.</p>

<h2 id="update">Intelligent Updating</h2>

<p>One thing that always comes up when you have a complicated internal
state that's reflected in some user-visible external representation
(in this case, the displayed code and the textarea's content) is
keeping the two in sync. The naive way is to just update the display
every time you change your state, but this is not only error prone
(you'll forget), it also easily leads to duplicate work on big,
composite operations. Then you start passing around flags indicating
whether the display should be updated in an attempt to be efficient
again and, well, at that point you might as well give up completely.</p>

<p>I did go down that road, but then switched to a much simpler model:
simply keep track of all the things that have been changed during an
action, and then, only at the end, use this information to update the
user-visible display.</p>

<p>CodeMirror uses a concept of <em>operations</em>, which start by
calling a specific set-up function that clears the state and end by
calling another function that reads this state and does the required
updating. Most event handlers, and all the user-visible methods that
change state are wrapped like this. There's a method
called <code>operation</code> that accepts a function, and returns
another function that wraps the given function as an operation.</p>

<p>It's trivial to extend this (as CodeMirror does) to detect nesting,
and, when an operation is started inside an operation, simply
increment the nesting count, and only do the updating when this count
reaches zero again.</p>

<p>If we have a set of changed ranges and know the currently shown
range, we can (with some awkward code to deal with the fact that
changes can add and remove lines, so we're dealing with a changing
coordinate system) construct a map of the ranges that were left
intact. We can then compare this map with the part of the document
that's currently visible (based on scroll offset and editor height) to
determine whether something needs to be updated.</p>

<p>CodeMirror uses two update algorithms—a full refresh, where it just
discards the whole part of the DOM that contains the edited text and
rebuilds it, and a patch algorithm, where it uses the information
about changed and intact ranges to update only the out-of-date parts
of the DOM. When more than 30 percent (which is the current heuristic,
might change) of the lines need to be updated, the full refresh is
chosen (since it's faster to do than painstakingly finding and
updating all the changed lines), in the other case it does the
patching (so that, if you scroll a line or select another character,
the whole screen doesn't have to be
re-rendered). <span class="update">[the full-refresh
algorithm was dropped, it wasn't really faster than the patching
one]</span></p>

<p>All updating uses <code>innerHTML</code> rather than direct DOM
manipulation, since that still seems to be by far the fastest way to
build documents. There's a per-line function that combines the
highlighting, <a href="manual.html#markText">marking</a>, and
selection info for that line into a snippet of HTML. The patch updater
uses this to reset individual lines, the refresh updater builds an
HTML chunk for the whole visible document at once, and then uses a
single <code>innerHTML</code> update to do the refresh.</p>

<h2 id="parse">Parsers can be Simple</h2>

<p>When I wrote CodeMirror 1, I
thought <a href="http://codemirror.net/story.html#parser">interruptable
parsers</a> were a hugely scary and complicated thing, and I used a
bunch of heavyweight abstractions to keep this supposed complexity
under control: parsers
were <a href="http://bob.pythonmac.org/archives/2005/07/06/iteration-in-javascript/">iterators</a>
that consumed input from another iterator, and used funny
closure-resetting tricks to copy and resume themselves.</p>

<p>This made for a rather nice system, in that parsers formed strictly
separate modules, and could be composed in predictable ways.
Unfortunately, it was quite slow (stacking three or four iterators on
top of each other), and extremely intimidating to people not used to a
functional programming style.</p>

<p>With a few small changes, however, we can keep all those
advantages, but simplify the API and make the whole thing less
indirect and inefficient. CodeMirror
2's <a href="manual.html#modeapi">mode API</a> uses explicit state
objects, and makes the parser/tokenizer a function that simply takes a
state and a character stream abstraction, advances the stream one
token, and returns the way the token should be styled. This state may
be copied, optionally in a mode-defined way, in order to be able to
continue a parse at a given point. Even someone who's never touched a
lambda in his life can understand this approach. Additionally, far
fewer objects are allocated in the course of parsing now.</p>

<p>The biggest speedup comes from the fact that the parsing no longer
has to touch the DOM though. In CodeMirror 1, on an older browser, you
could <em>see</em> the parser work its way through the document,
managing some twenty lines in each 50-millisecond time slice it got. It
was reading its input from the DOM, and updating the DOM as it went
along, which any experienced JavaScript programmer will immediately
spot as a recipe for slowness. In CodeMirror 2, the parser usually
finishes the whole document in a single 100-millisecond time slice—it
manages some 1500 lines during that time on Chrome. All it has to do
is munge strings, so there is no real reason for it to be slow
anymore.</p>

<h2 id="summary">What Gives?</h2>

<p>Given all this, what can you expect from CodeMirror 2?</p>

<ul>

<li><strong>Small.</strong> the base library is
some <span class="update">45k</span> when minified
now, <span class="update">17k</span> when gzipped. It's smaller than
its own logo.</li>

<li><strong>Lightweight.</strong> CodeMirror 2 initializes very
quickly, and does almost no work when it is not focused. This means
you can treat it almost like a textarea, have multiple instances on a
page without trouble.</li>

<li><strong>Huge document support.</strong> Since highlighting is
really fast, and no DOM structure is being built for non-visible
content, you don't have to worry about locking up your browser when a
user enters a megabyte-sized document.</li>

<li><strong>Extended API.</strong> Some things kept coming up in the
mailing list, such as marking pieces of text or lines, which were
extremely hard to do with CodeMirror 1. The new version has proper
support for these built in.</li>

<li><strong>Tab support.</strong> Tabs inside editable documents were,
for some reason, a no-go. At least six different people announced they
were going to add tab support to CodeMirror 1, none survived (I mean,
none delivered a working version). CodeMirror 2 no longer removes tabs
from your document.</li>

<li><strong>Sane styling.</strong> <code>iframe</code> nodes aren't
really known for respecting document flow. Now that an editor instance
is a plain <code>div</code> element, it is much easier to size it to
fit the surrounding elements. You don't even have to make it scroll if
you do not <a href="../demo/resize.html">want to</a>.</li>

</ul>

<p>On the downside, a CodeMirror 2 instance is <em>not</em> a native
editable component. Though it does its best to emulate such a
component as much as possible, there is functionality that browsers
just do not allow us to hook into. Doing select-all from the context
menu, for example, is not currently detected by CodeMirror.</p>

<p id="changes" style="margin-top: 2em;"><span style="font-weight:
bold">[Updates from November 13th 2011]</span> Recently, I've made
some changes to the codebase that cause some of the text above to no
longer be current. I've left the text intact, but added markers at the
passages that are now inaccurate. The new situation is described
below.</p>

<h2 id="btree">Content Representation</h2>

<p>The original implementation of CodeMirror 2 represented the
document as a flat array of line objects. This worked well—splicing
arrays will require the part of the array after the splice to be
moved, but this is basically just a simple <code>memmove</code> of a
bunch of pointers, so it is cheap even for huge documents.</p>

<p>However, I recently added line wrapping and code folding (line
collapsing, basically). Once lines start taking up a non-constant
amount of vertical space, looking up a line by vertical position
(which is needed when someone clicks the document, and to determine
the visible part of the document during scrolling) can only be done
with a linear scan through the whole array, summing up line heights as
you go. Seeing how I've been going out of my way to make big documents
fast, this is not acceptable.</p>

<p>The new representation is based on a B-tree. The leaves of the tree
contain arrays of line objects, with a fixed minimum and maximum size,
and the non-leaf nodes simply hold arrays of child nodes. Each node
stores both the amount of lines that live below them and the vertical
space taken up by these lines. This allows the tree to be indexed both
by line number and by vertical position, and all access has
logarithmic complexity in relation to the document size.</p>

<p>I gave line objects and tree nodes parent pointers, to the node
above them. When a line has to update its height, it can simply walk
these pointers to the top of the tree, adding or subtracting the
difference in height from each node it encounters. The parent pointers
also make it cheaper (in complexity terms, the difference is probably
tiny in normal-sized documents) to find the current line number when
given a line object. In the old approach, the whole document array had
to be searched. Now, we can just walk up the tree and count the sizes
of the nodes coming before us at each level.</p>

<p>I chose B-trees, not regular binary trees, mostly because they
allow for very fast bulk insertions and deletions. When there is a big
change to a document, it typically involves adding, deleting, or
replacing a chunk of subsequent lines. In a regular balanced tree, all
these inserts or deletes would have to be done separately, which could
be really expensive. In a B-tree, to insert a chunk, you just walk
down the tree once to find where it should go, insert them all in one
shot, and then break up the node if needed. This breaking up might
involve breaking up nodes further up, but only requires a single pass
back up the tree. For deletion, I'm somewhat lax in keeping things
balanced—I just collapse nodes into a leaf when their child count goes
below a given number. This means that there are some weird editing
patterns that may result in a seriously unbalanced tree, but even such
an unbalanced tree will perform well, unless you spend a day making
strangely repeating edits to a really big document.</p>

<h2 id="keymap">Keymaps</h2>

<p><a href="#approach">Above</a>, I claimed that directly catching key
events for things like cursor movement is impractical because it
requires some browser-specific kludges. I then proceeded to explain
some awful <a href="#selection">hacks</a> that were needed to make it
possible for the selection changes to be detected through the
textarea. In fact, the second hack is about as bad as the first.</p>

<p>On top of that, in the presence of user-configurable tab sizes and
collapsed and wrapped lines, lining up cursor movement in the textarea
with what's visible on the screen becomes a nightmare. Thus, I've
decided to move to a model where the textarea's selection is no longer
depended on.</p>

<p>So I moved to a model where all cursor movement is handled by my
own code. This adds support for a goal column, proper interaction of
cursor movement with collapsed lines, and makes it possible for
vertical movement to move through wrapped lines properly, instead of
just treating them like non-wrapped lines.</p>

<p>The key event handlers now translate the key event into a string,
something like <code>Ctrl-Home</code> or <code>Shift-Cmd-R</code>, and
use that string to look up an action to perform. To make keybinding
customizable, this lookup goes through
a <a href="manual.html#option_keyMap">table</a>, using a scheme that
allows such tables to be chained together (for example, the default
Mac bindings fall through to a table named 'emacsy', which defines
basic Emacs-style bindings like <code>Ctrl-F</code>, and which is also
used by the custom Emacs bindings).</p>

<p>A new
option <a href="manual.html#option_extraKeys"><code>extraKeys</code></a>
allows ad-hoc keybindings to be defined in a much nicer way than what
was possible with the
old <a href="manual.html#option_onKeyEvent"><code>onKeyEvent</code></a>
callback. You simply provide an object mapping key identifiers to
functions, instead of painstakingly looking at raw key events.</p>

<p>Built-in commands map to strings, rather than functions, for
example <code>"goLineUp"</code> is the default action bound to the up
arrow key. This allows new keymaps to refer to them without
duplicating any code. New commands can be defined by assigning to
the <code>CodeMirror.commands</code> object, which maps such commands
to functions.</p>

<p>The hidden textarea now only holds the current selection, with no
extra characters around it. This has a nice advantage: polling for
input becomes much, much faster. If there's a big selection, this text
does not have to be read from the textarea every time—when we poll,
just noticing that something is still selected is enough to tell us
that no new text was typed.</p>

<p>The reason that cheap polling is important is that many browsers do
not fire useful events on IME (input method engine) input, which is
the thing where people inputting a language like Japanese or Chinese
use multiple keystrokes to create a character or sequence of
characters. Most modern browsers fire <code>input</code> when the
composing is finished, but many don't fire anything when the character
is updated <em>during</em> composition. So we poll, whenever the
editor is focused, to provide immediate updates of the display.</p>

</div><div class="rightsmall blk">

    <h2>Contents</h2>

    <ul>
      <li><a href="#intro">Introduction</a></li>
      <li><a href="#approach">General Approach</a></li>
      <li><a href="#input">Input</a></li>
      <li><a href="#selection">Selection</a></li>
      <li><a href="#update">Intelligent Updating</a></li>
      <li><a href="#parse">Parsing</a></li>
      <li><a href="#summary">What Gives?</a></li>
      <li><a href="#btree">Content Representation</a></li>
      <li><a href="#keymap">Key Maps</a></li>
    </ul>

</div></div>

<div style="height: 2em">&nbsp;</div>

</body></html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/manual.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: User Manual</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style>dl dl {margin: 0;}</style>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* User manual and
   reference guide */
</pre>

<div class="clear"><div class="leftbig blk">

    <h2 id="overview">Overview</h2>

    <p>CodeMirror is a code-editor component that can be embedded in
    Web pages. The code library provides <em>only</em> the editor
    component, no accompanying buttons, auto-completion, or other IDE
    functionality. It does provide a rich API on top of which such
    functionality can be straightforwardly implemented. See
    the <a href="#addons">add-ons</a> included in the distribution,
    and
    the <a href="https://github.com/jagthedrummer/codemirror-ui">CodeMirror
    UI</a> project, for reusable implementations of extra features.</p>

    <p>CodeMirror works with language-specific modes. Modes are
    JavaScript programs that help color (and optionally indent) text
    written in a given language. The distribution comes with a number
    of modes (see the <code>mode/</code> directory), and it isn't hard
    to <a href="#modeapi">write new ones</a> for other languages.</p>

    <h2 id="usage">Basic Usage</h2>

    <p>The easiest way to use CodeMirror is to simply load the script
    and style sheet found under <code>lib/</code> in the distribution,
    plus a mode script from one of the <code>mode/</code> directories
    and a theme stylesheet from <code>theme/</code>. (See
    also <a href="compress.html">the compression helper</a>.) For
    example:</p>

    <pre>&lt;script src="lib/codemirror.js">&lt;/script>
&lt;link rel="stylesheet" href="../lib/codemirror.css">
&lt;script src="mode/javascript/javascript.js">&lt;/script></pre>

    <p>Having done this, an editor instance can be created like
    this:</p>

    <pre>var myCodeMirror = CodeMirror(document.body);</pre>

    <p>The editor will be appended to the document body, will start
    empty, and will use the mode that we loaded. To have more control
    over the new editor, a configuration object can be passed
    to <code>CodeMirror</code> as a second argument:</p>

    <pre>var myCodeMirror = CodeMirror(document.body, {
  value: "function myScript(){return 100;}\n",
  mode:  "javascript"
});</pre>

    <p>This will initialize the editor with a piece of code already in
    it, and explicitly tell it to use the JavaScript mode (which is
    useful when multiple modes are loaded).
    See <a href="#config">below</a> for a full discussion of the
    configuration options that CodeMirror accepts.</p>

    <p>In cases where you don't want to append the editor to an
    element, and need more control over the way it is inserted, the
    first argument to the <code>CodeMirror</code> function can also
    be a function that, when given a DOM element, inserts it into the
    document somewhere. This could be used to, for example, replace a
    textarea with a real editor:</p>

    <pre>var myCodeMirror = CodeMirror(function(elt) {
  myTextArea.parentNode.replaceChild(elt, myTextArea);
}, {value: myTextArea.value});</pre>

    <p>However, for this use case, which is a common way to use
    CodeMirror, the library provides a much more powerful
    shortcut:</p>

    <pre>var myCodeMirror = CodeMirror.fromTextArea(myTextArea);</pre>

    <p>This will, among other things, ensure that the textarea's value
    is updated when the form (if it is part of a form) is submitted.
    See the <a href="#fromTextArea">API reference</a> for a full
    description of this method.</p>

    <h2 id="config">Configuration</h2>

    <p>Both the <code>CodeMirror</code> function and
    its <code>fromTextArea</code> method take as second (optional)
    argument an object containing configuration options. Any option
    not supplied like this will be taken
    from <code>CodeMirror.defaults</code>, an object containing the
    default options. You can update this object to change the defaults
    on your page.</p>

    <p>Options are not checked in any way, so setting bogus option
    values is bound to lead to odd errors.</p>

    <p>These are the supported options:</p>

    <dl>
      <dt id="option_value"><code>value (string)</code></dt>
      <dd>The starting value of the editor.</dd>

      <dt id="option_mode"><code>mode (string or object)</code></dt>
      <dd>The mode to use. When not given, this will default to the
      first mode that was loaded. It may be a string, which either
      simply names the mode or is
      a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type
      associated with the mode. Alternatively, it may be an object
      containing configuration options for the mode, with
      a <code>name</code> property that names the mode (for
      example <code>{name: "javascript", json: true}</code>). The demo
      pages for each mode contain information about what configuration
      parameters the mode supports. You can ask CodeMirror which modes
      and MIME types are loaded with
      the <code>CodeMirror.listModes</code>
      and <code>CodeMirror.listMIMEs</code> functions.</dd>

      <dt id="option_theme"><code>theme (string)</code></dt>
      <dd>The theme to style the editor with. You must make sure the
      CSS file defining the corresponding <code>.cm-s-[name]</code>
      styles is loaded (see
      the <a href="../theme/"><code>theme</code></a> directory in the
      distribution). The default is <code>"default"</code>, for which
      colors are included in <code>codemirror.css</code>. It is
      possible to use multiple theming classes at once—for
      example <code>"foo bar"</code> will assign both
      the <code>cm-s-foo</code> and the <code>cm-s-bar</code> classes
      to the editor.</dd>

      <dt id="option_indentUnit"><code>indentUnit (integer)</code></dt>
      <dd>How many spaces a block (whatever that means in the edited
      language) should be indented. The default is 2.</dd>

      <dt id="option_smartIndent"><code>smartIndent (boolean)</code></dt>
      <dd>Whether to use the context-sensitive indentation that the
      mode provides (or just indent the same as the line before).
      Defaults to true.</dd>

      <dt id="option_tabSize"><code>tabSize (integer)</code></dt>
      <dd>The width of a tab character. Defaults to 4.</dd>

      <dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt>
      <dd>Whether, when indenting, the first N*<code>tabSize</code>
      spaces should be replaced by N tabs. Default is false.</dd>

      <dt id="option_electricChars"><code>electricChars (boolean)</code></dt>
      <dd>Configures whether the editor should re-indent the current
      line when a character is typed that might change its proper
      indentation (only works if the mode supports indentation).
      Default is true.</dd>

      <dt id="option_autoClearEmptyLines"><code>autoClearEmptyLines (boolean)</code></dt>
      <dd>When turned on (default is off), this will clear
      automatically clear lines consisting only of whitespace when the
      cursor leaves them. This is mostly useful to prevent auto
      indentation from introducing trailing whitespace in a file.</dd>

      <dt id="option_keyMap"><code>keyMap (string)</code></dt>
      <dd>Configures the keymap to use. The default
      is <code>"default"</code>, which is the only keymap defined
      in <code>codemirror.js</code> itself. Extra keymaps are found in
      the <a href="../keymap/"><code>keymap</code></a> directory. See
      the <a href="#keymaps">section on keymaps</a> for more
      information.</dd>

      <dt id="option_extraKeys"><code>extraKeys (object)</code></dt>
      <dd>Can be used to specify extra keybindings for the editor,
      alongside the ones defined
      by <a href="#option_keyMap"><code>keyMap</code></a>. Should be
      either null, or a valid <a href="#keymaps">keymap</a> value.</dd>

      <dt id="option_lineWrapping"><code>lineWrapping (boolean)</code></dt>
      <dd>Whether CodeMirror should scroll or wrap for long lines.
      Defaults to <code>false</code> (scroll).</dd>

      <dt id="option_lineNumbers"><code>lineNumbers (boolean)</code></dt>
      <dd>Whether to show line numbers to the left of the editor.</dd>

      <dt id="option_firstLineNumber"><code>firstLineNumber (integer)</code></dt>
      <dd>At which number to start counting lines. Default is 1.</dd>

      <dt id="option_gutter"><code>gutter (boolean)</code></dt>
      <dd>Can be used to force a 'gutter' (empty space on the left of
      the editor) to be shown even when no line numbers are active.
      This is useful for setting <a href="#setMarker">markers</a>.</dd>

      <dt id="option_fixedGutter"><code>fixedGutter (boolean)</code></dt>
      <dd>When enabled (off by default), this will make the gutter
      stay visible when the document is scrolled horizontally.</dd>

      <dt id="option_readOnly"><code>readOnly (boolean)</code></dt>
      <dd>This disables editing of the editor content by the user. If
      the special value <code>"nocursor"</code> is given (instead of
      simply <code>true</code>), focusing of the editor is also
      disallowed.</dd>

      <dt id="option_onChange"><code>onChange (function)</code></dt>
      <dd>When given, this function will be called every time the
      content of the editor is changed. It will be given the editor
      instance as first argument, and an <code>{from, to, text, next}</code>
      object containing information about the changes
      that occurred as second argument. <code>from</code>
      and <code>to</code> are the positions (in the pre-change
      coordinate system) where the change started and
      ended (for example, it might be <code>{ch:0, line:18}</code> if the
      position is at the beginning of line #19). <code>text</code>
      is an array of strings representing the text that replaced the changed
      range (split by line). If multiple changes happened during a single
      operation, the object will have a <code>next</code> property pointing to
      another change object (which may point to another, etc).</dd>

      <dt id="option_onCursorActivity"><code>onCursorActivity (function)</code></dt>
      <dd>Will be called when the cursor or selection moves, or any
      change is made to the editor content.</dd>

      <dt id="option_onGutterClick"><code>onGutterClick (function)</code></dt>
      <dd>When given, will be called whenever the editor gutter (the
      line-number area) is clicked. Will be given the editor instance
      as first argument, the (zero-based) number of the line that was
      clicked as second argument, and the raw <code>mousedown</code>
      event object as third argument.</dd>

      <dt id="option_onFocus"><code>onFocus, onBlur (function)</code></dt>
      <dd>The given functions will be called whenever the editor is
      focused or unfocused.</dd>

      <dt id="option_onScroll"><code>onScroll (function)</code></dt>
      <dd>When given, will be called whenever the editor is
      scrolled.</dd>

      <dt id="option_onHighlightComplete"><code>onHighlightComplete (function)</code></dt>
      <dd>Whenever the editor's content has been fully highlighted,
      this function (if given) will be called. It'll be given a single
      argument, the editor instance.</dd>

      <dt id="option_onUpdate"><code>onUpdate (function)</code></dt>
      <dd>Will be called whenever CodeMirror updates its DOM display.</dd>

      <dt id="option_matchBrackets"><code>matchBrackets (boolean)</code></dt>
      <dd>Determines whether brackets are matched whenever the cursor
      is moved next to a bracket.</dd>

      <dt id="option_workTime"><code>workTime, workDelay (number)</code></dt>
      <dd>Highlighting is done by a pseudo background-thread that will
      work for <code>workTime</code> milliseconds, and then use
      timeout to sleep for <code>workDelay</code> milliseconds. The
      defaults are 200 and 300, you can change these options to make
      the highlighting more or less aggressive.</dd>

      <dt id="option_pollInterval"><code>pollInterval (number)</code></dt>
      <dd>Indicates how quickly CodeMirror should poll its input
      textarea for changes. Most input is captured by events, but some
      things, like IME input on some browsers, doesn't generate events
      that allow CodeMirror to properly detect it. Thus, it polls.
      Default is 100 milliseconds.</dd>

      <dt id="option_undoDepth"><code>undoDepth (integer)</code></dt>
      <dd>The maximum number of undo levels that the editor stores.
      Defaults to 40.</dd>

      <dt id="option_tabindex"><code>tabindex (integer)</code></dt>
      <dd>The <a href="http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex">tab
      index</a> to assign to the editor. If not given, no tab index
      will be assigned.</dd>

      <dt id="option_autofocus"><code>autofocus (boolean)</code></dt>
      <dd>Can be used to make CodeMirror focus itself on
      initialization. Defaults to off.
      When <a href="#fromTextArea"><code>fromTextArea</code></a> is
      used, and no explicit value is given for this option, it will
      inherit the setting from the textarea's <code>autofocus</code>
      attribute.</dd>

      <dt id="option_dragDrop"><code>dragDrop (boolean)</code></dt>
      <dd>Controls whether drag-and-drop is enabled. On by default.</dd>

      <dt id="option_onDragEvent"><code>onDragEvent (function)</code></dt>
      <dd>When given, this will be called when the editor is handling
      a <code>dragenter</code>, <code>dragover</code>,
      or <code>drop</code> event. It will be passed the editor instance
      and the event object as arguments. The callback can choose to
      handle the event itself, in which case it should
      return <code>true</code> to indicate that CodeMirror should not
      do anything further.</dd>

      <dt id="option_onKeyEvent"><code>onKeyEvent (function)</code></dt>
      <dd>This provides a rather low-level hook into CodeMirror's key
      handling. If provided, this function will be called on
      every <code>keydown</code>, <code>keyup</code>,
      and <code>keypress</code> event that CodeMirror captures. It
      will be passed two arguments, the editor instance and the key
      event. This key event is pretty much the raw key event, except
      that a <code>stop()</code> method is always added to it. You
      could feed it to, for example, <code>jQuery.Event</code> to
      further normalize it.<br>This function can inspect the key
      event, and handle it if it wants to. It may return true to tell
      CodeMirror to ignore the event. Be wary that, on some browsers,
      stopping a <code>keydown</code> does not stop
      the <code>keypress</code> from firing, whereas on others it
      does. If you respond to an event, you should probably inspect
      its <code>type</code> property and only do something when it
      is <code>keydown</code> (or <code>keypress</code> for actions
      that need character data).</dd>
    </dl>

    <h2 id="keymaps">Keymaps</h2>

    <p>Keymaps are ways to associate keys with functionality. A keymap
    is an object mapping strings that identify the keys to functions
    that implement their functionality.</p>

    <p>Keys are identified either by name or by character.
    The <code>CodeMirror.keyNames</code> object defines names for
    common keys and associates them with their key codes. Examples of
    names defined here are <code>Enter</code>, <code>F5</code>,
    and <code>Q</code>. These can be prefixed
    with <code>Shift-</code>, <code>Cmd-</code>, <code>Ctrl-</code>,
    and <code>Alt-</code> (in that order!) to specify a modifier. So
    for example, <code>Shift-Ctrl-Space</code> would be a valid key
    identifier.</p>

    <p>Alternatively, a character can be specified directly by
    surrounding it in single quotes, for example <code>'$'</code>
    or <code>'q'</code>. Due to limitations in the way browsers fire
    key events, these may not be prefixed with modifiers.</p>

    <p>The <code>CodeMirror.keyMap</code> object associates keymaps
    with names. User code and keymap definitions can assign extra
    properties to this object. Anywhere where a keymap is expected, a
    string can be given, which will be looked up in this object. It
    also contains the <code>"default"</code> keymap holding the
    default bindings.</p>

    <p>The values of properties in keymaps can be either functions of
    a single argument (the CodeMirror instance), or strings. Such
    strings refer to properties of the
    <code>CodeMirror.commands</code> object, which defines a number of
    common commands that are used by the default keybindings, and maps
    them to functions. A key handler function may throw
    <code>CodeMirror.Pass</code> to indicate that it has decided not
    to handle the key, and other handlers (or the default behavior)
    should be given a turn.</p>

    <p>Keys mapped to command names that start with the
    characters <code>"go"</code> (which should be used for
    cursor-movement actions) will be fired even when an
    extra <code>Shift</code> modifier is present (i.e. <code>"Up":
    "goLineUp"</code> matches both up and shift-up). This is used to
    easily implement shift-selection.</p>

    <p>Keymaps can defer to each other by defining
    a <code>fallthrough</code> property. This indicates that when a
    key is not found in the map itself, one or more other maps should
    be searched. It can hold either a single keymap or an array of
    keymaps.</p>

    <p>When a keymap contains a <code>nofallthrough</code> property
    set to <code>true</code>, keys matched against that map will be
    ignored if they don't match any of the bindings in the map (no
    further child maps will be tried, and the default effect of
    inserting a character will not occur).</p>

    <h2 id="styling">Customized Styling</h2>

    <p>Up to a certain extent, CodeMirror's look can be changed by
    modifying style sheet files. The style sheets supplied by modes
    simply provide the colors for that mode, and can be adapted in a
    very straightforward way. To style the editor itself, it is
    possible to alter or override the styles defined
    in <a href="../lib/codemirror.css"><code>codemirror.css</code></a>.</p>

    <p>Some care must be taken there, since a lot of the rules in this
    file are necessary to have CodeMirror function properly. Adjusting
    colors should be safe, of course, and with some care a lot of
    other things can be changed as well. The CSS classes defined in
    this file serve the following roles:</p>

    <dl>
      <dt id="class_CodeMirror"><code>CodeMirror</code></dt>
      <dd>The outer element of the editor. This should be used for
      borders and positioning. Can also be used to set styles that
      should hold for everything inside the editor (such as font
      and font size), or to set a background.</dd>

      <dt id="class_CodeMirror_scroll"><code>CodeMirror-scroll</code></dt>
      <dd>This determines whether the editor scrolls (<code>overflow:
      auto</code> + fixed height). By default, it does. Giving
      this <code>height: auto; overflow: visible;</code> will cause
      the editor to resize to fit its content.</dd>

      <dt id="class_CodeMirror_focused"><code>CodeMirror-focused</code></dt>
      <dd>Whenever the editor is focused, the top element gets this
      class. This is used to hide the cursor and give the selection a
      different color when the editor is not focused.</dd>

      <dt id="class_CodeMirror_gutter"><code>CodeMirror-gutter</code></dt>
      <dd>Use this for giving a background or a border to the editor
      gutter. Don't set any padding here,
      use <code>CodeMirror-gutter-text</code> for that. By default,
      the gutter is 'fluid', meaning it will adjust its width to the
      maximum line number or line marker width. You can also set a
      fixed width if you want.</dd>

      <dt id="class_CodeMirror_gutter_text"><code>CodeMirror-gutter-text</code></dt>
      <dd>Used to style the actual line numbers. For the numbers to
      line up, you must make sure that the font in the gutter is the
      same as the one in the rest of the editor, so you should
      probably only set font style and size in
      the <code>CodeMirror</code> class.</dd>

      <dt id="class_CodeMirror_lines"><code>CodeMirror-lines</code></dt>
      <dd>The visible lines. If this has vertical
      padding, <code>CodeMirror-gutter</code> should have the same
      padding.</dd>

      <dt id="class_CodeMirror_cursor"><code>CodeMirror-cursor</code></dt>
      <dd>The cursor is a block element that is absolutely positioned.
      You can make it look whichever way you want.</dd>

      <dt id="class_CodeMirror_selected"><code>CodeMirror-selected</code></dt>
      <dd>The selection is represented by <code>span</code> elements
      with this class.</dd>

      <dt id="class_CodeMirror_matchingbracket"><code>CodeMirror-matchingbracket</code>,
        <code>CodeMirror-nonmatchingbracket</code></dt>
      <dd>These are used to style matched (or unmatched) brackets.</dd>
    </dl>

    <p>The actual lines, as well as the cursor, are represented
    by <code>pre</code> elements. By default no text styling (such as
    bold) that might change line height is applied. If you do want
    such effects, you'll have to give <code>CodeMirror pre</code> a
    fixed height. Also, you must still take care that character width
    is constant.</p>

    <p>If your page's style sheets do funky things to
    all <code>div</code> or <code>pre</code> elements (you probably
    shouldn't do that), you'll have to define rules to cancel these
    effects out again for elements under the <code>CodeMirror</code>
    class.</p>

    <p>Themes are also simply CSS files, which define colors for
    various syntactic elements. See the files in
    the <a href="../theme/"><code>theme</code></a> directory.</p>

    <h2 id="api">Programming API</h2>

    <p>A lot of CodeMirror features are only available through its API.
    This has the disadvantage that you need to do work to enable them,
    and the advantage that CodeMirror will fit seamlessly into your
    application.</p>

    <p>Whenever points in the document are represented, the API uses
    objects with <code>line</code> and <code>ch</code> properties.
    Both are zero-based. CodeMirror makes sure to 'clip' any positions
    passed by client code so that they fit inside the document, so you
    shouldn't worry too much about sanitizing your coordinates. If you
    give <code>ch</code> a value of <code>null</code>, or don't
    specify it, it will be replaced with the length of the specified
    line.</p>

    <dl>
      <dt id="getValue"><code>getValue() → string</code></dt>
      <dd>Get the current editor content.</dd>
      <dt id="setValue"><code>setValue(string)</code></dt>
      <dd>Set the editor content.</dd>

      <dt id="getSelection"><code>getSelection() → string</code></dt>
      <dd>Get the currently selected code.</dd>
      <dt id="replaceSelection"><code>replaceSelection(string)</code></dt>
      <dd>Replace the selection with the given string.</dd>

      <dt id="focus"><code>focus()</code></dt>
      <dd>Give the editor focus.</dd>
      <dt id="scrollTo"><code>scrollTo(x, y)</code></dt>
      <dd>Scroll the editor to a given (pixel) position. Both
      arguments may be left as <code>null</code>
      or <code>undefined</code> to have no effect.</dd>

      <dt id="setOption"><code>setOption(option, value)</code></dt>
      <dd>Change the configuration of the editor. <code>option</code>
      should the name of an <a href="#config">option</a>,
      and <code>value</code> should be a valid value for that
      option.</dd>
      <dt id="getOption"><code>getOption(option) → value</code></dt>
      <dd>Retrieves the current value of the given option for this
      editor instance.</dd>

      <dt id="cursorCoords"><code>cursorCoords(start, mode) → object</code></dt>
      <dd>Returns an <code>{x, y, yBot}</code> object containing the
      coordinates of the cursor. If <code>mode</code>
      is <code>"local"</code>, they will be relative to the top-left
      corner of the editable document. If it is <code>"page"</code> or
      not given, they are relative to the top-left corner of the
      page. <code>yBot</code> is the coordinate of the bottom of the
      cursor. <code>start</code> is a boolean indicating whether you
      want the start or the end of the selection.</dd>
      <dt id="charCoords"><code>charCoords(pos, mode) → object</code></dt>
      <dd>Like <code>cursorCoords</code>, but returns the position of
      an arbitrary characters. <code>pos</code> should be
      a <code>{line, ch}</code> object.</dd>
      <dt id="coordsChar"><code>coordsChar(object) → pos</code></dt>
      <dd>Given an <code>{x, y}</code> object (in page coordinates),
      returns the <code>{line, ch}</code> position that corresponds to
      it.</dd>

      <dt id="undo"><code>undo()</code></dt>
      <dd>Undo one edit (if any undo events are stored).</dd>
      <dt id="redo"><code>redo()</code></dt>
      <dd>Redo one undone edit.</dd>
      <dt id="historySize"><code>historySize() → object</code></dt>
      <dd>Returns an object with <code>{undo, redo}</code> properties,
      both of which hold integers, indicating the amount of stored
      undo and redo operations.</dd>
      <dt id="clearHistory"><code>clearHistory()</code></dt>
      <dd>Clears the editor's undo history.</dd>

      <dt id="indentLine"><code>indentLine(line, dir)</code></dt>
      <dd>Reset the given line's indentation to the indentation
      prescribed by the mode. If the second argument is given,
      indentation will be increased (if <code>dir</code> is true) or
      decreased (if false) by an <a href="#option_indentUnit">indent
      unit</a> instead.</dd>

      <dt id="getTokenAt"><code>getTokenAt(pos) → object</code></dt>
      <dd>Retrieves information about the token the current mode found
      at the given position (a <code>{line, ch}</code> object). The
      returned object has the following properties:
      <dl>
        <dt><code>start</code></dt><dd>The character (on the given line) at which the token starts.</dd>
        <dt><code>end</code></dt><dd>The character at which the token ends.</dd>
        <dt><code>string</code></dt><dd>The token's string.</dd>
        <dt><code>className</code></dt><dd>The class the mode assigned
        to the token. (Can be null when no class was assigned.)</dd>
        <dt><code>state</code></dt><dd>The mode's state at the end of this token.</dd>
      </dl></dd>

      <dt id="markText"><code>markText(from, to, className) → object</code></dt>
      <dd>Can be used to mark a range of text with a specific CSS
      class name. <code>from</code> and <code>to</code> should
      be <code>{line, ch}</code> objects. The method will return an
      object with two methods, <code>clear()</code>, which removes the
      mark, and <code>find()</code>, which returns a <code>{from,
      to}</code> (both document positions), indicating the current
      position of the marked range.</dd>

      <dt id="setBookmark"><code>setBookmark(pos) → object</code></dt>
      <dd>Inserts a bookmark, a handle that follows the text around it
      as it is being edited, at the given position. A bookmark has two
      methods <code>find()</code> and <code>clear()</code>. The first
      returns the current position of the bookmark, if it is still in
      the document, and the second explicitly removes the
      bookmark.</dd>

      <dt id="findMarksAt"><code>findMarksAt(pos) → array</code></dt>
      <dd>Returns an array of all the bookmarks and marked ranges
      present at the given position.</dd>

      <dt id="setMarker"><code>setMarker(line, text, className) → lineHandle</code></dt>
      <dd>Add a gutter marker for the given line. Gutter markers are
      shown in the line-number area (instead of the number for this
      line). Both <code>text</code> and <code>className</code> are
      optional. Setting <code>text</code> to a Unicode character like
      ● tends to give a nice effect. To put a picture in the gutter,
      set <code>text</code> to a space and <code>className</code> to
      something that sets a background image. If you
      specify <code>text</code>, the given text (which may contain
      HTML) will, by default, replace the line number for that line.
      If this is not what you want, you can include the
      string <code>%N%</code> in the text, which will be replaced by
      the line number.</dd>
      <dt id="clearMarker"><code>clearMarker(line)</code></dt>
      <dd>Clears a marker created
      with <code>setMarker</code>. <code>line</code> can be either a
      number or a handle returned by <code>setMarker</code> (since a
      number may now refer to a different line if something was added
      or deleted).</dd>
      <dt id="setLineClass"><code>setLineClass(line, className, backgroundClassName) → lineHandle</code></dt>
      <dd>Set a CSS class name for the given line. <code>line</code>
      can be a number or a line handle (as returned
      by <code>setMarker</code> or this
      function). <code>className</code> will be used to style the text
      for the line, and <code>backgroundClassName</code> to style its
      background (which lies behind the selection).
      Pass <code>null</code> to clear the classes for a line.</dd>
      <dt id="hideLine"><code>hideLine(line) → lineHandle</code></dt>
      <dd>Hide the given line (either by number or by handle). Hidden
      lines don't show up in the editor, and their numbers are skipped
      when <a href="#option_lineNumbers">line numbers</a> are enabled.
      Deleting a region around them does delete them, and coping a
      region around will include them in the copied text.</dd>
      <dt id="showLine"><code>showLine(line) → lineHandle</code></dt>
      <dd>The inverse of <code>hideLine</code>—re-shows a previously
      hidden line, by number or by handle.</dd>

      <dt id="onDeleteLine"><code>onDeleteLine(line, func)</code></dt>
      <dd>Register a function that should be called when the line is
      deleted from the document.</dd>

      <dt id="lineInfo"><code>lineInfo(line) → object</code></dt>
      <dd>Returns the line number, text content, and marker status of
      the given line, which can be either a number or a handle
      returned by <code>setMarker</code>. The returned object has the
      structure <code>{line, handle, text, markerText, markerClass,
      lineClass, bgClass}</code>.</dd>

      <dt id="getLineHandle"><code>getLineHandle(num) → lineHandle</code></dt>
      <dd>Fetches the line handle for the given line number.</dd>

      <dt id="addWidget"><code>addWidget(pos, node, scrollIntoView)</code></dt>
      <dd>Puts <code>node</code>, which should be an absolutely
      positioned DOM node, into the editor, positioned right below the
      given <code>{line, ch}</code> position.
      When <code>scrollIntoView</code> is true, the editor will ensure
      that the entire node is visible (if possible). To remove the
      widget again, simply use DOM methods (move it somewhere else, or
      call <code>removeChild</code> on its parent).</dd>

      <dt id="matchBrackets"><code>matchBrackets()</code></dt>
      <dd>Force matching-bracket-highlighting to happen.</dd>

      <dt id="lineCount"><code>lineCount() → number</code></dt>
      <dd>Get the number of lines in the editor.</dd>

      <dt id="getCursor"><code>getCursor(start) → object</code></dt>
      <dd><code>start</code> is a boolean indicating whether the start
      or the end of the selection must be retrieved. If it is not
      given, the current cursor pos, i.e. the side of the selection
      that would move if you pressed an arrow key, is chosen.
      A <code>{line, ch}</code> object will be returned.</dd>
      <dt id="somethingSelected"><code>somethingSelected() → boolean</code></dt>
      <dd>Return true if any text is selected.</dd>
      <dt id="setCursor"><code>setCursor(pos)</code></dt>
      <dd>Set the cursor position. You can either pass a
      single <code>{line, ch}</code> object, or the line and the
      character as two separate parameters.</dd>
      <dt id="setSelection"><code>setSelection(start, end)</code></dt>
      <dd>Set the selection range. <code>start</code>
      and <code>end</code> should be <code>{line, ch}</code> objects.</dd>

      <dt id="getLine"><code>getLine(n) → string</code></dt>
      <dd>Get the content of line <code>n</code>.</dd>
      <dt id="setLine"><code>setLine(n, text)</code></dt>
      <dd>Set the content of line <code>n</code>.</dd>
      <dt id="removeLine"><code>removeLine(n)</code></dt>
      <dd>Remove the given line from the document.</dd>

      <dt id="getRange"><code>getRange(from, to) → string</code></td>
      <dd>Get the text between the given points in the editor, which
      should be <code>{line, ch}</code> objects.</dd>
      <dt id="replaceRange"><code>replaceRange(string, from, to)</code></dt>
      <dd>Replace the part of the document between <code>from</code>
      and <code>to</code> with the given string. <code>from</code>
      and <code>to</code> must be <code>{line, ch}</code>
      objects. <code>to</code> can be left off to simply insert the
      string at position <code>from</code>.</dd>

      <dt id="posFromIndex"><code>posFromIndex(index) → object</code></dt>
      <dd>Calculates and returns a <code>{line, ch}</code> object for a
      zero-based <code>index</code> who's value is relative to the start of the
      editor's text. If the <code>index</code> is out of range of the text then
      the returned object is clipped to start or end of the text
      respectively.</dd>
      <dt id="indexFromPos"><code>indexFromPos(object) → number</code></dt>
      <dd>The reverse of <a href="#posFromIndex"><code>posFromIndex</code></a>.</dd>
    </dl>

    <p>The following are more low-level methods:</p>

    <dl>
      <dt id="operation"><code>operation(func) → result</code></dt>
      <dd>CodeMirror internally buffers changes and only updates its
      DOM structure after it has finished performing some operation.
      If you need to perform a lot of operations on a CodeMirror
      instance, you can call this method with a function argument. It
      will call the function, buffering up all changes, and only doing
      the expensive update after the function returns. This can be a
      lot faster. The return value from this method will be the return
      value of your function.</dd>

      <dt id="compoundChange"><code>compoundChange(func) → result</code></dt>
      <dd>Will call the given function (and return its result),
      combining all changes made while that function executes into a
      single undo event.</dd>

      <dt id="refresh"><code>refresh()</code></dt>
      <dd>If your code does something to change the size of the editor
      element (window resizes are already listened for), or unhides
      it, you should probably follow up by calling this method to
      ensure CodeMirror is still looking as intended.</dd>

      <dt id="getInputField"><code>getInputField() → textarea</code></dt>
      <dd>Returns the hidden textarea used to read input.</dd>
      <dt id="getWrapperElement"><code>getWrapperElement() → node</code></dt>
      <dd>Returns the DOM node that represents the editor. Remove this
      from your tree to delete an editor instance.</dd>
      <dt id="getScrollerElement"><code>getScrollerElement() → node</code></dt>
      <dd>Returns the DOM node that is responsible for the sizing and
      the scrolling of the editor. You can change
      the <code>height</code> and <code>width</code> styles of this
      element to resize an editor. (You might have to call
      the <a href="#refresh"><code>refresh</code></a> method
      afterwards.)</dd>
      <dt id="getGutterElement"><code>getGutterElement() → node</code></dt>
      <dd>Fetches the DOM node that represents the editor gutter.</dd>

      <dt id="getStateAfter"><code>getStateAfter(line) → state</code></dt>
      <dd>Returns the mode's parser state, if any, at the end of the
      given line number. If no line number is given, the state at the
      end of the document is returned. This can be useful for storing
      parsing errors in the state, or getting other kinds of
      contextual information for a line.</dd>
    </dl>

    <p id="fromTextArea">Finally, the <code>CodeMirror</code> object
    itself has a method <code>fromTextArea</code>. This takes a
    textarea DOM node as first argument and an optional configuration
    object as second. It will replace the textarea with a CodeMirror
    instance, and wire up the form of that textarea (if any) to make
    sure the editor contents are put into the textarea when the form
    is submitted. A CodeMirror instance created this way has two
    additional methods:</p>

    <dl>
      <dt id="save"><code>save()</code></dt>
      <dd>Copy the content of the editor into the textarea.</dd>

      <dt id="toTextArea"><code>toTextArea()</code></dt>
      <dd>Remove the editor, and restore the original textarea (with
      the editor's current content).</dd>

      <dt id="getTextArea"><code>getTextArea() → textarea</code></dt>
      <dd>Returns the textarea that the instance was based on.</dd>
    </dl>

    <p id="defineExtension">If you want to define extra methods in terms
    of the CodeMirror API, it is possible to
    use <code>CodeMirror.defineExtension(name, value)</code>. This
    will cause the given value (usually a method) to be added to all
    CodeMirror instances created from then on.</p>

    <h2 id="addons">Add-ons</h2>

    <p>The <code>lib/util</code> directory in the distribution
    contains a number of reusable components that implement extra
    editor functionality. In brief, they are:</p>

    <dl>
      <dt id="util_dialog"><a href="../lib/util/dialog.js"><code>dialog.js</code></a></dt>
      <dd>Provides a very simple way to query users for text input.
      Adds an <code>openDialog</code> method to CodeMirror instances,
      which can be called with an HTML fragment that provides the
      prompt (should include an <code>input</code> tag), and a
      callback function that is called when text has been entered.
      Depends on <code>lib/util/dialog.css</code>.</dd>
      <dt id="util_searchcursor"><a href="../lib/util/searchcursor.js"><code>searchcursor.js</code></a></dt>
      <dd>Adds the <code>getSearchCursor(query, start, caseFold) →
      cursor</code> method to CodeMirror instances, which can be used
      to implement search/replace functionality. <code>query</code>
      can be a regular expression or a string (only strings will match
      across lines—if they contain newlines). <code>start</code>
      provides the starting position of the search. It can be
      a <code>{line, ch}</code> object, or can be left off to default
      to the start of the document. <code>caseFold</code> is only
      relevant when matching a string. It will cause the search to be
      case-insensitive. A search cursor has the following methods:
        <dl>
          <dt><code>findNext(), findPrevious() → boolean</code></dt>
          <dd>Search forward or backward from the current position.
          The return value indicates whether a match was found. If
          matching a regular expression, the return value will be the
          array returned by the <code>match</code> method, in case you
          want to extract matched groups.</dd>
          <dt><code>from(), to() → object</code></dt>
          <dd>These are only valid when the last call
          to <code>findNext</code> or <code>findPrevious</code> did
          not return false. They will return <code>{line, ch}</code>
          objects pointing at the start and end of the match.</dd>
          <dt><code>replace(text)</code></dt>
          <dd>Replaces the currently found match with the given text
          and adjusts the cursor position to reflect the
          replacement.</dd>
        </dl></dd>

      <dt id="util_search"><a href="../lib/util/search.js"><code>search.js</code></a></dt>
      <dd>Implements the search commands. CodeMirror has keys bound to
      these by default, but will not do anything with them unless an
      implementation is provided. Depends
      on <code>searchcursor.js</code>, and will make use
      of <a href="#util_dialog"><code>openDialog</code></a> when
      available to make prompting for search queries less ugly.</dd>
      <dt id="util_foldcode"><a href="../lib/util/foldcode.js"><code>foldcode.js</code></a></dt>
      <dd>Helps with code folding.
      See <a href="../demo/folding.html">the demo</a> for an example.
      Call <code>CodeMirror.newFoldFunction</code> with a range-finder
      helper function to create a function that will, when applied to
      a CodeMirror instance and a line number, attempt to fold or
      unfold the block starting at the given line. A range-finder is a
      language-specific function that also takes an instance and a
      line number, and returns an end line for the block, or null if
      no block is started on that line. This file
      provides <code>CodeMirror.braceRangeFinder</code>, which finds
      blocks in brace languages (JavaScript, C, Java,
      etc), <code>CodeMirror.indentRangeFinder</code>, for languages
      where indentation determines block structure (Python, Haskell),
      and <code>CodeMirror.tagRangeFinder</code>, for XML-style
      languages.</dd>
      <dt id="util_runmode"><a href="../lib/util/runmode.js"><code>runmode.js</code></a></dt>
      <dd>Can be used to run a CodeMirror mode over text without
      actually opening an editor instance.
      See <a href="../demo/runmode.html">the demo</a> for an
      example.</dd>
      <dt id="util_simple-hint"><a href="../lib/util/simple-hint.js"><code>simple-hint.js</code></a></dt>
      <dd>Provides a framework for showing autocompletion hints.
      Defines <code>CodeMirror.simpleHint</code>, which takes a
      CodeMirror instance and a hinting function, and pops up a widget
      that allows the user to select a completion. Hinting functions
      are function that take an editor instance, and return
      a <code>{list, from, to}</code> object, where <code>list</code>
      is an array of strings (the completions), and <code>from</code>
      and <code>to</code> give the start and end of the token that is
      being completed. Depends
      on <code>lib/util/simple-hint.css</code>.</dd>
      <dt id="util_javascript-hint"><a href="../lib/util/javascript-hint.js"><code>javascript-hint.js</code></a></dt>
      <dd>Defines <code>CodeMirror.javascriptHint</code>
      and <code>CodeMirror.coffeescriptHint</code>, which are simple
      hinting functions for the JavaScript and CoffeeScript
      modes.</dd>
      <dt id="util_match-highlighter"><a href="../lib/util/match-highlighter.js"><code>match-highlighter.js</code></a></dt>
      <dd>Adds a <code>matchHighlight</code> method to CodeMirror
      instances that can be called (typically from
      a <a href="#option_onCursorActivity"><code>onCursorActivity</code></a>
      handler) to highlight all instances of a currently selected word
      with the a classname given as a first argument to the method.
      Depends on
      the <a href="#util_searchcursor"><code>searchcursor</code></a>
      add-on. Demo <a href="../demo/matchhighlighter.html">here</a>.</dd>
      <dt id="util_closetag"><a href="../lib/util/closetag.js"><code>closetag.js</code></a></dt>
      <dd>Provides utility functions for adding automatic tag closing
      to XML modes. See
      the <a href="../demo/closetag.html">demo</a>.</dd>
      <dt id="util_loadmode"><a href="../lib/util/loadmode.js"><code>loadmode.js</code></a></dt>
      <dd>Defines a <code>CodeMirror.requireMode(modename,
      callback)</code> function that will try to load a given mode and
      call the callback when it succeeded. You'll have to
      set <code>CodeMirror.modeURL</code> to a string that mode paths
      can be constructed from, for
      example <code>"mode/%N/%N.js"</code>—the <code>%N</code>'s will
      be replaced with the mode name. Also
      defines <code>CodeMirror.autoLoadMode(instance, mode)</code>,
      which will ensure the given mode is loaded and cause the given
      editor instance to refresh its mode when the loading
      succeeded. See the <a href="../demo/loadmode.html">demo</a>.</dd>
    </dl>

    <h2 id="modeapi">Writing CodeMirror Modes</h2>

    <p>Modes typically consist of a single JavaScript file. This file
    defines, in the simplest case, a lexer (tokenizer) for your
    language—a function that takes a character stream as input,
    advances it past a token, and returns a style for that token. More
    advanced modes can also handle indentation for the language.</p>

    <p id="defineMode">The mode script should
    call <code>CodeMirror.defineMode</code> to register itself with
    CodeMirror. This function takes two arguments. The first should be
    the name of the mode, for which you should use a lowercase string,
    preferably one that is also the name of the files that define the
    mode (i.e. <code>"xml"</code> is defined <code>xml.js</code>). The
    second argument should be a function that, given a CodeMirror
    configuration object (the thing passed to
    the <code>CodeMirror</code> function) and an optional mode
    configuration object (as in
    the <a href="#option_mode"><code>mode</code></a> option), returns
    a mode object.</p>

    <p>Typically, you should use this second argument
    to <code>defineMode</code> as your module scope function (modes
    should not leak anything into the global scope!), i.e. write your
    whole mode inside this function.</p>

    <p>The main responsibility of a mode script is <em>parsing</em>
    the content of the editor. Depending on the language and the
    amount of functionality desired, this can be done in really easy
    or extremely complicated ways. Some parsers can be stateless,
    meaning that they look at one element (<em>token</em>) of the code
    at a time, with no memory of what came before. Most, however, will
    need to remember something. This is done by using a <em>state
    object</em>, which is an object that is always passed when
    reading a token, and which can be mutated by the tokenizer.</p>

    <p id="startState">Modes that use a state must define
    a <code>startState</code> method on their mode object. This is a
    function of no arguments that produces a state object to be used
    at the start of a document.</p>

    <p id="token">The most important part of a mode object is
    its <code>token(stream, state)</code> method. All modes must
    define this method. It should read one token from the stream it is
    given as an argument, optionally update its state, and return a
    style string, or <code>null</code> for tokens that do not have to
    be styled. For your styles, you can either use the 'standard' ones
    defined in the themes (without the <code>cm-</code> prefix), or
    define your own and have people include a custom CSS file for your
    mode.<p>

    <p id="StringStream">The stream object encapsulates a line of code
    (tokens may never span lines) and our current position in that
    line. It has the following API:</p>

    <dl>
      <dt><code>eol() → boolean</code></dt>
      <dd>Returns true only if the stream is at the end of the
      line.</dd>
      <dt><code>sol() → boolean</code></dt>
      <dd>Returns true only if the stream is at the start of the
      line.</dd>

      <dt><code>peek() → character</code></dt>
      <dd>Returns the next character in the stream without advancing
      it. Will return <code>undefined</code> at the end of the
      line.</dd>
      <dt><code>next() → character</code></dt>
      <dd>Returns the next character in the stream and advances it.
      Also returns <code>undefined</code> when no more characters are
      available.</dd>

      <dt><code>eat(match) → character</code></dt>
      <dd><code>match</code> can be a character, a regular expression,
      or a function that takes a character and returns a boolean. If
      the next character in the stream 'matches' the given argument,
      it is consumed and returned. Otherwise, <code>undefined</code>
      is returned.</dd>
      <dt><code>eatWhile(match) → boolean</code></dt>
      <dd>Repeatedly calls <code>eat</code> with the given argument,
      until it fails. Returns true if any characters were eaten.</dd>
      <dt><code>eatSpace() → boolean</code></dt>
      <dd>Shortcut for <code>eatWhile</code> when matching
      white-space.</dd>
      <dt><code>skipToEnd()</code></dt>
      <dd>Moves the position to the end of the line.</dd>
      <dt><code>skipTo(ch) → boolean</code></dt>
      <dd>Skips to the next occurrence of the given character, if
      found on the current line (doesn't advance the stream if the
      character does not occur on the line). Returns true if the
      character was found.</dd>
      <dt><code>match(pattern, consume, caseFold) → boolean</code></dt>
      <dd>Act like a
      multi-character <code>eat</code>—if <code>consume</code> is true
      or not given—or a look-ahead that doesn't update the stream
      position—if it is false. <code>pattern</code> can be either a
      string or a regular expression starting with <code>^</code>.
      When it is a string, <code>caseFold</code> can be set to true to
      make the match case-insensitive. When successfully matching a
      regular expression, the returned value will be the array
      returned by <code>match</code>, in case you need to extract
      matched groups.</dd>

      <dt><code>backUp(n)</code></dt>
      <dd>Backs up the stream <code>n</code> characters. Backing it up
      further than the start of the current token will cause things to
      break, so be careful.</dd>
      <dt><code>column() → integer</code></dt>
      <dd>Returns the column (taking into account tabs) at which the
      current token starts. Can be used to find out whether a token
      starts a new line.</dd>
      <dt><code>indentation() → integer</code></dt>
      <dd>Tells you how far the current line has been indented, in
      spaces. Corrects for tab characters.</dd>

      <dt><code>current() → string</code></dt>
      <dd>Get the string between the start of the current token and
      the current stream position.</dd>
    </dl>

    <p id="blankLine">By default, blank lines are simply skipped when
    tokenizing a document. For languages that have significant blank
    lines, you can define a <code>blankLine(state)</code> method on
    your mode that will get called whenever a blank line is passed
    over, so that it can update the parser state.</p>

    <p id="copyState">Because state object are mutated, and CodeMirror
    needs to keep valid versions of a state around so that it can
    restart a parse at any line, copies must be made of state objects.
    The default algorithm used is that a new state object is created,
    which gets all the properties of the old object. Any properties
    which hold arrays get a copy of these arrays (since arrays tend to
    be used as mutable stacks). When this is not correct, for example
    because a mode mutates non-array properties of its state object, a
    mode object should define a <code>copyState</code> method,
    which is given a state and should return a safe copy of that
    state.</p>

    <p id="compareStates">By default, CodeMirror will stop re-parsing
    a document as soon as it encounters a few lines that were
    highlighted the same in the old parse as in the new one. It is
    possible to provide an explicit way to test whether a state is
    equivalent to another one, which CodeMirror will use (instead of
    the unchanged-lines heuristic) to decide when to stop
    highlighting. You do this by providing
    a <code>compareStates</code> method on your mode object, which
    takes two state arguments and returns a boolean indicating whether
    they are equivalent. See the XML mode, which uses this to provide
    reliable highlighting of bad closing tags, as an example.</p>

    <p id="indent">If you want your mode to provide smart indentation
    (though the <a href="#indentLine"><code>indentLine</code></a>
    method and the <code>indentAuto</code>
    and <code>newlineAndIndent</code> commands, which keys can be
    <a href="#option_extraKeys">bound</a> to), you must define
    an <code>indent(state, textAfter)</code> method on your mode
    object.</p>

    <p>The indentation method should inspect the given state object,
    and optionally the <code>textAfter</code> string, which contains
    the text on the line that is being indented, and return an
    integer, the amount of spaces to indent. It should usually take
    the <a href="#option_indentUnit"><code>indentUnit</code></a>
    option into account.</p>

    <p id="electricChars">Finally, a mode may define
    an <code>electricChars</code> property, which should hold a string
    containing all the characters that should trigger the behaviour
    described for
    the <a href="#option_electricChars"><code>electricChars</code></a>
    option.</p>

    <p>So, to summarize, a mode <em>must</em> provide
    a <code>token</code> method, and it <em>may</em>
    provide <code>startState</code>, <code>copyState</code>,
    <code>compareStates</code>, and <code>indent</code> methods. For
    an example of a trivial mode, see
    the <a href="../mode/diff/diff.js">diff mode</a>, for a more involved
    example, see the <a href="../mode/clike/clike.js">C-like
    mode</a>.</p>

    <p>Sometimes, it is useful for modes to <em>nest</em>—to have one
    mode delegate work to another mode. An example of this kind of
    mode is the <a href="../mode/htmlmixed/htmlmixed.js">mixed-mode HTML
    mode</a>. To implement such nesting, it is usually necessary to
    create mode objects and copy states yourself. To create a mode
    object, there are <code>CodeMirror.getMode(options,
    parserConfig)</code>, where the first argument is a configuration
    object as passed to the mode constructor function, and the second
    argument is a mode specification as in
    the <a href="#option_mode"><code>mode</code></a> option. To copy a
    state object, call <code>CodeMirror.copyState(mode, state)</code>,
    where <code>mode</code> is the mode that created the given
    state.</p>

    <p>To make indentation work properly in a nested parser, it is
    advisable to give the <code>startState</code> method of modes that
    are intended to be nested an optional argument that provides the
    base indentation for the block of code. The JavaScript and CSS
    parser do this, for example, to allow JavaScript and CSS code
    inside the mixed-mode HTML mode to be properly indented.</p>

    <p>Finally, it is possible to associate your mode, or a certain
    configuration of your mode, with
    a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type. For
    example, the JavaScript mode associates itself
    with <code>text/javascript</code>, and its JSON variant
    with <code>application/json</code>. To do this,
    call <code>CodeMirror.defineMIME(mime, modeSpec)</code>,
    where <code>modeSpec</code> can be a string or object specifying a
    mode, as in the <a href="#option_mode"><code>mode</code></a>
    option.</p>

</div><div class="rightsmall blk">

    <h2>Contents</h2>

    <ul>
      <li><a href="#overview">Overview</a></li>
      <li><a href="#usage">Basic Usage</a></li>
      <li><a href="#config">Configuration</a></li>
      <li><a href="#keymaps">Keymaps</a></li>
      <li><a href="#styling">Customized Styling</a></li>
      <li><a href="#api">Programming API</a></li>
      <li><a href="#addons">Add-ons</a></li>
      <li><a href="#modeapi">Writing CodeMirror Modes</a></li>
    </ul>

</div></div>

<div style="height: 2em">&nbsp;</div>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/oldrelease.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link rel="alternate" href="http://twitter.com/statuses/user_timeline/242283288.rss" type="application/rss+xml"/>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* Old release history */

</pre>

  <p class="rel">23-08-2011: <a href="http://codemirror.net/codemirror-2.13.zip">Version 2.13</a>:</p>
  <ul class="rel-note">
    <li>Add <a href="../mode/ruby/index.html">Ruby</a>, <a href="../mode/r/index.html">R</a>, <a href="../mode/coffeescript/index.html">CoffeeScript</a>, and <a href="../mode/velocity/index.html">Velocity</a> modes.</li>
    <li>Add <a href="manual.html#getGutterElement"><code>getGutterElement</code></a> to API.</li>
    <li>Several fixes to scrolling and positioning.</li>
    <li>Add <a href="manual.html#option_smartHome"><code>smartHome</code></a> option.</li>
    <li>Add an experimental <a href="../mode/xmlpure/index.html">pure XML</a> mode.</li>
  </ul>

  <p class="rel">25-07-2011: <a href="http://codemirror.net/codemirror-2.12.zip">Version 2.12</a>:</p>
  <ul class="rel-note">
    <li>Add a <a href="../mode/sparql/index.html">SPARQL</a> mode.</li>
    <li>Fix bug with cursor jumping around in an unfocused editor in IE.</li>
    <li>Allow key and mouse events to bubble out of the editor. Ignore widget clicks.</li>
    <li>Solve cursor flakiness after undo/redo.</li>
    <li>Fix block-reindent ignoring the last few lines.</li>
    <li>Fix parsing of multi-line attrs in XML mode.</li>
    <li>Use <code>innerHTML</code> for HTML-escaping.</li>
    <li>Some fixes to indentation in C-like mode.</li>
    <li>Shrink horiz scrollbars when long lines removed.</li>
    <li>Fix width feedback loop bug that caused the width of an inner DIV to shrink.</li>
  </ul>

  <p class="rel">04-07-2011: <a href="http://codemirror.net/codemirror-2.11.zip">Version 2.11</a>:</p>
  <ul class="rel-note">
    <li>Add a <a href="../mode/scheme/index.html">Scheme mode</a>.</li>
    <li>Add a <code>replace</code> method to search cursors, for cursor-preserving replacements.</li>
    <li>Make the <a href="../mode/clike/index.html">C-like mode</a> mode more customizable.</li>
    <li>Update XML mode to spot mismatched tags.</li>
    <li>Add <code>getStateAfter</code> API and <code>compareState</code> mode API methods for finer-grained mode magic.</li>
    <li>Add a <code>getScrollerElement</code> API method to manipulate the scrolling DIV.</li>
    <li>Fix drag-and-drop for Firefox.</li>
    <li>Add a C# configuration for the <a href="../mode/clike/index.html">C-like mode</a>.</li>
    <li>Add <a href="../demo/fullscreen.html">full-screen editing</a> and <a href="../demo/changemode.html">mode-changing</a> demos.</li>
  </ul>

  <p class="rel">07-06-2011: <a href="http://codemirror.net/codemirror-2.1.zip">Version 2.1</a>:</p>
  <p class="rel-note">Add
  a <a href="manual.html#option_theme">theme</a> system
  (<a href="../demo/theme.html">demo</a>). Note that this is not
  backwards-compatible—you'll have to update your styles and
  modes!</p>

  <p class="rel">07-06-2011: <a href="http://codemirror.net/codemirror-2.02.zip">Version 2.02</a>:</p>
  <ul class="rel-note">
    <li>Add a <a href="../mode/lua/index.html">Lua mode</a>.</li>
    <li>Fix reverse-searching for a regexp.</li>
    <li>Empty lines can no longer break highlighting.</li>
    <li>Rework scrolling model (the outer wrapper no longer does the scrolling).</li>
    <li>Solve horizontal jittering on long lines.</li>
    <li>Add <a href="../demo/runmode.html">runmode.js</a>.</li>
    <li>Immediately re-highlight text when typing.</li>
    <li>Fix problem with 'sticking' horizontal scrollbar.</li>
  </ul>

  <p class="rel">26-05-2011: <a href="http://codemirror.net/codemirror-2.01.zip">Version 2.01</a>:</p>
  <ul class="rel-note">
    <li>Add a <a href="../mode/smalltalk/index.html">Smalltalk mode</a>.</li>
    <li>Add a <a href="../mode/rst/index.html">reStructuredText mode</a>.</li>
    <li>Add a <a href="../mode/python/index.html">Python mode</a>.</li>
    <li>Add a <a href="../mode/plsql/index.html">PL/SQL mode</a>.</li>
    <li><code>coordsChar</code> now works</li>
    <li>Fix a problem where <code>onCursorActivity</code> interfered with <code>onChange</code>.</li>
    <li>Fix a number of scrolling and mouse-click-position glitches.</li>
    <li>Pass information about the changed lines to <code>onChange</code>.</li>
    <li>Support cmd-up/down on OS X.</li>
    <li>Add triple-click line selection.</li>
    <li>Don't handle shift when changing the selection through the API.</li>
    <li>Support <code>"nocursor"</code> mode for <code>readOnly</code> option.</li>
    <li>Add an <code>onHighlightComplete</code> option.</li>
    <li>Fix the context menu for Firefox.</li>
  </ul>

  <p class="rel">28-03-2011: <a href="http://codemirror.net/codemirror-2.0.zip">Version 2.0</a>:</p>
  <p class="rel-note">CodeMirror 2 is a complete rewrite that's
  faster, smaller, simpler to use, and less dependent on browser
  quirks. See <a href="internals.html">this</a>
  and <a href="http://groups.google.com/group/codemirror/browse_thread/thread/5a8e894024a9f580">this</a>
  for more information.</a>

  <p class="rel">28-03-2011: <a href="http://codemirror.net/codemirror-1.0.zip">Version 1.0</a>:</p>
  <ul class="rel-note">
    <li>Fix error when debug history overflows.</li>
    <li>Refine handling of C# verbatim strings.</li>
    <li>Fix some issues with JavaScript indentation.</li>
  </ul>

  <p class="rel">22-02-2011: <a href="https://github.com/marijnh/codemirror2/tree/beta2">Version 2.0 beta 2</a>:</p>
  <p class="rel-note">Somewhat more mature API, lots of bugs shaken out.</a>

  <p class="rel">17-02-2011: <a href="http://codemirror.net/codemirror-0.94.zip">Version 0.94</a>:</p>
  <ul class="rel-note">
    <li><code>tabMode: "spaces"</code> was modified slightly (now indents when something is selected).</li>
    <li>Fixes a bug that would cause the selection code to break on some IE versions.</li>
    <li>Disabling spell-check on WebKit browsers now works.</li>
  </ul>

  <p class="rel">08-02-2011: <a href="http://codemirror.net/">Version 2.0 beta 1</a>:</p>
  <p class="rel-note">CodeMirror 2 is a complete rewrite of
  CodeMirror, no longer depending on an editable frame.</p>

  <p class="rel">19-01-2011: <a href="http://codemirror.net/codemirror-0.93.zip">Version 0.93</a>:</p>
  <ul class="rel-note">
    <li>Added a <a href="contrib/regex/index.html">Regular Expression</a> parser.</li>
    <li>Fixes to the PHP parser.</li>
    <li>Support for regular expression in search/replace.</li>
    <li>Add <code>save</code> method to instances created with <code>fromTextArea</code>.</li>
    <li>Add support for MS T-SQL in the SQL parser.</li>
    <li>Support use of CSS classes for highlighting brackets.</li>
    <li>Fix yet another hang with line-numbering in hidden editors.</li>
  </ul>

  <p class="rel">17-12-2010: <a href="http://codemirror.net/codemirror-0.92.zip">Version 0.92</a>:</p>
  <ul class="rel-note">
    <li>Make CodeMirror work in XHTML documents.</li>
    <li>Fix bug in handling of backslashes in Python strings.</li>
    <li>The <code>styleNumbers</code> option is now officially
    supported and documented.</li>
    <li><code>onLineNumberClick</code> option added.</li>
    <li>More consistent names <code>onLoad</code> and
    <code>onCursorActivity</code> callbacks. Old names still work, but
    are deprecated.</li>
    <li>Add a <a href="contrib/freemarker/index.html">Freemarker</a> mode.</li>
  </ul>

  <p class="rel">11-11-2010: <a
  href="http://codemirror.net/codemirror-0.91.zip">Version 0.91</a>:</p>
  <ul class="rel-note">
    <li>Adds support for <a href="contrib/java">Java</a>.</li>
    <li>Small additions to the <a href="contrib/php">PHP</a> and <a href="contrib/sql">SQL</a> parsers.</li>
    <li>Work around various <a href="https://bugs.webkit.org/show_bug.cgi?id=47806">Webkit</a> <a href="https://bugs.webkit.org/show_bug.cgi?id=23474">issues</a>.</li>
    <li>Fix <code>toTextArea</code> to update the code in the textarea.</li>
    <li>Add a <code>noScriptCaching</code> option (hack to ease development).</li>
    <li>Make sub-modes of <a href="mixedtest.html">HTML mixed</a> mode configurable.</li>
  </ul>

  <p class="rel">02-10-2010: <a
  href="http://codemirror.net/codemirror-0.9.zip">Version 0.9</a>:</p>
  <ul class="rel-note">
    <li>Add support for searching backwards.</li>
    <li>There are now parsers for <a href="contrib/scheme/index.html">Scheme</a>, <a href="contrib/xquery/index.html">XQuery</a>, and <a href="contrib/ometa/index.html">OmetaJS</a>.</li>
    <li>Makes <code>height: "dynamic"</code> more robust.</li>
    <li>Fixes bug where paste did not work on OS X.</li>
    <li>Add a <code>enterMode</code> and <code>electricChars</code> options to make indentation even more customizable.</li>
    <li>Add <code>firstLineNumber</code> option.</li>
    <li>Fix bad handling of <code>@media</code> rules by the CSS parser.</li>
    <li>Take a new, more robust approach to working around the invisible-last-line bug in WebKit.</li>
  </ul>

  <p class="rel">22-07-2010: <a
  href="http://codemirror.net/codemirror-0.8.zip">Version 0.8</a>:</p>
  <ul class="rel-note">
    <li>Add a <code>cursorCoords</code> method to find the screen
    coordinates of the cursor.</li>
    <li>A number of fixes and support for more syntax in the PHP parser.</li>
    <li>Fix indentation problem with JSON-mode JS parser in Webkit.</li>
    <li>Add a <a href="compress.html">minification</a> UI.</li>
    <li>Support a <code>height: dynamic</code> mode, where the editor's
    height will adjust to the size of its content.</li>
    <li>Better support for IME input mode.</li>
    <li>Fix JavaScript parser getting confused when seeing a no-argument
    function call.</li>
    <li>Have CSS parser see the difference between selectors and other
    identifiers.</li>
    <li>Fix scrolling bug when pasting in a horizontally-scrolled
    editor.</li>
    <li>Support <code>toTextArea</code> method in instances created with
    <code>fromTextArea</code>.</li>
    <li>Work around new Opera cursor bug that causes the cursor to jump
    when pressing backspace at the end of a line.</li>
  </ul>

  <p class="rel">27-04-2010: <a
  href="http://codemirror.net/codemirror-0.67.zip">Version
  0.67</a>:</p>
  <p class="rel-note">More consistent page-up/page-down behaviour
  across browsers. Fix some issues with hidden editors looping forever
  when line-numbers were enabled. Make PHP parser parse
  <code>"\\"</code> correctly. Have <code>jumpToLine</code> work on
  line handles, and add <code>cursorLine</code> function to fetch the
  line handle where the cursor currently is. Add new
  <code>setStylesheet</code> function to switch style-sheets in a
  running editor.</p>

  <p class="rel">01-03-2010: <a
  href="http://codemirror.net/codemirror-0.66.zip">Version
  0.66</a>:</p>
  <p class="rel-note">Adds <code>removeLine</code> method to API.
  Introduces the <a href="contrib/plsql/index.html">PLSQL parser</a>.
  Marks XML errors by adding (rather than replacing) a CSS class, so
  that they can be disabled by modifying their style. Fixes several
  selection bugs, and a number of small glitches.</p>

  <p class="rel">12-11-2009: <a
  href="http://codemirror.net/codemirror-0.65.zip">Version
  0.65</a>:</p>
  <p class="rel-note">Add support for having both line-wrapping and
  line-numbers turned on, make paren-highlighting style customisable
  (<code>markParen</code> and <code>unmarkParen</code> config
  options), work around a selection bug that Opera
  <em>re</em>introduced in version 10.</p>

  <p class="rel">23-10-2009: <a
  href="http://codemirror.net/codemirror-0.64.zip">Version
  0.64</a>:</p>
  <p class="rel-note">Solves some issues introduced by the
  paste-handling changes from the previous release. Adds
  <code>setSpellcheck</code>, <code>setTextWrapping</code>,
  <code>setIndentUnit</code>, <code>setUndoDepth</code>,
  <code>setTabMode</code>, and <code>setLineNumbers</code> to
  customise a running editor. Introduces an <a
  href="contrib/sql/index.html">SQL</a> parser. Fixes a few small
  problems in the <a href="contrib/python/index.html">Python</a>
  parser. And, as usual, add workarounds for various newly discovered
  browser incompatibilities.</p>

<p class="rel"><em>31-08-2009</em>: <a
href="http://codemirror.net/codemirror-0.63.zip">Version
0.63</a>:</p>
<p class="rel-note"> Overhaul of paste-handling (less fragile), fixes for several
serious IE8 issues (cursor jumping, end-of-document bugs) and a number
of small problems.</p>

<p class="rel"><em>30-05-2009</em>: <a
href="http://codemirror.net/codemirror-0.62.zip">Version
0.62</a>:</p>
<p class="rel-note">Introduces <a href="contrib/python/index.html">Python</a>
and <a href="contrib/lua/index.html">Lua</a> parsers. Add
<code>setParser</code> (on-the-fly mode changing) and
<code>clearHistory</code> methods. Make parsing passes time-based
instead of lines-based (see the <code>passTime</code> option).</p>

</body></html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/reporting.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Reporting Bugs</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style>li { margin-top: 1em; }</style>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* Reporting bugs
   effectively */
</pre>

<div class="left">

<p>So you found a problem in CodeMirror. By all means, report it! Bug
reports from users are the main drive behind improvements to
CodeMirror. But first, please read over these points:</p>

<ol>
  <li>CodeMirror is maintained by volunteers. They don't owe you
  anything, so be polite. Reports with an indignant or belligerent
  tone tend to be moved to the bottom of the pile.</li>

  <li>Include information about <strong>the browser in which the
  problem occurred</strong>. Even if you tested several browsers, and
  the problem occurred in all of them, mention this fact in the bug
  report. Also include browser version numbers and the operating
  system that you're on.</li>

  <li>Mention which release of CodeMirror you're using. Preferably,
  try also with the current development snapshot, to ensure the
  problem has not already been fixed.</li>

  <li>Mention very precisely what went wrong. "X is broken" is not a
  good bug report. What did you expect to happen? What happened
  instead? Describe the exact steps a maintainer has to take to make
  the problem occur. We can not fix something that we can not
  observe.</li>

  <li>If the problem can not be reproduced in any of the demos
  included in the CodeMirror distribution, please provide an HTML
  document that demonstrates the problem. The best way to do this is
  to go to <a href="http://jsbin.com/ihunin/edit">jsbin.com</a>, enter
  it there, press save, and include the resulting link in your bug
  report.</li>
</ol>

</div>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/doc/upgrade_v2.2.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror: Upgrading to v2.2</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="baboon.png" class="logo" alt="logo"/>/* Upgrading to v2.2
 */
</pre>

<div class="left">

<p>There are a few things in the 2.2 release that require some care
when upgrading.</p>

<h2>No more default.css</h2>

<p>The default theme is now included
in <a href="../lib/codemirror.css"><code>codemirror.css</code></a>, so
you do not have to included it separately anymore. (It was tiny, so
even if you're not using it, the extra data overhead is negligible.)

<h2>Different key customization</h2>

<p>CodeMirror has moved to a system
where <a href="manual.html#option_keyMap">keymaps</a> are used to
bind behavior to keys. This means <a href="../demo/emacs.html">custom
bindings</a> are now possible.</p>

<p>Three options that influenced key
behavior, <code>tabMode</code>, <code>enterMode</code>,
and <code>smartHome</code>, are no longer supported. Instead, you can
provide custom bindings to influence the way these keys act. This is
done through the
new <a href="manual.html#option_extraKeys"><code>extraKeys</code></a>
option, which can hold an object mapping key names to functionality. A
simple example would be:</p>

<pre>  extraKeys: {
    "Ctrl-S": function(instance) { saveText(instance.getValue()); },
    "Ctrl-/": "undo"
  }</pre>

<p>Keys can be mapped either to functions, which will be given the
editor instance as argument, or to strings, which are mapped through
functions through the <code>CodeMirror.commands</code> table, which
contains all the built-in editing commands, and can be inspected and
extended by external code.</p>

<p>By default, the <code>Home</code> key is bound to
the <code>"goLineStartSmart"</code> command, which moves the cursor to
the first non-whitespace character on the line. You can set do this to
make it always go to the very start instead:</p>

<pre>  extraKeys: {"Home": "goLineStart"}</pre>

<p>Similarly, <code>Enter</code> is bound
to <code>"newlineAndIndent"</code> by default. You can bind it to
something else to get different behavior. To disable special handling
completely and only get a newline character inserted, you can bind it
to <code>false</code>:</p>

<pre>  extraKeys: {"Enter": false}</pre>

<p>The same works for <code>Tab</code>. If you don't want CodeMirror
to handle it, bind it to <code>false</code>. The default behaviour is
to indent the current line more (<code>"indentMore"</code> command),
and indent it less when shift is held (<code>"indentLess"</code>).
There are also <code>"indentAuto"</code> (smart indent)
and <code>"insertTab"</code> commands provided for alternate
behaviors. Or you can write your own handler function to do something
different altogether.</p>

<h2>Tabs</h2>

<p>Handling of tabs changed completely. The display width of tabs can
now be set with the <code>tabSize</code> option, and tabs can
be <a href="../demo/visibletabs.html">styled</a> by setting CSS rules
for the <code>cm-tab</code> class.</p>

<p>The default width for tabs is now 4, as opposed to the 8 that is
hard-wired into browsers. If you are relying on 8-space tabs, make
sure you explicitly set <code>tabSize: 8</code> in your options.</p>

</div>

  </body>
</html>


================================================
FILE: assets/vendor/CodeMirror-2.25/index.html
================================================
<!doctype html>
<html>
  <head>
    <title>CodeMirror</title>
    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
    <link rel="stylesheet" type="text/css" href="doc/docs.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link rel="alternate" href="http://twitter.com/statuses/user_timeline/242283288.rss" type="application/rss+xml"/>
  </head>
  <body>

<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>

<pre class="grey">
<img src="doc/baboon.png" class="logo" alt="logo"/>/* In-browser code editing
   made bearable */
</pre>

<div class="clear"><div class="left blk">

  <p style="margin-top: 0">CodeMirror is a JavaScript component that
  provides a code editor in the browser. When a mode is available for
  the language you are coding in, it will color your code, and
  optionally help with indentation.</p>

  <p>A <a href="doc/manual.html">rich programming API</a> and a CSS
  theming system are available for customizing CodeMirror to fit your
  application, and extending it with new functionality.</p>

  <div class="clear"><div class="left1 blk">

    <h2 style="margin-top: 0">Supported modes:</h2>

    <ul>
      <li><a href="mode/clike/index.html">C, C++, C#, Java, and similar</a></li>
      <li><a href="mode/clojure/index.html">Clojure</a></li>
      <li><a href="mode/coffeescript/index.html">CoffeeScript</a></li>
      <li><a href="mode/css/index.html">CSS</a></li>
      <li><a href="mode/diff/index.html">diff</a></li>
      <li><a href="mode/ecl/index.html">ECL</a></li>
      <li><a href="mode/erlang/index.html">Erlang</a></li>
      <li><a href="mode/go/index.html">Go</a></li>
      <li><a href="mode/groovy/index.html">Groovy</a></li>
      <li><a href="mode/haskell/index.html">Haskell</a></li>
      <li><a href="mode/htmlembedded/index.html">HTML embedded scripts</a></li>
      <li><a href="mode/htmlmixed/index.html">HTML mixed-mode</a></li>
      <li><a href="mode/javascript/index.html">JavaScript</a></li>
      <li><a href="mode/jinja2/index.html">Jinja2</a></li>
      <li><a href="mode/less/index.html">LESS</a></li>
      <li><a href="mode/lua/index.html">Lua</a></li>
      <li><a href="mode/markdown/index.html">Markdown</a> (<a href="mode/gfm/index.html">Github-flavour</a>)</li>
      <li><a href="mode/mysql/index.html">MySQL</a></li>
      <li><a href="mode/ntriples/index.html">NTriples</a></li>
      <li><a href="mode/pascal/index.html">Pascal</a></li>
      <li><a href="mode/perl/index.html">Perl</a></li>
      <li><a href="mode/php/index.html">PHP</a></li>
      <li><a href="mode/pig/index.html">Pig Latin</a></li>
      <li><a href="mode/plsql/index.html">PL/SQL</a></li>
      <li><a href="mode/properties/index.html">Properties files</a></li>
      <li><a href="mode/python/index.html">Python</a></li>
      <li><a href="mode/r/index.html">R</a></li>
      <li>RPM <a href="mode/rpm/spec/index.html">spec</a> and <a href="mode/rpm/changes/index.html">changelog</a></li>
      <li><a href="mode/rst/index.html">reStructuredText</a></li>
      <li><a href="mode/ruby/index.html">Ruby</a></li>
      <li><a href="mode/rust/index.html">Rust</a></li>
      <li><a href="mode/scheme/index.html">Scheme</a></li>
      <li><a href="mode/shell/index.html">Shell</a></li>
      <li><a href="mode/smalltalk/index.html">Smalltalk</a></li>
      <li><a href="mode/smarty/index.html">Smarty</a></li>
      <li><a href="mode/sparql/index.html">SPARQL</a></li>
      <li><a href="mode/stex/index.html">sTeX, LaTeX</a></li>
      <li><a href="mode/tiddlywiki/index.html">Tiddlywiki</a></li>
      <li><a href="mode/tiki/index.html">Tiki wiki</a></li>
      <li><a href="mode/vbscript/index.html">VBScript</a></li>
      <li><a href="mode/velocity/index.html">Velocity</a></li>
      <li><a href="mode/verilog/index.html">Verilog</a></li>
      <li><a href="mode/xml/index.html">XML/HTML</a></li>
      <li><a href="mode/xquery/index.html">XQuery</a></li>
      <li><a href="mode/yaml/index.html">YAML</a></li>
    </ul>

  </div><div class="left2 blk">

    <h2 style="margin-top: 0">Usage demos:</h2>

    <ul>
      <li><a href="demo/complete.html">Autocompletion</a></li>
      <li><a href="demo/mustache.html">Mode overlays</a></li>
      <li><a href="demo/search.html">Search/replace</a></li>
      <li><a href="demo/folding.html">Code folding</a></li>
      <li><a href="demo/preview.html">HTML editor with preview</a></li>
      <li><a href="demo/resize.html">Auto-resizing editor</a></li>
      <li><a href="demo/marker.html">Setting breakpoints</a></li>
      <li><a href="demo/activeline.html">Highlighting the current line</a></li>
      <li><a href="demo/matchhighlighter.html">Highlighting selection matches</a></li>
      <li><a href="demo/theme.html">Theming</a></li>
      <li><a href="demo/runmode.html">Stand-alone highlighting</a></li>
      <li><a href="demo/fullscreen.html">Full-screen editing</a></li>
      <li><a href="demo/changemode.html">Mode auto-changing</a></li>
      <li><a href="demo/visibletabs.html">Visible tabs</a></li>
      <li><a href="demo/formatting.html">Autoformatting of code</a></li>
      <li><a href="demo/emacs.html">Emacs keybindings</a></li>
      <li><a href="demo/vim.html">Vim keybindings</a></li>
      <li><a href="demo/closetag.html">Automatic xml tag closing</a></li>
      <li><a href="demo/loadmode.html">Lazy mode loading</a></li>
    </ul>

    <h2>Real-world uses:</h2>

    <ul>
      <li><a href="http://jsbin.com">jsbin.com</a> (JS playground)</li>
      <li><a href="http://buzzard.ups.edu/">Sage demo</a> (math system)</li>
      <li><a href="http://www.sourcelair.com/">sourceLair</a> (online IDE)</li>
      <li><a href="http://eloquentjavascript.net/chapter1.html">Eloquent JavaScript</a> (book)</a></li>
      <li><a href="http://www.mergely.com/">Mergely</a> (interactive diffing)</li>
      <li><a href="http://paperjs.org/">Paper.js</a> (graphics scripting)</li>
      <li><a href="http://www.wescheme.org/">WeScheme</a> (learning tool)</li>
      <li><a href="http://webglplayground.net/">WebGL playground</a></li>
      <li><a href="http://ql.io/">ql.io</a> (http API query helper)</li>
      <li><a href="http://elm-lang.org/Examples.elm">Elm language examples</a></li>
      <li><a href="http://bluegriffon.org/">BlueGriffon</a> (HTML editor)</li>
      <li><a href="http://www.jshint.com/">JSHint</a> (JS linter)</li>
      <li><a href="http://kl1p.com/cmtest/1">kl1p</a> (paste service)</li>
      <li><a href="http://sqlfiddle.com">SQLFiddle</a> (SQL playground)</li>
      <li><a href="http://tour.golang.org">Go language tour</a></li>
      <li><a href="http://cssdeck.com/">CSSDeck</a> (CSS showcase)</li>
      <li><a href="http://www.ckwnc.com/">CKWNC</a> (UML editor)</li>
      <li><a href="http://www.sketchpatch.net/labs/livecodelabIntro.html">sketchPatch Livecodelab</a></li>
      <li><a href="https://thefiletree.com">The File Tree</a> (collab editor)</li>
      <li><a href="http://enjalot.com/tributary/2636296/sinwaves.js">Tributary</a> (augmented editing)</li>
    </ul>

  </div></div>

  <h2 id="code">Getting the code</h2>

  <p>All of CodeMirror is released under a <a
  href="LICENSE">MIT-style</a> license. To get it, you can download
  the <a href="http://codemirror.net/codemirror.zip">latest
  release</a> or the current <a
  href="http://codemirror.net/codemirror2-latest.zip">development
  snapshot</a> as zip files. To create a custom minified script file,
  you can use the <a href="doc/compress.html">compression API</a>.</p>

  <p>We use <a href="http://git-scm.com/">git</a> for version control.
  The main repository can be fetched in this way:</p>

  <pre class="code">git clone http://marijnhaverbeke.nl/git/codemirror2</pre>

  <p>CodeMirror can also be found on GitHub at <a
  href="http://github.com/marijnh/CodeMirror2">marijnh/CodeMirror2</a>.
  If you plan to hack on the code and contribute patches, the best way
  to do it is to create a GitHub fork, and send pull requests.</p>

  <h2 id="documention">Documentation</h2>

  <p>The <a href="doc/manual.html">manual</a> is your first stop for
  learning how to use this library. It starts with a quick explanation
  of how to use the editor, and then describes the API in detail.</p>

  <p>For those who want to learn more about the code, there is
  an <a href="doc/internals.html">overview of the internals</a> available.
  The <a href="http://github.com/marijnh/CodeMirror2">source code</a>
  itself is, for the most part, also well commented.</p>

  <h2 id="support">Support and bug reports</h2>

  <p>There is
  a <a href="http://groups.google.com/group/codemirror">Google
  group</a> (a sort of mailing list/newsgroup thing) for discussion
  and news related to CodeMirror. When reporting a bug,
  <a href="doc/reporting.html">read this first</a>. If you have
  a <a href="http://github.com">github</a> account,
  simply <a href="http://github.com/marijnh/CodeMirror2/issues">open
  an issue there</a>. Otherwise, post something to
  the <a href="http://groups.google.com/group/codemirror">group</a>,
  or e-mail me directly: <a href="mailto:marijnh@gmail.com">Marijn
  Haverbeke</a>.</p>

  <h2 id="supported">Supported browsers</h2>

  <p>The following browsers are able to run CodeMirror:</p>

  <ul>
    <li>Firefox 2 or higher</li>
    <li>Chrome, any version</li>
    <li>Safari 3 or higher</li>
    <li>Internet Explorer 7 or higher in standards (<strong>non-quirks</strong>) mode</li>
    <li>Opera 9 or higher (with some key-handling problems on OS X)</li>
  </ul>

  <p>I am not actively testing against every new browser release, and
  vendors have a habit of introducing bugs all the time, so I am
  relying on the community to tell me when something breaks.
  See <a href="#support">here</a> for information on how to contact
  me.</p>

  <h2 id="commercial">Commercial support</h2>

  <p>CodeMirror is developed and maintained by me, Marijn Haverbeke,
  in my own time. If your company is getting value out of CodeMirror,
  please consider purchasing a support contract.</p>

  <ul>
    <li>You'll be funding further work on CodeMirror.</li>
    <li>You ensure that you get a quick response when you have a
    problem, even when I am otherwise busy.</li>
  </ul>

  <p>CodeMirror support contracts exist in two
  forms—<strong>basic</strong> at €100 per month,
  and <strong>premium</strong> at €500 per
  month. <a href="mailto:marijnh@gmail.com">Contact me</a> for further
  information.</p>

</div>

<div class="right blk">

  <a href="http://codemirror.net/codemirror.zip" class="download">Download the latest release</a>

  <h2>Support CodeMirror</h2>

  <ul>
    <li>Donate
    (<span onclick="document.getElementById('paypal').submit();"
    class="quasilink">Paypal</span>
    or <span onclick="document.getElementById('bankinfo').style.display = 'block';"
             class="quasilink">bank</span>)</li>
    <li>Purchase <a href="#commercial">commercial support</a></li>
  </ul>

  <p id="bankinfo" style="display: none;">
    Bank: <i>Rabobank</i><br/>
    Country: <i>Netherlands</i><br/>
    SWIFT: <i>RABONL2U</i><br/>
    Account: <i>147850770</i><br/>
    Name: <i>Marijn Haverbeke</i><br/>
    IBAN: <i>NL26 RABO 0147 8507 70</i>
  </p>

  <h2>Releases:</h2>

  <p class="rel">23-05-2012: <a href="http://codemirror.net/codemirror-2.25.zip">Version 2.25</a>:</p>

  <ul class="rel-note">
    <li>New mode: <a href="mode/erlang/index.html">Erlang</a>.</li>
    <li><strong>Remove xmlpure mode</strong> (use <a href="mode/xml/index.html">xml.js</a>).</li>
    <li>Fix line-wrapping in Opera.</li>
    <li>Fix X Windows middle-click paste in Chrome.</li>
    <li>Fix bug that broke pasting of huge documents.</li>
    <li>Fix backspace and tab key repeat in Opera.</li>
  </ul>

  <p class="rel">23-04-2012: <a href="http://codemirror.net/codemirror-2.24.zip">Version 2.24</a>:</p>

  <ul class="rel-note">
    <li><strong>Drop support for Internet Explorer 6</strong>.</li>
    <li>New
    modes: <a href="mode/shell/index.html">Shell</a>, <a href="mode/tiki/index.html">Tiki
    wiki</a>, <a href="mode/pig/index.html">Pig Latin</a>.</li>
    <li>New themes: <a href="demo/theme.html?ambiance">Ambiance</a>, <a href="demo/theme.html?blackboard">Blackboard</a>.</li>
    <li>More control over drag/drop
    with <a href="doc/manual.html#option_dragDrop"><code>dragDrop</code></a>
    and <a href="doc/manual.html#option_onDragEvent"><code>onDragEvent</code></a>
    options.</li>
    <li>Make HTML mode a bit less pedantic.</li>
    <li>Add <a href="doc/manual.html#compoundChange"><code>compoundChange</code></a> API method.</li>
    <li>Several fixes in undo history and line hiding.</li>
    <li>Remove (broken) support for <code>catchall</code> in key maps,
    add <code>nofallthrough</code> boolean field instead.</li>
  </ul>

  <p class="rel">26-03-2012: <a href="http://codemirror.net/codemirror-2.23.zip">Version 2.23</a>:</p>

  <ul class="rel-note">
    <li>Change <strong>default binding for tab</strong> <a href="javascript:void(document.getElementById('tabbinding').style.display='')">[more]</a>
      <div style="display: none" id=tabbinding>
        Starting in 2.23, these bindings are default:
        <ul><li>Tab: Insert tab character</li>
          <li>Shift-tab: Reset line indentation to default</li>
          <li>Ctrl/Cmd-[: Reduce line indentation (old tab behaviour)</li>
          <li>Ctrl/Cmd-]: Increase line indentation (old shift-tab behaviour)</li>
        </ul>
      </div>
    </li>
    <li>New modes: <a href="mode/xquery/index.html">XQuery</a> and <a href="mode/vbscript/index.html">VBScript</a>.</li>
    <li>Two new themes: <a href="mode/less/index.html">lesser-dark</a> and <a href="mode/xquery/index.html">xq-dark</a>.</li>
    <li>Differentiate between background and text styles in <a href="doc/manual.html#setLineClass"><code>setLineClass</code></a>.</li>
    <li>Fix drag-and-drop in IE9+.</li>
    <li>Extend <a href="doc/manual.html#charCoords"><code>charCoords</code></a>
    and <a href="doc/manual.html#cursorCoords"><code>cursorCoords</code></a> with a <code>mode</code> argument.</li>
    <li>Add <a href="doc/manual.html#option_autofocus"><code>autofocus</code></a> option.</li>
    <li>Add <a href="doc/manual.html#findMarksAt"><code>findMarksAt</code></a> method.</li>
  </ul>

  <p class="rel">27-02-2012: <a href="http://codemirror.net/codemirror-2.22.zip">Version 2.22</a>:</p>

  <ul class="rel-note">
    <li>Allow <a href="doc/manual.html#keymaps">key handlers</a> to pass up events, allow binding characters.</li>
    <li>Add <a href="doc/manual.html#option_autoClearEmptyLines"><code>autoClearEmptyLines</code></a> option.</li>
    <li>Properly use tab stops when rendering tabs.</li>
    <li>Make PHP mode more robust.</li>
    <li>Support indentation blocks in <a href="doc/manual.html#util_foldcode">code folder</a>.</li>
    <li>Add a script for <a href="doc/manual.html#util_match-highlighter">highlighting instances of the selection</a>.</li>
    <li>New <a href="mode/properties/index.html">.properties</a> mode.</li>
    <li>Fix many bugs.</li>
  </ul>

  <p class="rel">27-01-2012: <a href="http://codemirror.net/codemirror-2.21.zip">Version 2.21</a>:</p>

  <ul class="rel-note">
    <li>Added <a href="mode/less/index.html">LESS</a>, <a href="mode/mysql/index.html">MySQL</a>,
    <a href="mode/go/index.html">Go</a>, and <a href="mode/verilog/index.html">Verilog</a> modes.</li>
    <li>Add <a href="doc/manual.html#option_smartIndent"><code>smartIndent</code></a>
    option.</li>
    <li>Support a cursor in <a href="doc/manual.html#option_readOnly"><code>readOnly</code></a>-mode.</li>
    <li>Support assigning multiple styles to a token.</li>
    <li>Use a new approach to drawing the selection.</li>
    <li>Add <a href="doc/manual.html#scrollTo"><code>scrollTo</code></a> method.</li>
    <li>Allow undo/redo events to span non-adjacent lines.</li>
    <li>Lots and lots of bugfixes.</li>
  </ul>

  <p class="rel">20-12-2011: <a href="http://codemirror.net/codemirror-2.2.zip">Version 2.2</a>:</p>

  <ul class="rel-note">
    <li>Slightly incompatible API changes. Read <a href="doc/upgrade_v2.2.html">this</a>.</li>
    <li>New approach
    to <a href="doc/manual.html#option_extraKeys">binding</a> keys,
    support for <a href="doc/manual.html#option_keyMap">custom
    bindings</a>.</li>
    <li>Support for overwrite (insert).</li>
    <li><a href="doc/manual.html#option_tabSize">Custom-width</a>
    and <a href="demo/visibletabs.html">stylable</a> tabs.</li>
    <li>Moved more code into <a href="doc/manual.html#addons">add-on scripts</a>.</li>
    <li>Support for sane vertical cursor movement in wrapped lines.</li>
    <li>More reliable handling of
    editing <a href="doc/manual.html#markText">marked text</a>.</li>
    <li>Add minimal <a href="demo/emacs.html">emacs</a>
    and <a href="demo/vim.html">vim</a> bindings.</li>
    <li>Rename <code>coordsFromIndex</code>
    to <a href="doc/manual.html#posFromIndex"><code>posFromIndex</code></a>,
    add <a href="doc/manual.html#indexFromPos"><code>indexFromPos</code></a>
    method.</li>
  </ul>

  <p class="rel">21-11-2011: <a href="http://codemirror.net/codemirror-2.18.zip">Version 2.18</a>:</p>
  <p class="rel-note">Fixes <code>TextMarker.clear</code>, which is broken in 2.17.</p>

  <p class="rel">21-11-2011: <a href="http://codemirror.net/codemirror-2.17.zip">Version 2.17</a>:</p>
  <ul class="rel-note">
    <li>Add support for <a href="doc/manual.html#option_lineWrapping">line
    wrapping</a> and <a href="doc/manual.html#hideLine">code
    folding</a>.</li>
    <li>Add <a href="mode/gfm/index.html">Github-style Markdown</a> mode.</li>
    <li>Add <a href="theme/monokai.css">Monokai</a>
    and <a href="theme/rubyblue.css">Rubyblue</a> themes.</li>
    <li>Add <a href="doc/manual.html#setBookmark"><code>setBookmark</code></a> method.</li>
    <li>Move some of the demo code into reusable components
    under <a href="lib/util/"><code>lib/util</code></a>.</li>
    <li>Make screen-coord-finding code faster and more reliable.</li>
    <li>Fix drag-and-drop in Firefox.</li>
    <li>Improve support for IME.</li>
    <li>Speed up content rendering.</li>
    <li>Fix browser's built-in search in Webkit.</li>
    <li>Make double- and triple-click work in IE.</li>
    <li>Various fixes to modes.</li>
  </ul>

  <p class="rel">27-10-2011: <a href="http://codemirror.net/codemirror-2.16.zip">Version 2.16</a>:</p>
  <ul class="rel-note">
    <li>Add <a href="mode/perl/index.html">Perl</a>, <a href="mode/rust/index.html">Rust</a>, <a href="mode/tiddlywiki/index.html">TiddlyWiki</a>, and <a href="mode/groovy/index.html">Groovy</a> modes.</li>
    <li>Dragging text inside the editor now moves, rather than copies.</li>
    <li>Add a <a href="doc/manual.html#coordsFromIndex"><code>coordsFromIndex</code></a> method.</li>
    <li><strong>API change</strong>: <code>setValue</code> now no longer clears history. Use <a href="doc/manual.html#clearHistory"><code>clearHistory</code></a> for that.</li>
    <li><strong>API change</strong>: <a href="doc/manual.html#markText"><code>markText</code></a> now
    returns an object with <code>clear</code> and <code>find</code>
    methods. Marked text is now more robust when edited.</li>
    <li>Fix editing code with tabs in Internet Explorer.</li>
  </ul>

  <p class="rel">26-09-2011: <a href="http://codemirror.net/codemirror-2.15.zip">Version 2.15</a>:</p>
  <p class="rel-note">Fix bug that snuck into 2.14: Clicking the
  character that currently has the cursor didn't re-focus the
  editor.</p>

  <p class="rel">26-09-2011: <a href="http://codemirror.net/codemirror-2.14.zip">Version 2.14</a>:</p>
  <ul class="rel-note">
    <li>Add <a href="mode/clojure/index.html">Clojure</a>, <a href="mode/pascal/index.html">Pascal</a>, <a href="mode/ntriples/index.html">NTriples</a>, <a href="mode/jinja2/index.html">Jinja2</a>, and <a href="mode/markdown/index.html">Markdown</a> modes.</li>
    <li>Add <a href="theme/cobalt.css">Cobalt</a> and <a href="theme/eclipse.css">Eclipse</a> themes.</li>
    <li>Add a <a href="doc/manual.html#option_fixedGutter"><code>fixedGutter</code></a> option.</li>
    <li>Fix bug with <code>setValue</code> breaking cursor movement.</li>
    <li>Make gutter updates much more efficient.</li>
    <li>Allow dragging of text out of the editor (on modern browsers).</li>
  </ul>

  <p><a href="doc/oldrelease.html">Older releases...</a></p>

</div></div>

<div style="height: 2em">&nbsp;</div>

  <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal">
    <input type="hidden" name="cmd" value="_s-xclick"/>
    <input type="hidden" name="hosted_button_id" value="3FVHS5FGUY7CC"/>
  </form>

  </body>
</html>



================================================
FILE: assets/vendor/CodeMirror-2.25/keymap/emacs.js
================================================
// TODO number prefixes
(function() {
  // Really primitive kill-ring implementation.
  var killRing = [];
  function addToRing(str) {
    killRing.push(str);
    if (killRing.length > 50) killRing.shift();
  }
  function getFromRing() { return killRing[killRing.length - 1] || ""; }
  function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }

  CodeMirror.keyMap.emacs = {
    "Ctrl-X": function(cm) {cm.setOption("keyMap", "emacs-Ctrl-X");},
    "Ctrl-W": function(cm) {addToRing(cm.getSelection()); cm.replaceSelection("");},
    "Ctrl-Alt-W": function(cm) {addToRing(cm.getSelection()); cm.replaceSelection("");},
    "Alt-W": function(cm) {addToRing(cm.getSelection());},
    "Ctrl-Y": function(cm) {cm.replaceSelection(getFromRing());},
    "Alt-Y": function(cm) {cm.replaceSelection(popFromRing());},
    "Ctrl-/": "undo", "Shift-Ctrl--": "undo", "Shift-Alt-,": "goDocStart", "Shift-Alt-.": "goDocEnd",
    "Ctrl-S": "findNext", "Ctrl-R": "findPrev", "Ctrl-G": "clearSearch", "Shift-Alt-5": "replace",
    "Ctrl-Z": "undo", "Cmd-Z": "undo", "Alt-/": "autocomplete",
    fallthrough: ["basic", "emacsy"]
  };

  CodeMirror.keyMap["emacs-Ctrl-X"] = {
    "Ctrl-S": "save", "Ctrl-W": "save", "S": "saveAll", "F": "open", "U": "undo", "K": "close",
    auto: "emacs", nofallthrough: true
  };
})();


================================================
FILE: assets/vendor/CodeMirror-2.25/keymap/vim.js
================================================
// Supported keybindings:
// 
// Cursor movement:
// h, j, k, l
// e, E, w, W, b, B
// Ctrl-f, Ctrl-b
// Ctrl-n, Ctrl-p
// $, ^, 0
// G
// ge, gE
// gg
// f<char>, F<char>, t<char>, T<char> 
// Ctrl-o, Ctrl-i TODO (FIXME - Ctrl-O wont work in Chrome)
// /, ?, n, N TODO (does not work)
// #, * TODO
//
// Entering insert mode:
// i, I, a, A, o, O
// s
// ce, cb (without support for number of actions like c3e - TODO)
// cc
// S, C TODO
// cf<char>, cF<char>, ct<char>, cT<char>
//
// Deleting text:
// x, X 
// J
// dd, D
// de, db (without support for number of actions like d3e - TODO)
// df<char>, dF<char>, dt<char>, dT<char> 
//
// Yanking and pasting:
// yy, Y
// p, P
// p'<char> TODO - test
// y'<char> TODO - test
// m<char> TODO - test
//
// Changing text in place:
// ~
// r<char>
//
// Visual mode:
// v, V TODO
//
// Misc:
// . TODO
//


(function() {
  var count = "";
  var sdir = "f";
  var buf = "";
  var yank = 0;
  var mark = [];
  function emptyBuffer() { buf = ""; }
  function pushInBuffer(str) { buf += str; };
  function pushCountDigit(digit) { return function(cm) {count += digit;} }
  function popCount() { var i = parseInt(count); count = ""; return i || 1; }
  function iterTimes(func) {
    for (var i = 0, c = popCount(); i < c; +
Download .txt
gitextract_n4ofu0cp/

├── .gitignore
├── .jshintrc
├── .travis.yml
├── Gruntfile.js
├── README.md
├── assets/
│   ├── css/
│   │   └── base.css
│   ├── js/
│   │   ├── chapter.js
│   │   ├── controllers/
│   │   │   └── chapter.js
│   │   ├── sandbox.js
│   │   └── widgets/
│   │       ├── _evented.js
│   │       ├── editor.js
│   │       ├── example.js
│   │       └── results.js
│   ├── main.js
│   └── vendor/
│       ├── CodeMirror-2.25/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── demo/
│       │   │   ├── activeline.html
│       │   │   ├── changemode.html
│       │   │   ├── closetag.html
│       │   │   ├── complete.html
│       │   │   ├── emacs.html
│       │   │   ├── folding.html
│       │   │   ├── formatting.html
│       │   │   ├── fullscreen.html
│       │   │   ├── loadmode.html
│       │   │   ├── marker.html
│       │   │   ├── matchhighlighter.html
│       │   │   ├── mustache.html
│       │   │   ├── preview.html
│       │   │   ├── resize.html
│       │   │   ├── runmode.html
│       │   │   ├── search.html
│       │   │   ├── theme.html
│       │   │   ├── vim.html
│       │   │   └── visibletabs.html
│       │   ├── doc/
│       │   │   ├── compress.html
│       │   │   ├── docs.css
│       │   │   ├── internals.html
│       │   │   ├── manual.html
│       │   │   ├── oldrelease.html
│       │   │   ├── reporting.html
│       │   │   └── upgrade_v2.2.html
│       │   ├── index.html
│       │   ├── keymap/
│       │   │   ├── emacs.js
│       │   │   └── vim.js
│       │   ├── lib/
│       │   │   ├── codemirror.css
│       │   │   ├── codemirror.js
│       │   │   └── util/
│       │   │       ├── closetag.js
│       │   │       ├── dialog.css
│       │   │       ├── dialog.js
│       │   │       ├── foldcode.js
│       │   │       ├── formatting.js
│       │   │       ├── javascript-hint.js
│       │   │       ├── loadmode.js
│       │   │       ├── match-highlighter.js
│       │   │       ├── overlay.js
│       │   │       ├── runmode.js
│       │   │       ├── search.js
│       │   │       ├── searchcursor.js
│       │   │       ├── simple-hint.css
│       │   │       └── simple-hint.js
│       │   ├── mode/
│       │   │   ├── clike/
│       │   │   │   ├── clike.js
│       │   │   │   └── index.html
│       │   │   ├── clojure/
│       │   │   │   ├── clojure.js
│       │   │   │   └── index.html
│       │   │   ├── coffeescript/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── coffeescript.js
│       │   │   │   └── index.html
│       │   │   ├── css/
│       │   │   │   ├── css.js
│       │   │   │   └── index.html
│       │   │   ├── diff/
│       │   │   │   ├── diff.js
│       │   │   │   └── index.html
│       │   │   ├── ecl/
│       │   │   │   ├── ecl.js
│       │   │   │   └── index.html
│       │   │   ├── erlang/
│       │   │   │   ├── erlang.js
│       │   │   │   └── index.html
│       │   │   ├── gfm/
│       │   │   │   ├── gfm.js
│       │   │   │   └── index.html
│       │   │   ├── go/
│       │   │   │   ├── go.js
│       │   │   │   └── index.html
│       │   │   ├── groovy/
│       │   │   │   ├── groovy.js
│       │   │   │   └── index.html
│       │   │   ├── haskell/
│       │   │   │   ├── haskell.js
│       │   │   │   └── index.html
│       │   │   ├── htmlembedded/
│       │   │   │   ├── htmlembedded.js
│       │   │   │   └── index.html
│       │   │   ├── htmlmixed/
│       │   │   │   ├── htmlmixed.js
│       │   │   │   └── index.html
│       │   │   ├── javascript/
│       │   │   │   ├── index.html
│       │   │   │   └── javascript.js
│       │   │   ├── jinja2/
│       │   │   │   ├── index.html
│       │   │   │   └── jinja2.js
│       │   │   ├── less/
│       │   │   │   ├── index.html
│       │   │   │   └── less.js
│       │   │   ├── lua/
│       │   │   │   ├── index.html
│       │   │   │   └── lua.js
│       │   │   ├── markdown/
│       │   │   │   ├── index.html
│       │   │   │   └── markdown.js
│       │   │   ├── mysql/
│       │   │   │   ├── index.html
│       │   │   │   └── mysql.js
│       │   │   ├── ntriples/
│       │   │   │   ├── index.html
│       │   │   │   └── ntriples.js
│       │   │   ├── pascal/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── pascal.js
│       │   │   ├── perl/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── perl.js
│       │   │   ├── php/
│       │   │   │   ├── index.html
│       │   │   │   └── php.js
│       │   │   ├── pig/
│       │   │   │   ├── index.html
│       │   │   │   └── pig.js
│       │   │   ├── plsql/
│       │   │   │   ├── index.html
│       │   │   │   └── plsql.js
│       │   │   ├── properties/
│       │   │   │   ├── index.html
│       │   │   │   └── properties.js
│       │   │   ├── python/
│       │   │   │   ├── LICENSE.txt
│       │   │   │   ├── index.html
│       │   │   │   └── python.js
│       │   │   ├── r/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── r.js
│       │   │   ├── rpm/
│       │   │   │   ├── changes/
│       │   │   │   │   ├── changes.js
│       │   │   │   │   └── index.html
│       │   │   │   └── spec/
│       │   │   │       ├── index.html
│       │   │   │       ├── spec.css
│       │   │   │       └── spec.js
│       │   │   ├── rst/
│       │   │   │   ├── index.html
│       │   │   │   └── rst.js
│       │   │   ├── ruby/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   └── ruby.js
│       │   │   ├── rust/
│       │   │   │   ├── index.html
│       │   │   │   └── rust.js
│       │   │   ├── scheme/
│       │   │   │   ├── index.html
│       │   │   │   └── scheme.js
│       │   │   ├── shell/
│       │   │   │   ├── index.html
│       │   │   │   └── shell.js
│       │   │   ├── smalltalk/
│       │   │   │   ├── index.html
│       │   │   │   └── smalltalk.js
│       │   │   ├── smarty/
│       │   │   │   ├── index.html
│       │   │   │   └── smarty.js
│       │   │   ├── sparql/
│       │   │   │   ├── index.html
│       │   │   │   └── sparql.js
│       │   │   ├── stex/
│       │   │   │   ├── index.html
│       │   │   │   ├── stex.js
│       │   │   │   └── test.html
│       │   │   ├── tiddlywiki/
│       │   │   │   ├── index.html
│       │   │   │   ├── tiddlywiki.css
│       │   │   │   └── tiddlywiki.js
│       │   │   ├── tiki/
│       │   │   │   ├── index.html
│       │   │   │   ├── tiki.css
│       │   │   │   └── tiki.js
│       │   │   ├── vbscript/
│       │   │   │   ├── index.html
│       │   │   │   └── vbscript.js
│       │   │   ├── velocity/
│       │   │   │   ├── index.html
│       │   │   │   └── velocity.js
│       │   │   ├── verilog/
│       │   │   │   ├── index.html
│       │   │   │   └── verilog.js
│       │   │   ├── xml/
│       │   │   │   ├── index.html
│       │   │   │   └── xml.js
│       │   │   ├── xquery/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── index.html
│       │   │   │   ├── test/
│       │   │   │   │   ├── index.html
│       │   │   │   │   ├── testBase.js
│       │   │   │   │   ├── testEmptySequenceKeyword.js
│       │   │   │   │   ├── testMultiAttr.js
│       │   │   │   │   ├── testNamespaces.js
│       │   │   │   │   ├── testProcessingInstructions.js
│       │   │   │   │   └── testQuotes.js
│       │   │   │   └── xquery.js
│       │   │   └── yaml/
│       │   │       ├── index.html
│       │   │       └── yaml.js
│       │   ├── test/
│       │   │   ├── index.html
│       │   │   ├── mode_test.css
│       │   │   ├── mode_test.js
│       │   │   └── test.js
│       │   └── theme/
│       │       ├── ambiance.css
│       │       ├── blackboard.css
│       │       ├── cobalt.css
│       │       ├── eclipse.css
│       │       ├── elegant.css
│       │       ├── erlang-dark.css
│       │       ├── lesser-dark.css
│       │       ├── monokai.css
│       │       ├── neat.css
│       │       ├── night.css
│       │       ├── rubyblue.css
│       │       ├── solarized.css
│       │       └── xq-dark.css
│       ├── bootstrap/
│       │   ├── css/
│       │   │   └── bootstrap.css
│       │   └── js/
│       │       └── bootstrap.js
│       ├── codemirror.js
│       ├── jquery.js
│       └── require.js
├── content/
│   ├── ajax-deferreds/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── effects/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── events/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── index.md
│   ├── javascript-basics/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   ├── jquery-basics/
│   │   ├── index.md
│   │   └── sandbox/
│   │       └── index.html
│   └── traversing-manipulating/
│       ├── index.md
│       └── sandbox/
│           └── index.html
├── data/
│   ├── people.html
│   └── people.json
├── deploy/
│   ├── ansible/
│   │   ├── deploy.yml
│   │   ├── group_vars/
│   │   │   └── all.yml
│   │   ├── host_vars/
│   │   │   └── jqfundamentals.com
│   │   ├── inventory/
│   │   │   └── production
│   │   ├── provision.yml
│   │   └── roles/
│   │       ├── base/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── configure/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── deploy/
│   │       │   └── tasks/
│   │       │       └── main.yml
│   │       ├── nginx/
│   │       │   ├── tasks/
│   │       │   │   └── main.yml
│   │       │   └── templates/
│   │       │       └── jqf.conf
│   │       └── services/
│   │           ├── tasks/
│   │           │   └── main.yml
│   │           └── templates/
│   │               └── app.service.j2
│   └── id_ed25519-robocoup-jqfundamentals.com
├── legacy/
│   ├── assets/
│   │   ├── jquery.js
│   │   ├── shBrushJScript.js
│   │   ├── shCore.css
│   │   ├── shCore.js
│   │   ├── shThemeRDark.css
│   │   └── style.css
│   └── index.html
├── package.json
├── server/
│   └── index.js
├── templates/
│   ├── chapter/
│   │   └── index.pug
│   ├── error.pug
│   ├── header.pug
│   ├── home/
│   │   └── index.pug
│   ├── iframe.pug
│   ├── layout.pug
│   └── nav.pug
├── test/
│   ├── index.html
│   ├── runner.js
│   ├── vendor/
│   │   ├── chai.js
│   │   ├── expect.js
│   │   ├── jquery.js
│   │   ├── mocha.css
│   │   ├── mocha.js
│   │   ├── require.js
│   │   └── sinon.js
│   └── widgets/
│       ├── editor.js
│       ├── example.js
│       └── results.js
└── testimonials.md
Download .txt
SYMBOL INDEX (857 symbols across 64 files)

FILE: assets/vendor/CodeMirror-2.25/keymap/emacs.js
  function addToRing (line 5) | function addToRing(str) {
  function getFromRing (line 9) | function getFromRing() { return killRing[killRing.length - 1] || ""; }
  function popFromRing (line 10) | function popFromRing() { if (killRing.length > 1) killRing.pop(); return...

FILE: assets/vendor/CodeMirror-2.25/keymap/vim.js
  function emptyBuffer (line 57) | function emptyBuffer() { buf = ""; }
  function pushInBuffer (line 58) | function pushInBuffer(str) { buf += str; }
  function pushCountDigit (line 59) | function pushCountDigit(digit) { return function(cm) {count += digit;} }
  function popCount (line 60) | function popCount() { var i = parseInt(count); count = ""; return i || 1; }
  function iterTimes (line 61) | function iterTimes(func) {
  function countTimes (line 64) | function countTimes(func) {
  function iterObj (line 69) | function iterObj(o, f) {
  function iterList (line 72) | function iterList(l, f) {
  function toLetter (line 75) | function toLetter(ch) {
  function toCombo (line 86) | function toCombo(ch) {
  function findWord (line 96) | function findWord(line, pos, dir, regexps) {
  function moveToWord (line 115) | function moveToWord(cm, regexps, dir, where) {
  function joinLineNext (line 125) | function joinLineNext(cm) {
  function delTillMark (line 134) | function delTillMark(cm, cHar) {
  function yankTillMark (line 147) | function yankTillMark(cm, cHar) {
  function goLineStartText (line 159) | function goLineStartText(cm) {
  function charIdxInLine (line 165) | function charIdxInLine(cm, cHar, motion_options) {
  function moveTillChar (line 183) | function moveTillChar(cm, cHar, motion_options) {
  function delTillChar (line 189) | function delTillChar(cm, cHar, motion_options) {
  function enterInsertMode (line 204) | function enterInsertMode(cm) {
  function addCountBindings (line 299) | function addCountBindings(keyMap) {
  function setupPrefixBindingForKey (line 443) | function setupPrefixBindingForKey(m) {

FILE: assets/vendor/CodeMirror-2.25/lib/codemirror.js
  function CodeMirror (line 11) | function CodeMirror(place, givenOptions) {
  function getKeyMap (line 2090) | function getKeyMap(val) {
  function lookupKey (line 2094) | function lookupKey(name, extraMap, map, handle, stop) {
  function isModifierKey (line 2115) | function isModifierKey(event) {
  function save (line 2128) | function save() {textarea.value = instance.getValue();}
  function wrappedSubmit (line 2134) | function wrappedSubmit() {
  function copyState (line 2165) | function copyState(mode, state) {
  function startState (line 2177) | function startState(mode, a1, a2) {
  function StringStream (line 2183) | function StringStream(string, tabSize) {
  function cased (line 2222) | function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
  function MarkedText (line 2238) | function MarkedText(from, to, className, marker) {
  function Bookmark (line 2268) | function Bookmark(pos) {
  function Line (line 2304) | function Line(text, styles) {
  function span_ (line 2466) | function span_(text, style) {
  function styleToClass (line 2525) | function styleToClass(style) {
  function advanceMarks (line 2542) | function advanceMarks() {
  function copyStyles (line 2583) | function copyStyles(from, to, source, dest) {
  function LeafChunk (line 2599) | function LeafChunk(lines) {
  function BranchChunk (line 2633) | function BranchChunk(children) {
  function getLineAt (line 2732) | function getLineAt(chunk, n) {
  function lineNo (line 2742) | function lineNo(line) {
  function lineAtHeight (line 2753) | function lineAtHeight(chunk, h) {
  function heightAtLine (line 2771) | function heightAtLine(chunk, n) {
  function History (line 2788) | function History() {
  function stopMethod (line 2824) | function stopMethod() {e_stop(this);}
  function addStop (line 2826) | function addStop(event) {
  function e_preventDefault (line 2831) | function e_preventDefault(e) {
  function e_stopPropagation (line 2835) | function e_stopPropagation(e) {
  function e_stop (line 2839) | function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
  function e_target (line 2844) | function e_target(e) {return e.target || e.srcElement;}
  function e_button (line 2845) | function e_button(e) {
  function e_prop (line 2854) | function e_prop(e, prop) {
  function connect (line 2861) | function connect(node, type, handler, disconnect) {
  function Delayed (line 2874) | function Delayed() {this.id = null;}
  function countColumn (line 2919) | function countColumn(string, end, tabSize) {
  function computedStyle (line 2931) | function computedStyle(elt) {
  function eltOffset (line 2938) | function eltOffset(node, screen) {
  function eltText (line 2974) | function eltText(node) {
  function selectInput (line 2977) | function selectInput(node) {
  function posEq (line 2985) | function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
  function posLess (line 2986) | function posLess(a, b) {return a.line < b.line || (a.line == b.line && a...
  function copyPos (line 2987) | function copyPos(x) {return {line: x.line, ch: x.ch};}
  function htmlEscape (line 2990) | function htmlEscape(str) {
  function editEnd (line 3012) | function editEnd(from, to) {
  function indexOf (line 3020) | function indexOf(collection, elt) {
  function isWordChar (line 3026) | function isWordChar(ch) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/closetag.js
  function insertEndTag (line 111) | function insertEndTag(cm, indent, pos, tagName) {
  function shouldIndent (line 123) | function shouldIndent(cm, indent, tagName) {
  function indexOf (line 134) | function indexOf(collection, elt) {
  function completeEndTag (line 141) | function completeEndTag(cm, pos, tagName) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/dialog.js
  function dialogDiv (line 4) | function dialogDiv(cm, template) {
  function close (line 15) | function close() {
  function close (line 40) | function close() {

FILE: assets/vendor/CodeMirror-2.25/lib/util/foldcode.js
  function isFolded (line 156) | function isFolded(cm, n) {
  function expand (line 164) | function expand(cm, region) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/javascript-hint.js
  function forEach (line 2) | function forEach(arr, f) {
  function arrayContains (line 6) | function arrayContains(arr, item) {
  function scriptHint (line 19) | function scriptHint(editor, keywords, getToken) {
  function getCoffeeScriptToken (line 60) | function getCoffeeScriptToken(editor, cur) {
  function getCompletions (line 92) | function getCompletions(token, context, keywords) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/loadmode.js
  function splitCallback (line 5) | function splitCallback(cont, n) {
  function ensureDeps (line 9) | function ensureDeps(mode, cont) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/match-highlighter.js
  function MatchHighlightState (line 9) | function MatchHighlightState() {
  function getMatchHighlightState (line 12) | function getMatchHighlightState(cm) {
  function clearMarks (line 16) | function clearMarks(cm) {
  function markDocument (line 23) | function markDocument(cm, className, minChars) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/search.js
  function SearchState (line 10) | function SearchState() {
  function getSearchState (line 14) | function getSearchState(cm) {
  function dialog (line 17) | function dialog(cm, text, shortText, f) {
  function confirmDialog (line 21) | function confirmDialog(cm, text, shortText, fs) {
  function parseQuery (line 25) | function parseQuery(query) {
  function doSearch (line 31) | function doSearch(cm, rev) {
  function findNext (line 47) | function findNext(cm, rev) {cm.operation(function() {
  function clearSearch (line 57) | function clearSearch(cm) {cm.operation(function() {
  function replace (line 69) | function replace(cm, all) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/searchcursor.js
  function SearchCursor (line 2) | function SearchCursor(cm, query, pos, caseFold) {
  function savePosAndFail (line 80) | function savePosAndFail(line) {

FILE: assets/vendor/CodeMirror-2.25/lib/util/simple-hint.js
  function insert (line 8) | function insert(str) {
  function close (line 41) | function close() {
  function pick (line 46) | function pick() {

FILE: assets/vendor/CodeMirror-2.25/mode/clike/clike.js
  function tokenBase (line 12) | function tokenBase(stream, state) {
  function tokenString (line 54) | function tokenString(quote) {
  function tokenComment (line 67) | function tokenComment(stream, state) {
  function Context (line 79) | function Context(indented, column, type, align, prev) {
  function pushContext (line 86) | function pushContext(state, col, type) {
  function popContext (line 89) | function popContext(state) {
  function words (line 152) | function words(str) {
  function cppHook (line 161) | function cppHook(stream, state) {
  function tokenAtString (line 168) | function tokenAtString(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/clojure/clojure.js
  function makeKeywords (line 10) | function makeKeywords(str) {
  function stateStack (line 51) | function stateStack(indent, type, prev) { // represents a state stack ob...
  function pushStack (line 57) | function pushStack(state, indent, type) {
  function popStack (line 61) | function popStack(state) {
  function isNumber (line 65) | function isNumber(ch, stream){

FILE: assets/vendor/CodeMirror-2.25/mode/coffeescript/coffeescript.js
  function wordRegexp (line 8) | function wordRegexp(words) {
  function tokenBase (line 39) | function tokenBase(stream, state) {
  function tokenFactory (line 166) | function tokenFactory(delimiter, outclass) {
  function longComment (line 194) | function longComment(stream, state) {
  function indent (line 206) | function indent(stream, state, type) {
  function dedent (line 225) | function dedent(stream, state) {
  function tokenLexer (line 249) | function tokenLexer(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/css/css.js
  function ret (line 3) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 5) | function tokenBase(stream, state) {
  function tokenCComment (line 46) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 58) | function tokenSGMLComment(stream, state) {
  function tokenString (line 70) | function tokenString(quote) {

FILE: assets/vendor/CodeMirror-2.25/mode/ecl/ecl.js
  function words (line 3) | function words(str) {
  function metaHook (line 9) | function metaHook(stream, state) {
  function tokenAtString (line 15) | function tokenAtString(stream, state) {
  function tokenBase (line 40) | function tokenBase(stream, state) {
  function tokenString (line 106) | function tokenString(quote) {
  function tokenComment (line 119) | function tokenComment(stream, state) {
  function Context (line 131) | function Context(indented, column, type, align, prev) {
  function pushContext (line 138) | function pushContext(state, col, type) {
  function popContext (line 141) | function popContext(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/erlang/erlang.js
  function isMember (line 69) | function isMember(element,list) {
  function isPrev (line 73) | function isPrev(stream,string) {
  function tokenize (line 90) | function tokenize(stream, state) {
  function doubleQuote (line 222) | function doubleQuote(stream) {
  function singleQuote (line 226) | function singleQuote(stream) {
  function Quote (line 230) | function Quote(stream,quoteChar,escapeChar,tag) {

FILE: assets/vendor/CodeMirror-2.25/mode/gfm/gfm.js
  function markdown (line 38) | function markdown(stream, state) {
  function local (line 53) | function local(stream, state) {
  function handleText (line 69) | function handleText(stream, mdState) {

FILE: assets/vendor/CodeMirror-2.25/mode/go/go.js
  function tokenBase (line 32) | function tokenBase(stream, state) {
  function tokenString (line 76) | function tokenString(quote) {
  function tokenComment (line 89) | function tokenComment(stream, state) {
  function Context (line 101) | function Context(indented, column, type, align, prev) {
  function pushContext (line 108) | function pushContext(state, col, type) {
  function popContext (line 111) | function popContext(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/groovy/groovy.js
  function words (line 2) | function words(str) {
  function tokenBase (line 17) | function tokenBase(stream, state) {
  function startString (line 66) | function startString(quote, stream, state) {
  function tokenBaseUntilBrace (line 92) | function tokenBaseUntilBrace() {
  function tokenComment (line 110) | function tokenComment(stream, state) {
  function expectExpression (line 122) | function expectExpression(last) {
  function Context (line 127) | function Context(indented, column, type, align, prev) {
  function pushContext (line 134) | function pushContext(state, col, type) {
  function popContext (line 137) | function popContext(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/haskell/haskell.js
  function switchState (line 3) | function switchState(source, setState, f) {
  function normal (line 19) | function normal(source, setState) {
  function ncomment (line 110) | function ncomment(type, nest) {
  function stringLiteral (line 134) | function stringLiteral(source, setState) {
  function stringGap (line 157) | function stringGap(source, setState) {
  function setType (line 169) | function setType(t) {

FILE: assets/vendor/CodeMirror-2.25/mode/htmlembedded/htmlembedded.js
  function htmlDispatch (line 11) | function htmlDispatch(stream, state) {
  function scriptingDispatch (line 21) | function scriptingDispatch(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/htmlmixed/htmlmixed.js
  function html (line 6) | function html(stream, state) {
  function maybeBackup (line 22) | function maybeBackup(stream, pat, style) {
  function javascript (line 28) | function javascript(stream, state) {
  function css (line 38) | function css(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/javascript/javascript.js
  function kw (line 8) | function kw(type) {return {type: type, style: "keyword"};}
  function chain (line 24) | function chain(stream, state, f) {
  function nextUntilUnescaped (line 29) | function nextUntilUnescaped(stream, end) {
  function ret (line 42) | function ret(tp, style, cont) {
  function jsTokenBase (line 47) | function jsTokenBase(stream, state) {
  function jsTokenString (line 95) | function jsTokenString(quote) {
  function jsTokenComment (line 103) | function jsTokenComment(stream, state) {
  function JSLexical (line 119) | function JSLexical(indented, column, type, align, prev, info) {
  function inScope (line 128) | function inScope(state, varname) {
  function parseJS (line 133) | function parseJS(state, style, type, content, stream) {
  function pass (line 157) | function pass() {
  function cont (line 160) | function cont() {
  function register (line 164) | function register(varname) {
  function pushcontext (line 177) | function pushcontext() {
  function popcontext (line 181) | function popcontext() {
  function pushlex (line 185) | function pushlex(type, info) {
  function poplex (line 193) | function poplex() {
  function expect (line 203) | function expect(wanted) {
  function statement (line 211) | function statement(type) {
  function expression (line 229) | function expression(type) {
  function maybeexpression (line 239) | function maybeexpression(type) {
  function maybeoperator (line 244) | function maybeoperator(type, value) {
  function maybelabel (line 252) | function maybelabel(type) {
  function property (line 256) | function property(type) {
  function objprop (line 259) | function objprop(type) {
  function commasep (line 263) | function commasep(what, end) {
  function block (line 274) | function block(type) {
  function vardef1 (line 278) | function vardef1(type, value) {
  function vardef2 (line 282) | function vardef2(type, value) {
  function forspec1 (line 286) | function forspec1(type) {
  function formaybein (line 292) | function formaybein(type, value) {
  function forspec2 (line 296) | function forspec2(type, value) {
  function forspec3 (line 301) | function forspec3(type) {
  function functiondef (line 304) | function functiondef(type, value) {
  function funarg (line 308) | function funarg(type, value) {

FILE: assets/vendor/CodeMirror-2.25/mode/jinja2/jinja2.js
  function tokenBase (line 7) | function tokenBase (stream, state) {
  function inTag (line 17) | function inTag (close) {

FILE: assets/vendor/CodeMirror-2.25/mode/less/less.js
  function ret (line 8) | function ret(style, tp) {type = tp; return style;}
  function inTagsArray (line 12) | function inTagsArray(val){
  function tokenBase (line 20) | function tokenBase(stream, state) {
  function tokenSComment (line 142) | function tokenSComment(stream, state) {// SComment = Slash comment
  function tokenCComment (line 148) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 160) | function tokenSGMLComment(stream, state) {
  function tokenString (line 172) | function tokenString(quote) {

FILE: assets/vendor/CodeMirror-2.25/mode/lua/lua.js
  function prefixRE (line 8) | function prefixRE(words) {
  function wordRE (line 11) | function wordRE(words) {
  function readBracket (line 57) | function readBracket(stream) {
  function normal (line 64) | function normal(stream, state) {
  function bracketed (line 87) | function bracketed(level, style) {
  function string (line 100) | function string(quote) {

FILE: assets/vendor/CodeMirror-2.25/mode/markdown/markdown.js
  function switchInline (line 22) | function switchInline(stream, state, f) {
  function switchBlock (line 27) | function switchBlock(stream, state, f) {
  function blankLine (line 35) | function blankLine(state) {
  function blockNormal (line 43) | function blockNormal(stream, state) {
  function htmlBlock (line 68) | function htmlBlock(stream, state) {
  function getType (line 79) | function getType(state) {
  function handleText (line 91) | function handleText(stream, state) {
  function inlineNormal (line 98) | function inlineNormal(stream, state) {
  function linkText (line 131) | function linkText(stream, state) {
  function linkHref (line 143) | function linkHref(stream, state) {
  function footnoteLink (line 152) | function footnoteLink(stream, state) {
  function footnoteUrl (line 160) | function footnoteUrl(stream, state) {
  function inlineRE (line 167) | function inlineRE(endChar) {
  function inlineElement (line 176) | function inlineElement(type, endChar, next) {

FILE: assets/vendor/CodeMirror-2.25/mode/mysql/mysql.js
  function wordRegexp (line 12) | function wordRegexp(words) {
  function tokenBase (line 36) | function tokenBase(stream, state) {
  function tokenLiteral (line 92) | function tokenLiteral(quote) {
  function tokenOpLiteral (line 106) | function tokenOpLiteral(quote) {
  function pushContext (line 121) | function pushContext(state, type, col) {
  function popContext (line 124) | function popContext(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/ntriples/ntriples.js
  function transitState (line 45) | function transitState(currState, c) {

FILE: assets/vendor/CodeMirror-2.25/mode/pascal/pascal.js
  function words (line 2) | function words(str) {
  function tokenBase (line 14) | function tokenBase(stream, state) {
  function tokenString (line 52) | function tokenString(quote) {
  function tokenComment (line 64) | function tokenComment(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/perl/perl.js
  function tokenChain (line 469) | function tokenChain(stream,state,chain,style,tail){	// NOTE: chain.lengt...
  function tokenSOMETHING (line 489) | function tokenSOMETHING(stream,state,string){
  function tokenPerl (line 497) | function tokenPerl(stream,state){

FILE: assets/vendor/CodeMirror-2.25/mode/php/php.js
  function keywords (line 2) | function keywords(str) {
  function heredoc (line 7) | function heredoc(delim) {
  function dispatch (line 58) | function dispatch(stream, state) { // TODO open PHP inside text/css

FILE: assets/vendor/CodeMirror-2.25/mode/pig/pig.js
  function chain (line 16) | function chain(stream, state, f) {
  function ret (line 22) | function ret(tp, style) {
  function tokenComment (line 27) | function tokenComment(stream, state) {
  function tokenString (line 40) | function tokenString(quote) {
  function tokenBase (line 55) | function tokenBase(stream, state) {
  function keywords (line 138) | function keywords(str) {

FILE: assets/vendor/CodeMirror-2.25/mode/plsql/plsql.js
  function chain (line 9) | function chain(stream, state, f) {
  function ret (line 15) | function ret(tp, style) {
  function tokenBase (line 20) | function tokenBase(stream, state) {
  function tokenString (line 80) | function tokenString(quote) {
  function tokenComment (line 93) | function tokenComment(stream, state) {
  function keywords (line 124) | function keywords(str) {

FILE: assets/vendor/CodeMirror-2.25/mode/python/python.js
  function wordRegexp (line 4) | function wordRegexp(words) {
  function tokenBase (line 54) | function tokenBase(stream, state) {
  function tokenStringFactory (line 156) | function tokenStringFactory(delimiter) {
  function indent (line 189) | function indent(stream, state, type) {
  function dedent (line 212) | function dedent(stream, state, type) {
  function tokenLexer (line 245) | function tokenLexer(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/r/r.js
  function wordObj (line 2) | function wordObj(str) {
  function tokenBase (line 14) | function tokenBase(stream, state) {
  function tokenString (line 64) | function tokenString(quote) {
  function push (line 85) | function push(state, type, stream) {
  function pop (line 92) | function pop(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/rst/rst.js
  function setState (line 2) | function setState(state, fn, ctx) {
  function setCtx (line 7) | function setCtx(state, ctx) {
  function setNormal (line 11) | function setNormal(state, ch) {
  function hasMode (line 20) | function hasMode(mode) {
  function getMode (line 34) | function getMode(mode) {
  function normal (line 60) | function normal(stream, state) {
  function inline (line 199) | function inline(stream, state) {
  function directive (line 238) | function directive(stream, state) {
  function body (line 267) | function body(stream, state) {
  function comment (line 280) | function comment(stream, state) {
  function verbatim (line 284) | function verbatim(stream, state) {
  function block (line 300) | function block(stream, state, token) {

FILE: assets/vendor/CodeMirror-2.25/mode/ruby/ruby.js
  function wordObj (line 2) | function wordObj(words) {
  function chain (line 21) | function chain(newtok, stream, state) {
  function tokenBase (line 26) | function tokenBase(stream, state) {
  function tokenBaseUntilBrace (line 102) | function tokenBaseUntilBrace() {
  function readQuoted (line 117) | function readQuoted(quote, style, embed, unescaped) {
  function readHereDoc (line 134) | function readHereDoc(phrase) {
  function readBlockComment (line 141) | function readBlockComment(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/rust/rust.js
  function r (line 27) | function r(tc, style) {
  function tokenBase (line 32) | function tokenBase(stream, state) {
  function tokenString (line 91) | function tokenString(stream, state) {
  function tokenComment (line 105) | function tokenComment(depth) {
  function pass (line 131) | function pass() {
  function cont (line 134) | function cont() {
  function pushlex (line 139) | function pushlex(type, info) {
  function poplex (line 148) | function poplex() {
  function typecx (line 156) | function typecx() { cx.state.keywords = typeKeywords; }
  function valcx (line 157) | function valcx() { cx.state.keywords = valKeywords; }
  function commasep (line 160) | function commasep(comb, end) {
  function stat_of (line 172) | function stat_of(comb, tag) {
  function block (line 175) | function block(type) {
  function endstatement (line 188) | function endstatement(type) {
  function expression (line 192) | function expression(type) {
  function maybeop (line 205) | function maybeop(type) {
  function maybeprop (line 212) | function maybeprop(type) {
  function exprbrace (line 216) | function exprbrace(type) {
  function record_of (line 226) | function record_of(comb) {
  function blockvars (line 236) | function blockvars(type) {
  function letdef1 (line 242) | function letdef1(type) {
  function letdef2 (line 248) | function letdef2(type) {
  function maybetype (line 252) | function maybetype(type) {
  function inop (line 256) | function inop(type) {
  function fndef (line 260) | function fndef(type) {
  function tydef (line 270) | function tydef(type) {
  function enumdef (line 276) | function enumdef(type) {
  function enumblock (line 283) | function enumblock(type) {
  function mod (line 289) | function mod(type) {
  function iface (line 294) | function iface(type) {
  function impl (line 300) | function impl(type) {
  function typarams (line 307) | function typarams(type) {
  function argdef (line 313) | function argdef(type) {
  function rtype (line 318) | function rtype(type) {
  function rtypemaybeparam (line 327) | function rtypemaybeparam(type) {
  function fntype (line 331) | function fntype(type) {
  function pattern (line 336) | function pattern(type) {
  function patternmaybeop (line 343) | function patternmaybeop(type) {
  function altbody (line 348) | function altbody(type) {
  function altblock1 (line 352) | function altblock1(type) {
  function altblock2 (line 359) | function altblock2(type) {
  function macro (line 364) | function macro(type) {
  function matchBrackets (line 368) | function matchBrackets(type, comb) {
  function parse (line 375) | function parse(state, stream, style) {

FILE: assets/vendor/CodeMirror-2.25/mode/scheme/scheme.js
  function makeKeywords (line 9) | function makeKeywords(str) {
  function stateStack (line 18) | function stateStack(indent, type, prev) { // represents a state stack ob...
  function pushStack (line 24) | function pushStack(state, indent, type) {
  function popStack (line 28) | function popStack(state) {
  function isNumber (line 37) | function isNumber(ch, stream){

FILE: assets/vendor/CodeMirror-2.25/mode/shell/shell.js
  function tokenBase (line 7) | function tokenBase(stream, state) {
  function tokenString (line 51) | function tokenString(quote) {
  function tokenize (line 90) | function tokenize(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/smarty/smarty.js
  function ret (line 11) | function ret(style, lst) { last = lst; return style; }
  function tokenizer (line 14) | function tokenizer(stream, state) {
  function inSmarty (line 36) | function inSmarty(stream, state) {
  function inAttribute (line 110) | function inAttribute(quote) {
  function inBlock (line 122) | function inBlock(style, terminator) {

FILE: assets/vendor/CodeMirror-2.25/mode/sparql/sparql.js
  function wordRegexp (line 5) | function wordRegexp(words) {
  function tokenBase (line 15) | function tokenBase(stream, state) {
  function tokenLiteral (line 62) | function tokenLiteral(quote) {
  function pushContext (line 76) | function pushContext(state, type, col) {
  function popContext (line 79) | function popContext(state) {

FILE: assets/vendor/CodeMirror-2.25/mode/stex/stex.js
  function pushCommand (line 8) | function pushCommand(state, command) {
  function peekCommand (line 12) | function peekCommand(state) {
  function popCommand (line 19) | function popCommand(state) {
  function applyMostPowerful (line 26) | function applyMostPowerful(state) {
  function addPluginPattern (line 37) | function addPluginPattern(pluginName, cmdStyle, brackets, styles) {
  function setState (line 80) | function setState(state, f) {
  function normal (line 84) | function normal(source, state) {
  function inCComment (line 140) | function inCComment(source, state) {
  function beginParams (line 146) | function beginParams(source, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/tiddlywiki/tiddlywiki.js
  function kw (line 22) | function kw(type) {
  function kw (line 32) | function kw(type) {
  function chain (line 66) | function chain(stream, state, f) {
  function nextUntilUnescaped (line 72) | function nextUntilUnescaped(stream, end) {
  function ret (line 86) | function ret(tp, style, cont) {
  function jsTokenBase (line 92) | function jsTokenBase(stream, state) {
  function twTokenString (line 229) | function twTokenString(quote) {
  function twTokenComment (line 237) | function twTokenComment(stream, state) {
  function twTokenStrong (line 251) | function twTokenStrong(stream, state) {
  function twTokenCode (line 265) | function twTokenCode(stream, state) {
  function twTokenEm (line 287) | function twTokenEm(stream, state) {
  function twTokenUnderline (line 301) | function twTokenUnderline(stream, state) {
  function twTokenStrike (line 316) | function twTokenStrike(stream, state) {
  function twTokenMacro (line 331) | function twTokenMacro(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/tiki/tiki.js
  function inBlock (line 2) | function inBlock(style, terminator, returnTokenizer) {
  function inLine (line 18) | function inLine(style, terminator) {
  function inText (line 28) | function inText(stream, state) {
  function inPlugin (line 131) | function inPlugin(stream, state) {
  function inAttribute (line 165) | function inAttribute(quote) {
  function inAttributeNoQuote (line 177) | function inAttributeNoQuote() {
  function pass (line 192) | function pass() {
  function cont (line 196) | function cont() {
  function pushContext (line 201) | function pushContext(pluginName, startOfLine) {
  function popContext (line 212) | function popContext() {
  function element (line 216) | function element(type) {
  function endplugin (line 237) | function endplugin(startOfLine) {
  function endcloseplugin (line 249) | function endcloseplugin(err) {
  function attributes (line 257) | function attributes(type) {
  function attvalue (line 262) | function attvalue(type) {
  function attvaluemaybe (line 267) | function attvaluemaybe(type) {

FILE: assets/vendor/CodeMirror-2.25/mode/velocity/velocity.js
  function parseWords (line 2) | function parseWords(str) {
  function chain (line 17) | function chain(stream, state, f) {
  function tokenBase (line 21) | function tokenBase(stream, state) {
  function tokenString (line 87) | function tokenString(quote) {
  function tokenComment (line 102) | function tokenComment(stream, state) {
  function tokenUnparsed (line 114) | function tokenUnparsed(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/verilog/verilog.js
  function tokenBase (line 12) | function tokenBase(stream, state) {
  function tokenString (line 54) | function tokenString(quote) {
  function tokenComment (line 67) | function tokenComment(stream, state) {
  function Context (line 79) | function Context(indented, column, type, align, prev) {
  function pushContext (line 86) | function pushContext(state, col, type) {
  function popContext (line 89) | function popContext(state) {
  function words (line 150) | function words(str) {
  function metaHook (line 170) | function metaHook(stream, state) {
  function tokenAtString (line 176) | function tokenAtString(stream, state) {

FILE: assets/vendor/CodeMirror-2.25/mode/xml/xml.js
  function inText (line 47) | function inText(stream, state) {
  function inTag (line 101) | function inTag(stream, state) {
  function inAttribute (line 122) | function inAttribute(quote) {
  function inBlock (line 134) | function inBlock(style, terminator) {
  function doctype (line 146) | function doctype(depth) {
  function pass (line 168) | function pass() {
  function cont (line 171) | function cont() {
  function pushContext (line 176) | function pushContext(tagName, startOfLine) {
  function popContext (line 186) | function popContext() {
  function element (line 190) | function element(type) {
  function endtag (line 211) | function endtag(startOfLine) {
  function endclosetag (line 226) | function endclosetag(err) {
  function maybePopContext (line 234) | function maybePopContext(nextTagName) {
  function attributes (line 249) | function attributes(type) {
  function attribute (line 255) | function attribute(type) {
  function attvalue (line 260) | function attvalue(type) {
  function attvaluemaybe (line 266) | function attvaluemaybe(type) {

FILE: assets/vendor/CodeMirror-2.25/mode/xquery/xquery.js
  function kw (line 30) | function kw(type) {return {type: type, style: "keyword"};}
  function ret (line 84) | function ret(tp, style, cont) {
  function chain (line 89) | function chain(stream, state, f) {
  function tokenBase (line 95) | function tokenBase(stream, state) {
  function tokenComment (line 229) | function tokenComment(stream, state) {
  function tokenString (line 252) | function tokenString(quote, f) {
  function tokenVariable (line 292) | function tokenVariable(stream, state) {
  function tokenTag (line 309) | function tokenTag(name, isclose) {
  function tokenAttribute (line 332) | function tokenAttribute(stream, state) {
  function tokenXMLComment (line 367) | function tokenXMLComment(stream, state) {
  function tokenCDATA (line 378) | function tokenCDATA(stream, state) {
  function tokenPreProcessing (line 388) | function tokenPreProcessing(stream, state) {
  function isInXmlBlock (line 399) | function isInXmlBlock(state) { return isIn(state, "tag"); }
  function isInXmlAttributeBlock (line 400) | function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); }
  function isInCodeBlock (line 401) | function isInCodeBlock(state) { return isIn(state, "codeblock"); }
  function isInXmlConstructor (line 402) | function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"...
  function isInString (line 403) | function isInString(state) { return isIn(state, "string"); }
  function isEQNameAhead (line 405) | function isEQNameAhead(stream) {
  function isIn (line 415) | function isIn(state, type) {
  function pushStateStack (line 419) | function pushStateStack(state, newState) {
  function popStateStack (line 423) | function popStateStack(state) {

FILE: assets/vendor/CodeMirror-2.25/test/test.js
  function p (line 242) | function p(v) { return v && {line: v[0], ch: v[1]}; }
  function p (line 266) | function p(v) { return v && {line: v[0], ch: v[1]}; }
  function htmlEscape (line 284) | function htmlEscape(str) {
  function forEach (line 287) | function forEach(arr, f) {
  function Failure (line 291) | function Failure(why) {this.message = why;}
  function test (line 293) | function test(name, run) {tests.push({name: name, func: run});}
  function testCM (line 294) | function testCM(name, run, opts) {
  function runTests (line 302) | function runTests() {
  function eq (line 324) | function eq(a, b, msg) {
  function eqPos (line 327) | function eqPos(a, b, msg) {
  function is (line 333) | function is(a, msg) {

FILE: assets/vendor/bootstrap/js/bootstrap.js
  function clearMenus (line 103) | function clearMenus() {
  function getParent (line 108) | function getParent($this) {

FILE: assets/vendor/jquery.js
  function r (line 2) | function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindo...
  function fb (line 2) | function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)...
  function gb (line 2) | function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLengt...
  function hb (line 2) | function hb(a){return a[u]=!0,a}
  function ib (line 2) | function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){re...
  function jb (line 2) | function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[...
  function kb (line 2) | function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sou...
  function lb (line 2) | function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"...
  function mb (line 2) | function mb(a){return function(b){var c=b.nodeName.toLowerCase();return(...
  function nb (line 2) | function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,...
  function ob (line 2) | function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}
  function pb (line 2) | function pb(){}
  function qb (line 2) | function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}
  function rb (line 2) | function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.firs...
  function sb (line 2) | function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e-...
  function tb (line 2) | function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}
  function ub (line 2) | function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(...
  function vb (line 2) | function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)...
  function wb (line 2) | function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.r...
  function xb (line 2) | function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var...
  function w (line 2) | function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){retur...
  function D (line 2) | function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}
  function G (line 2) | function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b...
  function I (line 2) | function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded...
  function J (line 2) | function J(){(y.addEventListener||"load"===event.type||"complete"===y.re...
  function O (line 2) | function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace...
  function P (line 2) | function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&...
  function Q (line 2) | function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType...
  function R (line 3) | function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a...
  function ab (line 3) | function ab(){return!0}
  function bb (line 3) | function bb(){return!1}
  function cb (line 3) | function cb(){try{return y.activeElement}catch(a){}}
  function db (line 3) | function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.cre...
  function ub (line 3) | function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getEl...
  function vb (line 3) | function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}
  function wb (line 3) | function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeTyp...
  function xb (line 3) | function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}
  function yb (line 3) | function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttrib...
  function zb (line 3) | function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval"...
  function Ab (line 3) | function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a)...
  function Bb (line 3) | function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCas...
  function Eb (line 3) | function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getD...
  function Fb (line 3) | function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(...
  function Lb (line 3) | function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?voi...
  function i (line 3) | function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&...
  function Ub (line 3) | function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.sl...
  function Vb (line 3) | function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.styl...
  function Wb (line 3) | function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[...
  function Xb (line 3) | function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===...
  function Yb (line 3) | function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f...
  function Zb (line 3) | function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}
  function fc (line 4) | function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}
  function gc (line 4) | function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d[...
  function hc (line 4) | function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.lengt...
  function ic (line 4) | function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeTyp...
  function jc (line 4) | function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a...
  function kc (line 4) | function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(functio...
  function Lc (line 4) | function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var ...
  function Mc (line 4) | function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!...
  function Nc (line 4) | function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)voi...
  function Oc (line 4) | function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[...
  function Pc (line 4) | function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])fo...
  function x (line 4) | function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=v...
  function Vc (line 4) | function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc....
  function Zc (line 4) | function Zc(){try{return new a.XMLHttpRequest}catch(b){}}
  function $c (line 4) | function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function dd (line 4) | function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.pa...

FILE: assets/vendor/require.js
  function x (line 7) | function x(b){return J.call(b)==="[object Function]"}
  function E (line 7) | function E(b){return J.call(b)==="[object Array]"}
  function o (line 7) | function o(b,e){if(b){var f;for(f=0;f<b.length;f+=1)if(b[f]&&e(b[f],f,b)...
  function M (line 7) | function M(b,e){if(b){var f;for(f=b.length-1;f>-1;f-=1)if(b[f]&&e(b[f],f...
  function y (line 7) | function y(b,e){for(var f in b)if(b.hasOwnProperty(f)&&e(b[f],f))break}
  function N (line 7) | function N(b,e,f,h){e&&y(e,function(e,j){if(f||!F.call(b,j))h&&typeof e!...
  function t (line 7) | function t(b,e){return function(){return e.apply(b,
  function $ (line 8) | function $(b){if(!b)return b;var e=Z;o(b.split("."),function(b){e=e[b]})...
  function aa (line 8) | function aa(b,e,f){return function(){var h=ga.call(arguments,0),c;if(f&&...
  function ba (line 8) | function ba(b,e,f){o([["toUrl"],["undef"],["defined","requireDefined"],[...
  function G (line 8) | function G(b,e,f,h){e=Error(e+"\nhttp://requirejs.org/docs/errors.html#"+
  function ha (line 9) | function ha(){if(H&&H.readyState==="interactive")return H;M(document.get...
  function e (line 11) | function e(a,d,k){var l,b,i,v,e,c,f,g=d&&d.split("/");l=g;var h=m.map,j=...
  function f (line 12) | function f(a){w&&
  function h (line 13) | function h(a){var d=m.paths[a];if(d&&E(d)&&d.length>1)return f(a),d.shif...
  function c (line 13) | function c(a,d,k,l){var b,i,v=a?a.indexOf("!"):-1,c=null,f=d?d.name:null...
  function p (line 14) | function p(a){var d=a.id,k=n[d];k||(k=n[d]=new g.Module(a));return k}
  function r (line 14) | function r(a,d,k){var b=a.id,c=n[b];if(F.call(q,b)&&(!c||c.defineEmitCom...
  function A (line 14) | function A(a,d){var k=a.requireModules,b=!1;if(d)d(a);else if(o(k,functi...
  function s (line 15) | function s(){P.length&&(la.apply(D,[D.length-1,0].concat(P)),P=[])}
  function u (line 15) | function u(a,d,k){a=a&&a.map;d=aa(k||g.require,a,d);ba(d,g,a);d.isBrowse...
  function z (line 15) | function z(a){delete n[a];o(L,function(d,k){if(d.map.id===a)return L.spl...
  function B (line 15) | function B(a,d,k){var b=a.map.id,c=a.depMaps,i;if(a.inited){if(d[b])retu...
  function C (line 16) | function C(a,d,b){var l=a.map.id,c=a.depMaps;if(a.inited&&a.map.isDefine...
  function I (line 16) | function I(a){a.check()}
  function T (line 16) | function T(){var a,d,b,l,c=(b=m.waitSeconds*1E3)&&g.startTime+b<(new Dat...
  function W (line 17) | function W(a){p(c(a[0],null,!0)).init(a[1],a[2])}
  function J (line 17) | function J(a){var a=a.currentTarget||a.srcElement,d=g.onScriptLoad;a.det...

FILE: legacy/assets/jquery.js
  function jQuerySubclass (line 823) | function jQuerySubclass( selector, context ) {
  function doScrollCheck (line 895) | function doScrollCheck() {
  function resolveFunc (line 1059) | function resolveFunc( i ) {
  function dataAttr (line 1602) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 1632) | function isEmptyDataObject( obj ) {
  function returnFalse (line 2732) | function returnFalse() {
  function returnTrue (line 2735) | function returnTrue() {
  function trigger (line 2983) | function trigger( type, elem, args ) {
  function handler (line 3018) | function handler( donor ) {
  function liveHandler (line 3208) | function liveHandler( event ) {
  function liveConvert (line 3291) | function liveConvert( type, selector ) {
  function dirNodeCheck (line 4592) | function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function dirCheck (line 4625) | function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function isDisconnected (line 4882) | function isDisconnected( node ) {
  function winnow (line 5004) | function winnow( elements, qualifier, keep ) {
  function root (line 5377) | function root( elem, cur ) {
  function cloneCopyEvent (line 5384) | function cloneCopyEvent( src, dest ) {
  function cloneFixAttributes (line 5413) | function cloneFixAttributes(src, dest) {
  function getAll (line 5527) | function getAll( elem ) {
  function evalScript (line 5724) | function evalScript( i, elem ) {
  function getWH (line 6063) | function getWH( elem, name, extra ) {
  function addToPrefiltersOrTransports (line 6167) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 6203) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function done (line 6566) | function done( status, statusText, responses, headers ) {
  function buildParams (line 6875) | function buildParams( prefix, obj, traditional, add ) {
  function ajaxHandleResponses (line 6932) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 6997) | function ajaxConvert( s, response ) {
  function xhrOnUnloadAbort (line 7262) | function xhrOnUnloadAbort() {
  function createStandardXHR (line 7272) | function createStandardXHR() {
  function createActiveXHR (line 7278) | function createActiveXHR() {
  function genFx (line 7723) | function genFx( type, num ) {
  function t (line 7832) | function t( gotoEnd ) {
  function defaultDisplay (line 7984) | function defaultDisplay( nodeName ) {
  function getWindow (line 8297) | function getWindow( elem ) {

FILE: server/index.js
  function render (line 79) | function render(filename, template, res) {
  function findResults (line 110) | function findResults(query) {
  function error (line 198) | function error(res, code = 500) {

FILE: test/vendor/chai.js
  function require (line 13) | function require(p) {
  function Assertion (line 177) | function Assertion (obj, msg, stack) {
  function AssertionError (line 274) | function AssertionError (options) {
  function an (line 399) | function an(type) {
  function includeChainingBehavior (line 433) | function includeChainingBehavior () {
  function include (line 437) | function include (val) {
  function checkArguments (line 624) | function checkArguments () {
  function assertEqual (line 658) | function assertEqual (val) {
  function assertAbove (line 720) | function assertAbove (n) {
  function assertBelow (line 767) | function assertBelow (n) {
  function assertInstanceOf (line 850) | function assertInstanceOf (constructor) {
  function assertOwnProperty (line 966) | function assertOwnProperty (name) {
  function assertLengthChain (line 1003) | function assertLengthChain () {
  function assertLength (line 1007) | function assertLength (n) {
  function assertKeys (line 1085) | function assertKeys (keys) {
  function assertThrows (line 1170) | function assertThrows (constructor, msg) {
  function loadShould (line 2364) | function loadShould () {
  function _deepEqual (line 2595) | function _deepEqual(actual, expected) {
  function isUndefinedOrNull (line 2630) | function isUndefinedOrNull(value) {
  function isArguments (line 2634) | function isArguments(object) {
  function objEquiv (line 2638) | function objEquiv(a, b) {
  function parsePath (line 2879) | function parsePath (path) {
  function _getPathValue (line 2904) | function _getPathValue (parsed, obj) {
  function inspect (line 3049) | function inspect(obj, showHidden, depth, colors) {
  function formatValue (line 3088) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3196) | function formatPrimitive(ctx, value) {
  function formatError (line 3220) | function formatError(value) {
  function formatArray (line 3225) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3245) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3305) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3325) | function isArray(ar) {
  function isRegExp (line 3330) | function isRegExp(re) {
  function isDate (line 3334) | function isDate(d) {
  function isError (line 3338) | function isError(e) {
  function objectToString (line 3342) | function objectToString(o) {

FILE: test/vendor/expect.js
  function expect (line 34) | function expect (obj) {
  function Assertion (line 44) | function Assertion (obj, flag, parent) {
  function bind (line 467) | function bind (fn, scope) {
  function every (line 480) | function every (arr, fn, thisObj) {
  function indexOf (line 497) | function indexOf (arr, o, i) {
  function i (line 519) | function i (obj, showHidden, depth) {
  function isArray (line 700) | function isArray (ar) {
  function isRegExp (line 704) | function isRegExp(re) {
  function isDate (line 716) | function isDate(d) {
  function keys (line 721) | function keys (obj) {
  function map (line 737) | function map (arr, mapper, that) {
  function reduce (line 751) | function reduce (arr, fun) {
  function isUndefinedOrNull (line 834) | function isUndefinedOrNull (value) {
  function isArguments (line 838) | function isArguments (object) {
  function objEquiv (line 842) | function objEquiv (a, b) {
  function f (line 897) | function f(n) {
  function date (line 902) | function date(d, key) {
  function quote (line 928) | function quote(string) {
  function str (line 944) | function str(key, holder) {
  function walk (line 1119) | function walk(holder, key) {

FILE: test/vendor/jquery.js
  function G (line 2) | function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=...
  function J (line 2) | function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-...
  function K (line 2) | function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))con...
  function ba (line 2) | function ba(){return!1}
  function bb (line 2) | function bb(){return!0}
  function bh (line 2) | function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}
  function bi (line 2) | function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}
  function bj (line 2) | function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,...
  function bk (line 2) | function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.cre...
  function bC (line 2) | function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ow...
  function bD (line 2) | function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._...
  function bE (line 2) | function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.cle...
  function bF (line 2) | function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getEl...
  function bG (line 2) | function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}
  function bX (line 2) | function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.sl...
  function bY (line 2) | function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(...
  function bZ (line 2) | function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c....
  function b$ (line 2) | function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[...
  function b_ (line 2) | function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,...
  function ca (line 2) | function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f...
  function cb (line 2) | function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body)...
  function ch (line 2) | function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd....
  function cy (line 2) | function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var ...
  function cz (line 2) | function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f...
  function cA (line 2) | function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d...
  function cB (line 2) | function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFi...
  function cC (line 2) | function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dat...
  function cK (line 2) | function cK(){try{return new a.XMLHttpRequest}catch(b){}}
  function cL (line 2) | function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function cT (line 2) | function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}
  function cU (line 2) | function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]...
  function cV (line 2) | function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(funct...
  function cW (line 2) | function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c...
  function cX (line 2) | function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.no...
  function cY (line 2) | function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}
  function cZ (line 2) | function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margi...
  function c_ (line 2) | function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.pa...
  function bd (line 2) | function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}
  function be (line 2) | function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h|...
  function bf (line 2) | function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new ...
  function bg (line 2) | function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l...
  function bh (line 2) | function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a==...
  function bi (line 2) | function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?...
  function bj (line 2) | function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e...
  function bk (line 2) | function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))...
  function a (line 2) | function a(b,c){return new a.fn.init(b,c)}
  function y (line 2) | function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeou...

FILE: test/vendor/mocha.js
  function require (line 6) | function require(p){
  function isArray (line 76) | function isArray(obj) {
  function EventEmitter (line 86) | function EventEmitter(){}
  function on (line 121) | function on () {
  function Progress (line 265) | function Progress() {
  function Context (line 407) | function Context(){}
  function Hook (line 474) | function Hook(title, fn) {
  function visit (line 615) | function visit(obj) {
  function image (line 897) | function image(name) {
  function Mocha (line 916) | function Mocha(options) {
  function Base (line 1223) | function Base(runner) {
  function pad (line 1314) | function pad(str, len) {
  function errorDiff (line 1327) | function errorDiff(err, type) {
  function colorLines (line 1344) | function colorLines(name, str) {
  function Doc (line 1374) | function Doc(runner) {
  function clean (line 1415) | function clean(str) {
  function Dot (line 1451) | function Dot(runner) {
  function HTMLCov (line 1518) | function HTMLCov(runner) {
  function coverageClass (line 1535) | function coverageClass(n) {
  function HTML (line 1578) | function HTML(runner) {
  function error (line 1689) | function error(msg) {
  function fragment (line 1697) | function fragment(html) {
  function text (line 1716) | function text(el, str) {
  function on (line 1728) | function on(el, event, fn) {
  function clean (line 1741) | function clean(str) {
  function JSONCov (line 1801) | function JSONCov(runner, output) {
  function map (line 1844) | function map(cov) {
  function coverage (line 1879) | function coverage(filename, data) {
  function clean (line 1922) | function clean(test) {
  function List (line 1954) | function List(runner) {
  function clean (line 1987) | function clean(test) {
  function JSONReporter (line 2019) | function JSONReporter(runner) {
  function clean (line 2060) | function clean(test) {
  function Landing (line 2110) | function Landing(runner) {
  function List (line 2194) | function List(runner) {
  function Markdown (line 2263) | function Markdown(runner) {
  function clean (line 2341) | function clean(str) {
  function Min (line 2375) | function Min(runner) {
  function Progress (line 2427) | function Progress(runner, options) {
  function Spec (line 2511) | function Spec(runner) {
  function TAP (line 2604) | function TAP(runner) {
  function title (line 2642) | function title(test) {
  function Teamcity (line 2669) | function Teamcity(runner) {
  function escape (line 2702) | function escape(str) {
  function XUnit (line 2730) | function XUnit(runner) {
  function test (line 2768) | function test(test) {
  function tag (line 2790) | function tag(name, attrs, close, content) {
  function cdata (line 2808) | function cdata(str) {
  function Runnable (line 2837) | function Runnable(title, fn) {
  function multiple (line 2939) | function multiple() {
  function done (line 2946) | function done(err) {
  function Runner (line 3021) | function Runner(suite) {
  function next (line 3141) | function next(i) {
  function next (line 3179) | function next(suite) {
  function next (line 3276) | function next(err) {
  function next (line 3337) | function next() {
  function done (line 3343) | function done() {
  function Suite (line 3468) | function Suite(title, ctx) {
  function Test (line 3696) | function Test(title, fn) {
  function ignored (line 3877) | function ignored(path){
  function highlight (line 3996) | function highlight(js) {
  function highlightCode (line 4012) | function highlightCode() {
  function parse (line 4023) | function parse(qs) {

FILE: test/vendor/require.js
  function w (line 7) | function w(b){return I.call(b)==="[object Function]"}
  function D (line 7) | function D(b){return I.call(b)==="[object Array]"}
  function o (line 7) | function o(b,c){if(b){var d;for(d=0;d<b.length;d+=1)if(b[d]&&c(b[d],d,b)...
  function M (line 7) | function M(b,c){if(b){var d;for(d=b.length-1;d>-1;d-=1)if(b[d]&&c(b[d],d...
  function x (line 7) | function x(b,c){for(var d in b)if(b.hasOwnProperty(d)&&c(b[d],d))break}
  function J (line 7) | function J(b,c,d,g){c&&x(c,function(c,j){if(d||!E.call(b,j))g&&typeof c!...
  function t (line 7) | function t(b,c){return function(){return c.apply(b,
  function Z (line 8) | function Z(b){if(!b)return b;var c=Y;o(b.split("."),function(b){c=c[b]})...
  function $ (line 8) | function $(b,c,d){return function(){var g=ga.call(arguments,0),f;if(d&&w...
  function aa (line 8) | function aa(b,c,d){o([["toUrl"],["undef"],["defined","requireDefined"],[...
  function F (line 8) | function F(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+
  function ha (line 9) | function ha(){if(G&&G.readyState==="interactive")return G;M(document.get...
  function c (line 11) | function c(a,e,k){var m,b,n,c,f,d,h,g=e&&e.split("/");m=g;var j=l.map,i=...
  function d (line 12) | function d(a){v&&
  function g (line 13) | function g(a){var e=l.paths[a];if(e&&D(e)&&e.length>1)return d(a),e.shif...
  function f (line 13) | function f(a,e,k,m){var b,n,f=a?a.indexOf("!"):-1,d=null,g=e?e.name:null...
  function p (line 14) | function p(a){var e=a.id,k=i[e];k||(k=i[e]=new h.Module(a));return k}
  function r (line 14) | function r(a,e,k){var b=a.id,c=i[b];if(E.call(q,b)&&(!c||c.defineEmitCom...
  function z (line 14) | function z(a,e){var k=a.requireModules,b=!1;if(e)e(a);else if(o(k,functi...
  function s (line 15) | function s(){O.length&&(la.apply(C,[C.length-1,0].concat(O)),O=[])}
  function u (line 15) | function u(a,e,k){a=a&&a.map;e=$(k||h.require,a,e);aa(e,h,a);e.isBrowser...
  function y (line 15) | function y(a){delete i[a];o(L,function(e,k){if(e.map.id===a)return L.spl...
  function A (line 15) | function A(a,e){var k=a.map.id,b=a.depMaps,c;if(a.inited){if(e[k])return...
  function B (line 16) | function B(a,e,k){var b=a.map.id,c=a.depMaps;if(a.inited&&a.map.isDefine...
  function H (line 16) | function H(a){a.check()}
  function S (line 16) | function S(){var a,e,b,c,f=(b=l.waitSeconds*1E3)&&h.startTime+b<(new Dat...
  function V (line 17) | function V(a){p(f(a[0],null,!0)).init(a[1],a[2])}
  function I (line 17) | function I(a){var a=a.currentTarget||a.srcElement,e=h.onScriptLoad;a.det...

FILE: test/vendor/sinon.js
  function cb (line 132) | function cb(err, res) {
  function makeDone (line 140) | function makeDone(num) {
  function cb (line 153) | function cb(err, res) {
  function callNext (line 160) | function callNext() {
  function next (line 167) | function next(err, result) {
  function keys (line 286) | function keys(object) {
  function isCircular (line 300) | function isCircular(object, objects) {
  function ascii (line 314) | function ascii(object, processed, indent) {
  function isDOMNode (line 472) | function isDOMNode(obj) {
  function isElement (line 491) | function isElement(obj) {
  function isFunction (line 495) | function isFunction(obj) {
  function mirrorProperties (line 499) | function mirrorProperties(target, source) {
  function assertType (line 809) | function assertType(value, type, name) {
  function isMatcher (line 823) | function isMatcher(object) {
  function matchObject (line 827) | function matchObject(expectation, actual) {
  function createPropertyMatcher (line 979) | function createPropertyMatcher(propertyTest, messagePrefix) {
  function spy (line 1055) | function spy(object, property) {
  function delegateToCalls (line 1070) | function delegateToCalls(api, method, matchAny, actual, notCalled) {
  function matchingFake (line 1098) | function matchingFake(fakes, args, strict) {
  function incrementCallCount (line 1112) | function incrementCallCount() {
  function createCallProperties (line 1121) | function createCallProperties() {
  function proxy (line 1164) | function proxy() {
  function throwYieldError (line 1384) | function throwYieldError(proxy, text, args) {
  function stub (line 1569) | function stub(object, property, func) {
  function getCallback (line 1599) | function getCallback(stub, args) {
  function getCallbackError (line 1620) | function getCallbackError(stub, func, args) {
  function callCallback (line 1657) | function callCallback(stub, args) {
  function throwsException (line 1680) | function throwsException(error, message) {
  function mock (line 1890) | function mock(object) {
  function each (line 1901) | function each(collection, callback) {
  function callCountInWords (line 2028) | function callCountInWords(callCount) {
  function expectedCallCountInWords (line 2036) | function expectedCallCountInWords(expectation) {
  function receivedMinCalls (line 2057) | function receivedMinCalls(expectation) {
  function receivedMaxCalls (line 2062) | function receivedMaxCalls(expectation) {
  function getFakes (line 2314) | function getFakes(fakeCollection) {
  function each (line 2322) | function each(fakeCollection, method) {
  function compact (line 2332) | function compact(fakeCollection) {
  function addTimer (line 2465) | function addTimer(args, recurring) {
  function parseTime (line 2491) | function parseTime(str) {
  function createObject (line 2517) | function createObject(object) {
  function ClockDate (line 2661) | function ClockDate(year, month, date, hour, minute, second, ms) {
  function mirrorDateProperties (line 2688) | function mirrorDateProperties(target, source) {
  function restore (line 2719) | function restore() {
  function stubGlobal (line 2735) | function stubGlobal(method, clock) {
  function FakeXMLHttpRequest (line 2913) | function FakeXMLHttpRequest() {
  function verifyState (line 2925) | function verifyState(xhr) {
  function each (line 2937) | function each(collection, callback) {
  function some (line 2943) | function some(collection, callback) {
  function verifyRequestSent (line 3015) | function verifyRequestSent(xhr) {
  function verifyHeadersReceived (line 3021) | function verifyHeadersReceived(xhr) {
  function verifyResponseBodyType (line 3027) | function verifyResponseBodyType(body) {
  function F (line 3355) | function F() {}
  function create (line 3357) | function create(proto) {
  function responseArray (line 3362) | function responseArray(handler) {
  function matchOne (line 3380) | function matchOne(response, reqMethod, reqUrl) {
  function match (line 3389) | function match(response, request) {
  function Server (line 3555) | function Server() {}
  function exposeValue (line 3642) | function exposeValue(sandbox, config, key, value) {
  function prepareSandboxFromConfig (line 3654) | function prepareSandboxFromConfig(config) {
  function test (line 3769) | function test(callback) {
  function createTest (line 3834) | function createTest(property, setUp, tearDown) {
  function testCase (line 3860) | function testCase(tests, prefix) {
  function verifyIsStub (line 3933) | function verifyIsStub() {
  function failAssertion (line 3953) | function failAssertion(object, msg) {
  function mirrorPropAsAssertion (line 3959) | function mirrorPropAsAssertion(name, method, message) {
  function exposedName (line 3986) | function exposedName(prefix, prop) {
Condensed preview — 252 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,455K chars).
[
  {
    "path": ".gitignore",
    "chars": 46,
    "preview": "node_modules/\npublic/\n.DS_Store\nnpm-debug.log\n"
  },
  {
    "path": ".jshintrc",
    "chars": 275,
    "preview": "{\n\t\"curly\": true,\n\t\"eqeqeq\": true,\n\t\"immed\": true,\n\t\"latedef\": true,\n\t\"newcap\": true,\n\t\"noarg\": true,\n\t\"sub\": true,\n\t\"un"
  },
  {
    "path": ".travis.yml",
    "chars": 1310,
    "preview": "branches:\n  only:\n    - master\nbefore_install:\n  - sudo apt update\n  - sudo apt install software-properties-common\n  - s"
  },
  {
    "path": "Gruntfile.js",
    "chars": 605,
    "preview": "/*jshint node:true*/\nmodule.exports = function(grunt) {\n\n  require( \"load-grunt-tasks\" )( grunt );\n\n  grunt.initConfig({"
  },
  {
    "path": "README.md",
    "chars": 1070,
    "preview": "### This site was retired on 2023-08-16.\n\n# [jQuery Fundamentals]\n\n> jQuery Fundamentals is designed to get you comforta"
  },
  {
    "path": "assets/css/base.css",
    "chars": 4066,
    "preview": "* { box-sizing: border-box; }\n\n#adzerk_ad {\n  vertical-align: top;\n}\n\n.navbar .brand {\n  margin-left: 0;\n  padding-left:"
  },
  {
    "path": "assets/js/chapter.js",
    "chars": 152,
    "preview": "/*! jQuery Fundamentals is Copyright 2012 Bocoup LLC */\n\nrequire([ 'controllers/chapter' ], function(ChapterController) "
  },
  {
    "path": "assets/js/controllers/chapter.js",
    "chars": 1651,
    "preview": "define([\n  'jquery',\n  'widgets/editor',\n  'widgets/example',\n  'widgets/results',\n\n  'bootstrap'\n], function($, Editor,"
  },
  {
    "path": "assets/js/sandbox.js",
    "chars": 133,
    "preview": "var log = window.log = function(msg) {\n  var p = document.createElement('p');\n  p.innerHTML = msg;\n  document.body.appen"
  },
  {
    "path": "assets/js/widgets/_evented.js",
    "chars": 487,
    "preview": "define([ 'jquery' ], function($) {\n  return {\n    on : function(evt, fn) {\n      this._listeners = this._listeners || {}"
  },
  {
    "path": "assets/js/widgets/editor.js",
    "chars": 1117,
    "preview": "define([\n  'jquery',\n  'widgets/_evented',\n  'vendor/codemirror'\n], function($, _evented, CodeMirror) {\n  var Editor = f"
  },
  {
    "path": "assets/js/widgets/example.js",
    "chars": 1580,
    "preview": "define([\n  'jquery',\n  'widgets/_evented',\n  'vendor/codemirror'\n], function($, _evented, CodeMirror) {\n  var Example = "
  },
  {
    "path": "assets/js/widgets/results.js",
    "chars": 1034,
    "preview": "define([ 'jquery', 'widgets/_evented' ], function($, _evented) {\n  var Results = function(el, src) {\n    this.el = el;\n "
  },
  {
    "path": "assets/main.js",
    "chars": 360,
    "preview": "requirejs.config({\n  baseUrl : '/public/',\n  shim : {\n    'vendor/codemirror' : {\n      deps : [ 'vendor/CodeMirror-2.25"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/LICENSE",
    "chars": 1228,
    "preview": "Copyright (C) 2012 by Marijn Haverbeke <marijnh@gmail.com>\n\nPermission is hereby granted, free of charge, to any person "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/README.md",
    "chars": 234,
    "preview": "# CodeMirror 2\n\nCodeMirror 2 is a rewrite of [CodeMirror\n1](http://github.com/marijnh/CodeMirror). The docs live\n[here]("
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/activeline.html",
    "chars": 2737,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Active Line Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/changemode.html",
    "chars": 1455,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Mode-Changing Demo</title>\n    <link rel=\"stylesheet\" href=\"../li"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/closetag.html",
    "chars": 2138,
    "preview": "<!doctype html>\r\n<html>\r\n\t<head>\r\n\t\t<title>CodeMirror: Close-Tag Demo</title>\r\n\t\t<link rel=\"stylesheet\" href=\"../lib/cod"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/complete.html",
    "chars": 2495,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Autocomplete Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/emacs.html",
    "chars": 1857,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Emacs bindings demo</title>\n    <link rel=\"stylesheet\" href=\"../l"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/folding.html",
    "chars": 2259,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Code Folding Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/formatting.html",
    "chars": 2494,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Formatting Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/fullscreen.html",
    "chars": 5933,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Full Screen Editing</title>\n    <link rel=\"stylesheet\" href=\"../l"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/loadmode.html",
    "chars": 1258,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Lazy Mode Loading Demo</title>\n    <link rel=\"stylesheet\" href=\"."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/marker.html",
    "chars": 1340,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Breakpoint Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/matchhighlighter.html",
    "chars": 1225,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Match Highlighter Demo</title>\n    <link rel=\"stylesheet\" href=\"."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/mustache.html",
    "chars": 1760,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Overlay Parser Demo</title>\n    <link rel=\"stylesheet\" href=\"../l"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/preview.html",
    "chars": 2166,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: HTML5 preview</title>\n    <meta charset=utf-8>\n    <script src=.."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/resize.html",
    "chars": 1003,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Autoresize Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/runmode.html",
    "chars": 1939,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Mode Runner Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/search.html",
    "chars": 3458,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Search/Replace Demo</title>\n    <link rel=\"stylesheet\" href=\"../l"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/theme.html",
    "chars": 2435,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Theme Demo</title>\n    <link rel=\"stylesheet\" href=\"../lib/codemi"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/vim.html",
    "chars": 1457,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Vim bindings demo</title>\n    <link rel=\"stylesheet\" href=\"../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/demo/visibletabs.html",
    "chars": 1649,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Visible tabs demo</title>\n    <link rel=\"stylesheet\" href=\"../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/compress.html",
    "chars": 10020,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Compression Helper</title>\n    <link rel=\"stylesheet\" type=\"text/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/docs.css",
    "chars": 2083,
    "preview": "body {\n  font-family: Droid Sans, Arial, sans-serif;\n  line-height: 1.5;\n  max-width: 64.3em;\n  margin: 3em auto;\n  padd"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/internals.html",
    "chars": 25389,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Internals</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/manual.html",
    "chars": 56843,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: User Manual</title>\n    <link rel=\"stylesheet\" type=\"text/css\" hr"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/oldrelease.html",
    "chars": 13497,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"http://fo"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/reporting.html",
    "chars": 2142,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Reporting Bugs</title>\n    <link rel=\"stylesheet\" type=\"text/css\""
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/doc/upgrade_v2.2.html",
    "chars": 3613,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Upgrading to v2.2</title>\n    <link rel=\"stylesheet\" type=\"text/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/index.html",
    "chars": 20884,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"http://fo"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/keymap/emacs.js",
    "chars": 1335,
    "preview": "// TODO number prefixes\n(function() {\n  // Really primitive kill-ring implementation.\n  var killRing = [];\n  function ad"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/keymap/vim.js",
    "chars": 16615,
    "preview": "// Supported keybindings:\n// \n// Cursor movement:\n// h, j, k, l\n// e, E, w, W, b, B\n// Ctrl-f, Ctrl-b\n// Ctrl-n, Ctrl-p\n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/codemirror.css",
    "chars": 3486,
    "preview": ".CodeMirror {\n  line-height: 1em;\n  font-family: monospace;\n}\n\n.CodeMirror-scroll {\n  overflow: auto;\n  height: 300px;\n "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/codemirror.js",
    "chars": 125809,
    "preview": "// CodeMirror version 2.25\n//\n// All functions that need access to the editor's state live inside\n// the CodeMirror func"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/closetag.js",
    "chars": 5053,
    "preview": "/**\r\n * Tag-closer extension for CodeMirror.\r\n *\r\n * This extension adds a \"closeTag\" utility function that can be used "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/dialog.css",
    "chars": 401,
    "preview": ".CodeMirror-dialog {\n  position: relative;\n}\n\n.CodeMirror-dialog > div {\n  position: absolute;\n  top: 0; left: 0; right:"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/dialog.js",
    "chars": 1962,
    "preview": "// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function() {\n  function dialogDiv(cm, template) {\n  "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/foldcode.js",
    "chars": 6123,
    "preview": "// the tagRangeFinder function is\n//   Copyright (C) 2011 by Daniel Glazman <daniel@glazman.org>\n// released under the M"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/formatting.js",
    "chars": 10183,
    "preview": "// ============== Formatting extensions ============================\n// A common storage for all mode-specific formattin"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/javascript-hint.js",
    "chars": 5385,
    "preview": "(function () {\n  function forEach(arr, f) {\n    for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);\n  }\n  \n  function"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/loadmode.js",
    "chars": 1786,
    "preview": "(function() {\n  if (!CodeMirror.modeURL) CodeMirror.modeURL = \"../mode/%N/%N.js\";\n\n  var loading = {};\n  function splitC"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/match-highlighter.js",
    "chars": 1682,
    "preview": "// Define match-highlighter commands. Depends on searchcursor.js\n// Use by attaching the following function call to the "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/overlay.js",
    "chars": 1877,
    "preview": "// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/runmode.js",
    "chars": 1611,
    "preview": "CodeMirror.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/search.js",
    "chars": 4761,
    "preview": "// Define search commands. Depends on dialog.js or another\n// implementation of the openDialog method.\n\n// Replace works"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/searchcursor.js",
    "chars": 4694,
    "preview": "(function(){\n  function SearchCursor(cm, query, pos, caseFold) {\n    this.atOccurrence = false; this.cm = cm;\n    if (ca"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/simple-hint.css",
    "chars": 368,
    "preview": ".CodeMirror-completions {\n  position: absolute;\n  z-index: 10;\n  overflow: hidden;\n  -webkit-box-shadow: 2px 3px 5px rgb"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/lib/util/simple-hint.js",
    "chars": 2943,
    "preview": "(function() {\n  CodeMirror.simpleHint = function(editor, getHints) {\n    // We want a single cursor position.\n    if (ed"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/clike/clike.js",
    "chars": 8405,
    "preview": "CodeMirror.defineMode(\"clike\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit,\n      keywords = p"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/clike/index.html",
    "chars": 3054,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: C-like mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/clojure/clojure.js",
    "chars": 12435,
    "preview": "/**\n * Author: Hans Engel\n * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Ch"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/clojure/index.html",
    "chars": 1981,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Clojure mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/coffeescript/LICENSE",
    "chars": 1151,
    "preview": "The MIT License\n\nCopyright (c) 2011 Jeff Pickhardt\nModified from the Python CodeMirror mode, Copyright (c) 2010 Timothy "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/coffeescript/coffeescript.js",
    "chars": 10892,
    "preview": "/**\n * Link to the project's GitHub page:\n * https://github.com/pickhardt/coffeescript-codemirror-mode\n */\nCodeMirror.de"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/coffeescript/index.html",
    "chars": 22060,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: CoffeeScript mode</title>\n    <link rel=\"stylesheet\" href=\"../../"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/css/css.js",
    "chars": 3646,
    "preview": "CodeMirror.defineMode(\"css\", function(config) {\n  var indentUnit = config.indentUnit, type;\n  function ret(style, tp) {t"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/css/index.html",
    "chars": 1051,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: CSS mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/diff/diff.js",
    "chars": 670,
    "preview": "CodeMirror.defineMode(\"diff\", function() {\n\n  var TOKEN_NAMES = {\n    '+': 'tag',\n    '-': 'string',\n    '@': 'meta'\n  }"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/diff/index.html",
    "chars": 4055,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Diff mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ecl/ecl.js",
    "chars": 8721,
    "preview": "CodeMirror.defineMode(\"ecl\", function(config) {\r\n\r\n  function words(str) {\r\n    var obj = {}, words = str.split(\" \");\r\n "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ecl/index.html",
    "chars": 1162,
    "preview": "<!doctype html>\r\n<html>\r\n  <head>\r\n    <title>CodeMirror: ECL mode</title>\r\n    <link rel=\"stylesheet\" href=\"../../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/erlang/erlang.js",
    "chars": 6723,
    "preview": "// erlang    -> CodeMirror tag\n//\n// atom      -> atom\n// attribute -> attribute\n// builtin   -> builtin\n// comment   ->"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/erlang/index.html",
    "chars": 1712,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Erlang mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/gfm/gfm.js",
    "chars": 3035,
    "preview": "CodeMirror.defineMode(\"gfm\", function(config, parserConfig) {\n  var mdMode = CodeMirror.getMode(config, \"markdown\");\n  v"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/gfm/index.html",
    "chars": 1297,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: GFM mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/go/go.js",
    "chars": 5471,
    "preview": "CodeMirror.defineMode(\"go\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n\n  var keywords = {\n "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/go/index.html",
    "chars": 1764,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Go mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codemi"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/groovy/groovy.js",
    "chars": 7154,
    "preview": "CodeMirror.defineMode(\"groovy\", function(config, parserConfig) {\n  function words(str) {\n    var obj = {}, words = str.s"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/groovy/index.html",
    "chars": 1760,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Groovy mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/haskell/haskell.js",
    "chars": 7478,
    "preview": "CodeMirror.defineMode(\"haskell\", function(cmCfg, modeCfg) {\n\n  function switchState(source, setState, f) {\n    setState("
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/haskell/index.html",
    "chars": 1780,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Haskell mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/htmlembedded/htmlembedded.js",
    "chars": 2293,
    "preview": "CodeMirror.defineMode(\"htmlembedded\", function(config, parserConfig) {\n  \n  //config settings\n  var scriptStartRegex = p"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/htmlembedded/index.html",
    "chars": 1703,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Html Embedded Scripts mode</title>\n    <link rel=\"stylesheet\" hre"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/htmlmixed/htmlmixed.js",
    "chars": 2957,
    "preview": "CodeMirror.defineMode(\"htmlmixed\", function(config, parserConfig) {\n  var htmlMode = CodeMirror.getMode(config, {name: \""
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/htmlmixed/index.html",
    "chars": 1558,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: HTML mixed mode</title>\n    <link rel=\"stylesheet\" href=\"../../li"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/javascript/index.html",
    "chars": 2539,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: JavaScript mode</title>\n    <link rel=\"stylesheet\" href=\"../../li"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/javascript/javascript.js",
    "chars": 12819,
    "preview": "CodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var jsonMod"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/jinja2/index.html",
    "chars": 1040,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Jinja2 mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/jinja2/jinja2.js",
    "chars": 1380,
    "preview": "CodeMirror.defineMode(\"jinja2\", function(config, parserConf) {\n    var keywords = [\"block\", \"endblock\", \"for\", \"endfor\","
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/less/index.html",
    "chars": 14889,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: LESS mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/less/less.js",
    "chars": 9240,
    "preview": "/*\nLESS mode - http://www.lesscss.org/\nPorted to CodeMirror by Peter Kroon\n*/\n\nCodeMirror.defineMode(\"less\", function(co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/lua/index.html",
    "chars": 1693,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Lua mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/lua/lua.js",
    "chars": 5347,
    "preview": "// LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's\n// CodeMirror 1 mode.\n// highlights keywords, strings, com"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/markdown/index.html",
    "chars": 9858,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Markdown mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/markdown/markdown.js",
    "chars": 6147,
    "preview": "CodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n  var htmlMode = CodeMirror.getMode(cmCfg, { name: 'xml', "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/mysql/index.html",
    "chars": 1132,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: MySQL mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/cod"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/mysql/mysql.js",
    "chars": 7776,
    "preview": "/*\n *\tMySQL Mode for CodeMirror 2 by MySQL-Tools\n *\t@author James Thorne (partydroid)\n *\t@link \thttp://github.com/partyd"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ntriples/index.html",
    "chars": 998,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: NTriples mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ntriples/ntriples.js",
    "chars": 6348,
    "preview": "/**********************************************************\n* This script provides syntax highlighting support for \n* th"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/pascal/LICENSE",
    "chars": 1078,
    "preview": "Copyright (c) 2011 souceLair <support@sourcelair.com>\n\nPermission is hereby granted, free of charge, to any person obtai"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/pascal/index.html",
    "chars": 1108,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Pascal mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/pascal/pascal.js",
    "chars": 2605,
    "preview": "CodeMirror.defineMode(\"pascal\", function(config) {\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n   "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/perl/LICENSE",
    "chars": 1094,
    "preview": "Copyright (C) 2011 by Sabaca <mail@sabaca.com> under the MIT license.\n\nPermission is hereby granted, free of charge, to "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/perl/index.html",
    "chars": 1212,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Perl mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/perl/perl.js",
    "chars": 29358,
    "preview": "// CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08)\n// This is a part of CodeMirror from https://githu"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/php/index.html",
    "chars": 1499,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: PHP mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/php/php.js",
    "chars": 6113,
    "preview": "(function() {\n  function keywords(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length;"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/pig/index.html",
    "chars": 1132,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Pig Latin mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/pig/pig.js",
    "chars": 5223,
    "preview": "/*\n *\tPig Latin Mode for CodeMirror 2 \n *\t@author Prasanth Jayachandran\n *\t@link \thttps://github.com/prasanthj/pig-codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/plsql/index.html",
    "chars": 1553,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Oracle PL/SQL mode</title>\n    <link rel=\"stylesheet\" href=\"../.."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/plsql/plsql.js",
    "chars": 8430,
    "preview": "CodeMirror.defineMode(\"plsql\", function(config, parserConfig) {\n  var indentUnit       = config.indentUnit,\n      keywor"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/properties/index.html",
    "chars": 1189,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Properties files mode</title>\n    <link rel=\"stylesheet\" href=\".."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/properties/properties.js",
    "chars": 1734,
    "preview": "CodeMirror.defineMode(\"properties\", function() {\n  return {\n    token: function(stream, state) {\n      var sol = stream."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/python/LICENSE.txt",
    "chars": 1075,
    "preview": "The MIT License\n\nCopyright (c) 2010 Timothy Farrell\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/python/index.html",
    "chars": 2835,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Python mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/python/python.js",
    "chars": 12145,
    "preview": "CodeMirror.defineMode(\"python\", function(conf, parserConf) {\n    var ERRORCLASS = 'error';\n    \n    function wordRegexp("
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/r/LICENSE",
    "chars": 1486,
    "preview": "Copyright (c) 2011, Ubalo, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/r/index.html",
    "chars": 2263,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: R mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codemir"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/r/r.js",
    "chars": 4936,
    "preview": "CodeMirror.defineMode(\"r\", function(config) {\n  function wordObj(str) {\n    var words = str.split(\" \"), res = {};\n    fo"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rpm/changes/changes.js",
    "chars": 654,
    "preview": "CodeMirror.defineMode(\"changes\", function(config, modeConfig) {\n  var headerSeperator = /^-+$/;\n  var headerLine = /^(Mo"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rpm/changes/index.html",
    "chars": 1793,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: RPM changes mode</title>\n    <link rel=\"stylesheet\" href=\"../../."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rpm/spec/index.html",
    "chars": 3037,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: RPM spec mode</title>\n    <link rel=\"stylesheet\" href=\"../../../l"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rpm/spec/spec.css",
    "chars": 267,
    "preview": ".cm-s-default span.cm-preamble {color: #b26818; font-weight: bold;}\n.cm-s-default span.cm-macro {color: #b218b2;}\n.cm-s-"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rpm/spec/spec.js",
    "chars": 2698,
    "preview": "// Quick and dirty spec file highlighting\n\nCodeMirror.defineMode(\"spec\", function(config, modeConfig) {\n  var arch = /^("
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rst/index.html",
    "chars": 17578,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: reStructuredText mode</title>\n    <link rel=\"stylesheet\" href=\".."
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rst/rst.js",
    "chars": 8439,
    "preview": "CodeMirror.defineMode('rst', function(config, options) {\n    function setState(state, fn, ctx) {\n        state.fn = fn;\n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ruby/LICENSE",
    "chars": 1487,
    "preview": "Copyright (c) 2011, Ubalo, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ruby/index.html",
    "chars": 5412,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Ruby mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/ruby/ruby.js",
    "chars": 7400,
    "preview": "CodeMirror.defineMode(\"ruby\", function(config, parserConfig) {\n  function wordObj(words) {\n    var o = {};\n    for (var "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rust/index.html",
    "chars": 1071,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Rust mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/rust/rust.js",
    "chars": 15457,
    "preview": "CodeMirror.defineMode(\"rust\", function() {\n  var indentUnit = 4, altIndentUnit = 2;\n  var valKeywords = {\n    \"if\": \"if-"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/scheme/index.html",
    "chars": 2198,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Scheme mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/scheme/scheme.js",
    "chars": 10325,
    "preview": "/**\n * Author: Koh Zi Han, based on implementation by Koh Zi Chun\n */\nCodeMirror.defineMode(\"scheme\", function (config, "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/shell/index.html",
    "chars": 1269,
    "preview": "<!doctype html>\n<meta charset=utf-8>\n<title>CodeMirror: Shell mode</title>\n\n<link rel=stylesheet href=../../lib/codemirr"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/shell/shell.js",
    "chars": 3226,
    "preview": "CodeMirror.defineMode('shell', function(config) {\n\n  var atoms = ['true','false'],\n      keywords = ['if','then','do','e"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/smalltalk/index.html",
    "chars": 1484,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Smalltalk mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/smalltalk/smalltalk.js",
    "chars": 3448,
    "preview": "CodeMirror.defineMode('smalltalk', function(config, modeConfig) {\n\n\tvar specialChars = /[+\\-/\\\\*~<>=@%|&?!.:;^]/;\n\tvar k"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/smarty/index.html",
    "chars": 2306,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Smarty mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/smarty/smarty.js",
    "chars": 3852,
    "preview": "CodeMirror.defineMode(\"smarty\", function(config, parserConfig) {\n  var keyFuncs = [\"debug\", \"extends\", \"function\", \"incl"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/sparql/index.html",
    "chars": 1196,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: SPARQL mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/co"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/sparql/sparql.js",
    "chars": 4605,
    "preview": "CodeMirror.defineMode(\"sparql\", function(config) {\n  var indentUnit = config.indentUnit;\n  var curPunc;\n\n  function word"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/stex/index.html",
    "chars": 3610,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: sTeX mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/stex/stex.js",
    "chars": 4413,
    "preview": "/*\n * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de)\n * Licence: MIT\n */\n\nCodeMirror.defineMode(\"stex\","
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/stex/test.html",
    "chars": 5785,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: sTeX mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiddlywiki/index.html",
    "chars": 4187,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: TiddlyWiki mode</title>\n    <link rel=\"stylesheet\" href=\"../../li"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiddlywiki/tiddlywiki.css",
    "chars": 220,
    "preview": "span.cm-underlined {\n  text-decoration: underline;\n}\nspan.cm-strikethrough {\n  text-decoration: line-through;\n}\nspan.cm-"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiddlywiki/tiddlywiki.js",
    "chars": 9485,
    "preview": "/***\n|''Name''|tiddlywiki.js|\n|''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror|\n|''Author''|PMa"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiki/index.html",
    "chars": 1485,
    "preview": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n  <head>\n    <title>CodeMirror: Tiki wiki mode</title>\n    <link rel=\"styles"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiki/tiki.css",
    "chars": 446,
    "preview": ".cm-tw-syntaxerror {\n\tcolor: #FFFFFF;\n\tbackground-color: #990000;\n}\n\n.cm-tw-deleted {\n\ttext-decoration: line-through;\n}\n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/tiki/tiki.js",
    "chars": 8096,
    "preview": "CodeMirror.defineMode('tiki', function(config, parserConfig) {\n\tfunction inBlock(style, terminator, returnTokenizer) {\n\t"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/vbscript/index.html",
    "chars": 1161,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: VBScript mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/vbscript/vbscript.js",
    "chars": 867,
    "preview": "CodeMirror.defineMode(\"vbscript\", function() {\n  var regexVBScriptKeyword = /^(?:Call|Case|CDate|Clear|CInt|CLng|Const|C"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/velocity/index.html",
    "chars": 2761,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Velocity mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/velocity/velocity.js",
    "chars": 4959,
    "preview": "CodeMirror.defineMode(\"velocity\", function(config) {\n    function parseWords(str) {\n        var obj = {}, words = str.sp"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/verilog/index.html",
    "chars": 6782,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Verilog mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/c"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/verilog/verilog.js",
    "chars": 6996,
    "preview": "CodeMirror.defineMode(\"verilog\", function(config, parserConfig) {\r\n  var indentUnit = config.indentUnit,\r\n      keywords"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xml/index.html",
    "chars": 1617,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: XML mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/codem"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xml/xml.js",
    "chars": 10170,
    "preview": "CodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var Kludges = pars"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/LICENSE",
    "chars": 1109,
    "preview": "Copyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, fre"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/index.html",
    "chars": 9447,
    "preview": "<!doctype html> \n<html> \n<!--\n/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/index.html",
    "chars": 1171,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n      \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n  <h"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testBase.js",
    "chars": 6114,
    "preview": "  $(document).ready(function(){\n    module(\"testBase\");\n    test(\"eviltest\", function() {\n      expect(1);\n\n      var in"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testEmptySequenceKeyword.js",
    "chars": 639,
    "preview": "$(document).ready(function(){\n  module(\"testEmptySequenceKeyword\");\n  test(\"testEmptySequenceKeyword\", function() {\n    "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testMultiAttr.js",
    "chars": 789,
    "preview": "  $(document).ready(function(){\n    module(\"testMultiAttr\");\n    test(\"test1\", function() {\n      expect(1);\n\n      var "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testNamespaces.js",
    "chars": 5494,
    "preview": "$(document).ready(function(){\n  module(\"test namespaces\");\n\n// ---------------------------------------------------------"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testProcessingInstructions.js",
    "chars": 719,
    "preview": "$(document).ready(function(){\n  module(\"testProcessingInstructions\");\n  test(\"testProcessingInstructions\", function() {\n"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/test/testQuotes.js",
    "chars": 1070,
    "preview": "  $(document).ready(function(){\n    module(\"testQuoteEscape\");\n    test(\"testQuoteEscapeDouble\", function() {\n      expe"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/xquery/xquery.js",
    "chars": 15976,
    "preview": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/yaml/index.html",
    "chars": 1744,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: YAML mode</title>\n    <link rel=\"stylesheet\" href=\"../../lib/code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/mode/yaml/yaml.js",
    "chars": 2677,
    "preview": "CodeMirror.defineMode(\"yaml\", function() {\n\t\n\tvar cons = ['true', 'false', 'on', 'off', 'yes', 'no'];\n\tvar keywordRegex "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/test/index.html",
    "chars": 740,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <title>CodeMirror: Test Suite</title>\n    <link rel=\"stylesheet\" href=\"../lib/codemi"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/test/mode_test.css",
    "chars": 317,
    "preview": ".mt-output .mt-token {\n  border: 1px solid #ddd;\n  white-space: pre;\n  font-family: \"Consolas\", monospace;\n  text-align:"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/test/mode_test.js",
    "chars": 4301,
    "preview": "/**\n * Helper to test CodeMirror highlighting modes. It pretty prints output of the\n * highlighter and can check against"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/test/test.js",
    "chars": 11348,
    "preview": "var tests = [];\n\ntest(\"fromTextArea\", function() {\n  var te = document.getElementById(\"code\");\n  te.value = \"CONTENT\";\n "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/ambiance.css",
    "chars": 26155,
    "preview": "/* ambiance theme for code-mirror */\n\n/* Color scheme */\n\n.cm-s-ambiance .cm-keyword { color: #cda869; }\n.cm-s-ambiance "
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/blackboard.css",
    "chars": 1226,
    "preview": "/* Port of TextMate's Blackboard theme */\n\n.cm-s-blackboard { background: #0C1021; color: #F8F8F8; }\n.cm-s-blackboard .C"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/cobalt.css",
    "chars": 1037,
    "preview": ".cm-s-cobalt { background: #002240; color: white; }\n.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !importan"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/eclipse.css",
    "chars": 1050,
    "preview": ".cm-s-eclipse span.cm-meta {color: #FF1717;}\n.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color:"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/elegant.css",
    "chars": 593,
    "preview": ".cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}\n.cm-s-elegant span"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/erlang-dark.css",
    "chars": 1227,
    "preview": ".cm-s-erlang-dark { background: #002240; color: white; }\n.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/lesser-dark.css",
    "chars": 2059,
    "preview": "/*\nhttp://lesscss.org/ dark theme\nPorted to CodeMirror by Peter Kroon\n*/\n.CodeMirror{\n  line-height: 15px;\n}\n.cm-s-lesse"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/monokai.css",
    "chars": 1151,
    "preview": "/* Based on Sublime Text's Monokai theme */\n\n.cm-s-monokai {background: #272822; color: #f8f8f2;}\n.cm-s-monokai div.Code"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/neat.css",
    "chars": 524,
    "preview": ".cm-s-neat span.cm-comment { color: #a86; }\n.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blu"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/night.css",
    "chars": 1118,
    "preview": "/* Loosely based on the Midnight Textmate theme */\n\n.cm-s-night { background: #0a001f; color: #f8f8f8; }\n.cm-s-night div"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/rubyblue.css",
    "chars": 1300,
    "preview": ".cm-s-rubyblue { font:13px/1.4em Trebuchet, Verdana, sans-serif; }\t/* - customized editor font - */\n\n.cm-s-rubyblue { ba"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/solarized.css",
    "chars": 3804,
    "preview": "html * {\n  color-profile: sRGB;\n  rendering-intent: auto;\n}\n.cm-s-solarized-light {\n  background-color: #fdf6e3;\n  color"
  },
  {
    "path": "assets/vendor/CodeMirror-2.25/theme/xq-dark.css",
    "chars": 2296,
    "preview": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, "
  },
  {
    "path": "assets/vendor/bootstrap/css/bootstrap.css",
    "chars": 111423,
    "preview": "/*!\n * Bootstrap v2.1.0\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "assets/vendor/bootstrap/js/bootstrap.js",
    "chars": 3955,
    "preview": "define([ 'jquery' ], function($) {\n\n/* ============================================================\n * bootstrap-dropdow"
  },
  {
    "path": "assets/vendor/codemirror.js",
    "chars": 134,
    "preview": "define([\n  './CodeMirror-2.25/mode/javascript/javascript',\n  './CodeMirror-2.25/mode/xml/xml'\n], function() {\n  return C"
  },
  {
    "path": "assets/vendor/jquery.js",
    "chars": 95786,
    "preview": "/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */\n!function(a,b){\"object\"==typeof modu"
  },
  {
    "path": "assets/vendor/require.js",
    "chars": 14844,
    "preview": "/*\n RequireJS 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.\n Available via the MIT or new BSD "
  },
  {
    "path": "content/ajax-deferreds/index.md",
    "chars": 15841,
    "preview": "title: AJAX & Deferreds\nsandbox: /sandbox/ajax-deferreds\nprevious:\n  name: Effects\n  path: /chapter/effects\nnext: false\n"
  },
  {
    "path": "content/ajax-deferreds/sandbox/index.html",
    "chars": 134,
    "preview": "<h3>Ajax &amp; Deferreds Sandbox</h3>\n\n<div id=\"target\">\n\nThis content will be replaced as you make successful AJAX requ"
  },
  {
    "path": "content/effects/index.md",
    "chars": 6040,
    "preview": "title: Animating Your Pages with jQuery\nsandbox: /sandbox/effects\nprevious:\n  name: Events & Event Delegation\n  path: /c"
  },
  {
    "path": "content/effects/sandbox/index.html",
    "chars": 298,
    "preview": "<h3>Sandbox</h3>\n\n<p>This is some HTML that you can use to try out <a\nhref=\"http://jquery.com\">jQuery</a> in the editor "
  },
  {
    "path": "content/events/index.md",
    "chars": 11560,
    "preview": "title: Events and Event Delegation\nsandbox: /sandbox/events\nprevious:\n  name: Traversing & Manipulating\n  path: /chapter"
  }
]

// ... and 52 more files (download for full content)

About this extraction

This page contains the full source code of the bocoup/jqfundamentals.com GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 252 files (2.2 MB), approximately 591.8k tokens, and a symbol index with 857 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!