Full Code of topheman/vanilla-es6-jspm for AI

master 5813b1e211e7 cached
86 files
247.0 KB
81.5k tokens
54 symbols
1 requests
Download .txt
Showing preview only (270K chars total). Download the full file or copy to clipboard to get everything.
Repository: topheman/vanilla-es6-jspm
Branch: master
Commit: 5813b1e211e7
Files: 86
Total size: 247.0 KB

Directory structure:
gitextract_r5mb_8xo/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── .htmlhintrc
├── .jshintrc
├── .travis.yml
├── LICENSE
├── README.md
├── bin/
│   └── test-build.sh
├── extras/
│   └── yuidoc-theme-topheman/
│       ├── README.md
│       ├── assets/
│       │   ├── css/
│       │   │   ├── main.css
│       │   │   └── main.deprecated.less
│       │   ├── index.html
│       │   ├── js/
│       │   │   ├── api-filter.js
│       │   │   ├── api-list.js
│       │   │   ├── api-search.js
│       │   │   ├── apidocs.js
│       │   │   └── yui-prettify.js
│       │   └── vendor/
│       │       └── prettify/
│       │           ├── CHANGES.html
│       │           ├── COPYING
│       │           ├── README.html
│       │           ├── prettify-min.css
│       │           └── prettify-min.js
│       ├── layouts/
│       │   ├── main.handlebars
│       │   └── xhr.handlebars
│       ├── partials/
│       │   ├── attrs.handlebars
│       │   ├── classes.handlebars
│       │   ├── events.handlebars
│       │   ├── exampleurl.handlebars
│       │   ├── files.handlebars
│       │   ├── index.handlebars
│       │   ├── method.handlebars
│       │   ├── module.handlebars
│       │   ├── options.handlebars
│       │   ├── props.handlebars
│       │   └── sidebar.handlebars
│       └── theme.json
├── gulp/
│   ├── const.js
│   ├── paths.js
│   ├── tasks/
│   │   ├── build.js
│   │   ├── docs.js
│   │   ├── html.js
│   │   ├── images.js
│   │   ├── scripts.js
│   │   ├── server.js
│   │   ├── styles.js
│   │   └── watch.js
│   └── utils.js
├── gulpfile.js
├── jspm.config.js
├── karma.conf.js
├── package.json
├── protractor.config.js
├── src/
│   ├── 404.html
│   ├── analytics.snippet.html
│   ├── app/
│   │   ├── bootstrap.js
│   │   ├── components/
│   │   │   ├── Component/
│   │   │   │   └── Component.js
│   │   │   ├── Geolocation/
│   │   │   │   ├── Geolocation.html
│   │   │   │   └── Geolocation.js
│   │   │   └── Spinner/
│   │   │       ├── Spinner.css
│   │   │       ├── Spinner.html
│   │   │       └── Spinner.js
│   │   ├── main.js
│   │   └── services/
│   │       └── geolocation/
│   │           └── geolocation.js
│   ├── index.html
│   └── styles/
│       ├── _footer.scss
│       ├── _header.scss
│       ├── _index.scss
│       ├── _networks-headers.scss
│       ├── _variables.scss
│       └── main.scss
└── test/
    ├── e2e/
    │   ├── spec/
    │   │   ├── docs.specs.conditional.js
    │   │   └── home.spec.js
    │   └── utils.js
    ├── fixtures/
    │   ├── bs.snippet.html
    │   └── components/
    │       └── simple-wrapper.html
    ├── forever.gulp.serve.dist.json
    ├── forever.gulp.serve.test.json
    ├── jspm.override.json
    ├── stubs/
    │   └── app/
    │       └── services/
    │           └── geolocation/
    │               ├── geolocation.js
    │               └── geolocation.json
    └── unit/
        ├── spec/
        │   ├── components/
        │   │   ├── Component.spec.js
        │   │   ├── Geolocation.spec.js
        │   │   └── Spinner.spec.js
        │   └── services/
        │       └── geolocation.spec.js
        └── utils.js

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

================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
root = true

[*]
# change these settings to your own preference
indent_style = space
indent_size = 2

# it's recommend to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[{package,bower}.json]
indent_style = space
indent_size = 2

================================================
FILE: .gitattributes
================================================
extras/* linguist-vendored


================================================
FILE: .gitignore
================================================
# General

.DS_Store

# dependency directories

npm-debug.log
node_modules
jspm_packages
node_modules.bak
jspm_packages.bak

# ide

nbproject
.idea

# Coverage directory used by tools like istanbul
coverage

# Build and tmp folders for production
build/
.tmp/


================================================
FILE: .htmlhintrc
================================================
{
  "doctype-first": false
}

================================================
FILE: .jshintrc
================================================
{
  "node": true,
  "browser": true,
  "esnext": true,
  "bitwise": true,
  "camelcase": false,
  "curly": true,
  "eqeqeq": true,
  "immed": true,
  "indent": 2,
  "latedef": "nofunc",
  "newcap": true,
  "noarg": true,
  "quotmark": false,
  "undef": true,
  "unused": false,
  "strict": true,
  "trailing": true,
  "smarttabs": true,
  "jquery": false,
  "globals": {
    "System": false,
    "isAngularSite": false,
    "ApplicationConfiguration": false,
    "angular": false,
    "after": false,
    "afterEach": false,
    "before": false,
    "beforeEach": false,
    "browser": false,
    "describe": false,
    "expect": false,
    "inject": false,
    "it": false,
    "by": false,
    "element": false,
    "goToUrl": false,
    "jasmine": false,
    "spyOn": false,
    "protractor": false
  }
}


================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
- '6'
addons:
  sauce_connect: true
env:
  global:
#You don't need the WITH_DOCS variable (this is only for me to launch the e2e tests of the generated doc internally)
  - WITH_DOCS=true
  - secure: lVqaKzskSfk4RQRYWhb/9eF9iY/18+ZDD3+85tCZVQP/SNRybvAUm9TgCJP8T1JYU4xjmKeXsglg6XHabjbTOqHDo76vKk47rtFD8MOz5/GjGaC0fPNbHgjrXcinMquv1P1tJRle31kLf+BBtrj1LAl/PgoGTTm63OhXDiO6ijVoIVgSLHXWHJVSDu2FsEgAn+rO0nQkMUHgAHs1V1ocy+kZjRf+rIMSn7K6Va/sY0dN7r/efB3yQCBDxCKarORCU+ixDtwEApplWr+8p/IXsb4P3NQ80dmIBzYOd++cAVe1GfmMYcqBgZMg7+EjY14RoL+XwPimu7fQ2GhhQbzFrvJYb73a/CSfaMbtvO2oCCLAbfiPuijt7DhuuWJbhtKHTaJ+HHiEExVk6DA9VrQz1dIBgFD8FtblRskxkTRFsIyQGxdqnpoU/gCNL2MoluBtYTMai6TrcDNxZ+U1zlCTGyWbHr8hy/WUW7nW48KS2LlHbNjBlCw6G+WKy2IotyMOahqS+Fnksk0/QeHNAjUYy8lIpG/hZvdalJW8GsMszyeOrw3Pt6pXkjf7U74oLTmimhkHB8WjjV/FtXS70VG0aI3ALRJLSVJlGj1t0NCYI5Lf6CpkpwK0f7/OTs6R5WVpxuo9f4rhJngNPkyEj8HWp2wquihuS1VAvxtvHOPZOd4=
  - secure: fVv0ZWvXcF83t7nLsBYKaXqwMQ3UXlXh/kQ+IHSVifsGlHFZ5bVVghKirpGli1XlvpymGJAhCup3ZdpSeeMMXw4DvjIyAo5LCdElqpYR69w1bW4Bplx1/usYwaRq266i1srlYaXq3mDMg1CBfZ55co7b7PACvDS2IHaq8SY7rAcO3G4C6wHLgbcfB2+TVsIplAz6ntj/2PoqQv60Slsyg0K+8CMaBs/d7f4ckaCUww2TNGyArm1Qiam5+3fvmk+BrJHwX8B3jZwXguh+MaWGi/7Kb2nocT62HijDI0BcZCTjwLcEomZI68ha4T9qjiFOYkrks+fPQZHa8aLfr+LbOW7eSaBf9+ljEoKTx/Gq/NTOoXhvcT2JgJ+nF22RStxN2mehZi/FKHw3IkrNPqpyRsIkNC2seAuAkUHzwJfEuhPq/nraDePi1o3E58c8YYC7SVi+uZGrLG0md1SlQl0iITK16yZYHS/yJAIwGMzrcatQH/2r/WmYCiVox/OZCOhL/vX1CKAXn+b1KlEoesMHuwewq0cPFs94brUQIdDCltRzqCjxzSjKM6z3zKg5cu+8AAglm62RQkD2HdTJIzT/Kf6HLVn0zgGRCoF7f7uAkLO0j4efYgbMnyIUYSWfn8Gr6Xo53tgNzjVdpFmXQ0p6Vpmj/KqHJ1bxC13Wd8l6vS0=
  - secure: rLqLeX4/4gYjXPFmLiAdcy8l2v9WbBvq5EajLtFNkUaAxrqlgZQtwNXdGNrzW7ZI7R86eoknVX9WMRNGQhXOafTNXJ70i3SMtcaQCVvsmwOS+Tz67MTnsLs4tHEivTe5TflU1VpeeF3cZE7/c3H7XxbHDjo7gZR/3C/THBobHjEOk/wuClA97YN9cGwgnc9krki96n/o7MCeDfptsfUNacdGgl77ZLl+2xWzspr2CwYpltPVCT9nmKesLc7cLd5nVw4FVCcTeRV0cXaoQ4ZDfqz3fZIFc3FcNwXbdVqO9E4u8pW68MD/uUGmJXNGDGmLmx8Pwd/fx6cjlIUHOqZYWd8mMBoOXzScQrMosajPKrVVyCo0pn9sohoqIK11+5rDnKjcJ1ZvlEd8hv4Cg5RfQ89Y5fWMyTYk046uHB+jrJ4Clf3n/inZL+h8eh55IyxBOFDmNOBn3qBMIW2WX+siJ2uScCPf2BQQrpVt3GtnKA/dAz4cSfYWPcwVw3vnPC99Rxj4sI9tC0r0kSEXGWpJruUUk3lZvHaFDYoqbZywoDNlAgCMB0149MGa/M9l/5YICIJB3q6UQwHDBNoXJFp7AG0T9f2XOQQ8nEbJvs39F4uSWaFLwdd2W4alJjXpe8ABUO/HofedvPlrrJHOgQNx/zYZj9ZK5y0skJsikaRBBQM=
before_install:
- npm install jspm
- ./node_modules/.bin/jspm config registries.github.auth $JSPM_GITHUB_AUTH_TOKEN
before_script:
- gulp build
- gulp clean
- gulp build --env test
- '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && npm run forever-start-dist || true'
script:
- npm test
- '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && npm run test-e2e || true'


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (C) 2015 Christophe Rosset <tophe@topheman.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.


================================================
FILE: README.md
================================================
vanilla-es6-jspm
================

[![Build Status](https://travis-ci.org/topheman/vanilla-es6-jspm.svg?branch=master)](https://travis-ci.org/topheman/vanilla-es6-jspm)
[![Sauce Test Status](https://saucelabs.com/buildstatus/vanilla-es6-jspm)](https://saucelabs.com/u/vanilla-es6-jspm)
[![devDependency Status](https://david-dm.org/topheman/vanilla-es6-jspm/dev-status.svg)](https://david-dm.org/topheman/vanilla-es6-jspm#info=devDependencies)

**ES6** is here and you can't avoid it. We have great tools to make it work, one of them is **jspm**.

jspm is great but all-in-one yeoman generators or seed projects (with build/sass/livereload/sourcemaps/unit-tests ...) are still lacking, so I decided to make my own angular/ES6/jspm stack.

This project is the first step: a **vanillaJS/ES6/jspm boilerplate** ([more infos on the Wiki](https://github.com/topheman/vanilla-es6-jspm/wiki)).

* [Requirements](#requirements) / [Installation](#installation) / [Launch](#launch)
* [Build](#build) / [Test](#test)
* [Git workflow & Continuous Integration](#git-workflow--continuous-integration)
* [Generate Docs](#generate-docs)
* [Deployment](#deployment) / [Folder organization](#folder-organization)

## Features

* Simple ES6 app using basic **ES6 features**
	* so that you won't have to struggle to understand the code base
	* but advanced enough to be used as an example
* Use **ES6 Modules** via [SystemJS module loader](https://github.com/systemjs/systemjs) (built on top of [ES6 Module Loader Polyfill](https://github.com/ModuleLoader/es6-module-loader))
* Manage development and production workflow with [jspm](http://jspm.io/), [SystemJS Builder](https://github.com/systemjs/builder) and [Gulp](http://gulpjs.com/).
* Backend mocking / stubs / overriding of the module loader
* **Karma unit tests** (using mocks and stubs)
* **e2e testing** with protractor
* Produce optimized, production ready code for deployment
* **Continuous Integration** ready (tests via [Travis CI](https://travis-ci.org/topheman/vanilla-es6-jspm) with [SauceLabs](https://saucelabs.com/u/vanilla-es6-jspm) integration for e2e tests)
* Automated documentation generation

## TL;DR

Want to get started right now and bother about all the great features later ?

```shell
$ npm install -g jspm
$ git clone https://github.com/topheman/vanilla-es6-jspm.git
$ cd vanilla-es6-jspm
$ npm install
$ gulp serve
```

You're ready to develop in ES6 the project in the `src` folder!

## Requirements

* node/npm (tested on both node v4, v5 & v6 - [see tests](https://travis-ci.org/topheman/vanilla-es6-jspm))
* gulp `npm install -g gulp-cli`
* jspm `npm install -g jspm`

[Why all dependencies in local (see wiki) ?](https://github.com/topheman/vanilla-es6-jspm/wiki/FAQ#dependencies)

## Installation

All you need is to run `npm install`

* `npm install`: install all npm dependencies + will **automatically** triggers the following at postinstall (so **you don't need to run those**):
	* `jspm install`: installs front dependencies via jspm
	* `npm run webdriver-manager-update` installs necessary binaries for Selenium (for e2e testing)

## Launch

You can launch your app in different modes (dev/dist/test):

* `gulp serve` : **will launch a dev server**
* `gulp serve --env dist` : will launch the version of the site built in `build/dist` folder (need to `gulp build` before) - *usefull to check your site before deploying it*.
* `gulp serve --env test` : will launch a dev server with test configuration - *usefull to debug / create unit tests*:
	* jspm configuration overridden by the `test/jspm.override.json` file
	* the app will appear with "TEST" in background, thanks to `test/fixtures/bs.snippet.html` injected on the the fly (containing specific css)

You can pass the following flags to the `gulp serve` command:

* `--env`: accepts `dev`, `dist`, `test` (`dev` by default)
* `--port`: overrides the port of the server you'll launch
* `--disable-watch`: disables watching/reloading
* `--open false`: won't open the site in the browser

## Build

* `gulp build` : builds a production ready version of the site in `build/dist` folder
* `gulp build --env test` : same as `gulp build`, but bundles a test version of your website (using `test/jspm.override.json`)
	* can be usefull if you want to do end-to-end testing on a built version of your website

You can also pass the following flags to `gulp build`:

* `--with-docs`: will generate the documentation from source code in `build/dist/docs` ([see generate docs section](#generate-docs))

## Test

### Unit

The unit tests are in `test/unit/spec`.

You can see exactly which commands match the following npm tasks in the [package.json](https://github.com/topheman/vanilla-es6-jspm/blob/master/package.json#L6).

* `npm test`: runs all the tests (will be triggered on `git-pre-commit`)
* `npm run test-unit`: runs the unit tests through `karma`
* `npm run test-build`: tests the `gulp build` task (will be triggered on `git-pre-push`)
	* if `build/dist` folder is under git management ([see deployment section](#deployment)), this task will git stash/unstash before and after testing.

### e2e

The e2e tests are in `test/e2e/spec`. It's using [protractor](http://www.protractortest.org/) - an end-to-end test framework for AngularJS applications, based on [Selenium Webdriver](http://www.seleniumhq.org/). It can also be used on non-angular websites ([more on wiki](https://github.com/topheman/vanilla-es6-jspm/wiki/FAQ#protractor)).

You can run the e2e tests two ways (either way, they need a server in order to run):

* standalone (no need to have a server launched / **make sure you don't**) - launch : `npm run test-e2e-standalone`: this will:
	* start a test server
	* run the e2e tests
	* stop the test server
* if you want to run them against your current server (this should be a server launched in test mode with `gulp serve --env test`), open a new terminal tab and run `npm run test-e2e`

## Git workflow & Continuous Integration

### Git hooks

To prevent you from sending broken code, some client-side git hooks are enabled:

* pre-commit: will run `npm test` (checks jshint, htmlhint and karma unit tests)
* pre-push: will run `npm run test-build` (checks if the build runs smoothly)
	* I decided to put this check on pre-push because: it takes time and git stash/unstash `build/dist` folder repo - it could be put on pre-commit ...

You can bypass those checks by adding to your git command the flag `--no-verify` (but know that the Travis CI build will fail).

### Travis CI

On each push, [Travis CI](https://travis-ci.org/topheman/vanilla-es6-jspm) will run the following tests/builds (see complete steps in [.travis.yml](https://github.com/topheman/vanilla-es6-jspm/blob/master/.travis.yml)):

* `gulp build`: runs the build routine (to make sure it works fine)
* `gulp build --env test`: builds a test version of the app (to be served for e2e tests)
* `npm test`: runs unit tests
* `npm run test-e2e`: runs end to end tests via [SauceLabs](https://saucelabs.com/u/vanilla-es6-jspm)

If either one of them fails, the build will be flagged as failed.

* [Travis CI setup](https://github.com/topheman/vanilla-es6-jspm/wiki/FAQ#travis-ci-setup)
* The `WITH_DOCS=true` env var is exported at the beginning so that the doc generation should also be tested on the `gulp build` task (without changing the commands)
* As you'll see e2e tests don't run on pull requests. [See explanation on the FAQ](https://github.com/topheman/vanilla-es6-jspm/wiki/FAQ#continuous-integration).

### SauceLabs

*You can skip this if e2e testing isn't part of your Continuous Integration workflow.*

SauceLabs is a cross-browser automation tool built on top of Selenium WebDriver (Protractor uses Selenium WebDriver). It lets you run e2e tests accross multiple devices and is well integrated to Travis CI.

If you want to set it up for your own project, [read this post](http://dev.topheman.com/setup-travis-ci-saucelabs-for-protractor).

To avoid traffic on the Sauce Connect tunnel that could lead to timeouts, SauceLabs tests are run against a server serving the `build/dist` folder, containing a bundled version of the site in `test` mode (to benefit from the stubs and mocks) which was created thanks to `gulp build --env test`.

More infos on this commit: [#7898239](https://github.com/topheman/vanilla-es6-jspm/commit/7898239ea252b9163e3e02b77aef2d6e13c0fa5a)

[See the SauceLabs Report](https://saucelabs.com/u/vanilla-es6-jspm) (much like Travis but for e2e tests)

## Generate Docs

Documentation generation is currently based on [YUIDoc](http://yui.github.io/yuidoc/). A set of tasks is at your disposal:

* `npm run yuidoc`: Will generate documentation in `build/docs`
* `gulp build --with-docs`: Same as above, but will also copy the generated documentation to `build/dist/docs` (can be usefull if you have an opensource project and want to share docs)

The configuration of YUIDoc is specified in the `package.json`, in the `yuidoc` entry - you can override this config (the theme for example).

[Here is an example of the output](http://topheman.github.io/vanilla-es6-jspm/docs/).

Notes:

* I'm still looking for a replacement for yuidoc, feel free to use your own doc generator - if you have one more suited for ES6, please let me know.
* I opened an [issue here](https://github.com/topheman/vanilla-es6-jspm/issues/1), for the moment, the doc doesn't display well when served over https.

## Deployment

### On github pages

You can host your project on github pages like this ([source](https://help.github.com/articles/creating-project-pages-manually/)), pushing to the github pages the `dist` folder where the project is built.

```shell
$ gulp build
$ cd build/dist
$ git init
$ git remote add origin https://github.com/username/vanilla-es6-jspm
$ git fetch origin
$ git checkout --orphan gh-pages
$ gulp build
$ git add .
$ git commit -m "first push to production"
$ git push -u origin gh-pages
```

Next time, you'll only have to do the last 4 steps ...

## Folder Organization

### Development

```
src
├── 404.html
├── analytics.snippet.html  --> analytics snippet (only added at build)
├── app                     --> folder containing app js files
│   ├── bootstrap.js        --> js module entry point
│   ├── components
│   ├── main.js
│   └── services
├── favicon-128x128.png
├── favicon-32x32.png
├── favicon.ico
├── images                  --> images files
├── index.html              --> app main file
└── styles                  --> styles folder (.scss)
```

### Production

```
build
├── dist                    --> distribution source code that goes to production
│   ├── 404.html
│   ├── docs                --> generate doc with "gulp build --with-docs"
│   ├── favicon-128x128.png
│   ├── favicon-32x32.png
│   ├── favicon.ico
│   ├── images              --> images files
│   ├── index.html          --> app main file
│   ├── scripts             --> js files
│   │   └── app.bootstrap.build-597baeaa0a.js  --> concat, minify, reved app js files and cached templates
│   └── styles              --> css files
│       └── main.min-b8451af87d.css  --> concat & minify app css files
└── docs                    --> generate doc with "npm run yuidoc"
```

### Test

```
test
├── e2e
│   ├── spec             --> e2e tests run by protractor with jasmine
│   └── utils.js
├── fixtures
│   └── bs.snippet.html  --> html snippet added on gulp serve:test
├── forever.gulp.serve.dist.json
├── forever.gulp.serve.test.json
├── jspm.override.json   --> file to override jspm.config.js in test mode
├── stubs                --> replacements for existing modules, injected in test mode (configured in jspm.override.json)
│   └── app
│       └── services
└── unit
    └── spec             --> unit tests run by karma with jasmine
        ├── components
        └── services
```

## Changelog

See [releases section](https://github.com/topheman/vanilla-es6-jspm/releases).

## Contributing

*This section is in progress*, you can still take a look at the [public trello board](https://trello.com/c/tCihMVXM/46-introduction).

## FAQ

[See Wiki](https://github.com/topheman/vanilla-es6-jspm/wiki/FAQ)

## Resources

[See Wiki](https://github.com/topheman/vanilla-es6-jspm/wiki/Resources)


================================================
FILE: bin/test-build.sh
================================================
#!/usr/bin/env bash

# This script will launch the gulp build task
#
# If your build/dist is under git management,
# it will git stash your modifications before doing anything and restore them
# at the end of the test (wether it passed or not)

# don't put this flag, we need to go through
# always stop on errors
# set -e

GULP_PATH="$(npm bin)/gulp"

BUILD_DIST_IS_GIT=0
BUILD_DIST_IS_GIT_DIRTY=0

# vars retrieving the exit codes of the commands run
GULP_BUILD_EXIT_CODE=0
GULP_CLEAN_EXIT_CODE=0

echo "###### TEST gulp build"

# If build/dist is under git, stash modification - fail if can't stash
if [ -d $(dirname $0)/../build/dist/.git ]
then
  BUILD_DIST_IS_GIT=1
  echo "[INFO] build/dist is under git management"
  cd $(dirname $0)/../build/dist
  echo "[INFO] $(pwd)"

  if [[ -n $(git status --porcelain) ]]
  then
    BUILD_DIST_IS_GIT_DIRTY=1
    echo "[INFO] build/dist has un-committed changes, stashing them"

    cmd="git stash save -u"
    echo "[RUN] $cmd"
    eval $cmd
    if [ $? -gt 0 ]
    then
      echo "[WARN] Couldn't stash modifications please commit your files in build/dist before proceeding"
      exit 1
    fi
  else
    echo "[INFO] build/dist repo is clean, nothing to stash"
  fi
fi

cmd="$GULP_PATH build"
echo "[RUN] $cmd"
eval $cmd
GULP_BUILD_EXIT_CODE=$?
echo "[DEBUG] gulp build exit code : $GULP_BUILD_EXIT_CODE";

cmd="$GULP_PATH clean"
echo "[RUN] $cmd"
eval $cmd
GULP_CLEAN_EXIT_CODE=$?
echo "[DEBUG] gulp clean exit code : $GULP_CLEAN_EXIT_CODE";

if [ $GULP_CLEAN_EXIT_CODE -gt 0 ] && [ $BUILD_DIST_IS_GIT_DIRTY -gt 0 ]
then
  echo "[WARN] Couldn't clean the build/dist repo before git unstash"
  echo "[WARN] Run the following commands manually to get back your repo in build/dist"
  echo "[INFO] gulp clean"
  echo "[INFO] git reset --hard HEAD"
  echo "[INFO] git stash pop --index"
  exit 1
fi

# After cleaning build/dist, if it is a git repo, point it back to the HEAD
if [ $BUILD_DIST_IS_GIT -gt 0 ]
then
  echo "[INFO] build/dist is under git management, pointing back to HEAD"

  cmd="git reset --hard HEAD"
  echo "[RUN] $cmd"
  eval $cmd
  if [ $? -gt 0 ]
  then
    echo "[WARN] Couldn't reset --hard HEAD build/dist repo"
    echo "[WARN] Run the following command manually to get back your repo in build/dist"
    echo "[INFO] git reset --hard HEAD"
    echo "[INFO] git stash pop --index"
    exit 1
  fi
fi

# If build/dist is a git repo and was dirty, retrieve the stash
if [ $BUILD_DIST_IS_GIT_DIRTY -gt 0 ]
then
  echo "[INFO] build/dist is under git management & has stashed files, retrieving stash"

  cmd="git stash pop --index"
  echo "[RUN] $cmd"
  eval $cmd
  if [ $? -gt 0 ]
  then
    echo "[WARN] Couldn't unstash build/dist repo"
    echo "[WARN] Run the following command manually to get back your repo in build/dist"
    echo "[INFO] git stash pop --index"
    exit 1
  fi
else
  if [ $BUILD_DIST_IS_GIT -gt 0 ]
  then
    echo "[INFO] build/dist is under git management but directory was clean at start, nothing to unstash"
  fi
fi

#finally return an exit code according to the gulp build task
if [ $GULP_BUILD_EXIT_CODE -gt 0 ]
then
  echo "[FAILED] gulp build failed. Exiting with code $GULP_BUILD_EXIT_CODE"
  echo "###### END TEST gulp build"
  exit $GULP_BUILD_EXIT_CODE
else
  echo "[PASSED] gulp build passed"
  echo "###### END TEST gulp build"
  exit 0
fi


================================================
FILE: extras/yuidoc-theme-topheman/README.md
================================================
yuidoc-theme-topheman
=====================

My yuidoc theme, inspired by [royriojas/yuidoc-theme-blue](https://github.com/royriojas/yuidoc-theme-blue)

Usage
=====

###Install yuidoc

Globally

`````
npm install -g yuidocjs
`````

Or locally

`````
npm install yuidocjs --save-dev
`````

###Configure

####With yuidoc.json

`yuidoc.json` example:

```
{
  "name": "twitter-stream-channels",
  "description": "Manage multiple channel search on the same Twitter Stream",
  "url": "http://labs.topheman.com/",
  "options": {
    "linkNatives": "true",
    "attributesEmit": "false",
    "selleck": "false",
    "paths": [
      "./lib",
      "./mocks"
    ],
    "outdir": "./yuidoc",
    "themedir" : "./extras/yuidoc-theme-topheman"
  }
}
```

####Inside package.json

You can put yuidoc's configuration metadata directly inside your `package.json`, so that yuidoc will have directly access to your version, description and name.

Just add a `yuidoc` entry in your `package.json`, like that:

```
  "yuidoc":{
    "options": {
      "linkNatives": "true",
      "attributesEmit": "false",
      "selleck": "false",
      "paths": [
        "./lib",
        "./mocks"
      ],
      "outdir": "./yuidoc",
      "themedir" : "./extras/yuidoc-theme-topheman"
    }
  }
```

###Command

####Using yuidoc.json

From global yuidoc

```
yuidoc -c yuidoc.json --project-version 0.2.4
```

From local yuidoc

```
node_modules/.bin/yuidoc -c yuidoc.json --project-version 0.2.4
```

####Using package.json

From global yuidoc

```
yuidoc
```

From local yuidoc

```
node_modules/.bin/yuidoc
```


================================================
FILE: extras/yuidoc-theme-topheman/assets/css/main.css
================================================
util.print: Use console.log instead
/*
Font sizes for all selectors other than the body are given in percentages,
with 100% equal to 13px. To calculate a font size percentage, multiply the
desired size in pixels by 7.6923076923.

Here's a quick lookup table:

10px - 76.923%
11px - 84.615%
12px - 92.308%
13px - 100%
14px - 107.692%
15px - 115.385%
16px - 123.077%
17px - 130.769%
18px - 138.462%
19px - 146.154%
20px - 153.846%
*/
html {
  background: #fff;
  color: #333;
  overflow-y: scroll;
}
body {
  font: 14px/1.4 'Source Sans Pro', 'Helvetica Neue', 'Helvetica', Arial, sans-serif;
  margin: 0;
  padding: 0;
  color: #666;
}
/* -- Links ----------------------------------------------------------------- */
a {
  color: #900000;
  text-decoration: none;
}
.hidden {
  display: none;
}
a:hover {
  text-decoration: underline;
}
/* "Jump to Table of Contents" link is shown to assistive tools, but hidden from
   sight until it's focused. */
.jump {
  position: absolute;
  padding: 3px 6px;
  left: -99999px;
  top: 0;
}
.jump:focus {
  left: 40%;
}
/* -- Paragraphs ------------------------------------------------------------ */
p {
  margin: 0.8em 0;
  font-size: 15px;
}
dd p,
td p {
  margin-bottom: 0;
}
dd p:first-child,
td p:first-child {
  margin-top: 0;
}
/* -- Headings -------------------------------------------------------------- */
h1,
h2,
h3,
h4,
h5,
h6 {
  line-height: 1.1;
  margin: 1.1em 0 0.5em;
  border: none;
  color: #900000;
  font-weight: 300;
  text-decoration: none;
}
h1 {
  font-size: 36px;
  margin: 0.75em 0 0.5em;
}
h2 {
  font-size: 32px;
  margin: 16px 0 10px 0;
}
h3 {
  font-size: 138.462%;
}
h4 {
  border-bottom: 1px solid #DBDFEA;
  font-size: 115.385%;
  font-weight: normal;
  padding-bottom: 2px;
}
h5,
h6 {
  font-size: 107.692%;
}
/* -- Code and examples ----------------------------------------------------- */
code,
kbd,
pre,
samp {
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;
  font-size: 92.308%;
  line-height: 1.35;
}
p code,
p kbd,
p samp,
li code {
  margin: 0 2px;
  padding: 3px 8px;
  border: 1px solid rgba(0, 0, 0, 0);
  background-color: #f8f8f8;
  border-radius: 3px;
}
pre.code,
pre.terminal,
pre.cmd {
  overflow-x: auto;
  *overflow-x: scroll;
  padding: 1em 0.6em;
}
pre.code {
  background: #FCFBFA;
  border: 1px solid #EFEEED;
  border-left-width: 5px;
}
pre.terminal,
pre.cmd {
  background: #F0EFFC;
  border: 1px solid #D0CBFB;
  border-left: 5px solid #D0CBFB;
}
/* Don't reduce the font size of <code>/<kbd>/<samp> elements inside <pre>
   blocks. */
pre code,
pre kbd,
pre samp {
  font-size: 100%;
  line-height: 1.7em;
}
/* Used to denote text that shouldn't be selectable, such as line numbers or
   shell prompts. Guess which browser this doesn't work in. */
.noselect {
  -moz-user-select: -moz-none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  -o-user-select: none;
  user-select: none;
}
/* -- Lists ----------------------------------------------------------------- */
dd {
  margin: 0.2em 0 0.7em 1em;
}
dl {
  margin: 1em 0;
}
dt {
  font-weight: bold;
}
/* -- Tables ---------------------------------------------------------------- */
caption,
th {
  text-align: left;
}
table {
  border-collapse: collapse;
  width: 100%;
}
td,
th {
  border: 1px solid #fff;
  padding: 5px 12px;
  vertical-align: top;
}
td {
  background: #E6E9F5;
}
td dl {
  margin: 0;
}
td dl dl {
  margin: 1em 0;
}
td pre:first-child {
  margin-top: 0;
}
th {
  background: #D2D7E6;
  /*#97A0BF*/
  border-bottom: none;
  border-top: none;
  color: #000;
  /*#FFF1D5*/
  font-family: 'Trebuchet MS', sans-serif;
  font-weight: bold;
  line-height: 1.3;
  white-space: nowrap;
}
/* -- Layout and Content ---------------------------------------------------- */
#doc {
  margin: auto;
  min-width: 1024px;
}
.content {
  padding: 0 20px 0 25px;
}
.sidebar {
  padding: 0 15px 0 20px;
}
#bd {
  padding: 7px 0 60px;
  position: relative;
  width: 99%;
  padding-top: 0px;
}
/* -- Table of Contents ----------------------------------------------------- */
/* The #toc id refers to the single global table of contents, while the .toc
   class refers to generic TOC lists that could be used throughout the page. */
.toc code,
.toc kbd,
.toc samp {
  font-size: 100%;
}
.toc li {
  font-weight: bold;
}
.toc li li {
  font-weight: normal;
}
/* -- Intro and Example Boxes ----------------------------------------------- */
/*
.intro, .example { margin-bottom: 2em; }
.example {
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    -moz-box-shadow: 0 0 5px #bfbfbf;
    -webkit-box-shadow: 0 0 5px #bfbfbf;
    box-shadow: 0 0 5px #bfbfbf;
    padding: 1em;
}
.intro {
    background: none repeat scroll 0 0 #F0F1F8; border: 1px solid #D4D8EB; padding: 0 1em;
}
*/
/* -- Other Styles ---------------------------------------------------------- */
/* These are probably YUI-specific, and should be moved out of Selleck's default
   theme. */
.button {
  border: 1px solid #dadada;
  -moz-border-radius: 3px;
  -webkit-border-radius: 3px;
  border-radius: 3px;
  color: #444;
  display: inline-block;
  font-family: Helvetica, Arial, sans-serif;
  font-size: 92.308%;
  font-weight: bold;
  padding: 4px 13px 3px;
  -moz-text-shadow: 1px 1px 0 #fff;
  -webkit-text-shadow: 1px 1px 0 #fff;
  text-shadow: 1px 1px 0 #fff;
  white-space: nowrap;
  background: #EFEFEF;
  /* old browsers */
  background: -moz-linear-gradient(top, #f5f5f5 0%, #efefef 50%, #e5e5e5 51%, #dfdfdf 100%);
  /* firefox */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(50%, #efefef), color-stop(51%, #e5e5e5), color-stop(100%, #dfdfdf));
  /* webkit */
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#dfdfdf', GradientType=0);
  /* ie */
}
.button:hover {
  border-color: #466899;
  color: #fff;
  text-decoration: none;
  -moz-text-shadow: 1px 1px 0 #222;
  -webkit-text-shadow: 1px 1px 0 #222;
  text-shadow: 1px 1px 0 #222;
  background: #6396D8;
  /* old browsers */
  background: -moz-linear-gradient(top, #6396d8 0%, #5a83bc 50%, #547ab7 51%, #466899 100%);
  /* firefox */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #6396d8), color-stop(50%, #5a83bc), color-stop(51%, #547ab7), color-stop(100%, #466899));
  /* webkit */
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6396D8', endColorstr='#466899', GradientType=0);
  /* ie */
}
.newwindow {
  text-align: center;
}
.header .version em {
  display: block;
  text-align: right;
}
#classdocs .item {
  border-bottom: 1px dashed rgba(70, 104, 153, 0.29);
  margin: 1em 0;
  padding: 0 1.5em 1.8em 1.5em;
}
#classdocs .item:last-of-type {
  border-bottom: none;
}
#classdocs .item .params p,
#classdocs .item .returns p {
  display: inline;
}
#classdocs .item em code,
#classdocs .item em.comment {
  color: green;
}
#classdocs .item em.comment a {
  color: green;
  text-decoration: underline;
}
#classdocs .foundat {
  font-size: 11px;
  font-style: normal;
}
.attrs .emits {
  margin-left: 2em;
  padding: .5em;
  border-left: 1px dashed #ccc;
}
abbr {
  border-bottom: 1px dashed #ccc;
  font-size: 80%;
  cursor: help;
}
.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
  list-style: decimal;
}
ul li p {
  margin-top: 0;
}
.method .name,
.property .name,
.events .name {
  font-size: 110%;
  margin: 0;
}
.apidocs .methods .extends .method,
.apidocs .properties .extends .property,
.apidocs .attrs .extends .attr,
.apidocs .events .extends .event {
  font-weight: bold;
}
.apidocs .methods .extends .inherited,
.apidocs .properties .extends .inherited,
.apidocs .attrs .extends .inherited,
.apidocs .events .extends .inherited {
  font-weight: normal;
}
#hd {
  background: rgba(0, 0, 0, 0.5) url(../img/bgscreen.png);
  border-bottom: 1px solid #DFDFDF;
  padding: 0 15px 1px 20px;
  margin-bottom: 15px;
  box-shadow: 0 1px 20px #333;
  /*position: fixed;*/
  width: 100%;
  box-sizing: border-box;
  z-index: 10;
  cursor: pointer;
}
/* -- API Docs CSS ---------------------------------------------------------- */
/*
This file is organized so that more generic styles are nearer the top, and more
specific styles are nearer the bottom of the file. This allows us to take full
advantage of the cascade to avoid redundant style rules. Please respect this
convention when making changes.
*/
/* -- Generic TabView styles ------------------------------------------------ */
/*
These styles apply to all API doc tabviews. To change styles only for a
specific tabview, see the other sections below.
*/
.yui3-js-enabled .apidocs .tabview {
  visibility: hidden;
  /* Hide until the TabView finishes rendering. */
  _visibility: visible;
}
.apidocs .tabview.yui3-tabview-content {
  visibility: visible;
}
.apidocs .tabview .yui3-tabview-panel {
  background: #fff;
}
/* -- Generic Content Styles ------------------------------------------------ */
/* Headings */
.link-docs {
  float: right;
  font-size: 15px;
  margin: 4px 4px 6px;
  padding: 6px 30px 5px;
}
.apidocs {
  zoom: 1;
}
/* Generic box styles. */
.apidocs .box {
  border: 1px solid;
  margin: 0 0 2em 0;
  padding: 0 1em;
}
/* A flag is a compact, capsule-like indicator of some kind. It's used to
   indicate private and protected items, item return types, etc. in an
   attractive and unobtrusive way. */
.apidocs .flag {
  background: #bababa;
  border-radius: 3px;
  color: #fff;
  font-size: 11px;
  margin: 0 0.5em;
  padding: 2px 4px 1px;
}
/* Class/module metadata such as "Uses", "Extends", "Defined in", etc. */
.apidocs .meta {
  background: #f9f9f9;
  border-color: #efefef;
  color: #555;
  padding: 6px 12px;
}
.apidocs .meta p {
  margin: 0;
  font-size: 14px;
}
/* Deprecation warning. */
.apidocs .box.deprecated,
.apidocs .flag.deprecated {
  background: #fdac9f;
  border: 1px solid #fd7775;
}
.apidocs .box.deprecated p {
  margin: 0.5em 0;
}
.apidocs .flag.deprecated {
  color: #333;
}
/* Module/Class intro description. */
.apidocs .intro {
  background: #f9f9f9;
  border-color: rgba(0, 0, 0, 0);
  border-left: 5px solid #900000;
  padding: 1px 15px;
  margin-bottom: 20px;
}
/* Loading spinners. */
#bd.loading .apidocs,
#api-list.loading .yui3-tabview-panel {
  background: #ffffff url(../img/spinner.gif) no-repeat center 70px;
  min-height: 150px;
}
#bd.loading .apidocs .content,
#api-list.loading .yui3-tabview-panel .apis {
  display: none;
}
.apidocs .no-visible-items {
  color: #666;
}
/* Generic inline list. */
.apidocs ul.inline {
  display: inline;
  list-style: none;
  margin: 0;
  padding: 0;
}
.apidocs ul.inline li {
  display: inline;
}
/* Comma-separated list. */
.apidocs ul.commas li:after {
  content: ',';
}
.apidocs ul.commas li:last-child:after {
  content: '';
}
/* Keyboard shortcuts. */
kbd .cmd {
  font-family: Monaco, Helvetica;
}
/* -- Generic Access Level styles ------------------------------------------- */
.apidocs .item.protected,
.apidocs .item.private,
.apidocs .index-item.protected,
.apidocs .index-item.deprecated,
.apidocs .index-item.private {
  display: none;
}
.show-deprecated .item.deprecated,
.show-deprecated .index-item.deprecated,
.show-protected .item.protected,
.show-protected .index-item.protected,
.show-private .item.private,
.show-private .index-item.private {
  display: block;
}
.hide-inherited .item.inherited,
.hide-inherited .index-item.inherited {
  display: none;
}
/* -- Generic Item Index styles --------------------------------------------- */
.apidocs .index {
  margin: 1.5em 0 3em;
}
.apidocs .index h3 {
  border-bottom: 1px solid #efefef;
  color: #333;
  margin: 1em 0 0.6em;
  padding-bottom: 2px;
  font-size: 28px;
}
.apidocs .index .no-visible-items {
  margin-top: 2em;
}
.apidocs .index-list {
  border-color: #efefef;
  list-style: none;
  margin: 0;
  padding: 0;
  -moz-column-count: 4;
  -moz-column-gap: 10px;
  -moz-column-width: 170px;
  -ms-column-count: 4;
  -ms-column-gap: 10px;
  -ms-column-width: 170px;
  -o-column-count: 4;
  -o-column-gap: 10px;
  -o-column-width: 170px;
  -webkit-column-count: 4;
  -webkit-column-gap: 10px;
  -webkit-column-width: 170px;
  column-count: 4;
  column-gap: 10px;
  column-width: 170px;
}
.apidocs .no-columns .index-list {
  -moz-column-count: 1;
  -ms-column-count: 1;
  -o-column-count: 1;
  -webkit-column-count: 1;
  column-count: 1;
}
.apidocs .index-item {
  white-space: nowrap;
  font-size: 18px;
}
.apidocs .index-item .flag {
  background: none;
  border: none;
  color: #afafaf;
  display: inline;
  margin: 0 0 0 0.2em;
  padding: 0;
}
/* -- Generic API item styles ----------------------------------------------- */
.apidocs .args {
  display: inline;
  margin: 0 0.5em;
}
.apidocs .flag.chainable {
  background: #46ca3b;
}
.apidocs .flag.protected {
  background: #9b86fc;
}
.apidocs .flag.private {
  background: #fd6b1b;
}
.apidocs .flag.async {
  background: #356de4;
}
.apidocs .flag.required {
  background: #e60923;
}
.apidocs .item {
  border-bottom: 1px solid #efefef;
  margin: 1.5em 0 2em;
  padding-bottom: 2em;
}
.apidocs .item h4,
.apidocs .item h5,
.apidocs .item h6 {
  color: #333;
  font-family: inherit;
  font-size: 100%;
}
.apidocs .item .description p,
.apidocs .item pre.code {
  margin: 1em 0 0;
}
.apidocs .item .meta {
  margin-top: 8px;
}
.apidocs .item .name {
  display: inline-block;
}
.apidocs .item .type,
.apidocs .item .type a,
.apidocs .returns-inline {
  color: #555;
}
.apidocs .item .type,
.apidocs .returns-inline {
  margin: 0 0 0 0;
}
.apidocs .item .type a {
  border-bottom: 1px dotted #afafaf;
}
.apidocs .item .type a:hover {
  border: none;
}
/* -- Item Parameter List --------------------------------------------------- */
.apidocs .params-list {
  list-style: square;
  margin: 1em 0 0 2em;
  padding: 0;
}
.apidocs .param {
  margin-bottom: 1em;
}
.apidocs .param .type,
.apidocs .param .type a {
  color: #666;
}
.apidocs .param .type {
  margin: 0 0 0 0.5em;
  *margin-left: 0.5em;
}
.apidocs .param-name {
  font-weight: bold;
}
/* -- Item "Emits" block ---------------------------------------------------- */
.apidocs .item .emits {
  background: #f9f9f9;
  border-color: #eaeaea;
}
/* -- Item "Returns" block -------------------------------------------------- */
.apidocs .item .returns .type,
.apidocs .item .returns .type a {
  font-size: 100%;
  margin: 0;
}
/* -- Class Constructor block ----------------------------------------------- */
.apidocs .constructor .item {
  border: none;
  padding-bottom: 0;
}
/* -- File Source View ------------------------------------------------------ */
.apidocs .file pre.code,
#doc .apidocs .file pre.prettyprint {
  background: inherit;
  border: none;
  overflow: visible;
  padding: 0;
}
.apidocs .L0,
.apidocs .L1,
.apidocs .L2,
.apidocs .L3,
.apidocs .L4,
.apidocs .L5,
.apidocs .L6,
.apidocs .L7,
.apidocs .L8,
.apidocs .L9 {
  background: inherit;
}
/* -- Submodule List -------------------------------------------------------- */
.apidocs .module-submodule-description {
  font-size: 12px;
  margin: 0.3em 0 1em;
}
.apidocs .module-submodule-description p:first-child {
  margin-top: 0;
}
/* -- Sidebar TabView ------------------------------------------------------- */
#api-tabview {
  margin-top: 0.6em;
}
#api-tabview-filter,
#api-tabview-panel {
  border: 1px solid #dfdfdf;
}
#api-tabview-filter {
  border-bottom: none;
  border-top: none;
  padding: 0.6em 10px 0 10px;
}
#api-tabview-panel {
  border-top: none;
}
#api-filter {
  width: 100%;
  -webkit-appearance: none;
  -moz-appearance: none;
  -ms-appearance: none;
  line-height: 40px;
  font-size: 18px;
  font-weight: 300;
  font-family: 'Source Sans Pro', 'Helvetica Neue', 'Helvetica', Arial, sans-serif;
  border: none;
  border-bottom: 1px solid #DFDFDF;
  padding-left: 2px;
  color: #444;
}
#api-filter:focus {
  outline: 0;
  border-bottom: 1px solid #ccc;
}
/* -- Content TabView ------------------------------------------------------- */
#classdocs .yui3-tabview-panel {
  border: none;
}
/* -- Source File Contents -------------------------------------------------- */
.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
  list-style: decimal;
}
/* -- API options ----------------------------------------------------------- */
#api-options {
  /*margin-top: 2.2em;*/
  position: absolute;
  right: 1.5em;
}
/*#api-options label { margin-right: 0.6em; }*/
/* -- API list -------------------------------------------------------------- */
#api-list {
  margin-top: 1.5em;
  *zoom: 1;
}
.apis {
  line-height: 1.4;
  list-style: none;
  margin: 0;
  padding: 0.5em 0 0.5em 0.4em;
}
.apis a {
  border: 1px solid transparent;
  display: block;
  margin: 0 0 0 -4px;
  padding: 2px 10px;
  text-decoration: none;
  line-height: 22px;
}
.apis a:hover,
.apis a:focus {
  background: #900000;
  border-color: #dfdfdf;
  color: #fff;
  outline: none;
}
.api-list-item a:hover,
.api-list-item a:focus {
  text-shadow: none;
}
.apis .message {
  color: #888;
}
.apis .result a {
  padding: 3px 5px 2px;
}
.apis .result .type {
  right: 4px;
  top: 7px;
}
.api-list-item .yui3-highlight {
  font-weight: bold;
}
.blue-method-syntax {
  background: #F3F2F2;
  border-left: 5px solid #900000;
  /*border-left-width: 5px;*/
  padding: 0.5em 1em;
}
.blue-method-syntax li code {
  padding: 0;
  border: 0;
  background: none;
}
.param-description {
  padding: 1px;
}
.params ul li p {
  margin-top: 10px;
  margin-bottom: 10px;
}
.params ul li p:first-of-type {
  margin-top: 5px;
}
.param-name.optional {
  background: #eaf0e4;
  border: 1px solid #eaf0e4;
}
h3.blue-method-name {
  font-size: 28px;
  margin-bottom: 5px;
  padding: 5px 0px 7px;
  border-bottom: 1px solid #5490c7;
}
.apidocs .item .meta.method-meta {
  margin-top: 0;
  margin-bottom: 10px;
}
.blue-return-desc {
  padding-left: 20px;
}
h1.blue-main-title {
  margin: 0;
  color: #fff;
  font-size: 20px;
  line-height: 50px;
}
.project-version {
  color: #fff;
  line-height: 20px;
  padding: 5px 10px;
  position: absolute;
  text-align: right;
  right: 0;
}
.yui-overrride .yui3-skin-sam .yui3-tab-label:hover,
.yui-overrride .yui3-skin-sam .yui3-tab-label:focus {
  background: #FFF4F4;
  outline: 0;
}
.yui-overrride .yui3-skin-sam .yui3-tab-label {
  border: none;
  background: #ececec;
  font-size: 15px;
  font-weight: 300;
}
.yui-overrride .yui3-skin-sam .yui3-tab-selected .yui3-tab-label,
.yui-overrride .yui3-skin-sam .yui3-tab-selected .yui3-tab-label:focus,
.yui-overrride .yui3-skin-sam .yui3-tab-selected .yui3-tab-label:hover {
  background: #900000;
  color: #fff;
}
.yui-overrride .yui3-skin-sam .yui3-tabview-list {
  border-bottom: solid #900000;
}
footer.copyright{
  color: #62686A;
  text-align: center;
  font-size: 90%;
  margin-bottom: 20px;
}


================================================
FILE: extras/yuidoc-theme-topheman/assets/css/main.deprecated.less
================================================
/*
Font sizes for all selectors other than the body are given in percentages,
with 100% equal to 13px. To calculate a font size percentage, multiply the
desired size in pixels by 7.6923076923.

Here's a quick lookup table:

10px - 76.923%
11px - 84.615%
12px - 92.308%
13px - 100%
14px - 107.692%
15px - 115.385%
16px - 123.077%
17px - 130.769%
18px - 138.462%
19px - 146.154%
20px - 153.846%
*/

@font-family:'Source Sans Pro', 'Helvetica Neue', 'Helvetica', Arial, sans-serif;
html {
  background: #fff;
  color: #333;
  overflow-y: scroll;
}

body {
  font: 14px/1.4 @font-family;
  margin: 0;
  padding: 0;
  color:#666;
}

/* -- Links ----------------------------------------------------------------- */
a {
  color: #4085CF;
  text-decoration: none;
}

.hidden {
  display: none;
}

a:hover { text-decoration: underline; }

/* "Jump to Table of Contents" link is shown to assistive tools, but hidden from
   sight until it's focused. */
.jump {
  position: absolute;
  padding: 3px 6px;
  left: -99999px;
  top: 0;
}

.jump:focus { left: 40%; }

/* -- Paragraphs ------------------------------------------------------------ */
p {
  margin: 0.8em 0;
  font-size:15px;
}

dd p, td p { margin-bottom: 0; }
dd p:first-child, td p:first-child { margin-top: 0; }

/* -- Headings -------------------------------------------------------------- */
h1, h2, h3, h4, h5, h6 {
  line-height: 1.1;
  margin: 1.1em 0 0.5em;
  border: none;
  color: #3570BD;
  font-weight: 300;
  text-decoration: none;
}

h1 {
  font-size: 46px;
  margin: 0.75em 0 0.5em;
}

h2 {
  font-size: 32px;
  margin: 16px 0 10px 0;
}

h3 { font-size: 138.462%; }

h4 {
  border-bottom: 1px solid #DBDFEA;
  font-size: 115.385%;
  font-weight: normal;
  padding-bottom: 2px;
}

h5, h6 { font-size: 107.692%; }

/* -- Code and examples ----------------------------------------------------- */
code, kbd, pre, samp {
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;
  font-size: 92.308%;
  line-height: 1.35;
}

p code, p kbd, p samp, li code {

  margin: 0 2px;
  padding: 3px 8px;
  border: 1px solid rgba(0,0,0,0);
  background-color: #f8f8f8;
  border-radius: 3px;
}

a code, a kbd, a samp,
pre code, pre kbd, pre samp,
table code, table kbd, table samp,
.intro code, .intro kbd, .intro samp,
.toc code, .toc kbd, .toc samp {

}

pre.code, pre.terminal, pre.cmd {
  overflow-x: auto;
  *overflow-x: scroll;
  padding: 1em 0.6em;
}

pre.code {
  background: #FCFBFA;
  border: 1px solid #EFEEED;
  border-left-width: 5px;
}

pre.terminal, pre.cmd {
  background: #F0EFFC;
  border: 1px solid #D0CBFB;
  border-left: 5px solid #D0CBFB;
}

/* Don't reduce the font size of <code>/<kbd>/<samp> elements inside <pre>
   blocks. */
pre code, pre kbd, pre samp {
  font-size: 100%;
  line-height: 1.7em;
}

/* Used to denote text that shouldn't be selectable, such as line numbers or
   shell prompts. Guess which browser this doesn't work in. */
.noselect {
  -moz-user-select: -moz-none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  -o-user-select: none;
  user-select: none;
}

/* -- Lists ----------------------------------------------------------------- */
dd { margin: 0.2em 0 0.7em 1em; }
dl { margin: 1em 0; }
dt { font-weight: bold; }

/* -- Tables ---------------------------------------------------------------- */
caption, th { text-align: left; }

table {
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #fff;
  padding: 5px 12px;
  vertical-align: top;
}

td { background: #E6E9F5; }
td dl { margin: 0; }
td dl dl { margin: 1em 0; }
td pre:first-child { margin-top: 0; }

th {
  background: #D2D7E6;/*#97A0BF*/
  border-bottom: none;
  border-top: none;
  color: #000;/*#FFF1D5*/
  font-family: 'Trebuchet MS', sans-serif;
  font-weight: bold;
  line-height: 1.3;
  white-space: nowrap;
}


/* -- Layout and Content ---------------------------------------------------- */
#doc {
  margin: auto;
  min-width: 1024px;
}

.content { padding: 0 20px 0 25px; }

.sidebar {
  padding: 0 15px 0 20px;
}
#bd {
  padding: 7px 0 130px;
  position: relative;
  width: 99%;
  padding-top: 50px;
}

/* -- Table of Contents ----------------------------------------------------- */

/* The #toc id refers to the single global table of contents, while the .toc
   class refers to generic TOC lists that could be used throughout the page. */

.toc code, .toc kbd, .toc samp { font-size: 100%; }
.toc li { font-weight: bold; }
.toc li li { font-weight: normal; }

/* -- Intro and Example Boxes ----------------------------------------------- */
/*
.intro, .example { margin-bottom: 2em; }
.example {
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    -moz-box-shadow: 0 0 5px #bfbfbf;
    -webkit-box-shadow: 0 0 5px #bfbfbf;
    box-shadow: 0 0 5px #bfbfbf;
    padding: 1em;
}
.intro {
    background: none repeat scroll 0 0 #F0F1F8; border: 1px solid #D4D8EB; padding: 0 1em;
}
*/

/* -- Other Styles ---------------------------------------------------------- */

/* These are probably YUI-specific, and should be moved out of Selleck's default
   theme. */

.button {
  border: 1px solid #dadada;
  -moz-border-radius: 3px;
  -webkit-border-radius: 3px;
  border-radius: 3px;
  color: #444;
  display: inline-block;
  font-family: Helvetica, Arial, sans-serif;
  font-size: 92.308%;
  font-weight: bold;
  padding: 4px 13px 3px;
  -moz-text-shadow: 1px 1px 0 #fff;
  -webkit-text-shadow: 1px 1px 0 #fff;
  text-shadow: 1px 1px 0 #fff;
  white-space: nowrap;

  background: #EFEFEF; /* old browsers */
  background: -moz-linear-gradient(top, #f5f5f5 0%, #efefef 50%, #e5e5e5 51%, #dfdfdf 100%); /* firefox */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(50%,#efefef), color-stop(51%,#e5e5e5), color-stop(100%,#dfdfdf)); /* webkit */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#dfdfdf',GradientType=0 ); /* ie */
}

.button:hover {
  border-color: #466899;
  color: #fff;
  text-decoration: none;
  -moz-text-shadow: 1px 1px 0 #222;
  -webkit-text-shadow: 1px 1px 0 #222;
  text-shadow: 1px 1px 0 #222;

  background: #6396D8; /* old browsers */
  background: -moz-linear-gradient(top, #6396D8 0%, #5A83BC 50%, #547AB7 51%, #466899 100%); /* firefox */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6396D8), color-stop(50%,#5A83BC), color-stop(51%,#547AB7), color-stop(100%,#466899)); /* webkit */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6396D8', endColorstr='#466899',GradientType=0 ); /* ie */
}

.newwindow { text-align: center; }

.header .version em {
  display: block;
  text-align: right;
}


#classdocs .item {
  border-bottom: 1px dashed rgba(70, 104, 153, 0.29);
  margin: 1em 0;
  padding: 0 1.5em 1.8em 1.5em;
  &:last-of-type {
    border-bottom: none;
  }
}

#classdocs .item .params p,
#classdocs .item .returns p,{
  display: inline;
}

#classdocs .item em code, #classdocs .item em.comment {
  color: green;
}

#classdocs .item em.comment a {
  color: green;
  text-decoration: underline;
}

#classdocs .foundat {
  font-size: 11px;
  font-style: normal;
}

.attrs .emits {
  margin-left: 2em;
  padding: .5em;
  border-left: 1px dashed #ccc;
}

abbr {
  border-bottom: 1px dashed #ccc;
  font-size: 80%;
  cursor: help;
}

.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
  list-style: decimal;
}

ul li p {
  margin-top: 0;
}

.method .name, .property .name, .events .name {
  font-size: 110%;
  margin:0;
}

.apidocs .methods .extends .method,
.apidocs .properties .extends .property,
.apidocs .attrs .extends .attr,
.apidocs .events .extends .event {
  font-weight: bold;
}

.apidocs .methods .extends .inherited,
.apidocs .properties .extends .inherited,
.apidocs .attrs .extends .inherited,
.apidocs .events .extends .inherited {
  font-weight: normal;
}

#hd {
  background: rgba(0, 0, 0, 0.5) url(../img/bgscreen.png);
  border-bottom: 1px solid #DFDFDF;
  padding: 0 15px 1px 20px;
  margin-bottom: 15px;
  box-shadow: 0 1px 20px #333;
  position: fixed;
  width: 100%;
  box-sizing: border-box;
  z-index: 10;
}

/* -- API Docs CSS ---------------------------------------------------------- */

/*
This file is organized so that more generic styles are nearer the top, and more
specific styles are nearer the bottom of the file. This allows us to take full
advantage of the cascade to avoid redundant style rules. Please respect this
convention when making changes.
*/

/* -- Generic TabView styles ------------------------------------------------ */

/*
These styles apply to all API doc tabviews. To change styles only for a
specific tabview, see the other sections below.
*/

.yui3-js-enabled .apidocs .tabview {
  visibility: hidden; /* Hide until the TabView finishes rendering. */
  _visibility: visible;
}

.apidocs .tabview.yui3-tabview-content { visibility: visible; }
.apidocs .tabview .yui3-tabview-panel { background: #fff; }

/* -- Generic Content Styles ------------------------------------------------ */

/* Headings */

.link-docs {
  float: right;
  font-size: 15px;
  margin: 4px 4px 6px;
  padding: 6px 30px 5px;
}

.apidocs { zoom: 1; }

/* Generic box styles. */
.apidocs .box {
  border: 1px solid;
  margin: 0 0 2em 0;
  padding: 0 1em;
}

/* A flag is a compact, capsule-like indicator of some kind. It's used to
   indicate private and protected items, item return types, etc. in an
   attractive and unobtrusive way. */
.apidocs .flag {
  background: #bababa;
  border-radius: 3px;
  color: #fff;
  font-size: 11px;
  margin: 0 0.5em;
  padding: 2px 4px 1px;
}

/* Class/module metadata such as "Uses", "Extends", "Defined in", etc. */
.apidocs .meta {
  background: #f9f9f9;
  border-color: #efefef;
  color: #555;
  padding: 6px 12px;
}

.apidocs .meta p {
  margin: 0;
  font-size:14px;
}

/* Deprecation warning. */
.apidocs .box.deprecated,
.apidocs .flag.deprecated {
  background: #fdac9f;
  border: 1px solid #fd7775;
}

.apidocs .box.deprecated p { margin: 0.5em 0; }
.apidocs .flag.deprecated { color: #333; }

/* Module/Class intro description. */
.apidocs .intro {
  background: #f9f9f9;
  border-color: rgba(0, 0, 0, 0);
  border-left: 5px solid #69b2ec;
  padding: 1px 15px;
  margin-bottom: 20px;
}

/* Loading spinners. */
#bd.loading .apidocs,
#api-list.loading .yui3-tabview-panel {
  background: #fff url(../img/spinner.gif) no-repeat center 70px;
  min-height: 150px;
}

#bd.loading .apidocs .content,
#api-list.loading .yui3-tabview-panel .apis {
  display: none;
}

.apidocs .no-visible-items { color: #666; }

/* Generic inline list. */
.apidocs ul.inline {
  display: inline;
  list-style: none;
  margin: 0;
  padding: 0;
}

.apidocs ul.inline li { display: inline; }

/* Comma-separated list. */
.apidocs ul.commas li:after { content: ','; }
.apidocs ul.commas li:last-child:after { content: ''; }

/* Keyboard shortcuts. */
kbd .cmd { font-family: Monaco, Helvetica; }

/* -- Generic Access Level styles ------------------------------------------- */
.apidocs .item.protected,
.apidocs .item.private,
.apidocs .index-item.protected,
.apidocs .index-item.deprecated,
.apidocs .index-item.private {
  display: none;
}

.show-deprecated .item.deprecated,
.show-deprecated .index-item.deprecated,
.show-protected .item.protected,
.show-protected .index-item.protected,
.show-private .item.private,
.show-private .index-item.private {
  display: block;
}

.hide-inherited .item.inherited,
.hide-inherited .index-item.inherited {
  display: none;
}

/* -- Generic Item Index styles --------------------------------------------- */
.apidocs .index { margin: 1.5em 0 3em; }

.apidocs .index h3 {
  border-bottom: 1px solid #efefef;
  color: #333;
  margin: 1em 0 0.6em;
  padding-bottom: 2px;
  font-size: 28px;
}

.apidocs .index .no-visible-items { margin-top: 2em; }

.apidocs .index-list {
  border-color: #efefef;

  list-style: none;
  margin: 0;
  padding: 0;
  -moz-column-count: 4;
  -moz-column-gap: 10px;
  -moz-column-width: 170px;
  -ms-column-count: 4;
  -ms-column-gap: 10px;
  -ms-column-width: 170px;
  -o-column-count: 4;
  -o-column-gap: 10px;
  -o-column-width: 170px;
  -webkit-column-count: 4;
  -webkit-column-gap: 10px;
  -webkit-column-width: 170px;
  column-count: 4;
  column-gap: 10px;
  column-width: 170px;
}

.apidocs .no-columns .index-list {
  -moz-column-count: 1;
  -ms-column-count: 1;
  -o-column-count: 1;
  -webkit-column-count: 1;
  column-count: 1;
}

.apidocs .index-item {
  white-space: nowrap;
  font-size:18px;
}

.apidocs .index-item .flag {
  background: none;
  border: none;
  color: #afafaf;
  display: inline;
  margin: 0 0 0 0.2em;
  padding: 0;
}

/* -- Generic API item styles ----------------------------------------------- */
.apidocs .args {
  display: inline;
  margin: 0 0.5em;
}

.apidocs .flag.chainable { background: #46ca3b; }
.apidocs .flag.protected { background: #9b86fc; }
.apidocs .flag.private { background: #fd6b1b; }
.apidocs .flag.async { background: #356de4; }
.apidocs .flag.required { background: #e60923; }

.apidocs .item {
  border-bottom: 1px solid #efefef;
  margin: 1.5em 0 2em;
  padding-bottom: 2em;
}

.apidocs .item:nth-of-type(2n+1) {

}

.apidocs .item h4,
.apidocs .item h5,
.apidocs .item h6 {
  color: #333;
  font-family: inherit;
  font-size: 100%;
}

.apidocs .item .description p,
.apidocs .item pre.code {
  margin: 1em 0 0;
}

.apidocs .item .meta {
  margin-top: 8px;
}

.apidocs .item .name {
  display: inline-block;
}

.apidocs .item .type,
.apidocs .item .type a,
.apidocs .returns-inline {
  color: #555;
}

.apidocs .item .type,
.apidocs .returns-inline {

  margin: 0 0 0 0;
}

.apidocs .item .type a { border-bottom: 1px dotted #afafaf; }
.apidocs .item .type a:hover { border: none; }

/* -- Item Parameter List --------------------------------------------------- */
.apidocs .params-list {
  list-style: square;
  margin: 1em 0 0 2em;
  padding: 0;
}

.apidocs .param { margin-bottom: 1em; }

.apidocs .param .type,
.apidocs .param .type a {
  color: #666;
}

.apidocs .param .type {
  margin: 0 0 0 0.5em;
  *margin-left: 0.5em;
}

.apidocs .param-name { font-weight: bold; }

/* -- Item "Emits" block ---------------------------------------------------- */
.apidocs .item .emits {
  background: #f9f9f9;
  border-color: #eaeaea;
}

/* -- Item "Returns" block -------------------------------------------------- */
.apidocs .item .returns .type,
.apidocs .item .returns .type a {
  font-size: 100%;
  margin: 0;
}

/* -- Class Constructor block ----------------------------------------------- */
.apidocs .constructor .item {
  border: none;
  padding-bottom: 0;
}

/* -- File Source View ------------------------------------------------------ */
.apidocs .file pre.code,
#doc .apidocs .file pre.prettyprint {
  background: inherit;
  border: none;
  overflow: visible;
  padding: 0;
}

.apidocs .L0,
.apidocs .L1,
.apidocs .L2,
.apidocs .L3,
.apidocs .L4,
.apidocs .L5,
.apidocs .L6,
.apidocs .L7,
.apidocs .L8,
.apidocs .L9 {
  background: inherit;
}

/* -- Submodule List -------------------------------------------------------- */
.apidocs .module-submodule-description {
  font-size: 12px;
  margin: 0.3em 0 1em;
}

.apidocs .module-submodule-description p:first-child { margin-top: 0; }

/* -- Sidebar TabView ------------------------------------------------------- */
#api-tabview { margin-top: 0.6em; }

#api-tabview-filter,
#api-tabview-panel {
  border: 1px solid #dfdfdf;
}

#api-tabview-filter {
  border-bottom: none;
  border-top: none;
  padding: 0.6em 10px 0 10px;
}

#api-tabview-panel { border-top: none; }
#api-filter {
  width: 100%;
  -webkit-appearance: none;
  -moz-appearance:none;
  -ms-appearance:none;
  line-height: 40px;
  font-size: 18px;
  font-weight: 300;
  font-family: @font-family;
  border: none;
  border-bottom: 1px solid #DFDFDF;
  padding-left: 2px;
  color: #444;

  &:focus {
    outline: 0;
    border-bottom: 1px solid #ccc;
  }

}

/* -- Content TabView ------------------------------------------------------- */
#classdocs .yui3-tabview-panel { border: none; }

/* -- Source File Contents -------------------------------------------------- */
.prettyprint li.L0,
.prettyprint li.L1,
.prettyprint li.L2,
.prettyprint li.L3,
.prettyprint li.L5,
.prettyprint li.L6,
.prettyprint li.L7,
.prettyprint li.L8 {
  list-style: decimal;
}

/* -- API options ----------------------------------------------------------- */
#api-options {

  margin-top: 2.2em;
  position: absolute;
  right: 1.5em;
}

/*#api-options label { margin-right: 0.6em; }*/

/* -- API list -------------------------------------------------------------- */
#api-list {
  margin-top: 1.5em;
  *zoom: 1;
}

.apis {
  line-height: 1.4;
  list-style: none;
  margin: 0;
  padding: 0.5em 0 0.5em 0.4em;
}

.apis a {
  border: 1px solid transparent;
  display: block;
  margin: 0 0 0 -4px;
  padding: 2px 10px;
  text-decoration: none;
  line-height: 22px;
}

.apis a:hover,
.apis a:focus {
  background: #69b2ec;
  border-color: #AAC0FA;
  color: #fff;
  outline: none;
}

.api-list-item a:hover,
.api-list-item a:focus {
  text-shadow: none;
}

.apis .message { color: #888; }
.apis .result a { padding: 3px 5px 2px; }

.apis .result .type {
  right: 4px;
  top: 7px;
}

.api-list-item .yui3-highlight {
  font-weight: bold;
}


.blue-method-syntax {
  background: #F3F2F2;
  border-left: 5px solid #69b2ec;
  /*border-left-width: 5px;*/
  padding: 0.5em 1em;
}

.blue-method-syntax li code {
  padding:0;
  border:0;
  background:none;
}
.param-description {
  padding: 1px;
}

.params ul li p {
  margin-top: 10px;
  margin-bottom: 10px;
}
.params ul li p:first-of-type {
  margin-top:5px;
}

.param-name.optional{
  background: rgb(234, 240, 228);
  border: 1px solid rgb(234, 240, 228);
}

h3.blue-method-name {
  font-size: 28px;
  margin-bottom: 5px;
  padding: 5px 0px 7px;
  border-bottom:1px solid #5490c7;
}

.apidocs .item .meta.method-meta {
  margin-top: 0;
  margin-bottom: 10px;
}

.meta.method-meta {

}

.blue-return-desc {
  padding-left:20px;
}

h1.blue-main-title {
  margin: 0;
  color: #fff;
  font-size:20px;
  line-height: 50px;
}

.project-version {
  color: #fff;
  line-height: 20px;
  padding: 5px 10px;
  position: absolute;
  text-align: right;
  right: 0;
}


.yui-overrride{
  .yui3-skin-sam .yui3-tab-label:hover, .yui3-skin-sam .yui3-tab-label:focus {
    background: #D9EAF5;
    outline: 0;
  }

  .yui3-skin-sam .yui3-tab-label {
    border:none;
    background: rgb(236, 236, 236);
    font-size: 15px;
    font-weight: 300;
  }

  .yui3-skin-sam .yui3-tab-selected .yui3-tab-label, .yui3-skin-sam .yui3-tab-selected .yui3-tab-label:focus, .yui3-skin-sam .yui3-tab-selected .yui3-tab-label:hover {
    background: rgb(105, 178, 236);
    color: #fff;
  }

  .yui3-skin-sam .yui3-tabview-list {
    border-bottom:solid rgb(105, 178, 236);
  }
}



================================================
FILE: extras/yuidoc-theme-topheman/assets/index.html
================================================
<!doctype html>
<html>
    <head>
        <title>Redirector</title>
        <meta http-equiv="refresh" content="0;url=../">
    </head>
    <body>
        <a href="../">Click here to redirect</a>
    </body>
</html>


================================================
FILE: extras/yuidoc-theme-topheman/assets/js/api-filter.js
================================================
YUI.add('api-filter', function (Y) {

Y.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], {
    // -- Initializer ----------------------------------------------------------
    initializer: function () {
        this._bindUIACBase();
        this._syncUIACBase();
    },
    getDisplayName: function(name) {

        Y.each(Y.YUIDoc.meta.allModules, function(i) {
            if (i.name === name && i.displayName) {
                name = i.displayName;
            }
        });

        return name;
    }

}, {
    // -- Attributes -----------------------------------------------------------
    ATTRS: {
        resultHighlighter: {
            value: 'phraseMatch'
        },

        // May be set to "classes" or "modules".
        queryType: {
            value: 'classes'
        },

        source: {
            valueFn: function() {
                var self = this;
                return function(q) {
                    var data = Y.YUIDoc.meta[self.get('queryType')],
                        out = [];
                    Y.each(data, function(v) {
                        if (v.toLowerCase().indexOf(q.toLowerCase()) > -1) {
                            out.push(v);
                        }
                    });
                    return out;
                };
            }
        }
    }
});

}, '3.4.0', {requires: [
    'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources'
]});


================================================
FILE: extras/yuidoc-theme-topheman/assets/js/api-list.js
================================================
YUI.add('api-list', function (Y) {

var Lang   = Y.Lang,
    YArray = Y.Array,

    APIList = Y.namespace('APIList'),

    classesNode    = Y.one('#api-classes'),
    inputNode      = Y.one('#api-filter'),
    modulesNode    = Y.one('#api-modules'),
    tabviewNode    = Y.one('#api-tabview'),

    tabs = APIList.tabs = {},

    filter = APIList.filter = new Y.APIFilter({
        inputNode : inputNode,
        maxResults: 1000,

        on: {
            results: onFilterResults
        }
    }),

    search = APIList.search = new Y.APISearch({
        inputNode : inputNode,
        maxResults: 100,

        on: {
            clear  : onSearchClear,
            results: onSearchResults
        }
    }),

    tabview = APIList.tabview = new Y.TabView({
        srcNode  : tabviewNode,
        panelNode: '#api-tabview-panel',
        render   : true,

        on: {
            selectionChange: onTabSelectionChange
        }
    }),

    focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, {
        circular   : true,
        descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a',
        keys       : {next: 'down:40', previous: 'down:38'}
    }).focusManager,

    LIST_ITEM_TEMPLATE =
        '<li class="api-list-item {typeSingular}">' +
            '<a href="{rootPath}{typePlural}/{name}.html">{displayName}</a>' +
        '</li>';

// -- Init ---------------------------------------------------------------------

// Duckpunch FocusManager's key event handling to prevent it from handling key
// events when a modifier is pressed.
Y.before(function (e, activeDescendant) {
    if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
        return new Y.Do.Prevent();
    }
}, focusManager, '_focusPrevious', focusManager);

Y.before(function (e, activeDescendant) {
    if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
        return new Y.Do.Prevent();
    }
}, focusManager, '_focusNext', focusManager);

// Create a mapping of tabs in the tabview so we can refer to them easily later.
tabview.each(function (tab, index) {
    var name = tab.get('label').toLowerCase();

    tabs[name] = {
        index: index,
        name : name,
        tab  : tab
    };
});

// Switch tabs on Ctrl/Cmd-Left/Right arrows.
tabviewNode.on('key', onTabSwitchKey, 'down:37,39');

// Focus the filter input when the `/` key is pressed.
Y.one(Y.config.doc).on('key', onSearchKey, 'down:83');

// Keep the Focus Manager up to date.
inputNode.on('focus', function () {
    focusManager.set('activeDescendant', inputNode);
});

// Update all tabview links to resolved URLs.
tabview.get('panelNode').all('a').each(function (link) {
    link.setAttribute('href', link.get('href'));
});

// -- Private Functions --------------------------------------------------------
function getFilterResultNode() {
    return filter.get('queryType') === 'classes' ? classesNode : modulesNode;
}

// -- Event Handlers -----------------------------------------------------------
function onFilterResults(e) {
    var frag         = Y.one(Y.config.doc.createDocumentFragment()),
        resultNode   = getFilterResultNode(),
        typePlural   = filter.get('queryType'),
        typeSingular = typePlural === 'classes' ? 'class' : 'module';

    if (e.results.length) {
        YArray.each(e.results, function (result) {
            frag.append(Lang.sub(LIST_ITEM_TEMPLATE, {
                rootPath    : APIList.rootPath,
                displayName : filter.getDisplayName(result.highlighted),
                name        : result.text,
                typePlural  : typePlural,
                typeSingular: typeSingular
            }));
        });
    } else {
        frag.append(
            '<li class="message">' +
                'No ' + typePlural + ' found.' +
            '</li>'
        );
    }

    resultNode.empty(true);
    resultNode.append(frag);

    focusManager.refresh();
}

function onSearchClear(e) {

    focusManager.refresh();
}

function onSearchKey(e) {
    var target = e.target;

    if (target.test('input,select,textarea')
            || target.get('isContentEditable')) {
        return;
    }

    e.preventDefault();

    inputNode.focus();
    focusManager.refresh();
}

function onSearchResults(e) {
    var frag = Y.one(Y.config.doc.createDocumentFragment());

    if (e.results.length) {
        YArray.each(e.results, function (result) {
            frag.append(result.display);
        });
    } else {
        frag.append(
            '<li class="message">' +
                'No results found. Maybe you\'ll have better luck with a ' +
                'different query?' +
            '</li>'
        );
    }


    focusManager.refresh();
}

function onTabSelectionChange(e) {
    var tab  = e.newVal,
        name = tab.get('label').toLowerCase();

    tabs.selected = {
        index: tab.get('index'),
        name : name,
        tab  : tab
    };

    switch (name) {
    case 'classes': // fallthru
    case 'modules':
        filter.setAttrs({
            minQueryLength: 0,
            queryType     : name
        });

        search.set('minQueryLength', -1);

        // Only send a request if this isn't the initially-selected tab.
        if (e.prevVal) {
            filter.sendRequest(filter.get('value'));
        }
        break;

    case 'everything':
        filter.set('minQueryLength', -1);
        search.set('minQueryLength', 1);

        if (search.get('value')) {
            search.sendRequest(search.get('value'));
        } else {
            inputNode.focus();
        }
        break;

    default:
        // WTF? We shouldn't be here!
        filter.set('minQueryLength', -1);
        search.set('minQueryLength', -1);
    }

    if (focusManager) {
        setTimeout(function () {
            focusManager.refresh();
        }, 1);
    }
}

function onTabSwitchKey(e) {
    var currentTabIndex = tabs.selected.index;

    if (!(e.ctrlKey || e.metaKey)) {
        return;
    }

    e.preventDefault();

    switch (e.keyCode) {
    case 37: // left arrow
        if (currentTabIndex > 0) {
            tabview.selectChild(currentTabIndex - 1);
            inputNode.focus();
        }
        break;

    case 39: // right arrow
        if (currentTabIndex < (Y.Object.size(tabs) - 2)) {
            tabview.selectChild(currentTabIndex + 1);
            inputNode.focus();
        }
        break;
    }
}

}, '3.4.0', {requires: [
    'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview'
]});


================================================
FILE: extras/yuidoc-theme-topheman/assets/js/api-search.js
================================================
YUI.add('api-search', function (Y) {

var Lang   = Y.Lang,
    Node   = Y.Node,
    YArray = Y.Array;

Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
    // -- Public Properties ----------------------------------------------------
    RESULT_TEMPLATE:
        '<li class="result {resultType}">' +
            '<a href="{url}">' +
                '<h3 class="title">{name}</h3>' +
                '<span class="type">{resultType}</span>' +
                '<div class="description">{description}</div>' +
                '<span class="className">{class}</span>' +
            '</a>' +
        '</li>',

    // -- Initializer ----------------------------------------------------------
    initializer: function () {
        this._bindUIACBase();
        this._syncUIACBase();
    },

    // -- Protected Methods ----------------------------------------------------
    _apiResultFilter: function (query, results) {
        // Filter components out of the results.
        return YArray.filter(results, function (result) {
            return result.raw.resultType === 'component' ? false : result;
        });
    },

    _apiResultFormatter: function (query, results) {
        return YArray.map(results, function (result) {
            var raw  = Y.merge(result.raw), // create a copy
                desc = raw.description || '';

            // Convert description to text and truncate it if necessary.
            desc = Node.create('<div>' + desc + '</div>').get('text');

            if (desc.length > 65) {
                desc = Y.Escape.html(desc.substr(0, 65)) + ' &hellip;';
            } else {
                desc = Y.Escape.html(desc);
            }

            raw['class'] || (raw['class'] = '');
            raw.description = desc;

            // Use the highlighted result name.
            raw.name = result.highlighted;

            return Lang.sub(this.RESULT_TEMPLATE, raw);
        }, this);
    },

    _apiTextLocator: function (result) {
        return result.displayName || result.name;
    }
}, {
    // -- Attributes -----------------------------------------------------------
    ATTRS: {
        resultFormatter: {
            valueFn: function () {
                return this._apiResultFormatter;
            }
        },

        resultFilters: {
            valueFn: function () {
                return this._apiResultFilter;
            }
        },

        resultHighlighter: {
            value: 'phraseMatch'
        },

        resultListLocator: {
            value: 'data.results'
        },

        resultTextLocator: {
            valueFn: function () {
                return this._apiTextLocator;
            }
        },

        source: {
            value: '/api/v1/search?q={query}&count={maxResults}'
        }
    }
});

}, '3.4.0', {requires: [
    'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
    'escape'
]});


================================================
FILE: extras/yuidoc-theme-topheman/assets/js/apidocs.js
================================================
YUI().use(
    'yuidoc-meta',
    'api-list', 'history-hash', 'node-screen', 'node-style', 'pjax',
function (Y) {

var win          = Y.config.win,
    localStorage = win.localStorage,

    bdNode = Y.one('#bd'),

    pjax,
    defaultRoute,

    classTabView,
    selectedTab;

// Kill pjax functionality unless serving over HTTP.
if (!Y.getLocation().protocol.match(/^https?\:/)) {
    Y.Router.html5 = false;
}

// Create the default route with middleware which enables syntax highlighting
// on the loaded content.
defaultRoute = Y.Pjax.defaultRoute.concat(function (req, res, next) {
    prettyPrint();
    bdNode.removeClass('loading');

    next();
});

pjax = new Y.Pjax({
    container      : '#docs-main',
    contentSelector: '#docs-main > .content',
    linkSelector   : '#bd a',
    titleSelector  : '#xhr-title',

    navigateOnHash: true,
    root          : '/',
    routes        : [
        // -- / ----------------------------------------------------------------
        {
            path     : '/(index.html)?',
            callbacks: defaultRoute
        },

        // -- /classes/* -------------------------------------------------------
        {
            path     : '/classes/:class.html*',
            callbacks: [defaultRoute, 'handleClasses']
        },

        // -- /files/* ---------------------------------------------------------
        {
            path     : '/files/*file',
            callbacks: [defaultRoute, 'handleFiles']
        },

        // -- /modules/* -------------------------------------------------------
        {
            path     : '/modules/:module.html*',
            callbacks: defaultRoute
        }
    ]
});

// -- Utility Functions --------------------------------------------------------

pjax.checkVisibility = function (tab) {
    tab || (tab = selectedTab);

    if (!tab) { return; }

    var panelNode = tab.get('panelNode'),
        visibleItems;

    // If no items are visible in the tab panel due to the current visibility
    // settings, display a message to that effect.
    visibleItems = panelNode.all('.item,.index-item').some(function (itemNode) {
        if (itemNode.getComputedStyle('display') !== 'none') {
            return true;
        }
    });

    panelNode.all('.no-visible-items').remove();

    if (!visibleItems) {
        if (Y.one('#index .index-item')) {
            panelNode.append(
                '<div class="no-visible-items">' +
                    '<p>' +
                    'Some items are not shown due to the current visibility ' +
                    'settings. Use the checkboxes at the upper right of this ' +
                    'page to change the visibility settings.' +
                    '</p>' +
                '</div>'
            );
        } else {
            panelNode.append(
                '<div class="no-visible-items">' +
                    '<p>' +
                    'This class doesn\'t provide any methods, properties, ' +
                    'attributes, or events.' +
                    '</p>' +
                '</div>'
            );
        }
    }

    // Hide index sections without any visible items.
    Y.all('.index-section').each(function (section) {
        var items        = 0,
            visibleItems = 0;

        section.all('.index-item').each(function (itemNode) {
            items += 1;

            if (itemNode.getComputedStyle('display') !== 'none') {
                visibleItems += 1;
            }
        });

        section.toggleClass('hidden', !visibleItems);
        section.toggleClass('no-columns', visibleItems < 4);
    });
};

pjax.initClassTabView = function () {
    if (!Y.all('#classdocs .api-class-tab').size()) {
        return;
    }

    if (classTabView) {
        classTabView.destroy();
        selectedTab = null;
    }

    classTabView = new Y.TabView({
        srcNode: '#classdocs',

        on: {
            selectionChange: pjax.onTabSelectionChange
        }
    });

    pjax.updateTabState();
    classTabView.render();
};

pjax.initLineNumbers = function () {
    var hash      = win.location.hash.substring(1),
        container = pjax.get('container'),
        hasLines, node;

    // Add ids for each line number in the file source view.
    container.all('.linenums>li').each(function (lineNode, index) {
        lineNode.set('id', 'l' + (index + 1));
        lineNode.addClass('file-line');
        hasLines = true;
    });

    // Scroll to the desired line.
    if (hasLines && /^l\d+$/.test(hash)) {
        if ((node = container.getById(hash))) {
            win.scroll(0, node.getY());
        }
    }
};

pjax.initRoot = function () {
    var terminators = /^(?:classes|files|modules)$/,
        parts       = pjax._getPathRoot().split('/'),
        root        = [],
        i, len, part;

    for (i = 0, len = parts.length; i < len; i += 1) {
        part = parts[i];

        if (part.match(terminators)) {
            // Makes sure the path will end with a "/".
            root.push('');
            break;
        }

        root.push(part);
    }

    pjax.set('root', root.join('/'));
};

pjax.updateTabState = function (src) {
    var hash = win.location.hash.substring(1),
        defaultTab, node, tab, tabPanel;

    function scrollToNode() {
        if (node.hasClass('protected')) {
            Y.one('#api-show-protected').set('checked', true);
            pjax.updateVisibility();
        }

        if (node.hasClass('private')) {
            Y.one('#api-show-private').set('checked', true);
            pjax.updateVisibility();
        }

        setTimeout(function () {
            // For some reason, unless we re-get the node instance here,
            // getY() always returns 0.
            var node = Y.one('#classdocs').getById(hash);
            win.scrollTo(0, node.getY() - 70);
        }, 1);
    }

    if (!classTabView) {
        return;
    }

    if (src === 'hashchange' && !hash) {
        defaultTab = 'index';
    } else {
        if (localStorage) {
            defaultTab = localStorage.getItem('tab_' + pjax.getPath()) ||
                'index';
        } else {
            defaultTab = 'index';
        }
    }

    if (hash && (node = Y.one('#classdocs').getById(hash))) {
        if ((tabPanel = node.ancestor('.api-class-tabpanel', true))) {
            if ((tab = Y.one('#classdocs .api-class-tab.' + tabPanel.get('id')))) {
                if (classTabView.get('rendered')) {
                    Y.Widget.getByNode(tab).set('selected', 1);
                } else {
                    tab.addClass('yui3-tab-selected');
                }
            }
        }

        // Scroll to the desired element if this is a hash URL.
        if (node) {
            if (classTabView.get('rendered')) {
                scrollToNode();
            } else {
                classTabView.once('renderedChange', scrollToNode);
            }
        }
    } else {
        tab = Y.one('#classdocs .api-class-tab.' + defaultTab);

        // When the `defaultTab` node isn't found, `localStorage` is stale.
        if (!tab && defaultTab !== 'index') {
            tab = Y.one('#classdocs .api-class-tab.index');
        }

        if (classTabView.get('rendered')) {
            Y.Widget.getByNode(tab).set('selected', 1);
        } else {
            tab.addClass('yui3-tab-selected');
        }
    }
};

pjax.updateVisibility = function () {
    var container = pjax.get('container');

    container.toggleClass('hide-inherited',
            !Y.one('#api-show-inherited').get('checked'));

    container.toggleClass('show-deprecated',
            Y.one('#api-show-deprecated').get('checked'));

    container.toggleClass('show-protected',
            Y.one('#api-show-protected').get('checked'));

    container.toggleClass('show-private',
            Y.one('#api-show-private').get('checked'));

    pjax.checkVisibility();
};

// -- Route Handlers -----------------------------------------------------------

pjax.handleClasses = function (req, res, next) {
    var status = res.ioResponse.status;

    // Handles success and local filesystem XHRs.
    if (!status || (status >= 200 && status < 300)) {
        pjax.initClassTabView();
    }

    next();
};

pjax.handleFiles = function (req, res, next) {
    var status = res.ioResponse.status;

    // Handles success and local filesystem XHRs.
    if (!status || (status >= 200 && status < 300)) {
        pjax.initLineNumbers();
    }

    next();
};

// -- Event Handlers -----------------------------------------------------------

pjax.onNavigate = function (e) {
    var hash         = e.hash,
        originTarget = e.originEvent && e.originEvent.target,
        tab;

    if (hash) {
        tab = originTarget && originTarget.ancestor('.yui3-tab', true);

        if (hash === win.location.hash) {
            pjax.updateTabState('hashchange');
        } else if (!tab) {
            win.location.hash = hash;
        }

        e.preventDefault();
        return;
    }

    // Only scroll to the top of the page when the URL doesn't have a hash.
    this.set('scrollToTop', !e.url.match(/#.+$/));

    bdNode.addClass('loading');
};

pjax.onOptionClick = function (e) {
    pjax.updateVisibility();
};

pjax.onTabSelectionChange = function (e) {
    var tab   = e.newVal,
        tabId = tab.get('contentBox').getAttribute('href').substring(1);

    selectedTab = tab;

    // If switching from a previous tab (i.e., this is not the default tab),
    // replace the history entry with a hash URL that will cause this tab to
    // be selected if the user navigates away and then returns using the back
    // or forward buttons.
    if (e.prevVal && localStorage) {
        localStorage.setItem('tab_' + pjax.getPath(), tabId);
    }

    pjax.checkVisibility(tab);
};

// -- Init ---------------------------------------------------------------------

pjax.on('navigate', pjax.onNavigate);

pjax.initRoot();
pjax.upgrade();
pjax.initClassTabView();
pjax.initLineNumbers();
pjax.updateVisibility();

Y.APIList.rootPath = pjax.get('root');

Y.one('#api-options').delegate('click', pjax.onOptionClick, 'input');

Y.on('hashchange', function (e) {
    pjax.updateTabState('hashchange');
}, win);
});


================================================
FILE: extras/yuidoc-theme-topheman/assets/js/yui-prettify.js
================================================
YUI().use('node', function(Y) {
    var code = Y.all('.prettyprint.linenums');
    if (code.size()) {
        code.each(function(c) {
            var lis = c.all('ol li'),
                l = 1;
            lis.each(function(n) {
                n.prepend('<a name="LINENUM_' + l + '"></a>');
                l++;
            });
        });
        var h = location.hash;
        location.hash = '';
        h = h.replace('LINE_', 'LINENUM_');
        location.hash = h;
    }
});


================================================
FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/CHANGES.html
================================================
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Change Log</title>
  </head>
  <body bgcolor="white">
    <a style="float:right" href="README.html">README</a>

    <h1>Known Issues</h1>
    <ul>
      <li>Perl formatting is really crappy.  Partly because the author is lazy and
      partly because Perl is
      <a href="http://www.perlmonks.org/?node_id=663393">hard</a> to parse.
      <li>On some browsers, <code>&lt;code&gt;</code> elements with newlines in the text
      which use CSS to specify <code>white-space:pre</code> will have the newlines
      improperly stripped if the element is not attached to the document at the time
      the stripping is done.  Also, on IE 6, all newlines will be stripped from
      <code>&lt;code&gt;</code> elements because of the way IE6 produces
      <code>innerHTML</code>.  Workaround: use <code>&lt;pre&gt;</code> for code with
      newlines.
    </ul>

    <h1>Change Log</h1>
    <h2>29 March 2007</h2>
    <ul>
      <li>Added <a href="tests/prettify_test.html#PHP">tests</a> for PHP support
        to address 
      <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=3"
       >issue 3</a>.
      <li>Fixed
      <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=6"
       >bug</a>: <code>prettyPrintOne</code> was not halting.  This was not
        reachable through the normal entry point.
      <li>Fixed
      <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=4"
       >bug</a>: recursing into a script block or PHP tag that was not properly
        closed would not silently drop the content.
        (<a href="tests/prettify_test.html#issue4">test</a>)
      <li>Fixed
      <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=8"
       >bug</a>: was eating tabs
        (<a href="tests/prettify_test.html#issue8">test</a>)
      <li>Fixed entity handling so that the caveat
        <blockquote>
          <p>Caveats: please properly escape less-thans.  <tt>x&amp;lt;y</tt>
          instead of <tt>x&lt;y</tt>, and use <tt>&quot;</tt> instead of 
          <tt>&amp;quot;</tt> for string delimiters.</p>
        </blockquote>
        is no longer applicable.
      <li>Added noisefree's C#
      <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=4"
       >patch</a>
      <li>Added a <a href="http://google-code-prettify.googlecode.com/files/prettify-small.zip">distribution</a> that has comments and
        whitespace removed to reduce download size from 45.5kB to 12.8kB.
    </ul>
    <h2>4 Jul 2008</h2>
    <ul>
      <li>Added <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=17">language specific formatters</a> that are triggered by the presence
      of a <code>lang-&lt;language-file-extension&gt;</code></li>
      <li>Fixed <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=29">bug</a>: python handling of <code>'''string'''</code>
      <li>Fixed bug: <code>/</code> in regex <code>[charsets] should not end regex</code>
    </ul>
    <h2>5 Jul 2008</h2>
    <ul>
      <li>Defined language extensions for Lisp and Lua</code>
    </ul>
    <h2>14 Jul 2008</h2>
    <ul>
      <li>Language handlers for F#, OCAML, SQL</code>
      <li>Support for <code>nocode</code> spans to allow embedding of line
      numbers and code annotations which should not be styled or otherwise
      affect the tokenization of prettified code.
      See the issue 22
      <a href="tests/prettify_test.html#issue22">testcase</a>.</code>
    </ul>
    <h2>6 Jan 2009</h2>
    <ul>
      <li>Language handlers for Visual Basic, Haskell, CSS, and WikiText</li>
      <li>Added <tt>.mxml</tt> extension to the markup style handler for
        Flex <a href="http://en.wikipedia.org/wiki/MXML">MXML files</a>.  See
        <a
        href="http://code.google.com/p/google-code-prettify/issues/detail?id=37"
        >issue 37</a>.
      <li>Added <tt>.m</tt> extension to the C style handler so that Objective
        C source files properly highlight.  See
        <a
        href="http://code.google.com/p/google-code-prettify/issues/detail?id=58"
       >issue 58</a>.
      <li>Changed HTML lexer to use the same embedded source mechanism as the
        wiki language handler, and changed to use the registered
        CSS handler for STYLE element content.
    </ul>
    <h2>21 May 2009</h2>
    <ul>
      <li>Rewrote to improve performance on large files.
        See <a href="http://mikesamuel.blogspot.com/2009/05/efficient-parsing-in-javascript.html">benchmarks</a>.</li>
      <li>Fixed bugs with highlighting of Haskell line comments, Lisp
        number literals, Lua strings, C preprocessor directives,
        newlines in Wiki code on Windows, and newlines in IE6.</li>
    </ul>
    <h2>14 August 2009</h2>
    <ul>
      <li>Fixed prettifying of <code>&lt;code&gt;</code> blocks with embedded newlines.
    </ul>
    <h2>3 October 2009</h2>
    <ul>
      <li>Fixed prettifying of XML/HTML tags that contain uppercase letters.
    </ul>
    <h2>19 July 2010</h2>
    <ul>
      <li>Added support for line numbers.  Bug
        <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=22"
         >22</a></li>
      <li>Added YAML support.  Bug
        <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=123"
         >123</a></li>
      <li>Added VHDL support courtesy Le Poussin.</li>
      <li>IE performance improvements.  Bug
        <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=102"
         >102</a> courtesy jacobly.</li>
      <li>A variety of markup formatting fixes courtesy smain and thezbyg.</li>
      <li>Fixed copy and paste in IE[678].
      <li>Changed output to use <code>&amp;#160;</code> instead of
        <code>&amp;nbsp;</code> so that the output works when embedded in XML.
        Bug
        <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=108"
         >108</a>.</li>
    </ul>
  </body>
</html>


================================================
FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/COPYING
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/README.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
  <head>
    <title>Javascript code prettifier</title>

    <link href="src/prettify.css" type="text/css" rel="stylesheet" />

    <script src="src/prettify.js" type="text/javascript"></script>

    <style type="text/css">
      body { margin-left: .5in }
      h1, h2, h3, h4, .footer { margin-left: -.4in; }
    </style>
  </head>

  <body onload="prettyPrint()" bgcolor="white">
    <small style="float: right">Languages : <a href="README-zh-Hans.html">CH</a></small>
    <h1>Javascript code prettifier</h1>

    <h2>Setup</h2>
    <ol>
      <li><a href="http://code.google.com/p/google-code-prettify/downloads/list">Download</a> a distribution
      <li>Include the script and stylesheets in your document
        (you will need to make sure the css and js file are on your server, and
         adjust the paths in the <tt>script</tt> and <tt>link</tt> tag)
        <pre class="prettyprint">
&lt;link href="prettify.css" type="text/css" rel="stylesheet" />
&lt;script type="text/javascript" src="prettify.js">&lt;/script></pre>
      <li>Add <code class="prettyprint lang-html">onload="prettyPrint()"</code> to your
      document's body tag.
      <li>Modify the stylesheet to get the coloring you prefer</li>
    </ol>

    <h2>Usage</h2>
    <p>Put code snippets in
    <tt>&lt;pre class="prettyprint"&gt;...&lt;/pre&gt;</tt>
    or <tt>&lt;code class="prettyprint"&gt;...&lt;/code&gt;</tt>
    and it will automatically be pretty printed.

    <table summary="code examples">
      <tr>
        <th>The original
        <th>Prettier
      <tr>
        <td><pre style="border: 1px solid #888;padding: 2px"
             ><a name="voila1"></a>class Voila {
public:
  // Voila
  static const string VOILA = "Voila";

  // will not interfere with embedded <a href="#voila1">tags</a>.
}</pre>

        <td><pre class="prettyprint"><a name="voila2"></a>class Voila {
public:
  // Voila
  static const string VOILA = "Voila";

  // will not interfere with embedded <a href="#voila2">tags</a>.
}</pre>
    </table>

    <h2>FAQ</h2>
    <h3 id="langs">Which languages does it work for?</h3>
    <p>The comments in <tt>prettify.js</tt> are authoritative but the lexer
    should work on a number of languages including C and friends,
    Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles.
    It works passably on Ruby, PHP, VB, and Awk and a decent subset of Perl
    and Ruby, but, because of commenting conventions, doesn't work on
    Smalltalk, or CAML-like languages.</p>

    <p>LISPy languages are supported via an extension:
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-lisp.js"
     ><code>lang-lisp.js</code></a>.</p>
    <p>And similarly for
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-css.js"
     ><code>CSS</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-hs.js"
     ><code>Haskell</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-lua.js"
     ><code>Lua</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-ml.js"
     ><code>OCAML, SML, F#</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-vb.js"
     ><code>Visual Basic</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-sql.js"
     ><code>SQL</code></a>,
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-proto.js"
     ><code>Protocol Buffers</code></a>, and
    <a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-wiki.js"
     ><code>WikiText</code></a>..

    <p>If you'd like to add an extension for your favorite language, please
    look at <tt>src/lang-lisp.js</tt> and file an
    <a href="http://code.google.com/p/google-code-prettify/issues/list"
     >issue</a> including your language extension, and a testcase.</p>

    <h3>How do I specify which language my code is in?</h3>
    <p>You don't need to specify the language since <code>prettyprint()</code>
    will guess.  You can specify a language by specifying the language extension
    along with the <code>prettyprint</code> class like so:</p>
    <pre class="prettyprint lang-html"
>&lt;pre class=&quot;prettyprint <b>lang-html</b>&quot;&gt;
  The lang-* class specifies the language file extensions.
  File extensions supported by default include
    "bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html",
    "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh",
    "xhtml", "xml", "xsl".
&lt;/pre&gt;</pre>

    <h3>It doesn't work on <tt>&lt;obfuscated code sample&gt;</tt>?</h3>
    <p>Yes.  Prettifying obfuscated code is like putting lipstick on a pig
    &mdash; i.e. outside the scope of this tool.</p>

    <h3>Which browsers does it work with?</h3>
    <p>It's been tested with IE 6, Firefox 1.5 &amp; 2, and Safari 2.0.4.
    Look at <a href="tests/prettify_test.html">the test page</a> to see if it
    works in your browser.</p>

    <h3>What's changed?</h3>
    <p>See the <a href="CHANGES.html">change log</a></p>

    <h3>Why doesn't Prettyprinting of strings work on WordPress?</h3>
    <p>Apparently wordpress does "smart quoting" which changes close quotes.
    This causes end quotes to not match up with open quotes.
    <p>This breaks prettifying as well as copying and pasting of code samples.
    See
    <a href="http://wordpress.org/support/topic/125038"
    >WordPress's help center</a> for info on how to stop smart quoting of code
    snippets.</p>

    <h3 id="linenums">How do I put line numbers in my code?</h3>
    <p>You can use the <code>linenums</code> class to turn on line
    numbering.  If your code doesn't start at line number 1, you can
    add a colon and a line number to the end of that class as in
    <code>linenums:52</code>.

    <p>For example
<pre class="prettyprint">&lt;pre class="prettyprint linenums:<b>4</b>"
&gt;// This is line 4.
foo();
bar();
baz();
boo();
far();
faz();
&lt;pre&gt;</pre>
    produces
<pre class="prettyprint linenums:4"
>// This is line 4.
foo();
bar();
baz();
boo();
far();
faz();
</pre>

    <h3>How do I prevent a portion of markup from being marked as code?</h3>
    <p>You can use the <code>nocode</code> class to identify a span of markup
    that is not code.
<pre class="prettyprint">&lt;pre class=prettyprint&gt;
int x = foo();  /* This is a comment  &lt;span class="nocode"&gt;This is not code&lt;/span&gt;
  Continuation of comment */
int y = bar();
&lt;/pre&gt;</pre>
produces
<pre class="prettyprint">
int x = foo();  /* This is a comment  <span class="nocode">This is not code</span>
  Continuation of comment */
int y = bar();
</pre>

    <p>For a more complete example see the issue22
    <a href="tests/prettify_test.html#issue22">testcase</a>.</p>

    <h3>I get an error message "a is not a function" or "opt_whenDone is not a function"</h3>
    <p>If you are calling <code>prettyPrint</code> via an event handler, wrap it in a function.
    Instead of doing
    <blockquote>
      <code class="prettyprint lang-js"
       >addEventListener('load', prettyPrint, false);</code>
    </blockquote>
    wrap it in a closure like
    <blockquote>
      <code class="prettyprint lang-js"
       >addEventListener('load', function (event) { prettyPrint() }, false);</code>
    </blockquote>
    so that the browser does not pass an event object to <code>prettyPrint</code> which
    will confuse it.

    <br><br><br>

    <div class="footer">
<!-- Created: Tue Oct  3 17:51:56 PDT 2006 -->
<!-- hhmts start -->
Last modified: Wed Jul 19 13:56:00 PST 2010
<!-- hhmts end -->
    </div>
  </body>
</html>


================================================
FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/prettify-min.css
================================================
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

================================================
FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/prettify-min.js
================================================
window.PR_SHOULD_USE_CONTINUATION=true;var prettyPrintOne;var prettyPrint;(function(){var O=window;var j=["break,continue,do,else,for,if,return,while"];var v=[j,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var q=[v,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var m=[q,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var y=[q,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var T=[y,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"];var s="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes";var x=[q,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var t="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var J=[j,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var g=[j,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var I=[j,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var B=[m,T,x,t+J,g,I];var f=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;var D="str";var A="kwd";var k="com";var Q="typ";var H="lit";var M="pun";var G="pln";var n="tag";var F="dec";var K="src";var R="atn";var o="atv";var P="nocode";var N="(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function l(ab){var af=0;var U=false;var ae=false;for(var X=0,W=ab.length;X<W;++X){var ag=ab[X];if(ag.ignoreCase){ae=true}else{if(/[a-z]/i.test(ag.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){U=true;ae=false;break}}}var aa={b:8,t:9,n:10,v:11,f:12,r:13};function ad(aj){var ai=aj.charCodeAt(0);if(ai!==92){return ai}var ah=aj.charAt(1);ai=aa[ah];if(ai){return ai}else{if("0"<=ah&&ah<="7"){return parseInt(aj.substring(1),8)}else{if(ah==="u"||ah==="x"){return parseInt(aj.substring(2),16)}else{return aj.charCodeAt(1)}}}}function V(ah){if(ah<32){return(ah<16?"\\x0":"\\x")+ah.toString(16)}var ai=String.fromCharCode(ah);return(ai==="\\"||ai==="-"||ai==="]"||ai==="^")?"\\"+ai:ai}function Z(an){var ar=an.substring(1,an.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ah=[];var ap=ar[0]==="^";var ao=["["];if(ap){ao.push("^")}for(var at=ap?1:0,al=ar.length;at<al;++at){var aj=ar[at];if(/\\[bdsw]/i.test(aj)){ao.push(aj)}else{var ai=ad(aj);var am;if(at+2<al&&"-"===ar[at+1]){am=ad(ar[at+2]);at+=2}else{am=ai}ah.push([ai,am]);if(!(am<65||ai>122)){if(!(am<65||ai>90)){ah.push([Math.max(65,ai)|32,Math.min(am,90)|32])}if(!(am<97||ai>122)){ah.push([Math.max(97,ai)&~32,Math.min(am,122)&~32])}}}}ah.sort(function(aw,av){return(aw[0]-av[0])||(av[1]-aw[1])});var ak=[];var aq=[];for(var at=0;at<ah.length;++at){var au=ah[at];if(au[0]<=aq[1]+1){aq[1]=Math.max(aq[1],au[1])}else{ak.push(aq=au)}}for(var at=0;at<ak.length;++at){var au=ak[at];ao.push(V(au[0]));if(au[1]>au[0]){if(au[1]+1>au[0]){ao.push("-")}ao.push(V(au[1]))}}ao.push("]");return ao.join("")}function Y(an){var al=an.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var aj=al.length;var ap=[];for(var am=0,ao=0;am<aj;++am){var ai=al[am];if(ai==="("){++ao}else{if("\\"===ai.charAt(0)){var ah=+ai.substring(1);if(ah){if(ah<=ao){ap[ah]=-1}else{al[am]=V(ah)}}}}}for(var am=1;am<ap.length;++am){if(-1===ap[am]){ap[am]=++af}}for(var am=0,ao=0;am<aj;++am){var ai=al[am];if(ai==="("){++ao;if(!ap[ao]){al[am]="(?:"}}else{if("\\"===ai.charAt(0)){var ah=+ai.substring(1);if(ah&&ah<=ao){al[am]="\\"+ap[ah]}}}}for(var am=0;am<aj;++am){if("^"===al[am]&&"^"!==al[am+1]){al[am]=""}}if(an.ignoreCase&&U){for(var am=0;am<aj;++am){var ai=al[am];var ak=ai.charAt(0);if(ai.length>=2&&ak==="["){al[am]=Z(ai)}else{if(ak!=="\\"){al[am]=ai.replace(/[a-zA-Z]/g,function(aq){var ar=aq.charCodeAt(0);return"["+String.fromCharCode(ar&~32,ar|32)+"]"})}}}}return al.join("")}var ac=[];for(var X=0,W=ab.length;X<W;++X){var ag=ab[X];if(ag.global||ag.multiline){throw new Error(""+ag)}ac.push("(?:"+Y(ag)+")")}return new RegExp(ac.join("|"),ae?"gi":"g")}function b(aa,Y){var W=/(?:^|\s)nocode(?:\s|$)/;var ab=[];var Z=0;var X=[];var V=0;function U(ac){switch(ac.nodeType){case 1:if(W.test(ac.className)){return}for(var af=ac.firstChild;af;af=af.nextSibling){U(af)}var ae=ac.nodeName.toLowerCase();if("br"===ae||"li"===ae){ab[V]="\n";X[V<<1]=Z++;X[(V++<<1)|1]=ac}break;case 3:case 4:var ad=ac.nodeValue;if(ad.length){if(!Y){ad=ad.replace(/[ \t\r\n]+/g," ")}else{ad=ad.replace(/\r\n?/g,"\n")}ab[V]=ad;X[V<<1]=Z;Z+=ad.length;X[(V++<<1)|1]=ac}break}}U(aa);return{sourceCode:ab.join("").replace(/\n$/,""),spans:X}}function C(U,W,Y,V){if(!W){return}var X={sourceCode:W,basePos:U};Y(X);V.push.apply(V,X.decorations)}var w=/\S/;function p(U){var X=undefined;for(var W=U.firstChild;W;W=W.nextSibling){var V=W.nodeType;X=(V===1)?(X?U:W):(V===3)?(w.test(W.nodeValue)?U:X):X}return X===U?undefined:X}function h(W,V){var U={};var X;(function(){var af=W.concat(V);var aj=[];var ai={};for(var ad=0,ab=af.length;ad<ab;++ad){var aa=af[ad];var ae=aa[3];if(ae){for(var ag=ae.length;--ag>=0;){U[ae.charAt(ag)]=aa}}var ah=aa[1];var ac=""+ah;if(!ai.hasOwnProperty(ac)){aj.push(ah);ai[ac]=null}}aj.push(/[\0-\uffff]/);X=l(aj)})();var Z=V.length;var Y=function(aj){var ab=aj.sourceCode,aa=aj.basePos;var af=[aa,G];var ah=0;var ap=ab.match(X)||[];var al={};for(var ag=0,at=ap.length;ag<at;++ag){var ai=ap[ag];var ar=al[ai];var ak=void 0;var ao;if(typeof ar==="string"){ao=false}else{var ac=U[ai.charAt(0)];if(ac){ak=ai.match(ac[1]);ar=ac[0]}else{for(var aq=0;aq<Z;++aq){ac=V[aq];ak=ai.match(ac[1]);if(ak){ar=ac[0];break}}if(!ak){ar=G}}ao=ar.length>=5&&"lang-"===ar.substring(0,5);if(ao&&!(ak&&typeof ak[1]==="string")){ao=false;ar=K}if(!ao){al[ai]=ar}}var ad=ah;ah+=ai.length;if(!ao){af.push(aa+ad,ar)}else{var an=ak[1];var am=ai.indexOf(an);var ae=am+an.length;if(ak[2]){ae=ai.length-ak[2].length;am=ae-an.length}var au=ar.substring(5);C(aa+ad,ai.substring(0,am),Y,af);C(aa+ad+am,an,r(au,an),af);C(aa+ad+ae,ai.substring(ae),Y,af)}}aj.decorations=af};return Y}function i(V){var Y=[],U=[];if(V.tripleQuotedStrings){Y.push([D,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(V.multiLineStrings){Y.push([D,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{Y.push([D,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(V.verbatimStrings){U.push([D,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var ab=V.hashComments;if(ab){if(V.cStyleComments){if(ab>1){Y.push([k,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{Y.push([k,/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}U.push([D,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])}else{Y.push([k,/^#[^\r\n]*/,null,"#"])}}if(V.cStyleComments){U.push([k,/^\/\/[^\r\n]*/,null]);U.push([k,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(V.regexLiterals){var aa=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");U.push(["lang-regex",new RegExp("^"+N+"("+aa+")")])}var X=V.types;if(X){U.push([Q,X])}var W=(""+V.keywords).replace(/^ | $/g,"");if(W.length){U.push([A,new RegExp("^(?:"+W.replace(/[\s,]+/g,"|")+")\\b"),null])}Y.push([G,/^\s+/,null," \r\n\t\xA0"]);var Z=/^.[^\s\w\.$@\'\"\`\/\\]*/;U.push([H,/^@[a-z_$][a-z_$@0-9]*/i,null],[Q,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[G,/^[a-z_$][a-z_$@0-9]*/i,null],[H,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[G,/^\\[\s\S]?/,null],[M,Z,null]);return h(Y,U)}var L=i({keywords:B,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function S(W,ah,aa){var V=/(?:^|\s)nocode(?:\s|$)/;var ac=/\r\n?|\n/;var ad=W.ownerDocument;var ag=ad.createElement("li");while(W.firstChild){ag.appendChild(W.firstChild)}var X=[ag];function af(am){switch(am.nodeType){case 1:if(V.test(am.className)){break}if("br"===am.nodeName){ae(am);if(am.parentNode){am.parentNode.removeChild(am)}}else{for(var ao=am.firstChild;ao;ao=ao.nextSibling){af(ao)}}break;case 3:case 4:if(aa){var an=am.nodeValue;var ak=an.match(ac);if(ak){var aj=an.substring(0,ak.index);am.nodeValue=aj;var ai=an.substring(ak.index+ak[0].length);if(ai){var al=am.parentNode;al.insertBefore(ad.createTextNode(ai),am.nextSibling)}ae(am);if(!aj){am.parentNode.removeChild(am)}}}break}}function ae(al){while(!al.nextSibling){al=al.parentNode;if(!al){return}}function aj(am,at){var ar=at?am.cloneNode(false):am;var ap=am.parentNode;if(ap){var aq=aj(ap,1);var ao=am.nextSibling;aq.appendChild(ar);for(var an=ao;an;an=ao){ao=an.nextSibling;aq.appendChild(an)}}return ar}var ai=aj(al.nextSibling,0);for(var ak;(ak=ai.parentNode)&&ak.nodeType===1;){ai=ak}X.push(ai)}for(var Z=0;Z<X.length;++Z){af(X[Z])}if(ah===(ah|0)){X[0].setAttribute("value",ah)}var ab=ad.createElement("ol");ab.className="linenums";var Y=Math.max(0,((ah-1))|0)||0;for(var Z=0,U=X.length;Z<U;++Z){ag=X[Z];ag.className="L"+((Z+Y)%10);if(!ag.firstChild){ag.appendChild(ad.createTextNode("\xA0"))}ab.appendChild(ag)}W.appendChild(ab)}function E(af){var X=/\bMSIE\s(\d+)/.exec(navigator.userAgent);X=X&&+X[1]<=8;var ao=/\n/g;var an=af.sourceCode;var ap=an.length;var Y=0;var ad=af.spans;var V=ad.length;var aj=0;var aa=af.decorations;var ab=aa.length;var ac=0;aa[ab]=ap;var av,at;for(at=av=0;at<ab;){if(aa[at]!==aa[at+2]){aa[av++]=aa[at++];aa[av++]=aa[at++]}else{at+=2}}ab=av;for(at=av=0;at<ab;){var aw=aa[at];var ae=aa[at+1];var Z=at+2;while(Z+2<=ab&&aa[Z+1]===ae){Z+=2}aa[av++]=aw;aa[av++]=ae;at=Z}ab=aa.length=av;var au=af.sourceNode;var ak;if(au){ak=au.style.display;au.style.display="none"}try{var ah=null;while(aj<V){var ai=ad[aj];var U=ad[aj+2]||ap;var ar=aa[ac+2]||ap;var Z=Math.min(U,ar);var am=ad[aj+1];var W;if(am.nodeType!==1&&(W=an.substring(Y,Z))){if(X){W=W.replace(ao,"\r")}am.nodeValue=W;var al=am.ownerDocument;var aq=al.createElement("span");aq.className=aa[ac+1];var ag=am.parentNode;ag.replaceChild(aq,am);aq.appendChild(am);if(Y<U){ad[aj+1]=am=al.createTextNode(an.substring(Z,U));ag.insertBefore(am,aq.nextSibling)}}Y=Z;if(Y>=U){aj+=2}if(Y>=ar){ac+=2}}}finally{if(au){au.style.display=ak}}}var u={};function d(W,X){for(var U=X.length;--U>=0;){var V=X[U];if(!u.hasOwnProperty(V)){u[V]=W}else{if(O.console){console.warn("cannot override language handler %s",V)}}}}function r(V,U){if(!(V&&u.hasOwnProperty(V))){V=/^\s*</.test(U)?"default-markup":"default-code"}return u[V]}d(L,["default-code"]);d(h([],[[G,/^[^<?]+/],[F,/^<!\w[^>]*(?:>|$)/],[k,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[M,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);d(h([[G,/^[\s]+/,null," \t\r\n"],[o,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[n,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[R,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[M,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);d(h([],[[o,/^[\s\S]+/]]),["uq.val"]);d(i({keywords:m,hashComments:true,cStyleComments:true,types:f}),["c","cc","cpp","cxx","cyc","m"]);d(i({keywords:"null,true,false"}),["json"]);d(i({keywords:T,hashComments:true,cStyleComments:true,verbatimStrings:true,types:f}),["cs"]);d(i({keywords:y,cStyleComments:true}),["java"]);d(i({keywords:I,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);d(i({keywords:J,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);d(i({keywords:t,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);d(i({keywords:g,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);d(i({keywords:x,cStyleComments:true,regexLiterals:true}),["js"]);d(i({keywords:s,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);d(h([],[[D,/^[\s\S]+/]]),["regex"]);function e(X){var W=X.langExtension;try{var U=b(X.sourceNode,X.pre);var V=U.sourceCode;X.sourceCode=V;X.spans=U.spans;X.basePos=0;r(W,V)(X);E(X)}catch(Y){if(O.console){console.log(Y&&Y.stack?Y.stack:Y)}}}function z(Y,X,W){var U=document.createElement("pre");U.innerHTML=Y;if(W){S(U,W,true)}var V={langExtension:X,numberLines:W,sourceNode:U,pre:1};e(V);return U.innerHTML}function c(aj){function ab(al){return document.getElementsByTagName(al)}var ah=[ab("pre"),ab("code"),ab("xmp")];var V=[];for(var ae=0;ae<ah.length;++ae){for(var ac=0,Y=ah[ae].length;ac<Y;++ac){V.push(ah[ae][ac])}}ah=null;var Z=Date;if(!Z.now){Z={now:function(){return +(new Date)}}}var aa=0;var U;var af=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ak=/\bprettyprint\b/;var W=/\bprettyprinted\b/;var ag=/pre|xmp/i;var ai=/^code$/i;var ad=/^(?:pre|code|xmp)$/i;function X(){var ar=(O.PR_SHOULD_USE_CONTINUATION?Z.now()+250:Infinity);for(;aa<V.length&&Z.now()<ar;aa++){var at=V[aa];var au=at.className;if(ak.test(au)&&!W.test(au)){var aw=false;for(var ao=at.parentNode;ao;ao=ao.parentNode){var ax=ao.tagName;if(ad.test(ax)&&ao.className&&ak.test(ao.className)){aw=true;break}}if(!aw){at.className+=" prettyprinted";var aq=au.match(af);var am;if(!aq&&(am=p(at))&&ai.test(am.tagName)){aq=am.className.match(af)}if(aq){aq=aq[1]}var ap;if(ag.test(at.tagName)){ap=1}else{var an=at.currentStyle;var al=(an?an.whiteSpace:(document.defaultView&&document.defaultView.getComputedStyle)?document.defaultView.getComputedStyle(at,null).getPropertyValue("white-space"):0);ap=al&&"pre"===al.substring(0,3)}var av=at.className.match(/\blinenums\b(?::(\d+))?/);av=av?av[1]&&av[1].length?+av[1]:true:false;if(av){S(at,av,ap)}U={langExtension:aq,sourceNode:at,numberLines:av,pre:ap};e(U)}}}if(aa<V.length){setTimeout(X,250)}else{if(aj){aj()}}}X()}var a=O.PR={createSimpleLexer:h,registerLangHandler:d,sourceDecorator:i,PR_ATTRIB_NAME:R,PR_ATTRIB_VALUE:o,PR_COMMENT:k,PR_DECLARATION:F,PR_KEYWORD:A,PR_LITERAL:H,PR_NOCODE:P,PR_PLAIN:G,PR_PUNCTUATION:M,PR_SOURCE:K,PR_STRING:D,PR_TAG:n,PR_TYPE:Q,prettyPrintOne:O.prettyPrintOne=z,prettyPrint:O.prettyPrint=c};if(typeof define==="function"&&define.amd){define("google-code-prettify",[],function(){return a})}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);

================================================
FILE: extras/yuidoc-theme-topheman/layouts/main.handlebars
================================================
<!DOCTYPE html>
<html lang="en" class="yui-overrride">
<head>
    <meta charset="utf-8">
    <title>{{htmlTitle}}</title>
    <link rel="stylesheet" href="{{yuiGridsUrl}}">
    <link rel="stylesheet" href="{{projectAssets}}/vendor/prettify/prettify-min.css">
    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700' rel='stylesheet' type='text/css'>
    <script src="{{yuiSeedUrl}}"></script>
    <link rel="stylesheet" href="{{projectAssets}}/css/main.css" id="site_styles">
</head>
<body class="yui3-skin-sam">

<div id="doc">
    <div id="hd" class="yui3-g header">
        <div class="yui3-u-3-4">
            <h1 class="blue-main-title">{{projectName}}</h1>
        </div>
        <div class="yui3-u-1-4 version project-version">
            API Docs for: {{projectVersion}}
        </div>
    </div>
    <div id="bd" class="yui3-g">

        <div class="yui3-u-7-24">
            <div id="docs-sidebar" class="sidebar apidocs">
                {{>sidebar}}
            </div>
        </div>
        <div class="yui3-u-17-24">
            {{>options}}
<div class="apidocs">
<div id="docs-main">
<div class="content">
{{>layout_content}}
</div>
</div>
</div>
        </div>
    </div>
</div>
<footer class="copyright">
  <div class="twitter-button">
    <a href="https://twitter.com/share" class="twitter-share-button" data-url="https://topheman.github.io/vanilla-es6-jspm" data-text="Project boilerplate for #ES6 #Jspm based apps w/ full production workflow #gulp #continuousintegration" data-via="topheman" data-size="large" data-count="none">Tweet</a>
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
  </div>
  ©2015 <a href="http://labs.topheman.com/">labs.topheman.com</a> - Christophe Rosset
</footer>
<script src="{{projectAssets}}/vendor/prettify/prettify-min.js"></script>
<script>prettyPrint();</script>
<script src="{{projectAssets}}/js/yui-prettify.js"></script>
<script src="{{projectAssets}}/../api.js"></script>
<script src="{{projectAssets}}/js/api-filter.js"></script>
<script src="{{projectAssets}}/js/api-list.js"></script>
<script src="{{projectAssets}}/js/api-search.js"></script>
<script src="{{projectAssets}}/js/apidocs.js"></script>
<script>
  document.getElementById('hd').addEventListener('click',function(){
    window.location.href = "{{projectRoot}}";
  },false);
</script>
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-41002835-1', 'auto');
  ga('send', 'pageview');
</script>
</body>
</html>


================================================
FILE: extras/yuidoc-theme-topheman/layouts/xhr.handlebars
================================================
<div id="docs-main">
    <div class="content">
        {{>layout_content}}
    </div>
</div>

<div id="xhr-title" class="hidden">{{title}}</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/attrs.handlebars
================================================
<div id="attr_{{name}}" class="attr item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">
    <a name="config_{{name}}"></a> {{! For backwards compatibility }}
    <h3 class="name"><code>{{name}}</code></h3>
    <span class="type">{{#crossLink type}}{{/crossLink}}</span>

    {{#if deprecated}}
        <span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
    {{/if}}

    {{#if access}}
        <span class="flag {{access}}">{{access}}</span>
    {{/if}}

    {{#if final}}
        <span class="flag final">final</span>
    {{/if}}

    {{#if static}}
        <span class="flag static">static</span>
    {{/if}}

    {{#if optional}}
        <span class="flag optional">optional</span>
    {{/if}}

    {{#if required}}
        <span class="flag required">required</span>
    {{/if}}

    {{#if readonly}}
        <span class="flag readonly">readonly</span>
    {{/if}}

    <div class="meta">
        {{#if overwritten_from}}
            <p>Inherited from
            <a href="{{crossLinkRaw overwritten_from/class}}#attr_{{overwritten_from/name}}">
                {{overwritten_from/class}}
            </a>
            {{#if foundAt}}
            but overwritten in
            {{/if}}
        {{else}}
            {{#if extended_from}}
                <p>Inherited from
                <a href="{{crossLinkRaw extended_from}}#attr_{{name}}">{{extended_from}}</a>:
            {{else}}
                {{#providedBy}}
                    <p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
                {{/providedBy}}
                <p>
                {{#if foundAt}}
                Defined in
                {{/if}}
            {{/if}}
        {{/if}}
        {{#if foundAt}}
        <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
        {{/if}}
        </p>

        {{#if deprecationMessage}}
            <p>Deprecated: {{deprecationMessage}}</p>
        {{/if}}

        {{#if since}}
            <p>Available since {{since}}</p>
        {{/if}}
    </div>

    <div class="description">
        {{{attrDescription}}}
    </div>

    {{#if default}}
        <p><strong>Default:</strong> {{default}}</p>
    {{/if}}

    {{#if emit}}
        <div class="emits box">
            <h4>Fires event <code>{{name}}Change</code></h4>

            <p>
            Fires when the value for the configuration attribute `{{{name}}}` is
            changed. You can listen for the event using the `on` method if you
            wish to be notified before the attribute's value has changed, or
            using the `after` method if you wish to be notified after the
            attribute's value has changed.
            </p>

            <div class="params">
                <h4>Parameters:</h4>

                <ul class="params-list">
                    <li class="param">
                        <code class="param-name">e</code>
                        <span class="type">{{#crossLink "EventFacade"}}{{/crossLink}}</span>

                        <div class="param-description">
                            An Event Facade object with the following
                            attribute-specific properties added:
                        </div>

                        <ul class="params-list">
                            <li class="param">
                                <code class="param-name">prevVal</code>
                                <span class="type">Any</span>
                                <div class="param-description">The value of the attribute, prior to it being set.</div>
                            </li>
                            <li class="param">
                                <code class="param-name">newVal</code>
                                <span class="type">Any</span>
                                <div class="param-description">The value the attribute is to be set to.</div>
                            </li>
                            <li class="param">
                                <code class="param-name">attrName</code>
                                <span class="type">{{#crossLink "String"}}{{/crossLink}}</span>
                                <div class="param-description">The name of the attribute being set.</div>
                            </li>
                            <li class="param">
                                <code class="param-name">subAttrName</code>
                                <span class="type">{{#crossLink "String"}}{{/crossLink}}</span>
                                <div class="param-description">If setting a property within the attribute's value, the name of the sub-attribute property being set.</div>
                            </li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    {{/if}}

    {{#example}}
        <div class="example">
            <h4>Example:</h4>

            <div class="example-content">
                {{{.}}}
            </div>
        </div>
    {{/example}}
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/classes.handlebars
================================================
<h1>{{name}}</h1>
<div class="meta">
    {{#if uses}}
        <div class="uses">
            Uses
            <ul class="inline commas">
                {{#uses}}
                    <li><a href="{{.}}.html">{{.}}</a></li>
                {{/uses}}
            </ul>
        </div>
    {{/if}}

    {{#if extends}}
        <div class="extends">
            Extends {{#crossLink extends}}{{/crossLink}}
        </div>
    {{/if}}

    {{#if foundAt}}
        <div class="foundat">
            Defined in: <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
        </div>
    {{/if}}

    {{#if module}}
        {{#if submodule}}
            Module: {{#crossLinkModule submodule}}{{/crossLinkModule}}<br>
            Parent Module: {{#crossLinkModule module}}{{/crossLinkModule}}
        {{else}}
            Module: {{#crossLinkModule module}}{{/crossLinkModule}}
        {{/if}}
    {{/if}}

    {{#if since}}
        <p>Available since {{since}}</p>
    {{/if}}
    {{#if static}}
        <p><span class="flag static">static</span></p>
    {{/if}}
</div>

{{#if deprecated}}
    <div class="box deprecated">
        <p>
        {{#if deprecationMessage}}
            <strong>Deprecated:</strong> {{deprecationMessage}}
        {{else}}
            This class is deprecated.
        {{/if}}
        </p>
    </div>
{{/if}}

<h3>Summary</h3>
<div class="intro">
    {{{classDescription}}}
</div>

{{#is_constructor}}
    <div class="constructor">
        <h2>Constructor</h2>
        {{>method}}
    </div>
{{/is_constructor}}

<div id="classdocs" class="tabview">
    <ul class="api-class-tabs">
        <li class="api-class-tab index"><a href="#index">Index</a></li>

        {{#if methods}}
            <li class="api-class-tab methods"><a href="#methods">Methods</a></li>
        {{/if}}
        {{#if properties}}
            <li class="api-class-tab properties"><a href="#properties">Properties</a></li>
        {{/if}}
        {{#if attrs}}
            <li class="api-class-tab attrs"><a href="#attrs">Attributes</a></li>
        {{/if}}
        {{#if events}}
            <li class="api-class-tab events"><a href="#events">Events</a></li>
        {{/if}}
    </ul>

    <div>
        <div id="index" class="api-class-tabpanel index">
            <h2 class="off-left">Item Index</h2>

            {{#if methods}}
                <div class="index-section methods">
                    <h3>Methods</h3>

                    <ul class="index-list methods{{#if extends}} extends{{/if}}">
                        {{#methods}}
                            <li class="index-item method{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
                                <a href="#method_{{name}}">{{name}}</a>

                                {{#if static}}
                                    <span class="flag static">static</span>
                                {{/if}}
                                {{#if deprecated}}
                                    <span class="flag deprecated">deprecated</span>
                                {{/if}}
                            </li>
                        {{/methods}}
                    </ul>
                </div>
            {{/if}}

            {{#if properties}}
                <div class="index-section properties">
                    <h3>Properties</h3>

                    <ul class="index-list properties{{#if extends}} extends{{/if}}">
                        {{#properties}}
                            <li class="index-item property{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
                                <a href="#property_{{name}}">{{name}}</a>

                                {{#if static}}
                                    <span class="flag static">static</span>
                                {{/if}}
                                {{#if deprecated}}
                                    <span class="flag deprecated">deprecated</span>
                                {{/if}}
                            </li>
                        {{/properties}}
                    </ul>
                </div>
            {{/if}}

            {{#if attrs}}
                <div class="index-section attrs">
                    <h3>Attributes</h3>

                    <ul class="index-list attrs{{#if extends}} extends{{/if}}">
                        {{#attrs}}
                            <li class="index-item attr{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
                                <a href="#attr_{{name}}">{{name}}</a>
                            </li>
                        {{/attrs}}
                    </ul>
                </div>
            {{/if}}

            {{#if events}}
                <div class="index-section events">
                    <h3>Events</h3>

                    <ul class="index-list events{{#if extends}} extends{{/if}}">
                        {{#events}}
                            <li class="index-item event{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if overwritten_from}} inherited{{/if}}{{#if extended_from}} inherited{{/if}}">
                                <a href="#event_{{name}}">{{name}}</a>

                                {{#if static}}
                                    <span class="flag static">static</span>
                                {{/if}}
                                {{#if deprecated}}
                                    <span class="flag deprecated">deprecated</span>
                                {{/if}}
                            </li>
                        {{/events}}
                    </ul>
                </div>
            {{/if}}
        </div>

        {{#if methods}}
            <div id="methods" class="api-class-tabpanel">
                <h2 class="off-left">Methods</h2>

                {{#methods}}
                    {{>method}}
                {{/methods}}
            </div>
        {{/if}}

        {{#if properties}}
            <div id="properties" class="api-class-tabpanel">
                <h2 class="off-left">Properties</h2>

                {{#properties}}
                    {{>props}}
                {{/properties}}
            </div>
        {{/if}}

        {{#if attrs}}
            <div id="attrs" class="api-class-tabpanel">
                <h2 class="off-left">Attributes</h2>

                {{#attrs}}
                    {{>attrs}}
                {{/attrs}}
            </div>
        {{/if}}

        {{#if events}}
            <div id="events" class="api-class-tabpanel">
                <h2 class="off-left">Events</h2>

                {{#events}}
                    {{>events}}
                {{/events}}
            </div>
        {{/if}}
    </div>
</div>

{{> exampleurl }}



================================================
FILE: extras/yuidoc-theme-topheman/partials/events.handlebars
================================================
<div id="event_{{name}}" class="events item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">
    <h3 class="blue-method-name">{{name}}</h3>

  <div class="meta method-meta">
    {{#if overwritten_from}}
    <p>Inherited from
      <a href="{{crossLinkRaw overwritten_from/class}}#event_{{overwritten_from/name}}">
        {{overwritten_from/class}}
      </a>
      {{#if foundAt}}
        but overwritten in
      {{/if}}
    {{else}}
      {{#if extended_from}}
      <p>Inherited from
        <a href="{{crossLinkRaw extended_from}}#event_{{name}}">{{extended_from}}</a>:
      {{else}}
        {{#providedBy}}
          <p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
        {{/providedBy}}
      <p>
        {{#if foundAt}}
          Defined in
        {{/if}}
      {{/if}}
    {{/if}}
    {{#if foundAt}}
      <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
    {{/if}}
  </p>

    {{#if deprecationMessage}}
      <p>Deprecated: {{deprecationMessage}}</p>
    {{/if}}

    {{#if since}}
      <p>Available since {{since}}</p>
    {{/if}}
  </div>
  <h3>Syntax</h3>
  <div class="blue-method-syntax">
    <h3 class="name"><code>{{name}}</code></h3>
    <span class="type">{{#crossLink type}}{{/crossLink}}</span>

    {{#if deprecated}}
        <span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
    {{/if}}

    {{#if access}}
        <span class="flag {{access}}">{{access}}</span>
    {{/if}}

    {{#if final}}
        <span class="flag final">final</span>
    {{/if}}

    {{#if static}}
        <span class="flag static">static</span>
    {{/if}}

  </div>

    <div class="description">
      <h3>Summary</h3>
        {{{eventDescription}}}
    </div>

    {{#if params}}
        <div class="params">
            <h4>Event Payload:</h4>

            <ul class="params-list">
            {{#params}}
                <li class="param">
                    {{#if optional}}
                        <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                        <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                        <span class="flag optional" title="This parameter is optional.">optional</span>
                    {{else}}
                        <code class="param-name">{{name}}</code>
                        <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                    {{/if}}

                    {{#if multiple}}
                        <span class="flag multiple" title="This parameter may occur one or more times.">Multiple</span>
                    {{/if}}

                    <div class="param-description">
                        {{{description}}}
                    </div>

                    {{#if props}}
                        <ul class="params-list">
                            {{#props}}
                            <li class="param">
                                {{#if optional}}
                                    <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                    <span class="flag optional" title="This parameter is optional.">optional</span>
                                {{else}}
                                    <code class="param-name">{{name}}</code>
                                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                {{/if}}

                                <div class="param-description">
                                    {{{description}}}
                                </div>

                                {{#if props}}
                                    <ul class="params-list">
                                        {{#props}}
                                        <li class="param">
                                            <code class="param-name">{{name}}</code>
                                            <span class="type">{{#crossLink type}}{{/crossLink}}</span>

                                            <div class="param-description">
                                                {{{description}}}
                                            </div>
                                        </li>
                                        {{/props}}
                                    </ul>
                                {{/if}}
                            </li>
                            {{/props}}
                        </ul>
                    {{/if}}
                </li>
            {{/params}}
            </ul>
        </div>
    {{/if}}


    {{#example}}
        <div class="example">
            <h4>Example:</h4>

            <div class="example-content">
                {{{.}}}
            </div>
        </div>
    {{/example}}

  {{> exampleurl }}
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/exampleurl.handlebars
================================================
{{#if exampleIframe }}
  <div class="blue-live-example">
  <h3>Live example:</h3>
    <div class="example-iframe-wrapper">
      {{{ exampleIframe }}}
    </div>
  </div>
{{/if}}


================================================
FILE: extras/yuidoc-theme-topheman/partials/files.handlebars
================================================
<h1 class="file-heading">File: {{fileName}}</h1>

<div class="file">
    <pre class="code prettyprint linenums">
{{fileData}}
    </pre>
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/index.handlebars
================================================
<h1>Welcome</h1>
<p style="text-align:center;"><img src="./assets/img/logo.png"/></p>
<p>This doc was generated from {{projectName}} source code with yuidoc. <a href="./modules/src_app.html" title="src/app module">Start here</a>.</p>
<p>
  This is only the generated doc for the basic ES6 app I developed for ES6/JSPM boilerplate.<br>
  You'll want to refer to the github repo to find out about the whole workflow.
</p>
<p style="font-size:150%;">Checkout <a href="https://github.com/topheman/vanilla-es6-jspm" title="topheman/vanilla-es6-jspm on github">topheman/vanilla-es6-jspm</a> on github (README, FAQ, Wiki).</p>
<p><i>Note:</i> If you have a better solution than YUIDoc for generating docs on ES6 code base, please let me know!</p>


================================================
FILE: extras/yuidoc-theme-topheman/partials/method.handlebars
================================================
<div id="method_{{name}}" class="method item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">
  <h3 class="blue-method-name">{{name}}</h3>

  <div class="meta method-meta">
    {{#if overwritten_from}}
    <p>Inherited from
      <a href="{{crossLinkRaw overwritten_from/class}}#method_{{overwritten_from/name}}">
        {{overwritten_from/class}}
      </a>
      {{#if foundAt}}
        but overwritten in
      {{/if}}
    {{else}}
      {{#if extended_from}}
      <p>Inherited from
        <a href="{{crossLinkRaw extended_from}}#method_{{name}}">{{extended_from}}</a>:
      {{else}}
        {{#providedBy}}
          <p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
        {{/providedBy}}
      <p>
        {{#if foundAt}}
          Defined in
        {{/if}}
      {{/if}}
    {{/if}}
    {{#if foundAt}}
      <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
    {{/if}}
  </p>


    {{#if deprecationMessage}}
      <p>Deprecated: {{deprecationMessage}}</p>
    {{/if}}

    {{#if since}}
      <p>Available since {{since}}</p>
    {{/if}}
  </div>

  <h3>Syntax</h3>
  <div class="blue-method-syntax">
  <h3 class="name"><code>{{name}}</code></h3>

    {{#if params}}
        <div class="args">
            <span class="paren">(</span><ul class="args-list inline commas">
            {{#params}}
                <li class="arg">
                    {{#if optional}}
                        <code class="optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                    {{else}}
                        <code>{{name}}</code>
                    {{/if}}
                </li>
            {{/params}}
            </ul><span class="paren">)</span>
        </div>
    {{else}}
        <span class="paren">()</span>
    {{/if}}

    {{#if return}}
        <span class="returns-inline">
            <span class="type">{{#crossLink returnType}}{{/crossLink}}</span>
        </span>
    {{/if}}

    {{#if deprecated}}
        <span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
    {{/if}}

    {{#if access}}
        <span class="flag {{access}}">{{access}}</span>
    {{/if}}

    {{#if final}}
        <span class="flag final">final</span>
    {{/if}}

    {{#if static}}
        <span class="flag static">static</span>
    {{/if}}

    {{#if chainable}}
        <span class="flag chainable">chainable</span>
    {{/if}}

    {{#if async}}
        <span class="flag async">async</span>
    {{/if}}

  </div>
    <div class="description">
      <h3>Summary</h3>
        {{{methodDescription}}}
    </div>

    {{#if params}}
        <div class="params">
            <h4>Parameters:</h4>

            <ul class="params-list">
            {{#params}}
                <li class="param">
                    {{#if optional}}
                        <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                        <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                        <span class="flag optional" title="This parameter is optional.">optional</span>
                    {{else}}
                        <code class="param-name">{{name}}</code>
                        <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                    {{/if}}

                    {{#if multiple}}
                        <span class="flag multiple" title="This argument may occur one or more times.">multiple</span>
                    {{/if}}

                    <div class="param-description">
                        {{{description}}}
                    </div>

                    {{#if props}}
                        <ul class="params-list">
                            {{#props}}
                            <li class="param">
                                {{#if optional}}
                                    <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                    <span class="flag optional" title="This parameter is optional.">optional</span>
                                {{else}}
                                    <code class="param-name">{{name}}</code>
                                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                {{/if}}

                                <div class="param-description">
                                    {{{description}}}
                                </div>

                                {{#if props}}
                                    <ul class="params-list">
                                        {{#props}}
                                        <li class="param">
                                            {{#if optional}}
                                                <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                                                <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                                <span class="flag optional" title="This parameter is optional.">optional</span>
                                            {{else}}
                                                <code class="param-name">{{name}}</code>
                                                <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                            {{/if}}

                                            <div class="param-description">
                                                {{{description}}}
                                            </div>
                                        </li>
                                        {{/props}}
                                    </ul>
                                {{/if}}
                            </li>
                            {{/props}}
                        </ul>
                    {{/if}}
                </li>
            {{/params}}
            </ul>
        </div>
    {{/if}}

    {{#return}}
        <div class="returns">
            <h4>Returns:</h4>

            <div class="returns-description">
              {{#if type}}
                <span class="type">{{#crossLink type}}{{/crossLink}}</span>:
              {{/if}}
              {{#if description}}
                <div class="blue-return-desc">
                    {{{description}}}
                </div>
              {{/if}}


            </div>
        </div>
    {{/return}}

    {{#example}}
        <div class="example">
            <h4>Example:</h4>

            <div class="example-content">
                {{{.}}}
            </div>
        </div>
    {{/example}}

    {{> exampleurl }}
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/module.handlebars
================================================
<h1>{{displayName}} Module</h1>
<div class="clearfix meta">
    {{#extra}}
        {{#selleck}}
            <a class="button link-docs" href="/yui/docs/{{name}}">User Guide &amp; Examples</a>
        {{/selleck}}
    {{/extra}}

    {{#if requires}}
        <div class="uses">
            Requires
            <ul class="inline commas">
                {{#requires}}
                    <li>{{#crossLinkModule .}}{{/crossLinkModule}}</li>
                {{/requires}}
            </ul>
        </div>
    {{/if}}

    {{#if foundAt}}
        <div class="foundat">
            Defined in: <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
        </div>
    {{/if}}

    {{#if since}}
        <p>Available since {{since}}</p>
    {{/if}}
</div>

{{#if deprecated}}
    <div class="deprecated">
        <p>
        {{#if deprecationMessage}}
            <strong>Deprecated:</strong> {{deprecationMessage}}
        {{else}}
            This module is deprecated.
        {{/if}}
        </p>
    </div>
{{/if}}
<h3>Summary</h3>
<div class="intro">
    {{{moduleDescription}}}
</div>

{{#example}}
    <div class="example">
        <h4>Example:</h4>
        <div class="example-content">
            {{{.}}}
        </div>
    </div>
{{/example}}

<div class="yui3-g">
    <div class="yui3-u-1-2">
        {{#if moduleClasses}}
            <p>This module provides the following classes:</p>

            <ul class="module-classes">
            {{#moduleClasses}}
                <li class="module-class">
                    <a href="{{../projectRoot}}classes/{{name}}.html">
                        {{displayName}}
                    </a>
                </li>
            {{/moduleClasses}}
            </ul>
        {{/if}}
    </div>

    <div class="yui3-u-1-2">
        {{#if subModules}}
            <p>This module is a rollup of the following modules:</p>

            <ul class="module-submodules">
            {{#subModules}}
                <li class="module-submodule">
                    <a href="{{../projectRoot}}modules/{{name}}.html">
                        {{displayName}}
                    </a>

                    <div class="module-submodule-description">
                        {{{description}}}
                    </div>
                </li>
            {{/subModules}}
            </ul>
        {{/if}}
    </div>
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/options.handlebars
================================================
    <div id="api-options">
        Show:
        <label for="api-show-inherited">
            <input type="checkbox" id="api-show-inherited" checked>
            Inherited
        </label>

        <label for="api-show-protected">
            <input type="checkbox" id="api-show-protected">
            Protected
        </label>

        <label for="api-show-private">
            <input type="checkbox" id="api-show-private">
            Private
        </label>
        <label for="api-show-deprecated">
            <input type="checkbox" id="api-show-deprecated">
            Deprecated
        </label>

    </div>



================================================
FILE: extras/yuidoc-theme-topheman/partials/props.handlebars
================================================
<div id="property_{{name}}" class="property item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extended_from}} inherited{{/if}}">

  <h3 class="blue-method-name">{{name}}</h3>
  <div class="meta method-meta">
    {{#if overwritten_from}}
    <p>Inherited from
      <a href="{{crossLinkRaw overwritten_from/class}}#property_{{overwritten_from/name}}">
        {{overwritten_from/class}}
      </a>
      {{#if foundAt}}
        but overwritten in
      {{/if}}
    {{else}}
      {{#if extended_from}}
      <p>Inherited from
        <a href="{{crossLinkRaw extended_from}}#property_{{name}}">{{extended_from}}</a>:
      {{else}}
        {{#providedBy}}
          <p>Provided by the <a href="../modules/{{.}}.html">{{.}}</a> module.</p>
        {{/providedBy}}
      <p>
        {{#if foundAt}}
          Defined in
        {{/if}}
      {{/if}}
    {{/if}}
    {{#if foundAt}}
      <a href="{{foundAt}}">`{{{file}}}:{{{line}}}`</a>
    {{/if}}
  </p>

    {{#if deprecationMessage}}
      <p>Deprecated: {{deprecationMessage}}</p>
    {{/if}}

    {{#if since}}
      <p>Available since {{since}}</p>
    {{/if}}
  </div>

  <h3>Syntax</h3>
  <div class="blue-method-syntax">
    <h3 class="name"><code>{{name}}</code></h3>
    <span class="type">{{#crossLink type}}{{/crossLink}}</span>

    {{#if deprecated}}
        <span class="flag deprecated"{{#if deprecationMessage}} title="{{deprecationMessage}}"{{/if}}>deprecated</span>
    {{/if}}

    {{#if access}}
        <span class="flag {{access}}">{{access}}</span>
    {{/if}}

    {{#if final}}
        <span class="flag final">final</span>
    {{/if}}

    {{#if static}}
        <span class="flag static">static</span>
    {{/if}}

    </div>

    <div class="description">
      <h3>Summary</h3>
        {{{propertyDescription}}}
    </div>

    {{#if default}}
        <p><strong>Default:</strong> {{default}}</p>
    {{/if}}

    {{#if subprops}}
        <h4>Sub-properties:</h4>

        <ul class="params-list">
            {{#subprops}}
            <li class="param">
                {{#if optional}}
                    <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                    <span class="flag optional" title="This property is optional.">optional</span>
                {{else}}
                    <code class="param-name">{{name}}</code>
                    <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                {{/if}}

                <div class="param-description">
                    {{{description}}}
                </div>

                {{#if subprops}}
                    <ul class="params-list">
                        {{#subprops}}
                        <li class="param">
                            {{#if optional}}
                                <code class="param-name optional">[{{name}}{{#if optdefault}}={{optdefault}}{{/if}}]</code>
                                <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                                <span class="flag optional" title="This property is optional.">optional</span>
                            {{else}}
                                <code class="param-name">{{name}}</code>
                                <span class="type">{{#crossLink type}}{{/crossLink}}</span>
                            {{/if}}

                            <div class="param-description">
                                {{{description}}}
                            </div>
                        </li>
                        {{/subprops}}
                    </ul>
                {{/if}}
            </li>
            {{/subprops}}
        </ul>
    {{/if}}

  {{#example}}
    <div class="example">
      <h4>Example:</h4>

      <div class="example-content">
        {{{.}}}
      </div>
    </div>
  {{/example}}

  {{> exampleurl }}
</div>


================================================
FILE: extras/yuidoc-theme-topheman/partials/sidebar.handlebars
================================================
<div id="api-list">
    <h2 class="off-left">APIs</h2>
    <div id="api-tabview" class="tabview">
        <ul class="tabs">
            <li><a href="#api-classes">Classes</a></li>
            <li><a href="#api-modules">Modules</a></li>
        </ul>

        <div id="api-tabview-filter">
            <input type="search" id="api-filter" placeholder="Type to filter APIs">
        </div>

        <div id="api-tabview-panel">
            <ul id="api-classes" class="apis classes">
            {{#classes}}
                <li><a href="{{../projectRoot}}classes/{{name}}.html">{{displayName}}</a></li>
            {{/classes}}
            </ul>

            <ul id="api-modules" class="apis modules">
            {{#allModules}}
                <li><a href="{{../projectRoot}}modules/{{name}}.html">{{displayName}}</a></li>
            {{/allModules}}
            </ul>
        </div>
    </div>
</div>


================================================
FILE: extras/yuidoc-theme-topheman/theme.json
================================================
{
    "yuiGridsUrl": "http://yui.yahooapis.com/3.9.1/build/cssgrids/cssgrids-min.css",
    "yuiSeedUrl": "http://yui.yahooapis.com/combo?3.9.1/build/yui/yui-min.js"
}


================================================
FILE: gulp/const.js
================================================
'use strict';

import util from 'gulp-util';
import moment from 'moment';
import pkg from '../package.json';
import gitRev from 'git-rev-sync';

import {ENV} from './utils.js';

var infos = {
  file: '',
  pkg: pkg,
  today: moment(new Date()).format('DD/MM/YYYY'),
  year: new Date().toISOString().substr(0, 4),
  gitRevisionShort: gitRev.short(),
  gitRevisionLong: gitRev.long(),
  urlToCommit: null
};

//retrieve and reformat repo url from package.json
if (typeof(pkg.repository) === 'string') {
  infos.urlToCommit = pkg.repository;
}
else if (typeof(pkg.repository.url) === 'string') {
  infos.urlToCommit = pkg.repository.url;
}
//check that there is a git repo specified in package.json & it is a github one
if (infos.urlToCommit !== null && /^https:\/\/github.com/.test(infos.urlToCommit)) {
  infos.urlToCommit = infos.urlToCommit.replace(/.git$/, '/tree/' + infos.gitRevisionLong);//remove the .git at the end
}

var tpl = [
  '',
  '<%= pkg.name %>',
  '',
  '<%= pkg.description %>',
  '',
  '@version v<%= pkg.version %> - <%= today %>',
  '@revision #<%= gitRevisionShort %><% if (urlToCommit !== null) { %> - <%= urlToCommit %><% } %>',
  '@author <%= (pkg.author && pkg.author.name) ? pkg.author.name : pkg.author %>',
  '@copyright <%= year %>(c) <%= (pkg.author && pkg.author.name) ? pkg.author.name : pkg.author %>',
  '@license <%= pkg.license %>'
];

if(ENV === 'test'){
  tpl = [].concat(tpl,
    '',
    'THIS IS A TEST VERSION',
    'This version is not meant for production but for testing purpose only'
  );
}

tpl = tpl.join('\n * ');

/**
 * The banner is the comment that is placed at the top of our compiled
 * source files. It is first processed as a Gulp template, where the `<%=`
 * pairs are evaluated based on this very configuration object.
 */
export const BANNER = util.template(
  '/**' + tpl + '\n */\n', infos);

/**
 * This banner is meant to be put in the html file, at the end
 */
export const BANNER_HTML = util.template(
  '<!--' + tpl + '\n-->\n', infos);


================================================
FILE: gulp/paths.js
================================================
'use strict';

import path from 'path';

const root = path.dirname(__dirname);//needed so that imports could co-exist with requires (on some edge cases)

const paths = {
  gulpfile: `${root}/gulpfile.js`,
  /**
   * This is a collection of file patterns that refer to our app code (the
   * stuff in `src/`). These file paths are used in the configuration of
   * build tasks.
   *
   * - 'styles'       contains all project css styles
   * - 'images'       contains all project images
   * - 'fonts'        contains all project fonts
   * - 'scripts'      contains all project javascript except config-env.js and unit test files
   * - 'html'         contains main html files
   * - 'templates'    contains all project html templates
   */
  app: {
    basePath: `${root}/src/`,
    styles: `${root}/src/styles/**/*.scss`,
    fonts: [
      `${root}/src/fonts/**/*.{eot,svg,ttf,woff}`,
      `${root}/jspm_packages/**/*.{eot,svg,ttf,woff}`,
    ],
    images: `${root}/src/images/**/*.{png,gif,jpg,jpeg}`,
    scripts: [`${root}/src/app/**/*.js`],
    html: `${root}/src/index.html`,
    templates: `${root}/src/app/**/*.html`
  },
  config: {
    karma: `${root}/karma.conf.js`,
    e2e: `${root}/protractor.config.js`,
    jspm: `${root}/jspm.config.js`
  },
  /**
   * The 'tmp' folder is where our html templates are compiled to JavaScript during
   * the build process and then they are concatenating with all other js files and
   * copy to 'dist' folder.
   */
  tmp: {
    basePath: `${root}/.tmp/`,
    styles: `${root}/.tmp/styles/`,
    scripts: `${root}/.tmp/scripts/`,
    config: {
      basePath: `${root}/.tmp/config/`,
      jspm: `${root}/.tmp/config/jspm.config.js`
    }
  },
  build: {
    basePath: `${root}/build/`,
    dist: {
      basePath: `${root}/build/dist/`,
      fonts: `${root}/build/dist/fonts/`,
      images: `${root}/build/dist/images/`,
      styles: `${root}/build/dist/styles/`,
      scripts: `${root}/build/dist/scripts/`,
      docs: `${root}/build/dist/docs/`
    },
    docs: `${root}/build/docs/`
  },
  test: {
    basePath: `${root}/test/`,
    config: {
      jspmOverride: `${root}/test/jspm.override.json`
    },
    unit: `${root}/test/unit/**/*.js`,
    fixtures: `${root}/test/fixtures/**/*.html`,
    e2e: `${root}/test/e2e/**/*.js`,
    stubs: `${root}/test/stubs/**/*.js`
  }
};

export default paths;


================================================
FILE: gulp/tasks/build.js
================================================
'use strict';

import del from 'del';
import gulp from 'gulp';
import util from 'gulp-util';
import uglify from 'gulp-uglify';
import bytediff from 'gulp-bytediff';
import size from 'gulp-size';
import minifyCss from 'gulp-minify-css';
import minifyHtml from 'gulp-minify-html';
import rev from 'gulp-rev';
import header from 'gulp-header';
import footer from 'gulp-footer';
import usemin from 'gulp-usemin';
import inject from 'gulp-inject';
import runSequence from 'run-sequence';

import {BANNER, BANNER_HTML} from '../const';
import {LOG, COLORS, WITH_DOCS} from '../utils';
import paths from '../paths';

//=============================================
//            UTILS FUNCTIONS
//=============================================

/**
 * Format a number as a percentage
 * @param  {Number} num       Number to format as a percent
 * @param  {Number} precision Precision of the decimal
 * @return {String}           Formatted percentage
 */
function formatPercent(num, precision) {
  return (num * 100).toFixed(precision);
}

/**
 * Formatter for bytediff to display the size changes after processing
 * @param  {Object} data - byte data
 * @return {String}      Difference in bytes, formatted
 */
function bytediffFormatter(data) {
  const difference = (data.savings > 0) ? ' smaller.' : ' larger.';
  return COLORS.yellow(data.fileName + ' went from ' +
    (data.startSize / 1000).toFixed(2) + ' kB to ' +
    (data.endSize / 1000).toFixed(2) + ' kB and is ' +
    formatPercent(1 - data.percent, 2) + '%' + difference);
}

//=============================================
//                  TASKS
//=============================================

/**
 * The 'clean' task delete 'build/dist' and '.tmp' directories.
 * But keeps build/dist/.git (if you git init this folder to deploy via git)
 */
gulp.task('clean', (cb) => {
  const files = [
    paths.build.dist.basePath + '*',
    '!' + paths.build.dist.basePath + '.git*',
    paths.tmp.basePath
  ];
  LOG('Cleaning: ' + COLORS.blue(files));

  return del(files, cb);
});

/**
 * Copies assets at the root of `src` to the `build/dist` folder, such as :
 * - favicon files
 * - 404.html file
 */
gulp.task('extras', () => {
  return gulp.src([paths.app.basePath + '*.{ico,png,txt}', paths.app.basePath + '404.html'])
    .pipe(gulp.dest(paths.build.dist.basePath));
});

/**
 * This task generates doc to `build/docs` and copies it to `build/dist/docs`
 * It only does it if run with correct flag: `gulp build --with-docs`
 *
 * If no flag, does nothing.
 */
gulp.task('extras-docs', (cb) => {
  if(WITH_DOCS){
    runSequence(
      ['generate-docs'],
      ['copy-generated-docs'],
      (err) => {
        if (err) {
          let exitCode = 3;
          LOG('[ERROR] gulp build task failed (docs generation step)', err);
          LOG('[FAIL] gulp build task failed (docs generation step) - exiting with code ' + exitCode);
          return process.exit(exitCode);
        }
        else {
          return cb();
        }
      }
    );
  }
  else{
    return cb();
  }
});

/**
 * The 'compile' task compile all js, css and html files.
 *
 * 1. it inject bundle into `index.html`
 * 2. css      - minify, add revision number, add banner header
 *    js       - minify, add revision number, add banner header
 *    html     - minify
 */
gulp.task('compile', ['htmlhint', 'sass', 'bundle'], () => {
  return gulp.src(paths.app.html)
    .pipe(inject(gulp.src(paths.tmp.scripts + 'app.bootstrap.build.js', {read: false}), {
      starttag: '<!-- inject:js -->'
    }))
    .pipe(inject(gulp.src(paths.app.basePath + 'analytics.snippet.html'), {
      starttag: '<!-- inject:analytics -->',
      transform: (filePath, file) => {
        // return file contents as string
        return file.contents.toString('utf8');
      }
    }))
    .pipe(usemin({
      css: [
        bytediff.start(),
        minifyCss({keepSpecialComments: 0}),
        bytediff.stop(bytediffFormatter),
        rev(),
        header(BANNER)
      ],
      js: [
        bytediff.start(),
        uglify(),
        bytediff.stop(bytediffFormatter),
        rev(),
        header(BANNER)
      ],
      html: [
        bytediff.start(),
        minifyHtml({empty: true}),
        footer(BANNER_HTML),
        bytediff.stop(bytediffFormatter)
      ]
    }))
    .pipe(gulp.dest(paths.build.dist.basePath))
    .pipe(size({title: 'compile', showFiles: true}));
});

/**
 * The 'build' task gets app ready for deployment by processing files
 * and put them into `build/dist` directory ready for deployment.
 *
 * Added callback to manage errors and exit with a clean exit code if task fails
 * (needed for CI tools such as Travis)
 */
gulp.task('build', (cb) => {
  runSequence(
    ['clean'],
    ['compile', 'extras', 'images'],
    ['extras-docs'],
    (err) => {
      if (err) {
        let exitCode = 2;
        LOG('[ERROR] gulp build task failed', err);
        LOG('[FAIL] gulp build task failed - exiting with code ' + exitCode);
        return process.exit(exitCode);
      }
      else {
        return cb();
      }
    }
  );
});


================================================
FILE: gulp/tasks/docs.js
================================================
'use strict';

import gulp from 'gulp';
import {exec} from 'child_process';

import paths from '../paths';

/**
 * This task simply encapsulate the npm task `npm run yuidoc`
 * so that it could be integrated in the `gulp build --with-docs` workflow
 */
gulp.task('generate-docs', (cb) => {
  return exec('npm run yuidoc', (error, stdout, stderr) => {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
    cb();
  });
});

/**
 * This task simply copies generated docs from `build/docs` to `build/dist/docs`
 * `build/docs` must have been generated before
 */
gulp.task('copy-generated-docs', () => {
  return gulp.src(paths.build.docs + '**/*')
    .pipe(gulp.dest(paths.build.dist.docs));
});


================================================
FILE: gulp/tasks/html.js
================================================
'use strict';

import gulp from 'gulp';
import htmlhint from 'gulp-htmlhint';
import paths from '../paths';
import {ENV} from '../utils.js';

/**
 * The 'htmlhint' task defines the rules of our hinter as well as which files we
 * should check. It helps to detect errors and potential problems in our
 * HTML code.
 *
 * Can also be executed in test env, like the jshint task
 *
 * @return {Stream}
 */
gulp.task('htmlhint', () => {
  var src;
  switch (ENV) {
    case 'test':
      src = [].concat(paths.app.html, paths.app.templates, paths.test.fixtures);
      break;
    case 'dev':
    default:
      src = [].concat(paths.app.html, paths.app.templates);
      break;
  }
  return gulp.src(src)
    .pipe(htmlhint('.htmlhintrc'))
    .pipe(htmlhint.reporter())
    .pipe(htmlhint.failReporter());
});


================================================
FILE: gulp/tasks/images.js
================================================
'use strict';

import gulp from 'gulp';
import cache from 'gulp-cache';
import size from 'gulp-size';
import imagemin from 'gulp-imagemin';

import paths from '../paths';

/**
 * The 'images' task minifies and copies images to `build/dist` directory.
 */
gulp.task('images', () => {
  return gulp.src(paths.app.images)
    .pipe(cache(imagemin({
      progressive: true,
      interlaced: true
    })))
    .pipe(gulp.dest(paths.build.dist.images))
    .pipe(size({title: 'images'}));
});


================================================
FILE: gulp/tasks/scripts.js
================================================
'use strict';

import util from 'gulp-util';
import gulp from 'gulp';
import jshint from 'gulp-jshint';
import cache from 'gulp-cache';
import footer from 'gulp-footer';
import gulpif from 'gulp-if';

import {LOG,COLORS,ENV} from '../utils.js';
import paths from '../paths';

/**
 * The 'jshint' task defines the rules of our hinter as well as which files
 * we should check. It helps to detect errors and potential problems in our
 * JavaScript code.
 *
 * It can be launched in test env (which will also hint all test related tasks)
 */
gulp.task('jshint', () => {
  var src;
  switch (ENV) {
    case 'test':
      src = [].concat(paths.app.scripts, paths.gulpfile, paths.config.karma, paths.config.e2e, paths.test.stubs, paths.test.unit, paths.test.e2e);
      break;
    case 'dev':
    default:
      src = [].concat(paths.app.scripts, paths.gulpfile, paths.config.karma, paths.config.e2e);
      break;
  }
  return gulp.src(src)
    .pipe(jshint('.jshintrc'))
    .pipe(jshint.reporter('jshint-stylish'))
    .pipe(jshint.reporter('fail'));
});

gulp.task('jspmconfig', () => {
  var injection;
  if(ENV === 'test'){
    var jspmOverride = require(paths.test.config.jspmOverride);
    LOG(COLORS.yellow('[INFOS] Using jspm.override.json:'))
    var injection = "System.config("+JSON.stringify(jspmOverride)+")";
    LOG(COLORS.yellow(injection));
  }
  return gulp.src(paths.config.jspm)
    .pipe(gulpif(ENV === 'test', footer(injection)))
    .pipe(gulp.dest(paths.tmp.config.basePath));
});

/**
 * Create JS production bundle.
 *
 * If the flag `--env test` was passed, make a production bundle based on the test configuration
 */
gulp.task('bundle', ['jshint', 'jspmconfig'], (cb) => {
  const Builder = require('systemjs-builder');
  const builder = new Builder();
  const inputPath = 'src/app/bootstrap';
  const outputFile = paths.tmp.scripts + 'app.bootstrap.build.js';
  const outputOptions = {sourceMaps: true, config: {sourceRoot: paths.tmp.scripts}};

  builder.loadConfig(paths.tmp.config.jspm)
    .then(() => {
      builder.buildStatic(inputPath, outputFile, outputOptions)
        .then(() => {
          return cb();
        })
        .catch((ex) => {
          cb(new Error(ex));
        });
    });
});


/**
 * gulp-cache is used in some tasks to save time
 * Though, when developing/debugging the gulp part, the cache can mess with the streams
 * This will clear it.
 */
gulp.task('cache-clean', (done) => {
  return cache.clearAll(done);
});


================================================
FILE: gulp/tasks/server.js
================================================
'use strict';

import gulp from 'gulp';
import util from 'gulp-util';
import modRewrite  from 'connect-modrewrite';
import browserSync from 'browser-sync';

import jspmOverride from '../../test/jspm.override.json';

import {COLORS,LOG,PORT,OPEN,ENV} from '../utils.js';

import path from '../paths';

function infos(env) {
  LOG(COLORS.yellow('[INFOS] call `gulp serve --env ' + env + ' --port 9002` (for example) to launch on another port'));
  LOG(COLORS.yellow('[INFOS] call `gulp serve --env ' + env + ' --disable-watch` if you don\'t need it'));
  LOG(COLORS.yellow('[INFOS] call `gulp serve --env ' + env + ' --open false` if you don\'t want the browser to open'));
}

//=============================================
//            PROXY CONFIGURATION
//=============================================

/**
 * Launches a browserSync server
 * Injecting `env` as a global variable + overriding jspm.config.js if in test
 * @param env dev/test/dist
 * @param baseDir
 * @param [options]
 * @param [options.files='default']
 * @param [options.browser='default']
 * @param [options.port=PORT]
 */
function startBrowserSync(env, baseDir, options = {}) {
  env = env.toLowerCase();
  options.browser = options.browser === undefined ? 'default' : options.browser;
  options.files = options.files === undefined ? 'default' : options.files;
  options.port = options.port === undefined ? PORT : options.port;
  options.open = options.open === undefined ? true : options.open;

  var config = {
    open: options.open,
    files: options.files,
    port: options.port,
    notify: false,
    server: {
      baseDir: baseDir,
      middleware: [
        //proxyMiddleware,
        //modRewrite(['!\\.\\w+$ /index.html [L]']), // require for HTML5 mode
        function (req, res, next) {
          //don't cache the entry point (since there are some inline <script> tags injected that can be different according to the env you launch it)
          if (req.url.indexOf('/index.html') > -1) {
            res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            res.setHeader("Expires", "0"); // Proxies.
          }
          next();
        }
      ]
    },
    browser: options.browser
  };

  /**
   * Replace the tag <!-- inject-browser-sync --> with some specific js code
   * injecting what we need (env var, jspm.config override ...)
   *
   * Also adds the `test/fixtures/bs.snippet.html`file in test mode
   *
   * Only used on dev and test
   */
  if (env.toLowerCase() !== 'dist') {
    var injectBrowserSync = [];
    var bsHtmlSnippet = '';
    injectBrowserSync.push('<script id="inject-browser-sync">');
    injectBrowserSync.push('window.env = "' + env + '";');
    injectBrowserSync.push('console.info("Launched in ' + env + ' mode");');
    switch (env) {
      case 'test':
        injectBrowserSync.push('console.warn("Overriding jspm.config.js");');
        injectBrowserSync.push('System.config(' + JSON.stringify(jspmOverride) + ');');
        injectBrowserSync.push('console.info("Using following System.paths",System.paths);');
        bsHtmlSnippet = require('fs').readFileSync(__dirname + '/../../test/fixtures/bs.snippet.html');
        break;
    }
    injectBrowserSync.push('</script>');
    injectBrowserSync.push(bsHtmlSnippet);
    injectBrowserSync = injectBrowserSync.join('\n');
    config.rewriteRules = [
      {
        match: /<!-- inject-browser-sync -->/g,
        fn: function (match) {
          return injectBrowserSync;
        }
      }
    ];
  }

  browserSync(config);
}

//=============================================
//                 TASKS
//=============================================

/**
 * The 'serve' task. run `gulp serve --env dev/dist/test`
 *
 * Pass the env dev/dist/test via the --env flag
 *
 * - dev: runs a dev server with livereload/watch
 * - test: runs a test server with livereload/watch (over the test also)
 * - dist: serves the `build/dist` folder
 */
var gulpServeDependencyTasks;
switch(ENV){
  case 'dist':
    gulpServeDependencyTasks = [];
    break;
  case 'test':
  case 'dev':
    gulpServeDependencyTasks = ['sass', 'watch'];
    break;
}
gulp.task('serve', gulpServeDependencyTasks, () => {
  infos(ENV);
  switch(ENV){
    case 'dist':
      startBrowserSync('dist', ['./build/dist'], {port: PORT, open: OPEN});
      break;
    case 'test':
      startBrowserSync('test', ['.tmp', 'src', 'jspm_packages', './'], {port: PORT, open: OPEN});
      break;
    case 'dev':
      startBrowserSync('dev', ['.tmp', 'src', 'jspm_packages', './'], {port: PORT, open: OPEN});
      break;
  }
});


================================================
FILE: gulp/tasks/styles.js
================================================
'use strict';

import gulp from 'gulp';
import util from 'gulp-util';
import sass from 'gulp-sass';
import changed from 'gulp-changed';
import sourcemaps from 'gulp-sourcemaps';
import autoprefixer from 'gulp-autoprefixer';
import concat from 'gulp-concat';
import filter from 'gulp-filter';
import browserSync from 'browser-sync';

import paths from '../paths';

/**
 * Compile SASS files into the main.css.
 */
gulp.task('sass', () => {
  return gulp.src(paths.app.styles)
    .pipe(changed(paths.tmp.styles, {extension: '.scss'}))
    .pipe(sourcemaps.init())
    .pipe(sass({style: 'compressed'}).on('error', sass.logError))
    .pipe(autoprefixer('last 2 version'))
    .pipe(concat('main.css'))
    .pipe(sourcemaps.write('../maps'))
    .pipe(gulp.dest(paths.tmp.styles))
    .pipe(filter('**/*.css')) // Filtering stream to only css files
    .pipe(browserSync.reload({stream: true}));
});


================================================
FILE: gulp/tasks/watch.js
================================================
'use strict';

import gulp from 'gulp';
import util from 'gulp-util';
import browserSync from 'browser-sync';

import {COLORS,LOG,ENV} from '../utils.js';

import paths from '../paths';

import {DISABLE_WATCH} from '../utils.js';

/**
 * The 'watch' task set up the checks to see if any of the files listed below
 * change, and then to execute the listed tasks when they do.
 *
 * According to the env it's launched to, it won't watch the same files (in test, will watch more files)
 */
gulp.task('watch', () => {
  if (DISABLE_WATCH) {
    LOG(COLORS.yellow('[INFOS] watch is disabled'));
    return;
  }
  // Watch images and fonts files
  gulp.watch([paths.app.images, paths.app.fonts], [browserSync.reload]);

  // Watch css files
  gulp.watch(paths.app.styles, ['sass', browserSync.reload]);//if takes to long, take a look at https://github.com/Browsersync/recipes/tree/master/recipes/gulp.task.sequence

  // Create the html list of file to watch according to env
  if (ENV !== 'dist') {
    var htmlFileList;
    switch (ENV) {
      case 'test':
        htmlFileList = [].concat(paths.app.html, paths.app.templates, paths.test.fixtures);
        break;
      case 'dev':
        htmlFileList = [].concat(paths.app.html, paths.app.templates);
        break;
    }

    // Create the js list of file to watch according to env
    var jsFileList;
    switch (ENV) {
      case 'test':
        jsFileList = [].concat(paths.app.scripts, paths.gulpfile, paths.config.karma, paths.config.e2e, paths.test.stubs, paths.test.unit, paths.test.e2e);
        break;
      case 'dev':
        jsFileList = [].concat(paths.app.scripts, paths.gulpfile);
        break;
    }

    // Watch html files
    gulp.watch(htmlFileList, ['htmlhint', browserSync.reload]);

    // Watch js files
    gulp.watch(jsFileList, ['jshint', browserSync.reload]);
  }
});


================================================
FILE: gulp/utils.js
================================================
'use strict';

import util from 'gulp-util';

export const LOG = util.log;
export const COLORS = util.colors;

import pkg from '../package.json';

//launch your task with `--port 9002` for example
export const PORT = util.env.port || (pkg.config ? (pkg.config.port ? pkg.config.port : null) : null) || 9000;

//launch your task with `--open` `--open false` for example
export const OPEN = util.env.open === 'false' ? false : true;

//launch your task with `--disable-watch` for example
export const DISABLE_WATCH = util.env['disable-watch'];

// if no --env flag, environment variable ENV is taken,
// if none of them is set, 'dev' is set by default
// if you pass by --env flag, it will be reflected in process.env.ENV
var environment = ((util.env.env === true ? 'dev' : util.env.env) || process.env.ENV || 'dev').toLowerCase();
if (['dev', 'dist', 'test'].indexOf(environment) === -1) {
  throw new Error('--env flag only accepts dev/dist/test')
}
if (!process.env.ENV) {
  LOG(COLORS.yellow('[INFOS] Setting process.env.ENV=' + environment));
  process.env.ENV = environment;
}
LOG(COLORS.yellow('### Running in ' + environment + ' ###'));

export const ENV = environment;

export const WITH_DOCS = util.env['with-docs'] || process.env.WITH_DOCS;

if(WITH_DOCS){
  LOG(COLORS.yellow('### Running in --with-docs mode ###'));
}

/**
 * @warn this is still in progress
 *
 * @todo add config.runUnitTestsOnChange: true in package.json
 * @todo add npm run test-unit to the watch tasks
 *
 * For grunt serve task - Unit tests will be run on file changes if:
 * In package.json, config.runUnitTestsOnChange = true (turning it to false won't run the tests on change)
 * You can override this behavior by passing the flag :
 * * `--run-unit-tests-on-change` (to run the unit tests)
 * * `--run-unit-tests-on-change false` (not to run the unit tests)
 */
var runUnitTestsOnChange = (pkg.config ? (pkg.config.runUnitTestsOnChange !== undefined ? pkg.config.runUnitTestsOnChange : true) : true);
if (util.env['run-unit-tests-on-change'] !== undefined) {
  runUnitTestsOnChange = util.env['run-unit-tests-on-change'] === 'false' ? false : util.env['run-unit-tests-on-change'];
}
export const RUN_UNIT_TESTS_ON_RELOAD = runUnitTestsOnChange;


================================================
FILE: gulpfile.js
================================================
'use strict';

//inspired by the gulpfile.js from https://github.com/martinmicunda/employee-scheduling-ui

//use babel transpiler for ES6 files in node without needing --harmony nor a gulpfile.babel.js
require('babel/register');

// require all tasks
require('require-dir')('./gulp/tasks', {recurse: true});

require('gulp').task('default', ['serve']);


================================================
FILE: jspm.config.js
================================================
System.config({
  baseURL: "./",
  defaultJSExtensions: true,
  transpiler: "babel",
  babelOptions: {
    "optional": [
      "runtime",
      "optimisation.modules.system"
    ]
  },
  paths: {
    "components/*": "src/app/components/*",
    "services/*": "src/app/services/*",
    "github:*": "jspm_packages/github/*",
    "npm:*": "jspm_packages/npm/*"
  },

  map: {
    "babel": "npm:babel-core@5.8.34",
    "babel-runtime": "npm:babel-runtime@5.8.34",
    "bootstrap-sass": "npm:bootstrap-sass@3.3.5",
    "clean-css": "npm:clean-css@3.4.3",
    "core-js": "npm:core-js@1.2.6",
    "css": "github:systemjs/plugin-css@0.1.17",
    "fetch-polyfill": "npm:fetch-polyfill@0.8.1",
    "text": "github:systemjs/plugin-text@0.0.2",
    "github:jspm/nodelibs-assert@0.1.0": {
      "assert": "npm:assert@1.3.0"
    },
    "github:jspm/nodelibs-buffer@0.1.0": {
      "buffer": "npm:buffer@3.5.0"
    },
    "github:jspm/nodelibs-events@0.1.1": {
      "events": "npm:events@1.0.2"
    },
    "github:jspm/nodelibs-http@1.7.1": {
      "Base64": "npm:Base64@0.2.1",
      "events": "github:jspm/nodelibs-events@0.1.1",
      "inherits": "npm:inherits@2.0.1",
      "stream": "github:jspm/nodelibs-stream@0.1.0",
      "url": "github:jspm/nodelibs-url@0.1.0",
      "util": "github:jspm/nodelibs-util@0.1.0"
    },
    "github:jspm/nodelibs-https@0.1.0": {
      "https-browserify": "npm:https-browserify@0.0.0"
    },
    "github:jspm/nodelibs-os@0.1.0": {
      "os-browserify": "npm:os-browserify@0.1.2"
    },
    "github:jspm/nodelibs-path@0.1.0": {
      "path-browserify": "npm:path-browserify@0.0.0"
    },
    "github:jspm/nodelibs-process@0.1.2": {
      "process": "npm:process@0.11.2"
    },
    "github:jspm/nodelibs-stream@0.1.0": {
      "stream-browserify": "npm:stream-browserify@1.0.0"
    },
    "github:jspm/nodelibs-url@0.1.0": {
      "url": "npm:url@0.10.3"
    },
    "github:jspm/nodelibs-util@0.1.0": {
      "util": "npm:util@0.10.3"
    },
    "npm:amdefine@1.0.0": {
      "fs": "github:jspm/nodelibs-fs@0.1.2",
      "module": "github:jspm/nodelibs-module@0.1.0",
      "path": "github:jspm/nodelibs-path@0.1.0",
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:assert@1.3.0": {
      "util": "npm:util@0.10.3"
    },
    "npm:babel-runtime@5.8.34": {
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:buffer@3.5.0": {
      "base64-js": "npm:base64-js@0.0.8",
      "ieee754": "npm:ieee754@1.1.6",
      "is-array": "npm:is-array@1.0.1"
    },
    "npm:clean-css@3.4.3": {
      "buffer": "github:jspm/nodelibs-buffer@0.1.0",
      "commander": "npm:commander@2.8.1",
      "fs": "github:jspm/nodelibs-fs@0.1.2",
      "http": "github:jspm/nodelibs-http@1.7.1",
      "https": "github:jspm/nodelibs-https@0.1.0",
      "os": "github:jspm/nodelibs-os@0.1.0",
      "path": "github:jspm/nodelibs-path@0.1.0",
      "process": "github:jspm/nodelibs-process@0.1.2",
      "source-map": "npm:source-map@0.4.4",
      "url": "github:jspm/nodelibs-url@0.1.0",
      "util": "github:jspm/nodelibs-util@0.1.0"
    },
    "npm:commander@2.8.1": {
      "child_process": "github:jspm/nodelibs-child_process@0.1.0",
      "events": "github:jspm/nodelibs-events@0.1.1",
      "fs": "github:jspm/nodelibs-fs@0.1.2",
      "graceful-readlink": "npm:graceful-readlink@1.0.1",
      "path": "github:jspm/nodelibs-path@0.1.0",
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:core-js@1.2.6": {
      "fs": "github:jspm/nodelibs-fs@0.1.2",
      "path": "github:jspm/nodelibs-path@0.1.0",
      "process": "github:jspm/nodelibs-process@0.1.2",
      "systemjs-json": "github:systemjs/plugin-json@0.1.0"
    },
    "npm:core-util-is@1.0.1": {
      "buffer": "github:jspm/nodelibs-buffer@0.1.0"
    },
    "npm:graceful-readlink@1.0.1": {
      "fs": "github:jspm/nodelibs-fs@0.1.2"
    },
    "npm:https-browserify@0.0.0": {
      "http": "github:jspm/nodelibs-http@1.7.1"
    },
    "npm:inherits@2.0.1": {
      "util": "github:jspm/nodelibs-util@0.1.0"
    },
    "npm:os-browserify@0.1.2": {
      "os": "github:jspm/nodelibs-os@0.1.0"
    },
    "npm:path-browserify@0.0.0": {
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:process@0.11.2": {
      "assert": "github:jspm/nodelibs-assert@0.1.0"
    },
    "npm:punycode@1.3.2": {
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:readable-stream@1.1.13": {
      "buffer": "github:jspm/nodelibs-buffer@0.1.0",
      "core-util-is": "npm:core-util-is@1.0.1",
      "events": "github:jspm/nodelibs-events@0.1.1",
      "inherits": "npm:inherits@2.0.1",
      "isarray": "npm:isarray@0.0.1",
      "process": "github:jspm/nodelibs-process@0.1.2",
      "stream-browserify": "npm:stream-browserify@1.0.0",
      "string_decoder": "npm:string_decoder@0.10.31"
    },
    "npm:source-map@0.4.4": {
      "amdefine": "npm:amdefine@1.0.0",
      "process": "github:jspm/nodelibs-process@0.1.2"
    },
    "npm:stream-browserify@1.0.0": {
      "events": "github:jspm/nodelibs-events@0.1.1",
      "inherits": "npm:inherits@2.0.1",
      "readable-stream": "npm:readable-stream@1.1.13"
    },
    "npm:string_decoder@0.10.31": {
      "buffer": "github:jspm/nodelibs-buffer@0.1.0"
    },
    "npm:url@0.10.3": {
      "assert": "github:jspm/nodelibs-assert@0.1.0",
      "punycode": "npm:punycode@1.3.2",
      "querystring": "npm:querystring@0.2.0",
      "util": "github:jspm/nodelibs-util@0.1.0"
    },
    "npm:util@0.10.3": {
      "inherits": "npm:inherits@2.0.1",
      "process": "github:jspm/nodelibs-process@0.1.2"
    }
  }
});


================================================
FILE: karma.conf.js
================================================
var argv = require('minimist')(process.argv.slice(2));
var jspmOverride = require('./test/jspm.override.json');
var _ = require('lodash');
var colors = require('colors');
var clientCaptureConsole = true;

if (typeof(argv['capture-console']) !== 'undefined') {
  if (argv['capture-console'] !== 'true' && argv['capture-console'] !== 'false') {
    console.error('[ERROR][Invalid Argument] Flag --capture-console only accepts true or false'.red);
    console.error('[ERROR][Invalid Argument] Exiting
Download .txt
gitextract_r5mb_8xo/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── .htmlhintrc
├── .jshintrc
├── .travis.yml
├── LICENSE
├── README.md
├── bin/
│   └── test-build.sh
├── extras/
│   └── yuidoc-theme-topheman/
│       ├── README.md
│       ├── assets/
│       │   ├── css/
│       │   │   ├── main.css
│       │   │   └── main.deprecated.less
│       │   ├── index.html
│       │   ├── js/
│       │   │   ├── api-filter.js
│       │   │   ├── api-list.js
│       │   │   ├── api-search.js
│       │   │   ├── apidocs.js
│       │   │   └── yui-prettify.js
│       │   └── vendor/
│       │       └── prettify/
│       │           ├── CHANGES.html
│       │           ├── COPYING
│       │           ├── README.html
│       │           ├── prettify-min.css
│       │           └── prettify-min.js
│       ├── layouts/
│       │   ├── main.handlebars
│       │   └── xhr.handlebars
│       ├── partials/
│       │   ├── attrs.handlebars
│       │   ├── classes.handlebars
│       │   ├── events.handlebars
│       │   ├── exampleurl.handlebars
│       │   ├── files.handlebars
│       │   ├── index.handlebars
│       │   ├── method.handlebars
│       │   ├── module.handlebars
│       │   ├── options.handlebars
│       │   ├── props.handlebars
│       │   └── sidebar.handlebars
│       └── theme.json
├── gulp/
│   ├── const.js
│   ├── paths.js
│   ├── tasks/
│   │   ├── build.js
│   │   ├── docs.js
│   │   ├── html.js
│   │   ├── images.js
│   │   ├── scripts.js
│   │   ├── server.js
│   │   ├── styles.js
│   │   └── watch.js
│   └── utils.js
├── gulpfile.js
├── jspm.config.js
├── karma.conf.js
├── package.json
├── protractor.config.js
├── src/
│   ├── 404.html
│   ├── analytics.snippet.html
│   ├── app/
│   │   ├── bootstrap.js
│   │   ├── components/
│   │   │   ├── Component/
│   │   │   │   └── Component.js
│   │   │   ├── Geolocation/
│   │   │   │   ├── Geolocation.html
│   │   │   │   └── Geolocation.js
│   │   │   └── Spinner/
│   │   │       ├── Spinner.css
│   │   │       ├── Spinner.html
│   │   │       └── Spinner.js
│   │   ├── main.js
│   │   └── services/
│   │       └── geolocation/
│   │           └── geolocation.js
│   ├── index.html
│   └── styles/
│       ├── _footer.scss
│       ├── _header.scss
│       ├── _index.scss
│       ├── _networks-headers.scss
│       ├── _variables.scss
│       └── main.scss
└── test/
    ├── e2e/
    │   ├── spec/
    │   │   ├── docs.specs.conditional.js
    │   │   └── home.spec.js
    │   └── utils.js
    ├── fixtures/
    │   ├── bs.snippet.html
    │   └── components/
    │       └── simple-wrapper.html
    ├── forever.gulp.serve.dist.json
    ├── forever.gulp.serve.test.json
    ├── jspm.override.json
    ├── stubs/
    │   └── app/
    │       └── services/
    │           └── geolocation/
    │               ├── geolocation.js
    │               └── geolocation.json
    └── unit/
        ├── spec/
        │   ├── components/
        │   │   ├── Component.spec.js
        │   │   ├── Geolocation.spec.js
        │   │   └── Spinner.spec.js
        │   └── services/
        │       └── geolocation.spec.js
        └── utils.js
Download .txt
SYMBOL INDEX (54 symbols across 16 files)

FILE: extras/yuidoc-theme-topheman/assets/js/api-list.js
  function getFilterResultNode (line 99) | function getFilterResultNode() {
  function onFilterResults (line 104) | function onFilterResults(e) {
  function onSearchClear (line 134) | function onSearchClear(e) {
  function onSearchKey (line 139) | function onSearchKey(e) {
  function onSearchResults (line 153) | function onSearchResults(e) {
  function onTabSelectionChange (line 173) | function onTabSelectionChange(e) {
  function onTabSwitchKey (line 223) | function onTabSwitchKey(e) {

FILE: extras/yuidoc-theme-topheman/assets/js/apidocs.js
  function scrollToNode (line 194) | function scrollToNode() {

FILE: extras/yuidoc-theme-topheman/assets/vendor/prettify/prettify-min.js
  function l (line 1) | function l(ab){var af=0;var U=false;var ae=false;for(var X=0,W=ab.length...
  function b (line 1) | function b(aa,Y){var W=/(?:^|\s)nocode(?:\s|$)/;var ab=[];var Z=0;var X=...
  function C (line 1) | function C(U,W,Y,V){if(!W){return}var X={sourceCode:W,basePos:U};Y(X);V....
  function p (line 1) | function p(U){var X=undefined;for(var W=U.firstChild;W;W=W.nextSibling){...
  function h (line 1) | function h(W,V){var U={};var X;(function(){var af=W.concat(V);var aj=[];...
  function i (line 1) | function i(V){var Y=[],U=[];if(V.tripleQuotedStrings){Y.push([D,/^(?:\'\...
  function S (line 1) | function S(W,ah,aa){var V=/(?:^|\s)nocode(?:\s|$)/;var ac=/\r\n?|\n/;var...
  function E (line 1) | function E(af){var X=/\bMSIE\s(\d+)/.exec(navigator.userAgent);X=X&&+X[1...
  function d (line 1) | function d(W,X){for(var U=X.length;--U>=0;){var V=X[U];if(!u.hasOwnPrope...
  function r (line 1) | function r(V,U){if(!(V&&u.hasOwnProperty(V))){V=/^\s*</.test(U)?"default...
  function e (line 1) | function e(X){var W=X.langExtension;try{var U=b(X.sourceNode,X.pre);var ...
  function z (line 1) | function z(Y,X,W){var U=document.createElement("pre");U.innerHTML=Y;if(W...
  function c (line 1) | function c(aj){function ab(al){return document.getElementsByTagName(al)}...

FILE: gulp/const.js
  constant BANNER (line 60) | const BANNER = util.template(
  constant BANNER_HTML (line 66) | const BANNER_HTML = util.template(

FILE: gulp/tasks/build.js
  function formatPercent (line 32) | function formatPercent(num, precision) {
  function bytediffFormatter (line 41) | function bytediffFormatter(data) {

FILE: gulp/tasks/server.js
  function infos (line 14) | function infos(env) {
  function startBrowserSync (line 34) | function startBrowserSync(env, baseDir, options = {}) {

FILE: gulp/utils.js
  constant LOG (line 5) | const LOG = util.log;
  constant COLORS (line 6) | const COLORS = util.colors;
  constant PORT (line 11) | const PORT = util.env.port || (pkg.config ? (pkg.config.port ? pkg.confi...
  constant OPEN (line 14) | const OPEN = util.env.open === 'false' ? false : true;
  constant DISABLE_WATCH (line 17) | const DISABLE_WATCH = util.env['disable-watch'];
  constant ENV (line 32) | const ENV = environment;
  constant WITH_DOCS (line 34) | const WITH_DOCS = util.env['with-docs'] || process.env.WITH_DOCS;
  constant RUN_UNIT_TESTS_ON_RELOAD (line 56) | const RUN_UNIT_TESTS_ON_RELOAD = runUnitTestsOnChange;

FILE: src/app/bootstrap.js
  class bootstrap (line 23) | class bootstrap {
    method init (line 29) | static init() {

FILE: src/app/components/Component/Component.js
  class Component (line 4) | class Component {
    method constructor (line 16) | constructor(domNode, template) {
    method init (line 41) | init() {
    method show (line 51) | show() {
    method hide (line 62) | hide() {

FILE: src/app/components/Geolocation/Geolocation.js
  class Geolocation (line 11) | class Geolocation extends Component {
    method constructor (line 30) | constructor(domNode) {
    method init (line 40) | init() {

FILE: src/app/components/Spinner/Spinner.js
  class Spinner (line 10) | class Spinner extends Component {
    method constructor (line 28) | constructor(domNode) {

FILE: src/app/main.js
  class main (line 12) | class main {
    method init (line 18) | static init() {
    method initGeolocation (line 27) | static initGeolocation() {

FILE: src/app/services/geolocation/geolocation.js
  function geolocation (line 30) | function geolocation(ipAddress = "") {

FILE: test/e2e/utils.js
  function beforeEachIsAngular (line 20) | function beforeEachIsAngular(...args) {

FILE: test/stubs/app/services/geolocation/geolocation.js
  function geolocation (line 5) | function geolocation() {

FILE: test/unit/utils.js
  function onDOMElementChange (line 17) | function onDOMElementChange(DOMNode, callback) {
Condensed preview — 86 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (270K chars).
[
  {
    "path": ".editorconfig",
    "chars": 363,
    "preview": "# http://editorconfig.org\nroot = true\n\n[*]\n# change these settings to your own preference\nindent_style = space\nindent_si"
  },
  {
    "path": ".gitattributes",
    "chars": 27,
    "preview": "extras/* linguist-vendored\n"
  },
  {
    "path": ".gitignore",
    "chars": 260,
    "preview": "# General\n\n.DS_Store\n\n# dependency directories\n\nnpm-debug.log\nnode_modules\njspm_packages\nnode_modules.bak\njspm_packages."
  },
  {
    "path": ".htmlhintrc",
    "chars": 28,
    "preview": "{\n  \"doctype-first\": false\n}"
  },
  {
    "path": ".jshintrc",
    "chars": 808,
    "preview": "{\n  \"node\": true,\n  \"browser\": true,\n  \"esnext\": true,\n  \"bitwise\": true,\n  \"camelcase\": false,\n  \"curly\": true,\n  \"eqeq"
  },
  {
    "path": ".travis.yml",
    "chars": 2657,
    "preview": "language: node_js\nnode_js:\n- '6'\naddons:\n  sauce_connect: true\nenv:\n  global:\n#You don't need the WITH_DOCS variable (th"
  },
  {
    "path": "LICENSE",
    "chars": 1105,
    "preview": "The MIT License (MIT)\n\nCopyright (C) 2015 Christophe Rosset <tophe@topheman.com>\n\nPermission is hereby granted, free of "
  },
  {
    "path": "README.md",
    "chars": 12236,
    "preview": "vanilla-es6-jspm\n================\n\n[![Build Status](https://travis-ci.org/topheman/vanilla-es6-jspm.svg?branch=master)]("
  },
  {
    "path": "bin/test-build.sh",
    "chars": 3348,
    "preview": "#!/usr/bin/env bash\n\n# This script will launch the gulp build task\n#\n# If your build/dist is under git management,\n# it "
  },
  {
    "path": "extras/yuidoc-theme-topheman/README.md",
    "chars": 1586,
    "preview": "yuidoc-theme-topheman\n=====================\n\nMy yuidoc theme, inspired by [royriojas/yuidoc-theme-blue](https://github.c"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/css/main.css",
    "chars": 19007,
    "preview": "util.print: Use console.log instead\n/*\nFont sizes for all selectors other than the body are given in percentages,\nwith 1"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/css/main.deprecated.less",
    "chars": 19040,
    "preview": "/*\nFont sizes for all selectors other than the body are given in percentages,\nwith 100% equal to 13px. To calculate a fo"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/index.html",
    "chars": 216,
    "preview": "<!doctype html>\n<html>\n    <head>\n        <title>Redirector</title>\n        <meta http-equiv=\"refresh\" content=\"0;url=.."
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/js/api-filter.js",
    "chars": 1445,
    "preview": "YUI.add('api-filter', function (Y) {\n\nY.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], {\n    // --"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/js/api-list.js",
    "chars": 6568,
    "preview": "YUI.add('api-list', function (Y) {\n\nvar Lang   = Y.Lang,\n    YArray = Y.Array,\n\n    APIList = Y.namespace('APIList'),\n\n "
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/js/api-search.js",
    "chars": 2924,
    "preview": "YUI.add('api-search', function (Y) {\n\nvar Lang   = Y.Lang,\n    Node   = Y.Node,\n    YArray = Y.Array;\n\nY.APISearch = Y.B"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/js/apidocs.js",
    "chars": 10222,
    "preview": "YUI().use(\n    'yuidoc-meta',\n    'api-list', 'history-hash', 'node-screen', 'node-style', 'pjax',\nfunction (Y) {\n\nvar w"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/js/yui-prettify.js",
    "chars": 482,
    "preview": "YUI().use('node', function(Y) {\n    var code = Y.all('.prettyprint.linenums');\n    if (code.size()) {\n        code.each("
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/vendor/prettify/CHANGES.html",
    "chars": 6084,
    "preview": "<html>\n  <head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <title>Change Log</title>\n  "
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/vendor/prettify/COPYING",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/vendor/prettify/README.html",
    "chars": 7912,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/vendor/prettify/prettify-min.css",
    "chars": 675,
    "preview": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,"
  },
  {
    "path": "extras/yuidoc-theme-topheman/assets/vendor/prettify/prettify-min.js",
    "chars": 17803,
    "preview": "window.PR_SHOULD_USE_CONTINUATION=true;var prettyPrintOne;var prettyPrint;(function(){var O=window;var j=[\"break,continu"
  },
  {
    "path": "extras/yuidoc-theme-topheman/layouts/main.handlebars",
    "chars": 3086,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\" class=\"yui-overrride\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>{{htmlTitle}}</title"
  },
  {
    "path": "extras/yuidoc-theme-topheman/layouts/xhr.handlebars",
    "chars": 145,
    "preview": "<div id=\"docs-main\">\n    <div class=\"content\">\n        {{>layout_content}}\n    </div>\n</div>\n\n<div id=\"xhr-title\" class="
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/attrs.handlebars",
    "chars": 5117,
    "preview": "<div id=\"attr_{{name}}\" class=\"attr item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if extend"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/classes.handlebars",
    "chars": 7025,
    "preview": "<h1>{{name}}</h1>\n<div class=\"meta\">\n    {{#if uses}}\n        <div class=\"uses\">\n            Uses\n            <ul class="
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/events.handlebars",
    "chars": 5050,
    "preview": "<div id=\"event_{{name}}\" class=\"events item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if ext"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/exampleurl.handlebars",
    "chars": 179,
    "preview": "{{#if exampleIframe }}\n  <div class=\"blue-live-example\">\n  <h3>Live example:</h3>\n    <div class=\"example-iframe-wrapper"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/files.handlebars",
    "chars": 144,
    "preview": "<h1 class=\"file-heading\">File: {{fileName}}</h1>\n\n<div class=\"file\">\n    <pre class=\"code prettyprint linenums\">\n{{fileD"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/index.handlebars",
    "chars": 740,
    "preview": "<h1>Welcome</h1>\n<p style=\"text-align:center;\"><img src=\"./assets/img/logo.png\"/></p>\n<p>This doc was generated from {{p"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/method.handlebars",
    "chars": 6926,
    "preview": "<div id=\"method_{{name}}\" class=\"method item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#if ex"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/module.handlebars",
    "chars": 2351,
    "preview": "<h1>{{displayName}} Module</h1>\n<div class=\"clearfix meta\">\n    {{#extra}}\n        {{#selleck}}\n            <a class=\"bu"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/options.handlebars",
    "chars": 621,
    "preview": "    <div id=\"api-options\">\n        Show:\n        <label for=\"api-show-inherited\">\n            <input type=\"checkbox\" id="
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/props.handlebars",
    "chars": 3976,
    "preview": "<div id=\"property_{{name}}\" class=\"property item{{#if access}} {{access}}{{/if}}{{#if deprecated}} deprecated{{/if}}{{#i"
  },
  {
    "path": "extras/yuidoc-theme-topheman/partials/sidebar.handlebars",
    "chars": 902,
    "preview": "<div id=\"api-list\">\n    <h2 class=\"off-left\">APIs</h2>\n    <div id=\"api-tabview\" class=\"tabview\">\n        <ul class=\"tab"
  },
  {
    "path": "extras/yuidoc-theme-topheman/theme.json",
    "chars": 167,
    "preview": "{\n    \"yuiGridsUrl\": \"http://yui.yahooapis.com/3.9.1/build/cssgrids/cssgrids-min.css\",\n    \"yuiSeedUrl\": \"http://yui.yah"
  },
  {
    "path": "gulp/const.js",
    "chars": 2005,
    "preview": "'use strict';\n\nimport util from 'gulp-util';\nimport moment from 'moment';\nimport pkg from '../package.json';\nimport gitR"
  },
  {
    "path": "gulp/paths.js",
    "chars": 2362,
    "preview": "'use strict';\n\nimport path from 'path';\n\nconst root = path.dirname(__dirname);//needed so that imports could co-exist wi"
  },
  {
    "path": "gulp/tasks/build.js",
    "chars": 5081,
    "preview": "'use strict';\n\nimport del from 'del';\nimport gulp from 'gulp';\nimport util from 'gulp-util';\nimport uglify from 'gulp-ug"
  },
  {
    "path": "gulp/tasks/docs.js",
    "chars": 795,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport {exec} from 'child_process';\n\nimport paths from '../paths';\n\n/**\n * This "
  },
  {
    "path": "gulp/tasks/html.js",
    "chars": 806,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport htmlhint from 'gulp-htmlhint';\nimport paths from '../paths';\nimport {ENV}"
  },
  {
    "path": "gulp/tasks/images.js",
    "chars": 489,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport cache from 'gulp-cache';\nimport size from 'gulp-size';\nimport imagemin fr"
  },
  {
    "path": "gulp/tasks/scripts.js",
    "chars": 2475,
    "preview": "'use strict';\n\nimport util from 'gulp-util';\nimport gulp from 'gulp';\nimport jshint from 'gulp-jshint';\nimport cache fro"
  },
  {
    "path": "gulp/tasks/server.js",
    "chars": 4669,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport util from 'gulp-util';\nimport modRewrite  from 'connect-modrewrite';\nimpo"
  },
  {
    "path": "gulp/tasks/styles.js",
    "chars": 898,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport util from 'gulp-util';\nimport sass from 'gulp-sass';\nimport changed from "
  },
  {
    "path": "gulp/tasks/watch.js",
    "chars": 1847,
    "preview": "'use strict';\n\nimport gulp from 'gulp';\nimport util from 'gulp-util';\nimport browserSync from 'browser-sync';\n\nimport {C"
  },
  {
    "path": "gulp/utils.js",
    "chars": 2233,
    "preview": "'use strict';\n\nimport util from 'gulp-util';\n\nexport const LOG = util.log;\nexport const COLORS = util.colors;\n\nimport pk"
  },
  {
    "path": "gulpfile.js",
    "chars": 353,
    "preview": "'use strict';\n\n//inspired by the gulpfile.js from https://github.com/martinmicunda/employee-scheduling-ui\n\n//use babel t"
  },
  {
    "path": "jspm.config.js",
    "chars": 5599,
    "preview": "System.config({\n  baseURL: \"./\",\n  defaultJSExtensions: true,\n  transpiler: \"babel\",\n  babelOptions: {\n    \"optional\": ["
  },
  {
    "path": "karma.conf.js",
    "chars": 3179,
    "preview": "var argv = require('minimist')(process.argv.slice(2));\nvar jspmOverride = require('./test/jspm.override.json');\nvar _ = "
  },
  {
    "path": "package.json",
    "chars": 4692,
    "preview": "{\n  \"name\": \"vanilla-es6-jspm\",\n  \"version\": \"0.10.3\",\n  \"description\": \"Seed project for ES6 / jspm based apps with ful"
  },
  {
    "path": "protractor.config.js",
    "chars": 2832,
    "preview": "'use strict';\n\nrequire('babel/register');//write test in es6\nvar SpecReporter = require('jasmine-spec-reporter');\nvar pk"
  },
  {
    "path": "src/404.html",
    "chars": 1157,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>Page Not Found</title>\n  <meta name=\"viewport\""
  },
  {
    "path": "src/analytics.snippet.html",
    "chars": 490,
    "preview": "<!-- google analytics snippet injected into `index.html` at build time -->\n<script>\n  (function(i,s,o,g,r,a,m){i['Google"
  },
  {
    "path": "src/app/bootstrap.js",
    "chars": 556,
    "preview": "/**\n * @module src/app\n */\n\n//import bootstrap from 'bootstrap';\n//import $ from 'jquery';\n\nimport 'fetch-polyfill';\n\nim"
  },
  {
    "path": "src/app/components/Component/Component.js",
    "chars": 1601,
    "preview": "/**\n * @module src/app\n */\nexport default class Component {\n  /**\n   * This class is meant to be extended.\n   * It provi"
  },
  {
    "path": "src/app/components/Geolocation/Geolocation.html",
    "chars": 380,
    "preview": "<div class=\"panel panel-default\">\n  <div class=\"panel-heading\">Geolocation example</div>\n  <div class=\"panel-body\">\n    "
  },
  {
    "path": "src/app/components/Geolocation/Geolocation.js",
    "chars": 2319,
    "preview": "/**\n * @module src/app\n */\nimport Component from '../Component/Component.js';\nimport Spinner from '../Spinner/Spinner.js"
  },
  {
    "path": "src/app/components/Spinner/Spinner.css",
    "chars": 3229,
    "preview": "/** from http://cssload.net/ */\n#circularG {\n  position: relative;\n  width: 64px;\n  height: 64px\n}\n\n.circularG {\n  posit"
  },
  {
    "path": "src/app/components/Spinner/Spinner.html",
    "chars": 444,
    "preview": "<div id=\"circularG\">\n  <div id=\"circularG_1\" class=\"circularG\">\n  </div>\n  <div id=\"circularG_2\" class=\"circularG\">\n  </"
  },
  {
    "path": "src/app/components/Spinner/Spinner.js",
    "chars": 932,
    "preview": "/**\n * @module src/app\n */\nimport Component from '../Component/Component.js';\n\nimport template from './Spinner.html!text"
  },
  {
    "path": "src/app/main.js",
    "chars": 597,
    "preview": "/**\n * @module src/app\n */\n\nimport Geolocation from './components/Geolocation/Geolocation.js';\n\n/**\n * This class is cal"
  },
  {
    "path": "src/app/services/geolocation/geolocation.js",
    "chars": 1005,
    "preview": "/**\n * @module src/app\n */\n\n/**\n * @namespace services.geolocation\n * @class geolocation\n */\n\n/**\n * Very simple geoloca"
  },
  {
    "path": "src/index.html",
    "chars": 3803,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>vanilla-es6-jspm</title>\n  <!-- Place favicon."
  },
  {
    "path": "src/styles/_footer.scss",
    "chars": 98,
    "preview": "@media only screen and (max-width: $grid-float-breakpoint) {\n  footer {\n    font-size: 90%;\n  }\n}\n"
  },
  {
    "path": "src/styles/_header.scss",
    "chars": 223,
    "preview": "@import \"_networks-headers\";\n\nheader {\n  margin-bottom: 15px;\n}\n\nheader h1 {\n  margin-top: 5px;\n}\n\n@media only screen an"
  },
  {
    "path": "src/styles/_index.scss",
    "chars": 591,
    "preview": "@media only screen and (max-width: $grid-float-breakpoint) {\n  .index-page .jumbotron img.pull-right {\n    width: 25%;\n "
  },
  {
    "path": "src/styles/_networks-headers.scss",
    "chars": 1739,
    "preview": "/** github logo from my other sites**/\n/** networks header */\n.site-networks {\n  position: absolute;\n  right: 20px;\n  to"
  },
  {
    "path": "src/styles/_variables.scss",
    "chars": 62,
    "preview": "$brand-primary: #900000;\n$input-border-focus: $brand-primary;\n"
  },
  {
    "path": "src/styles/main.scss",
    "chars": 163,
    "preview": "@import \"_variables\";\n@import \"../../jspm_packages/npm/bootstrap-sass@3.3.5/assets/stylesheets/bootstrap\";\n@import \"_hea"
  },
  {
    "path": "test/e2e/spec/docs.specs.conditional.js",
    "chars": 904,
    "preview": "'use strict';\n\n/**\n * This test is only run when the --with-docs flag is active : `npm run test-e2e -- --with-docs`\n * o"
  },
  {
    "path": "test/e2e/spec/home.spec.js",
    "chars": 1239,
    "preview": "'use strict';\n\ndescribe('Home page', () => {\n  // before each 'it' of the following describe:\n  beforeEach(() => {\n    /"
  },
  {
    "path": "test/e2e/utils.js",
    "chars": 1489,
    "preview": "'use strict';\n\n/**\n * When you use protractor in a non angular way, you have to tell it not to wait\n * by specifying bro"
  },
  {
    "path": "test/fixtures/bs.snippet.html",
    "chars": 19016,
    "preview": "<!-- start injectection of `test/fixtures/bs.snippet.html` -->\n<!-- This file is injected by browserSync when you `gulp "
  },
  {
    "path": "test/fixtures/components/simple-wrapper.html",
    "chars": 32,
    "preview": "<div id=\"simple-wrapper\"></div>\n"
  },
  {
    "path": "test/forever.gulp.serve.dist.json",
    "chars": 209,
    "preview": "{\n  \"uid\": \"gulp.serve.dist\",\n  \"append\": true,\n  \"watch\": false,\n  \"script\": \"./node_modules/.bin/gulp\",\n  \"args\": [\n  "
  },
  {
    "path": "test/forever.gulp.serve.test.json",
    "chars": 209,
    "preview": "{\n  \"uid\": \"gulp.serve.test\",\n  \"append\": true,\n  \"watch\": false,\n  \"script\": \"./node_modules/.bin/gulp\",\n  \"args\": [\n  "
  },
  {
    "path": "test/jspm.override.json",
    "chars": 117,
    "preview": "{\n  \"paths\": {\n    \"services/geolocation/geolocation.js\": \"test/stubs/app/services/geolocation/geolocation.js\"\n  }\n}\n"
  },
  {
    "path": "test/stubs/app/services/geolocation/geolocation.js",
    "chars": 395,
    "preview": "console.log('[STUB]', 'LOADED', 'geolocation');\n\nimport mock from './geolocation.json!text';\n\nexport function geolocatio"
  },
  {
    "path": "test/stubs/app/services/geolocation/geolocation.json",
    "chars": 257,
    "preview": "{\n  \"ip\": \"127.0.0.1\",\n  \"country_code\": \"FR\",\n  \"country_name\": \"France\",\n  \"region_code\": \"\",\n  \"region_name\": \"\",\n  \""
  },
  {
    "path": "test/unit/spec/components/Component.spec.js",
    "chars": 776,
    "preview": "'use strict';\n\nimport Component from 'components/Component/Component.js';\n\ndescribe('components/Component/Component.js',"
  },
  {
    "path": "test/unit/spec/components/Geolocation.spec.js",
    "chars": 2539,
    "preview": "'use strict';\n\nimport Geolocation from 'components/Geolocation/Geolocation.js';\n\ndescribe('components/Component/Geolocat"
  },
  {
    "path": "test/unit/spec/components/Spinner.spec.js",
    "chars": 1086,
    "preview": "'use strict';\n\nimport Spinner from 'components/Spinner/Spinner.js';\n\ndescribe('components/Spinner/Spinner.js', function "
  },
  {
    "path": "test/unit/spec/services/geolocation.spec.js",
    "chars": 1060,
    "preview": "'use strict';\n\n//in test mode, this is the stub which will be retrieved\nimport {geolocation} from 'services/geolocation/"
  },
  {
    "path": "test/unit/utils.js",
    "chars": 1311,
    "preview": "'use strict';\n\n/**\n * @unsused since the MutationObserver shim messes with jasmine async, this utility is not used for t"
  }
]

About this extraction

This page contains the full source code of the topheman/vanilla-es6-jspm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 86 files (247.0 KB), approximately 81.5k tokens, and a symbol index with 54 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!