bootstrap-tour-0.12.0/000077500000000000000000000000001316367154600146125ustar00rootroot00000000000000bootstrap-tour-0.12.0/.editorconfig000066400000000000000000000006351316367154600172730ustar00rootroot00000000000000EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs # editorconfig.org root = true [*] # Change these settings to your own preference indent_style = space indent_size = 2 # We recommend you to keep these unchanged end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false bootstrap-tour-0.12.0/.gitignore000066400000000000000000000002351316367154600166020ustar00rootroot00000000000000node_modules bower_components bootstrap-tour.sublime-project bootstrap-tour.sublime-workspace npm-debug.log test docs _SpecRunner.html *.DS_Store smart.lock bootstrap-tour-0.12.0/.travis.yml000066400000000000000000000004251316367154600167240ustar00rootroot00000000000000dist: trusty sudo: required language: node_js node_js: - 8 addons: chrome: stable before_install: - "export CHROME_BIN=chromium-browser" - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" before_script: - "yarn global add bower gulp-cli" - "bower install" bootstrap-tour-0.12.0/CNAME000066400000000000000000000000221316367154600153520ustar00rootroot00000000000000bootstraptour.com bootstrap-tour-0.12.0/LICENSE000066400000000000000000000020661316367154600156230ustar00rootroot00000000000000Copyright (c) 2013-2015 The Bootstrap Tour community 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. bootstrap-tour-0.12.0/README.md000066400000000000000000000050461316367154600160760ustar00rootroot00000000000000# Bootstrap Tour [![Build Status](http://img.shields.io/travis/sorich87/bootstrap-tour.svg?style=flat)](https://travis-ci.org/sorich87/bootstrap-tour) [![Dependency Status](http://img.shields.io/david/sorich87/bootstrap-tour.svg?style=flat)](https://david-dm.org/sorich87/bootstrap-tour) [![devDependency Status](http://img.shields.io/david/dev/sorich87/bootstrap-tour/dev-status.svg?style=flat)](https://david-dm.org/sorich87/bootstrap-tour#info=devDependencies) [![NPM Version](http://img.shields.io/npm/v/bootstrap-tour.svg?style=flat)](https://www.npmjs.org/) Quick and easy way to build your product tours with Bootstrap Popovers. *Compatible with Bootstrap >= 2.3.0* ## Demo and Documentation [http://bootstraptour.com](http://bootstraptour.com) ## Contributing In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Gulp](http://gulpjs.com/). Feel free to contribute with pull requests, bug reports or enhancement suggestions. We use [Gulp](http://gulpjs.com/) and [Jasmine](http://jasmine.github.io/). Both make your life easier ;) ### Develop Files to be developed are located under `./src/`. Compiled sources are then automatically put under `./build/`, `./test/` and `./docs/`. #### Requirements To begin, you need a few standard dependencies installed. These commands will install ruby, gem, node, yarn, and gulp's command line runner: ##### Debian/Ubuntu Linux ```bash $ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list $ sudo apt-get update && sudo apt-get install ruby-full yarn ``` ##### Mac OS X ```bash $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" $ brew install ruby yarn ``` ##### Development requirements ```bash $ yarn global add gulp-cli $ yarn $ gem install jekyll ``` For Mac OS X Mavericks (10.9) users: You will need to [jump through all these hoops](http://dean.io/setting-up-a-ruby-on-rails-development-environment-on-mavericks/) before you can install Jekyll. #### Gulp usage Run gulp and start to develop with ease: ```bash $ gulp $ gulp dist $ gulp test $ gulp docs $ gulp clean $ gulp server $ gulp bump --type minor (major.minor.patch) ``` Check `gulpfile.coffee` to know more. ## License Code licensed under the [MIT license](https://opensource.org/licenses/MIT). Documentation licensed under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/). bootstrap-tour-0.12.0/_config.yml000066400000000000000000000002031316367154600167340ustar00rootroot00000000000000markdown: rdiscount permalink: pretty source: ./src/docs destination: ./docs encoding: UTF-8 bootstrap-tour-0.12.0/bower.json000066400000000000000000000005421316367154600166240ustar00rootroot00000000000000{ "name": "bootstrap-tour", "main": [ "./build/js/bootstrap-tour-standalone.js", "./build/css/bootstrap-tour-standalone.css" ], "dependencies": { "bootstrap": ">=2.3.2", "jquery": ">=1.9.0" }, "devDependencies": { "html5shiv": "~3.7.2", "jquery": "~2.1.1", "bootstrap": "~3.3.7", "blueimp-md5": "~2.3.0" } } bootstrap-tour-0.12.0/build/000077500000000000000000000000001316367154600157115ustar00rootroot00000000000000bootstrap-tour-0.12.0/build/css/000077500000000000000000000000001316367154600165015ustar00rootroot00000000000000bootstrap-tour-0.12.0/build/css/bootstrap-tour-standalone.css000066400000000000000000000470511316367154600243540ustar00rootroot00000000000000/* ======================================================================== * bootstrap-tour - v0.12.0 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2015 Ulrich Sossou * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ /*! * Bootstrap v3.1.0 (http://getbootstrap.com) * Copyright 2011-2014 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ .btn { display: inline-block; margin-bottom: 0; font-weight: normal; text-align: center; vertical-align: middle; touch-action: manipulation; cursor: pointer; background-image: none; border: 1px solid transparent; white-space: nowrap; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; border-radius: 4px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus, .btn.focus { color: #333; text-decoration: none; } .btn:active, .btn.active { outline: 0; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none; } .btn-default { color: #333; background-color: #fff; border-color: #ccc; } .btn-default:focus, .btn-default.focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c; } .btn-default:hover { color: #333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { color: #333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { color: #333; background-color: #d4d4d4; border-color: #8c8c8c; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus { background-color: #fff; border-color: #ccc; } .btn-default .badge { color: #fff; background-color: #333; } .btn-primary { color: #fff; background-color: #337ab7; border-color: #2e6da4; } .btn-primary:focus, .btn-primary.focus { color: #fff; background-color: #286090; border-color: #122b40; } .btn-primary:hover { color: #fff; background-color: #286090; border-color: #204d74; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { color: #fff; background-color: #286090; border-color: #204d74; } .btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { color: #fff; background-color: #204d74; border-color: #122b40; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus { background-color: #337ab7; border-color: #2e6da4; } .btn-primary .badge { color: #337ab7; background-color: #fff; } .btn-success { color: #fff; background-color: #5cb85c; border-color: #4cae4c; } .btn-success:focus, .btn-success.focus { color: #fff; background-color: #449d44; border-color: #255625; } .btn-success:hover { color: #fff; background-color: #449d44; border-color: #398439; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { color: #fff; background-color: #449d44; border-color: #398439; } .btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { color: #fff; background-color: #398439; border-color: #255625; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus { background-color: #5cb85c; border-color: #4cae4c; } .btn-success .badge { color: #5cb85c; background-color: #fff; } .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:focus, .btn-info.focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85; } .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { color: #fff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { color: #fff; background-color: #269abc; border-color: #1b6d85; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus { background-color: #5bc0de; border-color: #46b8da; } .btn-info .badge { color: #5bc0de; background-color: #fff; } .btn-warning { color: #fff; background-color: #f0ad4e; border-color: #eea236; } .btn-warning:focus, .btn-warning.focus { color: #fff; background-color: #ec971f; border-color: #985f0d; } .btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { color: #fff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { color: #fff; background-color: #d58512; border-color: #985f0d; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus { background-color: #f0ad4e; border-color: #eea236; } .btn-warning .badge { color: #f0ad4e; background-color: #fff; } .btn-danger { color: #fff; background-color: #d9534f; border-color: #d43f3a; } .btn-danger:focus, .btn-danger.focus { color: #fff; background-color: #c9302c; border-color: #761c19; } .btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { color: #fff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { color: #fff; background-color: #ac2925; border-color: #761c19; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus { background-color: #d9534f; border-color: #d43f3a; } .btn-danger .badge { color: #d9534f; background-color: #fff; } .btn-link { color: #337ab7; font-weight: normal; border-radius: 0; } .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #23527c; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #777777; text-decoration: none; } .btn-lg, .btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px; } .btn-sm, .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-xs, .btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-block { display: block; width: 100%; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; float: left; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { z-index: 2; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { margin-left: -1px; } .btn-toolbar { margin-left: -5px; } .btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left; } .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { margin-left: 5px; } .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group > .btn:first-child { margin-left: 0; } .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group > .btn-group { float: left; } .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; } .btn-group > .btn-lg + .dropdown-toggle { padding-left: 12px; padding-right: 12px; } .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } .btn .caret { margin-left: 0; } .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } .dropup .btn-lg .caret { border-width: 0 5px 5px; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { display: block; float: none; width: 100%; max-width: 100%; } .btn-group-vertical > .btn-group > .btn { float: none; } .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-right-radius: 4px; border-top-left-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { border-top-right-radius: 0; border-top-left-radius: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: separate; } .btn-group-justified > .btn, .btn-group-justified > .btn-group { float: none; display: table-cell; width: 1%; } .btn-group-justified > .btn-group .btn { width: 100%; } .btn-group-justified > .btn-group .dropdown-menu { left: auto; } [data-toggle="buttons"] > .btn input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-style: normal; font-weight: normal; letter-spacing: normal; line-break: auto; line-height: 1.42857143; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; white-space: normal; word-break: normal; word-spacing: normal; word-wrap: normal; font-size: 14px; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { margin: 0; padding: 8px 14px; font-size: 14px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; } .popover-content { padding: 9px 14px; } .popover > .arrow, .popover > .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover > .arrow { border-width: 11px; } .popover > .arrow:after { border-width: 10px; content: ""; } .popover.top > .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999999; border-top-color: rgba(0, 0, 0, 0.25); bottom: -11px; } .popover.top > .arrow:after { content: " "; bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #fff; } .popover.right > .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999999; border-right-color: rgba(0, 0, 0, 0.25); } .popover.right > .arrow:after { content: " "; left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #fff; } .popover.bottom > .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } .popover.bottom > .arrow:after { content: " "; top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #fff; } .popover.left > .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999999; border-left-color: rgba(0, 0, 0, 0.25); } .popover.left > .arrow:after { content: " "; right: 1px; border-right-width: 0; border-left-color: #fff; bottom: -10px; } .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } .fade.in { opacity: 1; } .collapse { display: none; } .collapse.in { display: block; } tr.collapse.in { display: table-row; } tbody.collapse.in { display: table-row-group; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition-property: height, visibility; transition-property: height, visibility; -webkit-transition-duration: 0.35s; transition-duration: 0.35s; -webkit-transition-timing-function: ease; transition-timing-function: ease; } .tour-backdrop { position: absolute; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .popover[class*="tour-"] { z-index: 1102; } .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; overflow: hidden; } .popover[class*="tour-"] .popover-navigation *[data-role="end"] { float: right; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"], .popover[class*="tour-"] .popover-navigation *[data-role="next"], .popover[class*="tour-"] .popover-navigation *[data-role="end"] { cursor: pointer; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { cursor: default; } .popover[class*="tour-"].orphan { position: fixed; margin-top: 0; } .popover[class*="tour-"].orphan .arrow { display: none; } bootstrap-tour-0.12.0/build/css/bootstrap-tour.css000066400000000000000000000035331316367154600222230ustar00rootroot00000000000000/* ======================================================================== * bootstrap-tour - v0.11.0 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2015 Ulrich Sossou * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ .tour-backdrop { position: absolute; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .popover[class*="tour-"] { z-index: 1102; } .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; overflow: hidden; } .popover[class*="tour-"] .popover-navigation *[data-role="end"] { float: right; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"], .popover[class*="tour-"] .popover-navigation *[data-role="next"], .popover[class*="tour-"] .popover-navigation *[data-role="end"] { cursor: pointer; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { cursor: default; } .popover[class*="tour-"].orphan { position: fixed; margin-top: 0; } .popover[class*="tour-"].orphan .arrow { display: none; } bootstrap-tour-0.12.0/build/js/000077500000000000000000000000001316367154600163255ustar00rootroot00000000000000bootstrap-tour-0.12.0/build/js/bootstrap-tour-standalone.js000066400000000000000000001602731316367154600240260ustar00rootroot00000000000000/* ======================================================================== * bootstrap-tour - v0.12.0 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2015 Ulrich Sossou * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ /* ======================================================================== * Bootstrap: transition.js v3.3.7 * http://getbootstrap.com/javascript/#transitions * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) // ============================================================ function transitionEnd() { var el = document.createElement('bootstrap') var transEndEventNames = { WebkitTransition : 'webkitTransitionEnd', MozTransition : 'transitionend', OTransition : 'oTransitionEnd otransitionend', transition : 'transitionend' } for (var name in transEndEventNames) { if (el.style[name] !== undefined) { return { end: transEndEventNames[name] } } } return false // explicit for ie8 ( ._.) } // http://blog.alexmaccaw.com/css-transitions $.fn.emulateTransitionEnd = function (duration) { var called = false var $el = this $(this).one('bsTransitionEnd', function () { called = true }) var callback = function () { if (!called) $($el).trigger($.support.transition.end) } setTimeout(callback, duration) return this } $(function () { $.support.transition = transitionEnd() if (!$.support.transition) return $.event.special.bsTransitionEnd = { bindType: $.support.transition.end, delegateType: $.support.transition.end, handle: function (e) { if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) } } }) }(jQuery); /* ======================================================================== * Bootstrap: tooltip.js v3.3.7 * http://getbootstrap.com/javascript/#tooltip * Inspired by the original jQuery.tipsy by Jason Frame * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // TOOLTIP PUBLIC CLASS DEFINITION // =============================== var Tooltip = function (element, options) { this.type = null this.options = null this.enabled = null this.timeout = null this.hoverState = null this.$element = null this.inState = null this.init('tooltip', element, options) } Tooltip.VERSION = '3.3.7' Tooltip.TRANSITION_DURATION = 150 Tooltip.DEFAULTS = { animation: true, placement: 'top', selector: false, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, container: false, viewport: { selector: 'body', padding: 0 } } Tooltip.prototype.init = function (type, element, options) { this.enabled = true this.type = type this.$element = $(element) this.options = this.getOptions(options) this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) this.inState = { click: false, hover: false, focus: false } if (this.$element[0] instanceof document.constructor && !this.options.selector) { throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') } var triggers = this.options.trigger.split(' ') for (var i = triggers.length; i--;) { var trigger = triggers[i] if (trigger == 'click') { this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) } else if (trigger != 'manual') { var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) } } this.options.selector ? (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : this.fixTitle() } Tooltip.prototype.getDefaults = function () { return Tooltip.DEFAULTS } Tooltip.prototype.getOptions = function (options) { options = $.extend({}, this.getDefaults(), this.$element.data(), options) if (options.delay && typeof options.delay == 'number') { options.delay = { show: options.delay, hide: options.delay } } return options } Tooltip.prototype.getDelegateOptions = function () { var options = {} var defaults = this.getDefaults() this._options && $.each(this._options, function (key, value) { if (defaults[key] != value) options[key] = value }) return options } Tooltip.prototype.enter = function (obj) { var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) $(obj.currentTarget).data('bs.' + this.type, self) } if (obj instanceof $.Event) { self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true } if (self.tip().hasClass('in') || self.hoverState == 'in') { self.hoverState = 'in' return } clearTimeout(self.timeout) self.hoverState = 'in' if (!self.options.delay || !self.options.delay.show) return self.show() self.timeout = setTimeout(function () { if (self.hoverState == 'in') self.show() }, self.options.delay.show) } Tooltip.prototype.isInStateTrue = function () { for (var key in this.inState) { if (this.inState[key]) return true } return false } Tooltip.prototype.leave = function (obj) { var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) $(obj.currentTarget).data('bs.' + this.type, self) } if (obj instanceof $.Event) { self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false } if (self.isInStateTrue()) return clearTimeout(self.timeout) self.hoverState = 'out' if (!self.options.delay || !self.options.delay.hide) return self.hide() self.timeout = setTimeout(function () { if (self.hoverState == 'out') self.hide() }, self.options.delay.hide) } Tooltip.prototype.show = function () { var e = $.Event('show.bs.' + this.type) if (this.hasContent() && this.enabled) { this.$element.trigger(e) var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) if (e.isDefaultPrevented() || !inDom) return var that = this var $tip = this.tip() var tipId = this.getUID(this.type) this.setContent() $tip.attr('id', tipId) this.$element.attr('aria-describedby', tipId) if (this.options.animation) $tip.addClass('fade') var placement = typeof this.options.placement == 'function' ? this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement var autoToken = /\s?auto?\s?/i var autoPlace = autoToken.test(placement) if (autoPlace) placement = placement.replace(autoToken, '') || 'top' $tip .detach() .css({ top: 0, left: 0, display: 'block' }) .addClass(placement) .data('bs.' + this.type, this) this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) this.$element.trigger('inserted.bs.' + this.type) var pos = this.getPosition() var actualWidth = $tip[0].offsetWidth var actualHeight = $tip[0].offsetHeight if (autoPlace) { var orgPlacement = placement var viewportDim = this.getPosition(this.$viewport) placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : placement $tip .removeClass(orgPlacement) .addClass(placement) } var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) this.applyPlacement(calculatedOffset, placement) var complete = function () { var prevHoverState = that.hoverState that.$element.trigger('shown.bs.' + that.type) that.hoverState = null if (prevHoverState == 'out') that.leave(that) } $.support.transition && this.$tip.hasClass('fade') ? $tip .one('bsTransitionEnd', complete) .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete() } } Tooltip.prototype.applyPlacement = function (offset, placement) { var $tip = this.tip() var width = $tip[0].offsetWidth var height = $tip[0].offsetHeight // manually read margins because getBoundingClientRect includes difference var marginTop = parseInt($tip.css('margin-top'), 10) var marginLeft = parseInt($tip.css('margin-left'), 10) // we must check for NaN for ie 8/9 if (isNaN(marginTop)) marginTop = 0 if (isNaN(marginLeft)) marginLeft = 0 offset.top += marginTop offset.left += marginLeft // $.fn.offset doesn't round pixel values // so we use setOffset directly with our own function B-0 $.offset.setOffset($tip[0], $.extend({ using: function (props) { $tip.css({ top: Math.round(props.top), left: Math.round(props.left) }) } }, offset), 0) $tip.addClass('in') // check to see if placing tip in new offset caused the tip to resize itself var actualWidth = $tip[0].offsetWidth var actualHeight = $tip[0].offsetHeight if (placement == 'top' && actualHeight != height) { offset.top = offset.top + height - actualHeight } var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) if (delta.left) offset.left += delta.left else offset.top += delta.top var isVertical = /top|bottom/.test(placement) var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' $tip.offset(offset) this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) } Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { this.arrow() .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') .css(isVertical ? 'top' : 'left', '') } Tooltip.prototype.setContent = function () { var $tip = this.tip() var title = this.getTitle() $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) $tip.removeClass('fade in top bottom left right') } Tooltip.prototype.hide = function (callback) { var that = this var $tip = $(this.$tip) var e = $.Event('hide.bs.' + this.type) function complete() { if (that.hoverState != 'in') $tip.detach() if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. that.$element .removeAttr('aria-describedby') .trigger('hidden.bs.' + that.type) } callback && callback() } this.$element.trigger(e) if (e.isDefaultPrevented()) return $tip.removeClass('in') $.support.transition && $tip.hasClass('fade') ? $tip .one('bsTransitionEnd', complete) .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete() this.hoverState = null return this } Tooltip.prototype.fixTitle = function () { var $e = this.$element if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') } } Tooltip.prototype.hasContent = function () { return this.getTitle() } Tooltip.prototype.getPosition = function ($element) { $element = $element || this.$element var el = $element[0] var isBody = el.tagName == 'BODY' var elRect = el.getBoundingClientRect() if (elRect.width == null) { // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) } var isSvg = window.SVGElement && el instanceof window.SVGElement // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. // See https://github.com/twbs/bootstrap/issues/20280 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null return $.extend({}, elRect, scroll, outerDims, elOffset) } Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } } Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { var delta = { top: 0, left: 0 } if (!this.$viewport) return delta var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 var viewportDimensions = this.getPosition(this.$viewport) if (/right|left/.test(placement)) { var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight if (topEdgeOffset < viewportDimensions.top) { // top overflow delta.top = viewportDimensions.top - topEdgeOffset } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset } } else { var leftEdgeOffset = pos.left - viewportPadding var rightEdgeOffset = pos.left + viewportPadding + actualWidth if (leftEdgeOffset < viewportDimensions.left) { // left overflow delta.left = viewportDimensions.left - leftEdgeOffset } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset } } return delta } Tooltip.prototype.getTitle = function () { var title var $e = this.$element var o = this.options title = $e.attr('data-original-title') || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) return title } Tooltip.prototype.getUID = function (prefix) { do prefix += ~~(Math.random() * 1000000) while (document.getElementById(prefix)) return prefix } Tooltip.prototype.tip = function () { if (!this.$tip) { this.$tip = $(this.options.template) if (this.$tip.length != 1) { throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') } } return this.$tip } Tooltip.prototype.arrow = function () { return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) } Tooltip.prototype.enable = function () { this.enabled = true } Tooltip.prototype.disable = function () { this.enabled = false } Tooltip.prototype.toggleEnabled = function () { this.enabled = !this.enabled } Tooltip.prototype.toggle = function (e) { var self = this if (e) { self = $(e.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(e.currentTarget, this.getDelegateOptions()) $(e.currentTarget).data('bs.' + this.type, self) } } if (e) { self.inState.click = !self.inState.click if (self.isInStateTrue()) self.enter(self) else self.leave(self) } else { self.tip().hasClass('in') ? self.leave(self) : self.enter(self) } } Tooltip.prototype.destroy = function () { var that = this clearTimeout(this.timeout) this.hide(function () { that.$element.off('.' + that.type).removeData('bs.' + that.type) if (that.$tip) { that.$tip.detach() } that.$tip = null that.$arrow = null that.$viewport = null that.$element = null }) } // TOOLTIP PLUGIN DEFINITION // ========================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.tooltip') var options = typeof option == 'object' && option if (!data && /destroy|hide/.test(option)) return if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.tooltip $.fn.tooltip = Plugin $.fn.tooltip.Constructor = Tooltip // TOOLTIP NO CONFLICT // =================== $.fn.tooltip.noConflict = function () { $.fn.tooltip = old return this } }(jQuery); /* ======================================================================== * Bootstrap: popover.js v3.3.7 * http://getbootstrap.com/javascript/#popovers * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // POPOVER PUBLIC CLASS DEFINITION // =============================== var Popover = function (element, options) { this.init('popover', element, options) } if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') Popover.VERSION = '3.3.7' Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { placement: 'right', trigger: 'click', content: '', template: '' }) // NOTE: POPOVER EXTENDS tooltip.js // ================================ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) Popover.prototype.constructor = Popover Popover.prototype.getDefaults = function () { return Popover.DEFAULTS } Popover.prototype.setContent = function () { var $tip = this.tip() var title = this.getTitle() var content = this.getContent() $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' ](content) $tip.removeClass('fade top bottom left right in') // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do // this manually by checking the contents. if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() } Popover.prototype.hasContent = function () { return this.getTitle() || this.getContent() } Popover.prototype.getContent = function () { var $e = this.$element var o = this.options return $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) } Popover.prototype.arrow = function () { return (this.$arrow = this.$arrow || this.tip().find('.arrow')) } // POPOVER PLUGIN DEFINITION // ========================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.popover') var options = typeof option == 'object' && option if (!data && /destroy|hide/.test(option)) return if (!data) $this.data('bs.popover', (data = new Popover(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.popover $.fn.popover = Plugin $.fn.popover.Constructor = Popover // POPOVER NO CONFLICT // =================== $.fn.popover.noConflict = function () { $.fn.popover = old return this } }(jQuery); var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; (function(window, factory) { if (typeof define === 'function' && define.amd) { return define(['jquery'], function(jQuery) { return window.Tour = factory(jQuery); }); } else if (typeof exports === 'object') { return module.exports = factory(require('jquery')); } else { return window.Tour = factory(window.jQuery); } })(window, function($) { var Tour, document; document = window.document; Tour = (function() { function Tour(options) { this._showPopoverAndOverlay = bind(this._showPopoverAndOverlay, this); var storage; try { storage = window.localStorage; } catch (error) { storage = false; } this._options = $.extend({ name: 'tour', steps: [], container: 'body', autoscroll: true, keyboard: true, storage: storage, debug: false, backdrop: false, backdropContainer: 'body', backdropPadding: 0, redirect: true, orphan: false, duration: false, delay: false, basePath: '', template: '', afterSetState: function(key, value) {}, afterGetState: function(key, value) {}, afterRemoveState: function(key) {}, onStart: function(tour) {}, onEnd: function(tour) {}, onShow: function(tour) {}, onShown: function(tour) {}, onHide: function(tour) {}, onHidden: function(tour) {}, onNext: function(tour) {}, onPrev: function(tour) {}, onPause: function(tour, duration) {}, onResume: function(tour, duration) {}, onRedirectError: function(tour) {} }, options); this._force = false; this._inited = false; this._current = null; this.backdrops = []; this; } Tour.prototype.addSteps = function(steps) { var j, len, step; for (j = 0, len = steps.length; j < len; j++) { step = steps[j]; this.addStep(step); } return this; }; Tour.prototype.addStep = function(step) { this._options.steps.push(step); return this; }; Tour.prototype.getStep = function(i) { if (this._options.steps[i] != null) { return $.extend({ id: "step-" + i, path: '', host: '', placement: 'right', title: '', content: '

', next: i === this._options.steps.length - 1 ? -1 : i + 1, prev: i - 1, animation: true, container: this._options.container, autoscroll: this._options.autoscroll, backdrop: this._options.backdrop, backdropContainer: this._options.backdropContainer, backdropPadding: this._options.backdropPadding, redirect: this._options.redirect, reflexElement: this._options.steps[i].element, backdropElement: this._options.steps[i].element, orphan: this._options.orphan, duration: this._options.duration, delay: this._options.delay, template: this._options.template, onShow: this._options.onShow, onShown: this._options.onShown, onHide: this._options.onHide, onHidden: this._options.onHidden, onNext: this._options.onNext, onPrev: this._options.onPrev, onPause: this._options.onPause, onResume: this._options.onResume, onRedirectError: this._options.onRedirectError }, this._options.steps[i]); } }; Tour.prototype.init = function(force) { this._force = force; if (this.ended()) { this._debug('Tour ended, init prevented.'); return this; } this.setCurrentStep(); this._initMouseNavigation(); this._initKeyboardNavigation(); this._onResize((function(_this) { return function() { return _this.showStep(_this._current); }; })(this)); this._onScroll((function(_this) { return function() { return _this._showPopoverAndOverlay(_this._current); }; })(this)); if (this._current !== null) { this.showStep(this._current); } this._inited = true; return this; }; Tour.prototype.start = function(force) { var promise; if (force == null) { force = false; } if (!this._inited) { this.init(force); } if (this._current === null) { promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); this._callOnPromiseDone(promise, this.showStep, 0); } return this; }; Tour.prototype.next = function() { var promise; promise = this.hideStep(this._current, this._current + 1); return this._callOnPromiseDone(promise, this._showNextStep); }; Tour.prototype.prev = function() { var promise; promise = this.hideStep(this._current, this._current - 1); return this._callOnPromiseDone(promise, this._showPrevStep); }; Tour.prototype.goTo = function(i) { var promise; promise = this.hideStep(this._current, i); return this._callOnPromiseDone(promise, this.showStep, i); }; Tour.prototype.end = function() { var endHelper, promise; endHelper = (function(_this) { return function(e) { $(document).off("click.tour-" + _this._options.name); $(document).off("keyup.tour-" + _this._options.name); $(window).off("resize.tour-" + _this._options.name); $(window).off("scroll.tour-" + _this._options.name); _this._setState('end', 'yes'); _this._inited = false; _this._force = false; _this._clearTimer(); if (_this._options.onEnd != null) { return _this._options.onEnd(_this); } }; })(this); promise = this.hideStep(this._current); return this._callOnPromiseDone(promise, endHelper); }; Tour.prototype.ended = function() { return !this._force && !!this._getState('end'); }; Tour.prototype.restart = function() { this._removeState('current_step'); this._removeState('end'); this._removeState('redirect_to'); return this.start(); }; Tour.prototype.pause = function() { var step; step = this.getStep(this._current); if (!(step && step.duration)) { return this; } this._paused = true; this._duration -= new Date().getTime() - this._start; window.clearTimeout(this._timer); this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); if (step.onPause != null) { return step.onPause(this, this._duration); } }; Tour.prototype.resume = function() { var step; step = this.getStep(this._current); if (!(step && step.duration)) { return this; } this._paused = false; this._start = new Date().getTime(); this._duration = this._duration || step.duration; this._timer = window.setTimeout((function(_this) { return function() { if (_this._isLast()) { return _this.next(); } else { return _this.end(); } }; })(this), this._duration); this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); if ((step.onResume != null) && this._duration !== step.duration) { return step.onResume(this, this._duration); } }; Tour.prototype.hideStep = function(i, iNext) { var hideDelay, hideStepHelper, promise, step; step = this.getStep(i); if (!step) { return; } this._clearTimer(); promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); hideStepHelper = (function(_this) { return function(e) { var $element, next_step; $element = $(step.element); if (!($element.data('bs.popover') || $element.data('popover'))) { $element = $('body'); } $element.popover('destroy').removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element").removeData('bs.popover'); if (step.reflex) { $(step.reflexElement).removeClass('tour-step-element-reflex').off((_this._reflexEvent(step.reflex)) + ".tour-" + _this._options.name); } if (step.backdrop) { next_step = (iNext != null) && _this.getStep(iNext); if (!next_step || !next_step.backdrop || next_step.backdropElement !== step.backdropElement) { _this._hideOverlayElement(step); } } if (step.onHidden != null) { return step.onHidden(_this); } }; })(this); hideDelay = step.delay.hide || step.delay; if ({}.toString.call(hideDelay) === '[object Number]' && hideDelay > 0) { this._debug("Wait " + hideDelay + " milliseconds to hide the step " + (this._current + 1)); window.setTimeout((function(_this) { return function() { return _this._callOnPromiseDone(promise, hideStepHelper); }; })(this), hideDelay); } else { this._callOnPromiseDone(promise, hideStepHelper); } return promise; }; Tour.prototype.showStep = function(i) { var path, promise, showDelay, showStepHelper, skipToPrevious, step; if (this.ended()) { this._debug('Tour ended, showStep prevented.'); return this; } step = this.getStep(i); if (!step) { return; } skipToPrevious = i < this._current; promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); this.setCurrentStep(i); path = (function() { switch ({}.toString.call(step.path)) { case '[object Function]': return step.path(); case '[object String]': return this._options.basePath + step.path; default: return step.path; } }).call(this); if (step.redirect && this._isRedirect(step.host, path, document.location)) { this._redirect(step, i, path); if (!this._isJustPathHashDifferent(step.host, path, document.location)) { return; } } showStepHelper = (function(_this) { return function(e) { if (_this._isOrphan(step)) { if (step.orphan === false) { _this._debug("Skip the orphan step " + (_this._current + 1) + ".\nOrphan option is false and the element does not exist or is hidden."); if (skipToPrevious) { _this._showPrevStep(); } else { _this._showNextStep(); } return; } _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); } if (step.autoscroll) { _this._scrollIntoView(i); } else { _this._showPopoverAndOverlay(i); } if (step.duration) { return _this.resume(); } }; })(this); showDelay = step.delay.show || step.delay; if ({}.toString.call(showDelay) === '[object Number]' && showDelay > 0) { this._debug("Wait " + showDelay + " milliseconds to show the step " + (this._current + 1)); window.setTimeout((function(_this) { return function() { return _this._callOnPromiseDone(promise, showStepHelper); }; })(this), showDelay); } else { this._callOnPromiseDone(promise, showStepHelper); } return promise; }; Tour.prototype.getCurrentStep = function() { return this._current; }; Tour.prototype.setCurrentStep = function(value) { if (value != null) { this._current = value; this._setState('current_step', value); } else { this._current = this._getState('current_step'); this._current = this._current === null ? null : parseInt(this._current, 10); } return this; }; Tour.prototype.redraw = function() { return this._showOverlayElement(this.getStep(this.getCurrentStep())); }; Tour.prototype._setState = function(key, value) { var e, keyName; if (this._options.storage) { keyName = this._options.name + "_" + key; try { this._options.storage.setItem(keyName, value); } catch (error) { e = error; if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { this._debug('LocalStorage quota exceeded. State storage failed.'); } } return this._options.afterSetState(keyName, value); } else { if (this._state == null) { this._state = {}; } return this._state[key] = value; } }; Tour.prototype._removeState = function(key) { var keyName; if (this._options.storage) { keyName = this._options.name + "_" + key; this._options.storage.removeItem(keyName); return this._options.afterRemoveState(keyName); } else { if (this._state != null) { return delete this._state[key]; } } }; Tour.prototype._getState = function(key) { var keyName, value; if (this._options.storage) { keyName = this._options.name + "_" + key; value = this._options.storage.getItem(keyName); } else { if (this._state != null) { value = this._state[key]; } } if (value === void 0 || value === 'null') { value = null; } this._options.afterGetState(key, value); return value; }; Tour.prototype._showNextStep = function() { var promise, showNextStepHelper, step; step = this.getStep(this._current); showNextStepHelper = (function(_this) { return function(e) { return _this.showStep(step.next); }; })(this); promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0); return this._callOnPromiseDone(promise, showNextStepHelper); }; Tour.prototype._showPrevStep = function() { var promise, showPrevStepHelper, step; step = this.getStep(this._current); showPrevStepHelper = (function(_this) { return function(e) { return _this.showStep(step.prev); }; })(this); promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0); return this._callOnPromiseDone(promise, showPrevStepHelper); }; Tour.prototype._debug = function(text) { if (this._options.debug) { return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); } }; Tour.prototype._isRedirect = function(host, path, location) { var currentPath; if ((host != null) && host !== '' && (({}.toString.call(host) === '[object RegExp]' && !host.test(location.origin)) || ({}.toString.call(host) === '[object String]' && this._isHostDifferent(host, location)))) { return true; } currentPath = [location.pathname, location.search, location.hash].join(''); return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && this._isPathDifferent(path, currentPath))); }; Tour.prototype._isHostDifferent = function(host, location) { switch ({}.toString.call(host)) { case '[object RegExp]': return !host.test(location.origin); case '[object String]': return this._getProtocol(host) !== this._getProtocol(location.href) || this._getHost(host) !== this._getHost(location.href); default: return true; } }; Tour.prototype._isPathDifferent = function(path, currentPath) { return this._getPath(path) !== this._getPath(currentPath) || !this._equal(this._getQuery(path), this._getQuery(currentPath)) || !this._equal(this._getHash(path), this._getHash(currentPath)); }; Tour.prototype._isJustPathHashDifferent = function(host, path, location) { var currentPath; if ((host != null) && host !== '') { if (this._isHostDifferent(host, location)) { return false; } } currentPath = [location.pathname, location.search, location.hash].join(''); if ({}.toString.call(path) === '[object String]') { return this._getPath(path) === this._getPath(currentPath) && this._equal(this._getQuery(path), this._getQuery(currentPath)) && !this._equal(this._getHash(path), this._getHash(currentPath)); } return false; }; Tour.prototype._redirect = function(step, i, path) { var href; if ($.isFunction(step.redirect)) { return step.redirect.call(this, path); } else { href = {}.toString.call(step.host) === '[object String]' ? "" + step.host + path : path; this._debug("Redirect to " + href); if (this._getState('redirect_to') === ("" + i)) { this._debug("Error redirection loop to " + path); this._removeState('redirect_to'); if (step.onRedirectError != null) { return step.onRedirectError(this); } } else { this._setState('redirect_to', "" + i); return document.location.href = href; } } }; Tour.prototype._isOrphan = function(step) { return (step.element == null) || !$(step.element).length || $(step.element).is(':hidden') && ($(step.element)[0].namespaceURI !== 'http://www.w3.org/2000/svg'); }; Tour.prototype._isLast = function() { return this._current < this._options.steps.length - 1; }; Tour.prototype._showPopoverAndOverlay = function(i) { var step; if (this.getCurrentStep() !== i || this.ended()) { return; } step = this.getStep(i); if (step.backdrop) { this._showOverlayElement(step); } this._showPopover(step, i); if (step.onShown != null) { step.onShown(this); } return this._debug("Step " + (this._current + 1) + " of " + this._options.steps.length); }; Tour.prototype._showPopover = function(step, i) { var $element, $tip, isOrphan, options, shouldAddSmart; $(".tour-" + this._options.name).remove(); options = $.extend({}, this._options); isOrphan = this._isOrphan(step); step.template = this._template(step, i); if (isOrphan) { step.element = 'body'; step.placement = 'top'; } $element = $(step.element); $element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element"); if (step.options) { $.extend(options, step.options); } if (step.reflex && !isOrphan) { $(step.reflexElement).addClass('tour-step-element-reflex').off((this._reflexEvent(step.reflex)) + ".tour-" + this._options.name).on((this._reflexEvent(step.reflex)) + ".tour-" + this._options.name, (function(_this) { return function() { if (_this._isLast()) { return _this.next(); } else { return _this.end(); } }; })(this)); } shouldAddSmart = step.smartPlacement === true && step.placement.search(/auto/i) === -1; $element.popover({ placement: shouldAddSmart ? "auto " + step.placement : step.placement, trigger: 'manual', title: step.title, content: step.content, html: true, animation: step.animation, container: step.container, template: step.template, selector: step.element }).popover('show'); $tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip(); $tip.attr('id', step.id); if ($element.css('position') === 'fixed') { $tip.css('position', 'fixed'); } this._reposition($tip, step); if (isOrphan) { return this._center($tip); } }; Tour.prototype._template = function(step, i) { var $navigation, $next, $prev, $resume, $template, template; template = step.template; if (this._isOrphan(step) && {}.toString.call(step.orphan) !== '[object Boolean]') { template = step.orphan; } $template = $.isFunction(template) ? $(template(i, step)) : $(template); $navigation = $template.find('.popover-navigation'); $prev = $navigation.find('[data-role="prev"]'); $next = $navigation.find('[data-role="next"]'); $resume = $navigation.find('[data-role="pause-resume"]'); if (this._isOrphan(step)) { $template.addClass('orphan'); } $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i); if (step.reflex) { $template.addClass("tour-" + this._options.name + "-reflex"); } if (step.prev < 0) { $prev.addClass('disabled').prop('disabled', true).prop('tabindex', -1); } if (step.next < 0) { $next.addClass('disabled').prop('disabled', true).prop('tabindex', -1); } if (!step.duration) { $resume.remove(); } return $template.clone().wrap('
').parent().html(); }; Tour.prototype._reflexEvent = function(reflex) { if ({}.toString.call(reflex) === '[object Boolean]') { return 'click'; } else { return reflex; } }; Tour.prototype._reposition = function($tip, step) { var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; offsetWidth = $tip[0].offsetWidth; offsetHeight = $tip[0].offsetHeight; tipOffset = $tip.offset(); originalLeft = tipOffset.left; originalTop = tipOffset.top; offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); if (offsetBottom < 0) { tipOffset.top = tipOffset.top + offsetBottom; } offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth(); if (offsetRight < 0) { tipOffset.left = tipOffset.left + offsetRight; } if (tipOffset.top < 0) { tipOffset.top = 0; } if (tipOffset.left < 0) { tipOffset.left = 0; } $tip.offset(tipOffset); if (step.placement === 'bottom' || step.placement === 'top') { if (originalLeft !== tipOffset.left) { return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left'); } } else { if (originalTop !== tipOffset.top) { return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top'); } } }; Tour.prototype._center = function($tip) { return $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2); }; Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { return $tip.find('.arrow').css(position, delta ? 50 * (1 - delta / dimension) + '%' : ''); }; Tour.prototype._scrollIntoView = function(i) { var $element, $window, counter, height, offsetTop, scrollTop, step, windowHeight; step = this.getStep(i); $element = $(step.element); if (!$element.length) { return this._showPopoverAndOverlay(i); } $window = $(window); offsetTop = $element.offset().top; height = $element.outerHeight(); windowHeight = $window.height(); scrollTop = 0; switch (step.placement) { case 'top': scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); break; case 'left': case 'right': scrollTop = Math.max(0, (offsetTop + height / 2) - (windowHeight / 2)); break; case 'bottom': scrollTop = Math.max(0, (offsetTop + height) - (windowHeight / 2)); } this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); counter = 0; return $('body, html').stop(true, true).animate({ scrollTop: Math.ceil(scrollTop) }, (function(_this) { return function() { if (++counter === 2) { _this._showPopoverAndOverlay(i); return _this._debug("Scroll into view.\nAnimation end element offset: " + ($element.offset().top) + ".\nWindow height: " + ($window.height()) + "."); } }; })(this)); }; Tour.prototype._onResize = function(callback, timeout) { return $(window).on("resize.tour-" + this._options.name, function() { clearTimeout(timeout); return timeout = setTimeout(callback, 100); }); }; Tour.prototype._onScroll = function(callback, timeout) { return $(window).on("scroll.tour-" + this._options.name, function() { clearTimeout(timeout); return timeout = setTimeout(callback, 100); }); }; Tour.prototype._initMouseNavigation = function() { var _this; _this = this; return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']", (function(_this) { return function(e) { e.preventDefault(); return _this.next(); }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']", (function(_this) { return function(e) { e.preventDefault(); if (_this._current > 0) { return _this.prev(); } }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) { return function(e) { e.preventDefault(); return _this.end(); }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) { var $this; e.preventDefault(); $this = $(this); $this.text(_this._paused ? $this.data('pause-text') : $this.data('resume-text')); if (_this._paused) { return _this.resume(); } else { return _this.pause(); } }); }; Tour.prototype._initKeyboardNavigation = function() { if (!this._options.keyboard) { return; } return $(document).on("keyup.tour-" + this._options.name, (function(_this) { return function(e) { if (!e.which) { return; } switch (e.which) { case 39: e.preventDefault(); if (_this._isLast()) { return _this.next(); } else { return _this.end(); } break; case 37: e.preventDefault(); if (_this._current > 0) { return _this.prev(); } } }; })(this)); }; Tour.prototype._makePromise = function(result) { if (result && $.isFunction(result.then)) { return result; } else { return null; } }; Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { if (promise) { return promise.then((function(_this) { return function(e) { return cb.call(_this, arg); }; })(this)); } else { return cb.call(this, arg); } }; Tour.prototype._showBackground = function(step, data) { var $backdrop, base, height, j, len, pos, ref, results, width; height = $(document).height(); width = $(document).width(); ref = ['top', 'bottom', 'left', 'right']; results = []; for (j = 0, len = ref.length; j < len; j++) { pos = ref[j]; $backdrop = (base = this.backdrops)[pos] != null ? base[pos] : base[pos] = $('
', { "class": "tour-backdrop " + pos }); $(step.backdropContainer).append($backdrop); switch (pos) { case 'top': results.push($backdrop.height(data.offset.top > 0 ? data.offset.top : 0).width(width).offset({ top: 0, left: 0 })); break; case 'bottom': results.push($backdrop.offset({ top: data.offset.top + data.height, left: 0 }).height(height - (data.offset.top + data.height)).width(width)); break; case 'left': results.push($backdrop.offset({ top: data.offset.top, left: 0 }).height(data.height).width(data.offset.left > 0 ? data.offset.left : 0)); break; case 'right': results.push($backdrop.offset({ top: data.offset.top, left: data.offset.left + data.width }).height(data.height).width(width - (data.offset.left + data.width))); break; default: results.push(void 0); } } return results; }; Tour.prototype._showOverlayElement = function(step) { var $backdropElement, elementData; $backdropElement = $(step.backdropElement); if ($backdropElement.length === 0) { elementData = { width: 0, height: 0, offset: { top: 0, left: 0 } }; } else { elementData = { width: $backdropElement.innerWidth(), height: $backdropElement.innerHeight(), offset: $backdropElement.offset() }; $backdropElement.addClass('tour-step-backdrop'); if (step.backdropPadding) { elementData = this._applyBackdropPadding(step.backdropPadding, elementData); } } return this._showBackground(step, elementData); }; Tour.prototype._hideOverlayElement = function(step) { var $backdrop, pos, ref; $(step.backdropElement).removeClass('tour-step-backdrop'); ref = this.backdrops; for (pos in ref) { $backdrop = ref[pos]; if ($backdrop && $backdrop.remove !== void 0) { $backdrop.remove(); } } return this.backdrops = []; }; Tour.prototype._applyBackdropPadding = function(padding, data) { if (typeof padding === 'object') { if (padding.top == null) { padding.top = 0; } if (padding.right == null) { padding.right = 0; } if (padding.bottom == null) { padding.bottom = 0; } if (padding.left == null) { padding.left = 0; } data.offset.top = data.offset.top - padding.top; data.offset.left = data.offset.left - padding.left; data.width = data.width + padding.left + padding.right; data.height = data.height + padding.top + padding.bottom; } else { data.offset.top = data.offset.top - padding; data.offset.left = data.offset.left - padding; data.width = data.width + (padding * 2); data.height = data.height + (padding * 2); } return data; }; Tour.prototype._clearTimer = function() { window.clearTimeout(this._timer); this._timer = null; return this._duration = null; }; Tour.prototype._getProtocol = function(url) { url = url.split('://'); if (url.length > 1) { return url[0]; } else { return 'http'; } }; Tour.prototype._getHost = function(url) { url = url.split('//'); url = url.length > 1 ? url[1] : url[0]; return url.split('/')[0]; }; Tour.prototype._getPath = function(path) { return path.replace(/\/?$/, '').split('?')[0].split('#')[0]; }; Tour.prototype._getQuery = function(path) { return this._getParams(path, '?'); }; Tour.prototype._getHash = function(path) { return this._getParams(path, '#'); }; Tour.prototype._getParams = function(path, start) { var j, len, param, params, paramsObject; params = path.split(start); if (params.length === 1) { return {}; } params = params[1].split('&'); paramsObject = {}; for (j = 0, len = params.length; j < len; j++) { param = params[j]; param = param.split('='); paramsObject[param[0]] = param[1] || ''; } return paramsObject; }; Tour.prototype._equal = function(obj1, obj2) { var j, k, len, obj1Keys, obj2Keys, v; if ({}.toString.call(obj1) === '[object Object]' && {}.toString.call(obj2) === '[object Object]') { obj1Keys = Object.keys(obj1); obj2Keys = Object.keys(obj2); if (obj1Keys.length !== obj2Keys.length) { return false; } for (k in obj1) { v = obj1[k]; if (!this._equal(obj2[k], v)) { return false; } } return true; } else if ({}.toString.call(obj1) === '[object Array]' && {}.toString.call(obj2) === '[object Array]') { if (obj1.length !== obj2.length) { return false; } for (k = j = 0, len = obj1.length; j < len; k = ++j) { v = obj1[k]; if (!this._equal(v, obj2[k])) { return false; } } return true; } else { return obj1 === obj2; } }; return Tour; })(); return Tour; }); bootstrap-tour-0.12.0/coffeelint.json000066400000000000000000000060431316367154600176260ustar00rootroot00000000000000{ "coffeescript_error": { "level": "error" }, "arrow_spacing": { "name": "arrow_spacing", "level": "ignore" }, "no_tabs": { "name": "no_tabs", "level": "error" }, "no_trailing_whitespace": { "name": "no_trailing_whitespace", "level": "error", "allowed_in_comments": false, "allowed_in_empty_lines": false }, "max_line_length": { "name": "max_line_length", "value": 120, "level": "error", "limitComments": true }, "line_endings": { "name": "line_endings", "level": "warn", "value": "unix" }, "no_trailing_semicolons": { "name": "no_trailing_semicolons", "level": "error" }, "indentation": { "name": "indentation", "value": 2, "level": "error" }, "camel_case_classes": { "name": "camel_case_classes", "level": "error" }, "colon_assignment_spacing": { "name": "colon_assignment_spacing", "level": "ignore", "spacing": { "left": 0, "right": 0 } }, "no_implicit_braces": { "name": "no_implicit_braces", "level": "ignore", "strict": true }, "no_plusplus": { "name": "no_plusplus", "level": "ignore" }, "no_throwing_strings": { "name": "no_throwing_strings", "level": "error" }, "no_backticks": { "name": "no_backticks", "level": "error" }, "no_implicit_parens": { "name": "no_implicit_parens", "strict": true, "level": "ignore" }, "no_empty_param_list": { "name": "no_empty_param_list", "level": "error" }, "no_stand_alone_at": { "name": "no_stand_alone_at", "level": "ignore" }, "space_operators": { "name": "space_operators", "level": "ignore" }, "duplicate_key": { "name": "duplicate_key", "level": "error" }, "empty_constructor_needs_parens": { "name": "empty_constructor_needs_parens", "level": "ignore" }, "cyclomatic_complexity": { "name": "cyclomatic_complexity", "value": 10, "level": "ignore" }, "newlines_after_classes": { "name": "newlines_after_classes", "value": 3, "level": "error" }, "no_unnecessary_fat_arrows": { "name": "no_unnecessary_fat_arrows", "level": "error" }, "missing_fat_arrows": { "name": "missing_fat_arrows", "level": "ignore" }, "non_empty_constructor_needs_parens": { "name": "non_empty_constructor_needs_parens", "level": "ignore" }, "no_unnecessary_double_quotes": { "name": "no_unnecessary_double_quotes", "level": "error" }, "no_debugger": { "name": "no_debugger", "level": "warn" }, "no_interpolation_in_single_quotes": { "name": "no_interpolation_in_single_quotes", "level": "ignore" } } bootstrap-tour-0.12.0/composer.json000066400000000000000000000006271316367154600173410ustar00rootroot00000000000000{ "name": "sorich87/bootstrap-tour", "description": "Quick and easy way to build your product tours with Bootstrap Popovers.", "type":"component", "url":"https://github.com/sorich87/bootstrap-tour.git", "homepage": "http://bootstraptour.com/", "description": "Show people how to use your web site", "keywords": [ "bootstrap", "tour" ], "license": "MIT" } bootstrap-tour-0.12.0/gulpfile.coffee000066400000000000000000000142061316367154600175750ustar00rootroot00000000000000gulp = require 'gulp' $ = require('gulp-load-plugins') lazy: false extend = require('util')._extend streamqueue = require 'streamqueue' spawn = require('child_process').spawn KarmaServer = require('karma').Server pkg = require './package.json' name = pkg.name paths = src: './src' dist: './build' test: './test' docs: './docs' server = host: 'localhost' port: 3000 banner = ''' /* ======================================================================== * <%= pkg.name %> - v<%= pkg.version %> * <%= pkg.homepage %> * ======================================================================== * Copyright 2012-2015 <%= pkg.author.name %> * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ ''' # coffee gulp.task 'coffee', -> gulp .src "#{paths.src}/coffee/#{name}.coffee" .pipe $.changed "#{paths.dist}/js" .pipe $.coffeelint './coffeelint.json' .pipe $.coffeelint.reporter() .on 'error', $.util.log .pipe $.coffee bare: true .on 'error', $.util.log .pipe $.header banner, pkg: pkg .pipe gulp.dest "#{paths.dist}/js" .pipe gulp.dest "#{paths.src}/docs/assets/js" .pipe gulp.dest paths.test .pipe $.uglify() .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' .pipe gulp.dest "#{paths.dist}/js" gulp.task 'coffee-standalone', -> streamqueue objectMode: true, gulp .src [ "./bower_components/bootstrap/js/transition.js" "./bower_components/bootstrap/js/tooltip.js" "./bower_components/bootstrap/js/popover.js" ] , gulp .src "#{paths.src}/coffee/#{name}.coffee" .pipe $.changed "#{paths.dist}/js" .pipe $.coffeelint './coffeelint.json' .pipe $.coffeelint.reporter() .on 'error', $.util.log .pipe $.coffee bare: true .on 'error', $.util.log .pipe $.concat "#{name}-standalone.js" .pipe $.header banner, pkg: pkg .pipe gulp.dest "#{paths.dist}/js" .pipe $.uglify() .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' .pipe gulp.dest "#{paths.dist}/js" # less gulp.task 'less', -> gulp .src [ "#{paths.src}/less/#{name}.less" ] .pipe $.changed "#{paths.dist}/css" .pipe $.less() .on 'error', $.util.log .pipe $.header banner, pkg: pkg .pipe gulp.dest "#{paths.dist}/css" .pipe gulp.dest "#{paths.src}/docs/assets/css" .pipe $.less compress: true, cleancss: true .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' .pipe gulp.dest "#{paths.dist}/css" gulp.task 'less-standalone', -> gulp .src "#{paths.src}/less/#{name}-standalone.less" .pipe $.changed "#{paths.dist}/css" .pipe $.less() .on 'error', $.util.log .pipe $.header banner, pkg: pkg .pipe gulp.dest "#{paths.dist}/css" .pipe $.less compress: true, cleancss: true .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' .pipe gulp.dest "#{paths.dist}/css" # test gulp.task 'test-coffee', ['coffee'], -> gulp .src "#{paths.src}/coffee/#{name}.spec.coffee" .pipe $.changed paths.test .pipe $.coffeelint './coffeelint.json' .pipe $.coffeelint.reporter() .on 'error', $.util.log .pipe $.coffee() .on 'error', $.util.log .pipe gulp.dest paths.test gulp.task 'test-go', ['test-coffee'], (done) -> new KarmaServer({ configFile: __dirname + '/karma.conf.js', singleRun: true}, done).start() # docs gulp.task 'docs-build', ['coffee', 'less'], (done) -> spawn `(process.platform === 'win32' ? 'jekyll.bat' : 'jekyll')`, ['build'] .on 'close', done gulp.task 'docs-copy', ['docs-build'], -> gulp .src "./bower_components/**/*" .pipe gulp.dest "#{paths.docs}/components" gulp.task 'docs-coffee', ['docs-build'], -> gulp .src "#{paths.src}/coffee/#{name}.docs.coffee" .pipe $.changed "#{paths.docs}/assets/js" .pipe $.coffeelint.reporter() .on 'error', $.util.log .pipe $.coffee() .on 'error', $.util.log .pipe gulp.dest "#{paths.docs}/assets/js" # clean gulp.task 'clean-dist', -> gulp .src paths.dist .pipe $.clean() gulp.task 'clean-test', -> gulp .src paths.test .pipe $.clean() gulp.task 'clean-docs', -> gulp .src paths.docs .pipe $.clean() # connect gulp.task 'connect', ['docs'], -> $.connect.server root: [paths.docs] host: server.host port: server.port livereload: true # open gulp.task 'open', ['connect'], -> gulp .src "#{paths.docs}/index.html" .pipe $.open uri: "http://#{server.host}:#{server.port}" gulp.task 'watch', ['connect'], -> gulp.watch "#{paths.src}/coffee/#{name}.coffee", ['coffee', 'coffee-standalone'] gulp.watch "#{paths.src}/less/#{name}.less", ["less", "less-standalone"] gulp.watch "#{paths.src}/less/#{name}-standalone.less", ['less-standalone'] gulp.watch "#{paths.src}/coffee/#{name}.spec.coffee", ['test'] gulp.watch [ "#{paths.src}/coffee/#{name}.docs.coffee" "#{paths.src}/docs/**/*" ], ['docs'] gulp.watch [ "#{paths.dist}/js/**/*.js" "#{paths.dist}/css/**/*.css" "#{paths.docs}/index.html" ] .on 'change', (event) -> gulp.src event.path .pipe $.connect.reload() # bump gulp.task 'bump', ['test'], -> bumpType = $.util.env.type || 'patch' gulp.src(['./package.json', './smart.json']) .pipe $.bump(type: bumpType) .pipe gulp.dest('./') # tasks gulp.task 'clean', ['clean-dist', 'clean-test', 'clean-docs'] gulp.task 'server', ['connect', 'open', 'watch'] gulp.task 'dist', ['coffee', 'coffee-standalone', 'less', 'less-standalone'] gulp.task 'test', ['coffee', 'test-coffee', 'test-go'] gulp.task 'docs', ['coffee', 'less', 'docs-build', 'docs-copy', 'docs-coffee'] gulp.task 'default', ['dist', 'docs', 'server'] bootstrap-tour-0.12.0/gulpfile.js000066400000000000000000000001011316367154600167470ustar00rootroot00000000000000require('coffee-script/register'); require('./gulpfile.coffee'); bootstrap-tour-0.12.0/karma.conf.js000066400000000000000000000005061316367154600171700ustar00rootroot00000000000000module.exports = function(config) { config.set({ browsers: ['ChromeHeadless', 'Firefox'], files: [ 'bower_components/jquery/dist/jquery.js', 'bower_components/bootstrap/dist/js/bootstrap.js', 'test/bootstrap-tour.js', 'test/bootstrap-tour.spec.js' ], frameworks: ['jasmine'] }); }; bootstrap-tour-0.12.0/package.js000066400000000000000000000001541316367154600165430ustar00rootroot00000000000000Package.describe({ summary: "Quick and easy way to build your product tours with Bootstrap Popovers." }); bootstrap-tour-0.12.0/package.json000066400000000000000000000034521316367154600171040ustar00rootroot00000000000000{ "name": "bootstrap-tour", "description": "Quick and easy way to build your product tours with Bootstrap Popovers.", "version": "0.12.0", "keywords": [ "tour", "bootstrap", "js", "tour", "intro" ], "homepage": "http://bootstraptour.com", "author": { "name": "Ulrich Sossou", "email": "sorich87@gmail.com", "url": "http://ulrichsossou.com" }, "contributors": [ { "name": "Emanuele Marchi", "email": "emanuele@lostcrew.it", "url": "http://lostcrew.it" }, { "name": "Nicola Molinari", "email": "emmenko@gmail.com" } ], "repository": { "type": "git", "url": "https://github.com/sorich87/bootstrap-tour.git" }, "bugs": { "url": "https://github.com/sorich87/bootstrap-tour/issues" }, "licenses": [ { "type": "MIT", "url": "https://opensource.org/licenses/MIT" } ], "dependencies": { "bootstrap": "~3", "jquery": ">=1.8" }, "devDependencies": { "coffee-script": "~1.12.7", "gulp": "~3.9.0", "gulp-bump": "~2.7", "gulp-changed": "~3.1.0", "gulp-clean": "~0.3.1", "gulp-coffee": "~2.3.4", "gulp-coffeelint": "~0.6.0", "gulp-concat": "~2.6.1", "gulp-connect": "~5.0.0", "gulp-header": "~1.8.9", "gulp-jasmine": "~2.4.2", "gulp-less": "~3.3.2", "gulp-load-plugins": "~1.5.0", "gulp-open": "~2.0.0", "gulp-rename": "~1.2.0", "gulp-uglify": "~3.0.0", "gulp-util": "~3.0.0", "karma": "~1.7.1", "karma-chrome-launcher": "^2.2.0", "karma-firefox-launcher": "^1.0.1", "karma-jasmine": "~1.1.0", "phantomjs": "^2.1.7", "streamqueue": "1.1.1" }, "engines": { "node": ">= 0.8.0" }, "main": "./build/js/bootstrap-tour.js", "scripts": { "build": "gulp dist", "test": "gulp test" } } bootstrap-tour-0.12.0/smart.json000066400000000000000000000005251316367154600166350ustar00rootroot00000000000000{ "name": "bootstrap-tour", "description": "Quick and easy way to build your product tours with Bootstrap Popovers.", "homepage": "http://bootstraptour.com", "author": "Ulrich Sossou (http://ulrichsossou.com)", "version": "0.12.0", "git": "https://github.com/sorich87/bootstrap-tour.git", "packages": {} } bootstrap-tour-0.12.0/src/000077500000000000000000000000001316367154600154015ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/coffee/000077500000000000000000000000001316367154600166305ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/coffee/bootstrap-tour.coffee000066400000000000000000000657051316367154600230220ustar00rootroot00000000000000((window, factory) -> if typeof define is 'function' and define.amd define ['jquery'], (jQuery) -> (window.Tour = factory(jQuery)) else if typeof exports is 'object' module.exports = factory(require('jquery')) else window.Tour = factory(window.jQuery) )(window, ($) -> document = window.document class Tour constructor: (options) -> try storage = window.localStorage catch # localStorage may be unavailable due to security settings storage = false @_options = $.extend name: 'tour' steps: [] container: 'body' autoscroll: true keyboard: true storage: storage debug: false backdrop: false backdropContainer: 'body' backdropPadding: 0 redirect: true orphan: false duration: false delay: false basePath: '' template: '' afterSetState: (key, value) -> afterGetState: (key, value) -> afterRemoveState: (key) -> onStart: (tour) -> onEnd: (tour) -> onShow: (tour) -> onShown: (tour) -> onHide: (tour) -> onHidden: (tour) -> onNext: (tour) -> onPrev: (tour) -> onPause: (tour, duration) -> onResume: (tour, duration) -> onRedirectError: (tour) -> , options @_force = false @_inited = false @_current = null @backdrops = [] @ # Add multiple steps addSteps: (steps) -> @addStep step for step in steps @ # Add a new step addStep: (step) -> @_options.steps.push step @ # Get a step by its indice getStep: (i) -> if @_options.steps[i]? $.extend id: "step-#{i}" path: '' host: '' placement: 'right' title: '' content: '

' # no empty as default, otherwise popover won't show up next: if i is @_options.steps.length - 1 then -1 else i + 1 prev: i - 1 animation: true container: @_options.container autoscroll: @_options.autoscroll backdrop: @_options.backdrop backdropContainer: @_options.backdropContainer backdropPadding: @_options.backdropPadding redirect: @_options.redirect reflexElement: @_options.steps[i].element backdropElement: @_options.steps[i].element orphan: @_options.orphan duration: @_options.duration delay: @_options.delay template: @_options.template onShow: @_options.onShow onShown: @_options.onShown onHide: @_options.onHide onHidden: @_options.onHidden onNext: @_options.onNext onPrev: @_options.onPrev onPause: @_options.onPause onResume: @_options.onResume onRedirectError: @_options.onRedirectError , @_options.steps[i] # Setup event bindings and continue a tour that has already started init: (force) -> @_force = force if @ended() @_debug 'Tour ended, init prevented.' return @ @setCurrentStep() @_initMouseNavigation() @_initKeyboardNavigation() # Reshow popover on window resize using debounced resize @_onResize => @showStep @_current @_onScroll => @_showPopoverAndOverlay(@_current) # Continue a tour that had started on a previous page load @showStep @_current unless @_current is null @_inited = true @ # Start tour from current step start: (force = false) -> @init force unless @_inited # Backward compatibility if @_current is null promise = @_makePromise(@_options.onStart(@) if @_options.onStart?) @_callOnPromiseDone(promise, @showStep, 0) @ # Hide current step and show next step next: -> promise = @hideStep @_current, @_current+1 @_callOnPromiseDone promise, @_showNextStep # Hide current step and show prev step prev: -> promise = @hideStep @_current, @_current-1 @_callOnPromiseDone promise, @_showPrevStep goTo: (i) -> promise = @hideStep @_current, i @_callOnPromiseDone promise, @showStep, i # End tour end: -> endHelper = (e) => $(document).off "click.tour-#{@_options.name}" $(document).off "keyup.tour-#{@_options.name}" $(window).off "resize.tour-#{@_options.name}" $(window).off "scroll.tour-#{@_options.name}" @_setState('end', 'yes') @_inited = false @_force = false @_clearTimer() @_options.onEnd(@) if @_options.onEnd? promise = @hideStep(@_current) @_callOnPromiseDone(promise, endHelper) # Verify if tour is enabled ended: -> not @_force and not not @_getState 'end' # Restart tour restart: -> @_removeState 'current_step' @_removeState 'end' @_removeState 'redirect_to' @start() # Pause step timer pause: -> step = @getStep @_current return @ unless step and step.duration @_paused = true @_duration -= new Date().getTime() - @_start window.clearTimeout(@_timer) @_debug "Paused/Stopped step #{@_current + 1} timer (#{@_duration} remaining)." step.onPause @, @_duration if step.onPause? # Resume step timer resume: -> step = @getStep @_current return @ unless step and step.duration @_paused = false @_start = new Date().getTime() @_duration = @_duration or step.duration @_timer = window.setTimeout => if @_isLast() then @next() else @end() , @_duration @_debug "Started step #{@_current + 1} timer with duration #{@_duration}" step.onResume @, @_duration if step.onResume? and @_duration isnt step.duration # Hide the specified step hideStep: (i, iNext) -> step = @getStep i return unless step @_clearTimer() # If onHide returns a promise, let's wait until it's done to execute promise = @_makePromise(step.onHide @, i if step.onHide?) hideStepHelper = (e) => $element = $ step.element $element = $('body') unless $element.data('bs.popover') or $element.data('popover') $element .popover('destroy') .removeClass("tour-#{@_options.name}-element tour-#{@_options.name}-#{i}-element") .removeData('bs.popover') if step.reflex $ step.reflexElement .removeClass('tour-step-element-reflex') .off "#{@_reflexEvent(step.reflex)}.tour-#{@_options.name}" if step.backdrop next_step = iNext? and @getStep iNext if !next_step or !next_step.backdrop or next_step.backdropElement != step.backdropElement @_hideOverlayElement(step) step.onHidden(@) if step.onHidden? hideDelay = step.delay.hide || step.delay if ({}).toString.call(hideDelay) is '[object Number]' and hideDelay > 0 @_debug "Wait #{hideDelay} milliseconds to hide the step #{@_current + 1}" window.setTimeout => @_callOnPromiseDone promise, hideStepHelper , hideDelay else @_callOnPromiseDone promise, hideStepHelper promise # Show the specified step showStep: (i) -> if @ended() @_debug 'Tour ended, showStep prevented.' return @ step = @getStep i return unless step skipToPrevious = i < @_current # If onShow returns a promise, let's wait until it's done to execute promise = @_makePromise(step.onShow @, i if step.onShow?) @setCurrentStep i # Support string or function for path path = switch ({}).toString.call step.path when '[object Function]' then step.path() when '[object String]' then @_options.basePath + step.path else step.path # Redirect to step path if not already there if step.redirect and @_isRedirect step.host, path, document.location @_redirect step, i, path return unless @_isJustPathHashDifferent(step.host, path, document.location) showStepHelper = (e) => # Skip if step is orphan and orphan options is false if @_isOrphan step if step.orphan is false @_debug """Skip the orphan step #{@_current + 1}. Orphan option is false and the element does not exist or is hidden.""" if skipToPrevious then @_showPrevStep() else @_showNextStep() return @_debug "Show the orphan step #{@_current + 1}. Orphans option is true." # Show backdrop # @_showBackdrop(step) if step.backdrop if step.autoscroll @_scrollIntoView i else @_showPopoverAndOverlay i # Play step timer @resume() if step.duration showDelay = step.delay.show || step.delay if ({}).toString.call(showDelay) is '[object Number]' and showDelay > 0 @_debug "Wait #{showDelay} milliseconds to show the step #{@_current + 1}" window.setTimeout => @_callOnPromiseDone promise, showStepHelper , showDelay else @_callOnPromiseDone promise, showStepHelper promise getCurrentStep: -> @_current # Setup current step variable setCurrentStep: (value) -> if value? @_current = value @_setState 'current_step', value else @_current = @_getState 'current_step' @_current = if @_current is null then null else parseInt @_current, 10 @ # Manually trigger a redraw on the overlay element redraw: -> @_showOverlayElement(@getStep(@getCurrentStep())) # Set a state in storage _setState: (key, value) -> if @_options.storage keyName = "#{@_options.name}_#{key}" try @_options.storage.setItem keyName, value catch e if e.code is DOMException.QUOTA_EXCEEDED_ERR @_debug 'LocalStorage quota exceeded. State storage failed.' @_options.afterSetState keyName, value else @_state ?= {} @_state[key] = value # Remove the current state from the storage layer _removeState: (key) -> if @_options.storage keyName = "#{@_options.name}_#{key}" @_options.storage.removeItem keyName @_options.afterRemoveState keyName else delete @_state[key] if @_state? # Get the current state from the storage layer _getState: (key) -> if @_options.storage keyName = "#{@_options.name}_#{key}" value = @_options.storage.getItem keyName else value = @_state[key] if @_state? value = null if value is undefined or value is 'null' @_options.afterGetState key, value return value # Show next step _showNextStep: -> step = @getStep @_current showNextStepHelper = (e) => @showStep step.next promise = @_makePromise(step.onNext @ if step.onNext?) @_callOnPromiseDone promise, showNextStepHelper # Show prev step _showPrevStep: -> step = @getStep @_current showPrevStepHelper = (e) => @showStep step.prev promise = @_makePromise(step.onPrev @ if step.onPrev?) @_callOnPromiseDone promise, showPrevStepHelper # Print message in console _debug: (text) -> window.console.log "Bootstrap Tour '#{@_options.name}' | #{text}" if @_options.debug # Check if step path equals current document path _isRedirect: (host, path, location) -> return true if host? and host isnt '' and ( (({}).toString.call(host) is '[object RegExp]' and not host.test(location.origin)) or (({}).toString.call(host) is '[object String]' and @_isHostDifferent(host, location)) ) currentPath = [ location.pathname, location.search, location.hash ].join('') path? and path isnt '' and ( (({}).toString.call(path) is '[object RegExp]' and not path.test(currentPath)) or (({}).toString.call(path) is '[object String]' and @_isPathDifferent(path, currentPath)) ) _isHostDifferent: (host, location) -> switch ({}).toString.call(host) when '[object RegExp]' not host.test(location.origin) when '[object String]' @_getProtocol(host) isnt @_getProtocol(location.href) or @_getHost(host) isnt @_getHost(location.href) else true _isPathDifferent: (path, currentPath) -> @_getPath(path) isnt @_getPath(currentPath) or not @_equal(@_getQuery(path), @_getQuery(currentPath)) or not @_equal(@_getHash(path), @_getHash(currentPath)) _isJustPathHashDifferent: (host, path, location) -> if host? and host isnt '' return false if @_isHostDifferent(host, location) currentPath = [ location.pathname, location.search, location.hash ].join('') if ({}).toString.call(path) is '[object String]' return @_getPath(path) is @_getPath(currentPath) and @_equal(@_getQuery(path), @_getQuery(currentPath)) and not @_equal(@_getHash(path), @_getHash(currentPath)) false # Execute the redirect _redirect: (step, i, path) -> if $.isFunction step.redirect step.redirect.call this, path else href = if ({}).toString.call(step.host) is '[object String]' then "#{step.host}#{path}" else path @_debug "Redirect to #{href}" if @_getState('redirect_to') is "#{i}" @_debug "Error redirection loop to #{path}" @_removeState 'redirect_to' step.onRedirectError @ if step.onRedirectError? else @_setState 'redirect_to', "#{i}" document.location.href = href _isOrphan: (step) -> # Do not check for is(':hidden') on svg elements. jQuery does not work properly on svg. not step.element? or not $(step.element).length or $(step.element).is(':hidden') and ($(step.element)[0].namespaceURI isnt 'http://www.w3.org/2000/svg') _isLast: -> @_current < @_options.steps.length - 1 _showPopoverAndOverlay: (i) => return if @getCurrentStep() isnt i or @ended() step = @getStep i @_showOverlayElement step if step.backdrop @_showPopover step, i step.onShown @ if step.onShown? @_debug "Step #{@_current + 1} of #{@_options.steps.length}" # Show step popover _showPopover: (step, i) -> # Remove previously existing tour popovers. This prevents displaying of # multiple inactive popovers when user navigates the tour too quickly. $(".tour-#{@_options.name}").remove() options = $.extend {}, @_options isOrphan = @_isOrphan step step.template = @_template step, i if isOrphan step.element = 'body' step.placement = 'top' $element = $ step.element $element.addClass "tour-#{@_options.name}-element tour-#{@_options.name}-#{i}-element" $.extend options, step.options if step.options if step.reflex and not isOrphan $ step.reflexElement .addClass('tour-step-element-reflex') .off("#{@_reflexEvent(step.reflex)}.tour-#{@_options.name}") .on "#{@_reflexEvent(step.reflex)}.tour-#{@_options.name}", => if @_isLast() then @next() else @end() shouldAddSmart = step.smartPlacement is true and step.placement.search(/auto/i) is -1 $element .popover( placement: if shouldAddSmart then "auto #{step.placement}" else step.placement trigger: 'manual' title: step.title content: step.content html: true animation: step.animation container: step.container template: step.template selector: step.element ) .popover 'show' # Tip adjustment $tip = if $element.data 'bs.popover' then $element.data('bs.popover').tip() else $element.data('popover').tip() $tip.attr 'id', step.id $tip.css 'position', 'fixed' if $element.css('position') is 'fixed' @_reposition($tip, step) @_center($tip) if isOrphan # Get popover template _template: (step, i) -> template = step.template if @_isOrphan(step) and ({}).toString.call(step.orphan) isnt '[object Boolean]' template = step.orphan $template = if $.isFunction template then $(template i, step) else $(template) $navigation = $template.find '.popover-navigation' $prev = $navigation.find '[data-role="prev"]' $next = $navigation.find '[data-role="next"]' $resume = $navigation.find '[data-role="pause-resume"]' $template.addClass 'orphan' if @_isOrphan step $template.addClass "tour-#{@_options.name} tour-#{@_options.name}-#{i}" $template.addClass "tour-#{@_options.name}-reflex" if step.reflex if step.prev < 0 $prev.addClass('disabled') .prop('disabled', true) .prop('tabindex', -1) if step.next < 0 $next.addClass('disabled') .prop('disabled', true) .prop('tabindex', -1) $resume.remove() unless step.duration $template.clone().wrap('
').parent().html() _reflexEvent: (reflex) -> if ({}).toString.call(reflex) is '[object Boolean]' then 'click' else reflex # Prevent popover from crossing over the edge of the window _reposition: ($tip, step) -> offsetWidth = $tip[0].offsetWidth offsetHeight = $tip[0].offsetHeight tipOffset = $tip.offset() originalLeft = tipOffset.left originalTop = tipOffset.top offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight() tipOffset.top = tipOffset.top + offsetBottom if offsetBottom < 0 offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth() tipOffset.left = tipOffset.left + offsetRight if offsetRight < 0 tipOffset.top = 0 if tipOffset.top < 0 tipOffset.left = 0 if tipOffset.left < 0 $tip.offset(tipOffset) # Reposition the arrow if step.placement is 'bottom' or step.placement is 'top' if originalLeft isnt tipOffset.left @_replaceArrow $tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left' else if originalTop isnt tipOffset.top @_replaceArrow $tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top' # Center popover in the page _center: ($tip) -> $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2) # Copy pasted from bootstrap-tooltip.js with some alterations _replaceArrow: ($tip, delta, dimension, position)-> $tip.find('.arrow').css position, if delta then 50 * (1 - delta / dimension) + '%' else '' # Scroll to the popup if it is not in the viewport _scrollIntoView: (i) -> step = @getStep i $element = $(step.element) return @_showPopoverAndOverlay(i) unless $element.length $window = $(window) offsetTop = $element.offset().top height = $element.outerHeight() windowHeight = $window.height() scrollTop = 0 switch step.placement when 'top' scrollTop = Math.max(0, offsetTop - (windowHeight / 2)) when 'left', 'right' scrollTop = Math.max(0, (offsetTop + height / 2) - (windowHeight / 2)) when 'bottom' scrollTop = Math.max(0, (offsetTop + height) - (windowHeight / 2)) @_debug "Scroll into view. ScrollTop: #{scrollTop}. Element offset: #{offsetTop}. Window height: #{windowHeight}." counter = 0 $('body, html').stop(true, true).animate scrollTop: Math.ceil(scrollTop), => if ++counter is 2 @_showPopoverAndOverlay(i) @_debug """Scroll into view. Animation end element offset: #{$element.offset().top}. Window height: #{$window.height()}.""" # Debounced window resize _onResize: (callback, timeout) -> $(window).on "resize.tour-#{@_options.name}", -> clearTimeout(timeout) timeout = setTimeout(callback, 100) # Debounced window scroll _onScroll: (callback, timeout) -> $(window).on "scroll.tour-#{@_options.name}", -> clearTimeout(timeout) timeout = setTimeout(callback, 100) # Event bindings for mouse navigation _initMouseNavigation: -> _this = @ # Go to next step after click on element with attribute 'data-role=next' # Go to previous step after click on element with attribute 'data-role=prev' # End tour after click on element with attribute 'data-role=end' # Pause/resume tour after click on element with attribute 'data-role=pause-resume' $(document) .off("click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='prev']") .off("click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='next']") .off("click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='end']") .off("click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='pause-resume']") .on "click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='next']", (e) => e.preventDefault() @next() .on "click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='prev']", (e) => e.preventDefault() @prev() if @_current > 0 .on "click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='end']", (e) => e.preventDefault() @end() .on "click.tour-#{@_options.name}", ".popover.tour-#{@_options.name} *[data-role='pause-resume']", (e) -> e.preventDefault() $this = $ @ $this.text if _this._paused then $this.data 'pause-text' else $this.data 'resume-text' if _this._paused then _this.resume() else _this.pause() # Keyboard navigation _initKeyboardNavigation: -> return unless @_options.keyboard $(document).on "keyup.tour-#{@_options.name}", (e) => return unless e.which switch e.which when 39 e.preventDefault() if @_isLast() then @next() else @end() when 37 e.preventDefault() @prev() if @_current > 0 # Checks if the result of a callback is a promise _makePromise: (result) -> if result and $.isFunction(result.then) then result else null _callOnPromiseDone: (promise, cb, arg) -> if promise promise.then (e) => cb.call(@, arg) else cb.call(@, arg) _showBackground: (step, data) -> height = $(document).height() width = $(document).width() for pos in ['top', 'bottom', 'left', 'right'] $backdrop = @backdrops[pos] ?= $('
', class: "tour-backdrop #{pos}") $(step.backdropContainer).append($backdrop) switch pos when 'top' $backdrop .height(if data.offset.top > 0 then data.offset.top else 0) .width(width) .offset(top: 0, left: 0) when 'bottom' $backdrop .offset(top: data.offset.top + data.height, left: 0) .height(height - (data.offset.top + data.height)) .width(width) when 'left' $backdrop .offset(top: data.offset.top, left: 0) .height(data.height) .width(if data.offset.left > 0 then data.offset.left else 0) when 'right' $backdrop .offset(top: data.offset.top, left: data.offset.left + data.width) .height(data.height) .width(width - (data.offset.left + data.width)) _showOverlayElement: (step) -> $backdropElement = $ step.backdropElement if $backdropElement.length is 0 elementData = width: 0 height: 0 offset: top: 0 left: 0 else elementData = width: $backdropElement.innerWidth() height: $backdropElement.innerHeight() offset: $backdropElement.offset() $backdropElement.addClass 'tour-step-backdrop' elementData = @_applyBackdropPadding step.backdropPadding, elementData if step.backdropPadding @_showBackground(step, elementData) _hideOverlayElement: (step) -> $(step.backdropElement).removeClass 'tour-step-backdrop' for pos, $backdrop of @backdrops $backdrop.remove() if $backdrop and $backdrop.remove isnt undefined @backdrops = [] _applyBackdropPadding: (padding, data) -> if typeof padding is 'object' padding.top ?= 0 padding.right ?= 0 padding.bottom ?= 0 padding.left ?= 0 data.offset.top = data.offset.top - padding.top data.offset.left = data.offset.left - padding.left data.width = data.width + padding.left + padding.right data.height = data.height + padding.top + padding.bottom else data.offset.top = data.offset.top - padding data.offset.left = data.offset.left - padding data.width = data.width + (padding * 2) data.height = data.height + (padding * 2) data _clearTimer: -> window.clearTimeout @_timer @_timer = null @_duration = null _getProtocol: (url) -> url = url.split('://') return if url.length > 1 then url[0] else 'http' _getHost: (url) -> url = url.split('//') url = if url.length > 1 then url[1] else url[0] return url.split('/')[0] _getPath: (path) -> return path.replace(/\/?$/, '').split('?')[0].split('#')[0] _getQuery: (path) -> return @_getParams(path, '?') _getHash: (path) -> return @_getParams(path, '#') _getParams: (path, start) -> params = path.split(start) return {} if params.length is 1 params = params[1].split('&') paramsObject = {} for param in params param = param.split('=') paramsObject[param[0]] = param[1] or '' return paramsObject _equal: (obj1, obj2) -> if ({}).toString.call(obj1) is '[object Object]' and ({}).toString.call(obj2) is '[object Object]' obj1Keys = Object.keys(obj1) obj2Keys = Object.keys(obj2) return false if obj1Keys.length isnt obj2Keys.length for k,v of obj1 return false if not @_equal(obj2[k], v) return true else if ({}).toString.call(obj1) is '[object Array]' and ({}).toString.call(obj2) is '[object Array]' return false if obj1.length isnt obj2.length for v,k in obj1 return false if not @_equal(v, obj2[k]) return true else return obj1 is obj2 Tour ) bootstrap-tour-0.12.0/src/coffee/bootstrap-tour.docs.coffee000066400000000000000000000055711316367154600237440ustar00rootroot00000000000000$ -> $demo = $("#demo") duration = 5000 remaining = duration tour = new Tour( onStart: -> $demo.addClass "disabled", true onEnd: -> $demo.removeClass "disabled", true debug: true steps: [ path: "/" element: "#navbar" placement: "bottom" title: "Welcome to Bootstrap Tour!" content: """ Introduce new users to your product by walking them through it step by step. """ , path: "/" element: "#usage" placement: "top" title: "A super simple setup" content: "Easy is better, right? The tour is up and running with just a few options and steps." , path: "/" element: "#license" placement: "top" title: "Best of all, it's free!" content: "Yeah! Free as in beer... or speech. Use and abuse, but don't forget to contribute!" , path: "/api" element: "#options" placement: "top" title: "Flexibilty and expressiveness" content: """ There are more options for those who want to get on the dark side.
Power to the people! """ reflex: true , path: "/api" element: "#duration" placement: "top" title: "Automagically expiring step", content: """ A new addition: make your tour (or step) completely automatic. You set the duration, Bootstrap Tour does the rest. For instance, this step will disappear in 5 seconds. """ duration: 5000 , path: "/api" element: "#methods table" placement: "top" title: "A new shiny Backdrop option" content: """ If you need to highlight the current step's element, activate the backdrop and you won't lose focus anymore! """ backdrop: true backdropPadding: 5 , path: "/api" element: "#reflex" placement: "bottom" title: "Reflex mode" content: "Reflex mode is enabled, click on the text in the cell to continue!" reflex: true , path: "/api" title: "And support for orphan steps" content: """ If you activate the orphan property, the step(s) are shown centered in the page, and you can forget to specify element and placement! """ orphan: true onHidden: -> window.location.assign "/" ] ) .init() $('
You ended the demo tour. Restart the demo tour.
').prependTo(".content").alert() if tour.ended() $(document).on "click", "[data-demo]", (e) -> e.preventDefault() return if $(this).hasClass "disabled" tour.restart() $(".alert").alert "close" $("html").smoothScroll() $(".gravatar").each -> $this = $(@) email = md5 $this.data "email" $(@).attr "src", "http://www.gravatar.com/avatar/#{email}?s=60" bootstrap-tour-0.12.0/src/coffee/bootstrap-tour.spec.coffee000066400000000000000000001213471316367154600237460ustar00rootroot00000000000000describe 'Bootstrap Tour', -> beforeEach -> $.support.transition = false $.fx.off = true afterEach -> tour = @tour @tour._setState('current_step', null) @tour._setState('end', null) $.each @tour._options.steps, (i, s) -> $element = $(tour.getStep(i).element) $element .popover('destroy') .removeData('bs.popover') $element.remove() it 'should set the tour options', -> @tour = new Tour name: 'test' afterSetState: -> true afterGetState: -> true expect(@tour._options.name).toBe 'test' expect(@tour._options.afterGetState).toBeTruthy expect(@tour._options.afterSetState).toBeTruthy it 'should have `tour` as default name', -> @tour = new Tour expect(@tour._options.name).toBe 'tour' it 'should accept an array of steps', -> @tour = new Tour expect(@tour._options.steps).toEqual [] # tour accepts an array of steps it '`_setState` should save state as localStorage item', -> @tour = new Tour @tour._setState('test', 'yes') expect(window.localStorage.getItem('tour_test')).toBe 'yes' it '`_setState` should execute storage.setItem function if provided', -> aliasKeyName = undefined aliasValue = undefined @tour = new Tour name: 'test' storage: setItem: (keyName, value) -> aliasKeyName = keyName aliasValue = value getItem: (value) -> return aliasValue @tour._setState('save', 'yes') expect(aliasKeyName).toBe 'test_save' expect(aliasValue).toBe 'yes' it '`_setState` should save state internally if storage is false', -> @tour = new Tour storage: false @tour._setState('test', 'yes') expect(@tour._state['test']).toBe 'yes' it '`_removeState` should remove state localStorage item', -> @tour = new Tour @tour._setState('test', 'yes') @tour._removeState('test') expect(window.localStorage.getItem('tour_test')).toBe null it '`_removeState` should remove state internally if storage is false', -> @tour = new Tour storage: false @tour._setState('test', 'yes') @tour._removeState('test') expect(@tour._state['test']).toBeUndefined() it '`_getState` should get state localStorage items', -> @tour = new Tour @tour._setState('test', 'yes') expect(@tour._getState('test')).toBe 'yes' window.localStorage.setItem('tour_test', null) it '`_getState` should get the internal state if storage is false', -> @tour = new Tour storage: false @tour._setState('test', 'yes') expect(@tour._getState('test')).toBe 'yes' it '`addStep` should add a step', -> @tour = new Tour step = element: $('
').appendTo('body') @tour.addStep(step) expect(@tour._options.steps).toEqual [step] it '`addSteps` should add multiple step', -> @tour = new Tour firstStep = element: $('
').appendTo('body') secondStep = element: $('
').appendTo('body') @tour.addSteps([firstStep, secondStep]) expect(@tour._options.steps).toEqual [firstStep, secondStep] it 'step should have an id', -> @tour = new Tour $element = $('
').appendTo('body') @tour.addStep({element: $element}) @tour.start() expect($element.data('bs.popover').tip().attr('id')).toBe 'step-0' # tour runs onStart when the first step shown it 'with `onStart` option should run the callback before showing the first step', -> tour_test = 0 @tour = new Tour onStart: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(tour_test).toBe 2 # tour runs onStart when the first step shown it 'with `onEnd` option should run the callback after hiding the last step', -> tour_test = 0 @tour = new Tour onEnd: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.end() expect(tour_test).toBe 2 # tour runs onEnd when the last step hidden it 'with `onShow` option should run the callback before showing the step', -> tour_test = 0 @tour = new Tour onShow: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(tour_test).toBe 2 # tour runs onShow when first step shown @tour.next() expect(tour_test).toBe 4 # tour runs onShow when next step shown it 'with `onShown` option should run the callback after showing the step', -> tour_test = 0 @tour = new Tour onShown: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(tour_test).toBe 2 # tour runs onShown after first step shown it 'with `onHide` option should run the callback before hiding the step', -> tour_test = 0 @tour = new Tour onHide: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(tour_test).toBe 2 # tour runs onHide when first step hidden @tour.hideStep(1) expect(tour_test).toBe 4 # tour runs onHide when next step hidden it 'with onHidden option should run the callback after hiding the step', -> tour_test = 0 @tour = new Tour onHidden: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(tour_test).toBe 2 # tour runs onHidden after first step hidden @tour.next() expect(tour_test).toBe 4 # tour runs onHidden after next step hidden it '`addStep` with onShow option should run the callback before showing the step', -> tour_test = 0 @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep element: $('
').appendTo('body') onShow: -> tour_test = 2 @tour.start() expect(tour_test).toBe 0 # tour does not run onShow when step not shown @tour.next() expect(tour_test).toBe 2 # tour runs onShow when step shown it '`addStep` with onHide option should run the callback before hiding the step', -> tour_test = 0 @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep element: $('
').appendTo('body') onHide: -> tour_test = 2 @tour.start() @tour.next() expect(tour_test).toBe 0 # tour does not run onHide when step not hidden @tour.hideStep(1) expect(tour_test).toBe 2 # tour runs onHide when step hidden it '`getStep` should get a step', -> @tour = new Tour step = element: $('
').appendTo('body') id: 'step-0' path: 'test' host: '' placement: 'left' title: 'Test' content: 'Just a test' next: 2 prev: -1 animation: false autoscroll: true container: 'body' backdrop: false backdropPadding: 0 backdropContainer: 'body' backdropElement: $('
').appendTo('body') redirect: true reflexElement: $('
').appendTo('body') orphan: false duration: false delay: false template: '

' onShow: (tour) -> onShown: (tour) -> onHide: (tour) -> onHidden: (tour) -> onNext: (tour) -> onPrev: (tour) -> onPause: (tour) -> onResume: (tour) -> onRedirectError: (tour) -> @tour.addStep(step) # remove properties that we don't want to check from both steps object expect(@tour.getStep(0)).toEqual step it '`start` should start a tour', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect($('.popover').length).toBe 1 it '`init` should continue a tour', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour._setState('current_step', 0) @tour.init() expect($('.popover').length).toBe 1 it '`init` should not continue a tour that ended', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour._setState('current_step', 0) @tour._setState('end', 'yes') @tour.init() expect($('.popover').length).toBe 0 # previously ended tour don't start again it '`init`(true) should force continuing a tour that ended', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour._setState('current_step', 0) @tour._setState('end', 'yes') @tour.init(true) expect($('.popover').length).toBe 1 # previously ended tour starts again if forced to it '`next` should hide current step and show next step', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(@tour.getStep(0).element.data('bs.popover')).toBeUndefined() # tour hides current step expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 # tour shows next step it '`end` should hide current step and set end state', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.end() expect(@tour.getStep(0).element.data('bs.popover')).toBeUndefined() # tour hides current step expect(@tour._getState('end')).toBe 'yes' it '`ended` should return true if tour ended and false if not', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(@tour.ended()).toBe false @tour.end() expect(@tour.ended()).toBe true it '`ended` should always return false if tour started by force', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.end() @tour.start(true) expect(@tour.ended()).toBe false it '`restart` should clear all states and start tour', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() @tour.end() @tour.restart() expect(@tour._getState('end')).toBe null expect(@tour._current).toBe 0 expect($('.popover').length).toBe 1 # tour starts it '`hideStep` should hide a step', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.hideStep(0) expect(@tour.getStep(0).element.data('bs.popover')).toBeUndefined() it '`showStep` should set a step and show it', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.showStep(1) expect(@tour._current).toBe 1 expect($('.popover').length).toBe 1 # tour shows one step expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 # tour shows correct step it '`showStep` should not show anything when the step does not exist', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.showStep(2) expect($('.popover').length).toBe 0 it '`showStep` should execute template if it is a function', -> @tour = new Tour @tour.addStep element: $('
').appendTo('body') template: -> '
' @tour.showStep(0) expect($('.popover').length).toBe 1 it '`getStep` should add disabled classes to the first and last popover buttons', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.showStep(0) expect($('.popover [data-role="prev"]').hasClass('disabled')).toBe true @tour.showStep(1) expect($('.popover [data-role="next"]').hasClass('disabled')).toBe true it '`setCurrentStep` should set the current step', -> @tour = new Tour @tour.setCurrentStep(4) expect(@tour._current).toBe 4 # tour sets current step if passed a value @tour._setState('current_step', 2) @tour.setCurrentStep() expect(@tour._current).toBe 2 # tour reads current step state if not passed a value it '`goTo` should show the specified step', -> @tour = new Tour @tour.addStep({element: $('
').appendTo('body')}) @tour.addStep({element: $('
').appendTo('body')}) @tour.goTo(1) expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 it '`next` should show the next step', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 it '`prev` should show the previous step', -> @tour = new Tour @tour.addStep({element: $('
').appendTo('body')}) @tour.addStep({element: $('
').appendTo('body')}) @tour.goTo(1) @tour.prev() expect(@tour.getStep(0).element.data('bs.popover').tip().filter(':visible').length).toBe 1 it '`showStep` should show multiple step on the same element', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() # tour show the first step expect(@tour.getStep(0).element.data('bs.popover').tip().filter(':visible').length).toBe 1 @tour.next() # tour show the second step on the same element expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 it 'should get url properties correctly', -> @tour = new Tour expect(@tour._getProtocol('http://example.com')).toBe 'http' expect(@tour._getProtocol('https://example.com')).toBe 'https' expect(@tour._getProtocol('www.example.com')).toBe 'http' expect(@tour._getProtocol('example.com')).toBe 'http' expect(@tour._getHost('http://example.com')).toBe 'example.com' expect(@tour._getHost('www.example.com')).toBe 'www.example.com' expect(@tour._getHost('example.com/path')).toBe 'example.com' expect(@tour._getPath('/somepath?foo=bar')).toBe '/somepath' expect(@tour._getPath('/somepath#foo=bar')).toBe '/somepath' expect(@tour._getPath('/somepath?foo=bar#hash')).toBe '/somepath' expect(@tour._getQuery('/somepath?one=bar')).toEqual {one: 'bar'} expect(@tour._getQuery('/somepath?one=bar&two=foo')).toEqual {one: 'bar', two: 'foo'} expect(@tour._getHash('/somepath#one=bar&two=foo')).toEqual {one: 'bar', two: 'foo'} expect(@tour._getHash('/somepath#one=bar&two=foo')).toEqual {one: 'bar', two: 'foo'} it 'should evaluate `path` correctly', -> @tour = new Tour # redirect if path doesn't match current path expect( @tour._isRedirect( '', '/anotherpath', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # don't redirect if no path expect( @tour._isRedirect( '', undefined, { origin: '' href: '' pathname: '/' search: '' hash: '' } ) ).toBe false # don't redirect if path empty expect( @tour._isRedirect( '', '', { origin: '' href: '' pathname: '/' search: '' hash: '' } ) ).toBe false # don't redirect if path matches current path expect( @tour._isRedirect( '', '/somepath', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe false # don't redirect if path with slash matches current path expect( @tour._isRedirect( '', '/somepath/', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe false # don't redirect if path matches current path with slash expect( @tour._isRedirect( '', '/somepath', { origin: '' href: '' pathname: '/somepath/' search: '' hash: '' } ) ).toBe false # redirect if path with query params doesn't matche current path expect( @tour._isRedirect( '', '/somepath?search=true', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path with slash and query params doesn't matche current path expect( @tour._isRedirect( '', '/somepath/?search=true', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path with more than one query param doesn't matche current path expect( @tour._isRedirect( '', '/somepath?search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path with and query params doesn't matche current path expect( @tour._isRedirect( '', '/somepath?search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '?search=true' hash: '' } ) ).toBe true # redirect if path query params number doesn't matche current path expect( @tour._isRedirect( '', '/somepath?search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '?foo=bar' hash: '' } ) ).toBe true # don't redirect if path with query params matches current path expect( @tour._isRedirect( '', '/somepath?search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '?foo=bar&search=true' hash: '' } ) ).toBe false # don't redirect if path with query params matches current path expect( @tour._isRedirect( '', '/somepath?search=true&foo=bar' { origin: '' href: '' pathname: '/somepath' search: '?search=true&foo=bar' hash:'' } ) ).toBe false # redirect if path with one hash param doesn't matche current path expect( @tour._isRedirect( '', '/somepath#search=true', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path with slash and one hash param doesn't matche current path expect( @tour._isRedirect( '', '/somepath/#search=true', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path with more than one hash params doesn't matche current path expect( @tour._isRedirect( '', '/somepath#search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '' hash: '' } ) ).toBe true # redirect if path hash params number doesn't matche current path expect( @tour._isRedirect( '', '/somepath#search=true&foo=bar', { origin: '' href: '' pathname: '/somepath' search: '' hash: '#search=true' } ) ).toBe true # redirect if path hash params number doesn't matche current path expect( @tour._isRedirect( '', '/somepath#search=true&foo=bar', { origin: '', href: '', pathname: '/somepath', search: '', hash: '#foo=bar' } ) ).toBe true # don't redirect if path with hash params matches current path expect( @tour._isRedirect( '', '/somepath#search=true&foo=bar', { origin: '', href: '', pathname: '/somepath', search: '', hash: '#foo=bar&search=true' } ) ).toBe false # don't redirect if path with hash params matches current path expect( @tour._isRedirect( '', '/somepath#search=true&foo=bar', { origin: '', href: '', pathname: '/somepath', search: '', hash: '#search=true&foo=bar' } ) ).toBe false # don't redirect if current path matches path regex expect( @tour._isRedirect( '', /some.*/, { origin: '', href: '', pathname: '/somepath', search: '', hash: '' } ) ).toBe false it '`_getState` should return null after `_removeState` with null value', -> @tour = new Tour @tour._setState('test', 'test') @tour._removeState('test') expect(@tour._getState('test')).toBe null it '`_removeState` should call `afterRemoveState` callback', -> sentinel = false @tour = new Tour afterRemoveState: -> sentinel = true @tour._removeState('current_step') expect(sentinel).toBe true it 'should not move to the next state until the onShow promise is resolved', -> @tour = new Tour deferred = $.Deferred() @tour.addStep(element: $('
').appendTo('body')) @tour.addStep element: $('
').appendTo('body') onShow: -> return deferred @tour.start() @tour.next() expect(@tour.getStep(0).element.data('bs.popover')).toBeUndefined deferred.resolve() expect(@tour.getStep(1).element.data('bs.popover').tip().filter(':visible').length).toBe 1 it 'should not hide popover until the onHide promise is resolved', -> deferred = $.Deferred() @tour = new Tour @tour.addStep element: $('
').appendTo('body') onHide: -> return deferred @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(@tour._current).toBe 0 # tour shows old state until resolving of onHide promise deferred.resolve() expect(@tour._current).toBe 1 # tour shows new state after resolving onShow promise it 'should not start until the onStart promise is resolved', -> deferred = $.Deferred() @tour = new Tour onStart: -> deferred @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect($('.popover').length).toBe 0 deferred.resolve() expect($('.popover').length).toBe 1 it 'should add `tour-step-element-reflex` class to the step element if reflex is active', -> @tour = new Tour $element = $('
').appendTo('body') @tour.addStep element: $element reflex: true @tour.addStep(element: $('
').appendTo('body')) expect($element.hasClass('tour-step-element-reflex')).toBe false @tour.start() expect($element.hasClass('tour-step-element-reflex')).toBe true @tour.next() expect($element.hasClass('tour-step-element-reflex')).toBe false it 'should add `tour-step-element-reflex` class to reflexElement if reflex is defined', -> @tour = new Tour $element = $('
').appendTo('body') $definedElement = $('
').appendTo('body') @tour.addStep element: $element reflex: true reflexElement: '#ref' @tour.addStep(element: $('
').appendTo('body')) expect($element.hasClass('tour-step-element-reflex')).toBe false expect($definedElement.hasClass('tour-step-element-reflex')).toBe false @tour.start() expect($element.hasClass('tour-step-element-reflex')).toBe false expect($definedElement.hasClass('tour-step-element-reflex')).toBe true @tour.next() expect($element.hasClass('tour-step-element-reflex')).toBe false expect($definedElement.hasClass('tour-step-element-reflex')).toBe false it 'should add `tour-{tourName}-reflex` class to the step popover if reflex is active', -> @tour = new Tour $element = $('
').appendTo('body') @tour.addStep element: $element reflex: true @tour.addStep(element: $('
').appendTo('body')) expect($('.popover').hasClass("tour-#{@tour._options.name}-reflex")).toBe false @tour.start() expect($('.popover').hasClass("tour-#{@tour._options.name}-reflex")).toBe true @tour.next() expect($('.popover').hasClass("tour-#{@tour._options.name}-reflex")).toBe false it '`showStep` redirects to the anchor when the path is an anchor', -> @tour = new Tour @tour.addStep element: $('
').appendTo('body') path: '#mytest' @tour.showStep(0) expect(document.location.hash).toBe '#mytest' # Tour step has moved to the anchor document.location.hash = '' it '`showStep` show the step when the path is an anchor', -> current_path = location.pathname @tour = new Tour @tour.addStep element: $('
').appendTo('body') path: "#{current_path}#mytest" @tour.showStep(0) expect(@tour.getStep(0).element.data('bs.popover').tip().filter(':visible').length).toBe 1 # tour shows correct step document.location.hash = '' it '`backdrop` parameter should show backdrop with step', -> @tour = new Tour @tour.addStep element: $('
').appendTo('body') backdrop: false @tour.addStep element: $('
').appendTo('body') backdrop: true @tour.start() expect($('.tour-backdrop').length).toBe 0 # disable backdrop expect($('.tour-step-backdrop').length).toBe 0 # disable backdrop @tour.next() expect($('.tour-backdrop').length).toBe 4 # enable backdrop expect($('.tour-step-backdrop').length).toBe 1 # enable backdrop @tour.end() expect($('.tour-backdrop').length).toBe 0 # disable backdrop expect($('.tour-step-backdrop').length).toBe 0 # disable backdrop it 'step with backdrop and invalid selector should not attempt to create an overlay element', -> @tour = new Tour @tour._showOverlayElement backdropElement: '#nonExistingElement' expect($('.tour-backdrop').length).toBe 0 it 'should render the padding on the backdrop element', -> @tour = new Tour backdrop: true $firstElement = $('
', width: 10, height: 10).appendTo('body') $secondElement = $('
').css( position: 'absolute' top: 100 left: 300 width: 10 height: 10 ).appendTo('body') firstPadding = 20 secondPadding = top: 40 right: 30 bottom: 20 left: 10 @tour.addStep backdrop: true backdropPadding: firstPadding element: $firstElement @tour.addStep backdrop: true backdropPadding: secondPadding element: $secondElement @tour.start() expect(@tour.backdrops.top.offset().top + @tour.backdrops.top.height()) .toBe 0 expect(@tour.backdrops.left.offset().top) .toBe $firstElement.offset().top - firstPadding expect(@tour.backdrops.left.offset().top + @tour.backdrops.left.height()) .toBe $firstElement.offset().top + $firstElement.height() + firstPadding expect(@tour.backdrops.left.offset().left + @tour.backdrops.left.width()) .toBe 0 expect(@tour.backdrops.bottom.offset().top) .toBe $firstElement.offset().top + $firstElement.height() + firstPadding expect(@tour.backdrops.right.offset().top) .toBe $firstElement.offset().top - firstPadding expect(@tour.backdrops.right.offset().top + @tour.backdrops.right.height()) .toBe $firstElement.offset().top + $firstElement.height() + firstPadding expect(@tour.backdrops.right.offset().left) .toBe $firstElement.offset().left + $firstElement.width() + firstPadding @tour.next() expect(@tour.backdrops.top.offset().top + @tour.backdrops.top.height()) .toBe $secondElement.offset().top - secondPadding.top expect(@tour.backdrops.left.offset().top) .toBe $secondElement.offset().top - secondPadding.top expect(@tour.backdrops.left.offset().top + @tour.backdrops.left.height()) .toBe $secondElement.offset().top + $secondElement.height() + secondPadding.bottom expect(@tour.backdrops.left.offset().left + @tour.backdrops.left.width()) .toBe $secondElement.offset().left - secondPadding.left expect(@tour.backdrops.bottom.offset().top) .toBe $secondElement.offset().top + $secondElement.height() + secondPadding.bottom expect(@tour.backdrops.right.offset().top) .toBe $secondElement.offset().top - secondPadding.top expect(@tour.backdrops.right.offset().top + @tour.backdrops.right.height()) .toBe $secondElement.offset().top + $secondElement.height() + secondPadding.bottom expect(@tour.backdrops.right.offset().left) .toBe $secondElement.offset().left + $secondElement.width() + secondPadding.right it '`basePath` should prepend the path to the steps', -> @tour = new Tour basePath: 'test/' @tour.addStep element: $('
').appendTo('body') path: 'test.html' # Tour adds basePath to step path expect( @tour._isRedirect( @tour.getStep(0).host, @tour._options.basePath + @tour.getStep(0).path, href: '', pathname: 'test/test.html', search: '', hash: '' ) ).toBe false it 'should evaluate the host correctly', -> @tour = new Tour expect( @tour._isRedirect( 'http://sub.exemple.com', '/test.html', { origin: 'http://exemple.com' href: 'http://exemple.com/test.html' pathname: '/test.html' search: '' hash: '' } ) ).toBe true expect( @tour._isRedirect( 'http://sub.exemple.com', '/test.html', { origin: 'http://sub.exemple.com' href: 'http://sub.exemple.com/test.html' pathname: '/test.html' search: '' hash: '' } ) ).toBe false expect( @tour._isRedirect( /http:\/\/.*\.exemple\.com/, '/test.html', { origin: 'http://sub.exemple.com' href: 'http://sub.exemple.com/test.html' pathname: '/test.html' search: '' hash: '' } ) ).toBe false expect( @tour._isRedirect( /http:\/\/exemple\.com/, '/test.html', { origin: 'http://sub.exemple.com' href: 'http://sub.exemple.com/test.html' pathname: '/test.html' search: '' hash: '' } ) ).toBe true it 'with `onNext` option should run the callback before showing the next step', -> tour_test = 0 @tour = new Tour onNext: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect(tour_test).toBe 2 it '`showStep` should not show step if tour ended', -> @tour = new Tour onNext: (t) -> t.end() @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect($('.popover').length).toBe 0 it '`addStep` with onNext option should run the callback before showing the next step', -> tour_test = 0 @tour = new Tour @tour.addStep element: $('
').appendTo('body') onNext: -> tour_test = 2 @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(tour_test).toBe 0 # tour does not run onNext when next step is not called @tour.next() expect(tour_test).toBe 2 # tour runs onNext when next step is called it 'with `onPrev` option should run the callback before showing the prev step', -> tour_test = 0 @tour = new Tour onPrev: -> tour_test += 2 @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() @tour.prev() expect(tour_test).toBe 2 # tour runs onPrev when prev step is called it '`addStep` with `onPrev` option should run the callback before showing the prev step', -> tour_test = 0 @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.addStep element: $('
').appendTo('body') onPrev: -> tour_test = 2 @tour.start() expect(tour_test).toBe 0 # tour does not run onPrev when prev step is not called @tour.next() @tour.prev() expect(tour_test).toBe 2 # tour runs onPrev when prev step is called it 'with `onRedirectError` option should run the callback when redirection failed', -> tour_test = 0 @tour = new Tour @tour.addStep element: $('
').appendTo('body') path: '/path' onRedirectError: -> tour_test = 2 @tour._setState 'redirect_to', 0 # tour has previously redirected to step '0' @tour.start() expect(tour_test).toBe 2 # tour runs onRedirectError when redirection failed it 'should render custom navigation template', -> @tour = new Tour template: '

' @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.next() expect($('.popover .popover-navigation a').length).toBe 3 it 'should have `data-role` attribute for navigation template', -> @tour = new Tour template = $(@tour._options.template) expect(template.find('*[data-role=next]').size()).toBe 1 expect(template.find('*[data-role=prev]').size()).toBe 1 expect(template.find('*[data-role=end]').size()).toBe 1 it 'should unbind click events when hiding step (in reflex mode)', -> $element = $('
').appendTo('body') @tour = new Tour @tour.addStep element: $element reflex: true @tour.addStep(element: $('
').appendTo('body')) expect($._data($element[0], 'events')).not.toBeDefined() @tour.start() expect($._data($element[0], 'events').click.length).toBeGreaterThan 0 expect($._data($element[0], 'events').click[0].namespace).toBe "tour-#{@tour._options.name}" $.each [0..10], => @tour.next() expect($._data($element[0], 'events')).not.toBeDefined() @tour.prev() expect($._data($element[0], 'events').click.length).toBeGreaterThan 0 expect($._data($element[0], 'events').click[0].namespace).toBe "tour-#{@tour._options.name}" it 'should add `tour-{tourName}` and `tour-{tourName}-{stepId}` classses to the popover', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) @tour.showStep(0) expect($('.popover').hasClass("tour-#{@tour._options.name}")).toBe true expect($('.popover').hasClass("tour-#{@tour._options.name}-0")).toBe true it 'should add `tour-{tourName}-element` and `tour-{tourName}-{stepId}-element` classses to the popover element', -> @tour = new Tour $element = $ '
' @tour.addStep element: $element.appendTo 'body' @tour.showStep 0 expect($element.hasClass "tour-#{@tour._options.name}-element").toBe true expect($element.hasClass "tour-#{@tour._options.name}-0-element").toBe true # orphan it 'should show orphan steps', -> @tour = new Tour @tour.addStep orphan: true @tour.showStep(0) expect($('.popover').length).toBe 1 $('.popover').remove() it 'should add `orphan` class to the popover', -> @tour = new Tour @tour.addStep orphan: true @tour.showStep(0) expect($('.popover').hasClass('orphan')).toBe true $('.popover').remove() it 'should use orphan template to show orphan steps', -> @tour = new Tour step = orphan: '
' @tour.addStep step template = @tour._template(step, 0) expect($(template).hasClass('orphan-custom-template')).toBe true it 'should not use orphan template to show steps', -> @tour = new Tour step = orphan: '
' element: $('
').appendTo('body') @tour.addStep step template = @tour._template(step, 0) expect($(template).hasClass('orphan-custom-template')).toBe false it 'should execute orphan template if it is a function', -> @tour = new Tour step = orphan: -> '
' @tour.addStep step template = @tour._template(step, 0) expect($(template).hasClass('orphan-custom-template')).toBe true it 'handles quota_exceeded exceptions', -> @tour = new Tour @tour.addStep(element: $('
').appendTo('body')) spyOn(@tour._options.storage, 'setItem').and.callFake -> throw new Error 'QUOTA_EXCEEDED_ERR', 'QUOTA_EXCEEDED_ERR: DOM Exception 22' spyOn(@tour, '_setState') @tour._setState('test', '1') expect(=> @tour._setState).not.toThrow() it 'should not try to scroll to non-existing element', -> @tour = new Tour orphan: true @tour.addStep element: '#nonExistingElement' @tour.showStep 0 expect($('.popover').length).toBe 1 # duration it 'should start the timer', -> @tour = new Tour duration: 5000 @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(@tour._timer).toBeDefined() expect(@tour._duration).toBeDefined() window.clearTimeout(@tour._timer) it 'should pause the timer on pause', -> @tour = new Tour duration: 5000 @tour.addStep(element: $('
').appendTo('body')) @tour.start() window.setTimeout( => @tour.pause() expect(@tour._timer).toBe null expect(@tour._duration).toBeGreaterThan(0).toBeLessThan(5000) , 1000) it 'should stop the timer on hideStep', -> @tour = new Tour duration: 5000 @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.hideStep(0) expect(@tour._timer).toBe null expect(@tour._duration).toBe null it 'should stop the timer on end', -> @tour = new Tour duration: 5000 @tour.addStep(element: $('
').appendTo('body')) @tour.start() @tour.end() expect(@tour._timer).toBe null expect(@tour._duration).toBe null it 'should call window.setTimeout when delay is defined', -> counter = 0 initialTimeout = window.setTimeout window.setTimeout = (callback, duration) -> counter++ callback() @tour = new Tour delay: { show: 300 hide: 400 } @tour.addStep(element: $('
').appendTo('body')) @tour.addStep(element: $('
').appendTo('body')) @tour.start() expect(counter).toBe 2 @tour.next() expect(counter).toBe 4 @tour.end() expect(counter).toBe 5 window.setTimeout = initialTimeout ### TODO: fix $.support.transition conflict between jquery and bootstrap it 'should not display inactive popover upon rapid navigation', -> # Flag that gives signal to the async test that it should evaluate. $.support.transition = true $.fx.off = false isStepShown = false # Cleanup all leftover popovers from previous tests. $('.popover').remove() # Setup two-step tour. The problem should occur when switching from first # step to the second while the transition effect of the first one is still # active. @tour = new Tour @tour.addStep element: $('
').appendTo('body') @tour.addStep element: $('
').appendTo('body') onShown: -> isStepShown = true # Request the first step and immediately the second one. This way the first # step won't be displayed when the second step is requested, so the request # for second step can not cleanup existing popovers yet. runs -> @tour.goTo(0) @tour.goTo(1) waitsFor -> isStepShown , 'The second step should be displayed.', 1000 runs -> expect($('.popover').length).toBe 1 ### bootstrap-tour-0.12.0/src/docs/000077500000000000000000000000001316367154600163315ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/CNAME000066400000000000000000000000221316367154600170710ustar00rootroot00000000000000bootstraptour.com bootstrap-tour-0.12.0/src/docs/_includes/000077500000000000000000000000001316367154600202765ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/_includes/footer.html000066400000000000000000000022521316367154600224630ustar00rootroot00000000000000 bootstrap-tour-0.12.0/src/docs/_includes/header.html000066400000000000000000000030611316367154600224140ustar00rootroot00000000000000 {% if page.title == "Bootstrap Tour" %} {{ page.title }} {% else %} {{ page.title }} · Bootstrap Tour {% endif %} bootstrap-tour-0.12.0/src/docs/_includes/nav.html000066400000000000000000000017051316367154600217530ustar00rootroot00000000000000 bootstrap-tour-0.12.0/src/docs/_layouts/000077500000000000000000000000001316367154600201705ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/_layouts/default.html000066400000000000000000000005561316367154600225100ustar00rootroot00000000000000 {% include header.html %} Fork me on GitHub {% include nav.html %} {{ content }} {% include footer.html %} bootstrap-tour-0.12.0/src/docs/api.html000066400000000000000000000734371316367154600200060ustar00rootroot00000000000000--- layout: default title: API Documentation slug: api ---

Global options

{% highlight javascript %} var tour = new Tour({ name: "tour", steps: [], container: "body", smartPlacement: true, keyboard: true, storage: window.localStorage, debug: false, backdrop: false, backdropContainer: 'body', backdropPadding: 0, redirect: true, orphan: false, duration: false, delay: false, basePath: "", template: "

|
", afterGetState: function (key, value) {}, afterSetState: function (key, value) {}, afterRemoveState: function (key, value) {}, onStart: function (tour) {}, onEnd: function (tour) {}, onShow: function (tour) {}, onShown: function (tour) {}, onHide: function (tour) {}, onHidden: function (tour) {}, onNext: function (tour) {}, onPrev: function (tour) {}, onPause: function (tour, duration) {}, onResume: function (tour, duration) {}, onRedirectError: function (tour) {} }); {% endhighlight %}
Name Type Description Default
name String This option is used to build the name of the storage item where the tour state is stored. The name should contain only alphanumerics, underscores and hyphens. You can initialize several tours with different names in the same page and application. 'tour'
steps Array A list of object representing the steps to be included in the tour. Jump to Step options for the single step API. []
container String Appends the step popover to a specific element.
See Usage section of Popover.
'body'
smartPlacement Boolean It dynamically reorients the popover by default by specifying auto for the placement, every time.
true
autoscroll Boolean Autoscrolls the window when the step popover is out of view. true
keyboard Boolean This option set the left and right arrow navigation. true
storage Object The storage system you want to use. Could be the objects window.localStorage, window.sessionStorage or your own object.
You can set this option as false to disable storage persistence (the tour starts from beginning every time the page is loaded).
Read more about DOM Storage interfaces.
window.localStorage
debug Boolean Set this option to true to have some useful informations printed in the console. false
backdrop Boolean Show a dark backdrop behind the popover and its element, highlighting the current step. false
backdropContainer NEW String (jQuery selector) HTML element on which the backdrop should be shown. 'body'
backdropPadding NEW Number|Object Add padding to the backdrop element that highlights the step element.
It can be a number or a object containing optional top, right, bottom and left numbers.
0
redirect Boolean|Function Set a custom function to execute as redirect function. The default redirect relies on the traditional document.location.href true
orphan Boolean|String|function Allow to show the step regardless whether its element is not set, is not present in the page or is hidden. The step is fixed positioned in the middle of the page. false
duration NEW Boolean|Number Set a expiration time for the steps. When the current step expires, the next step is automatically shown. See it as a sort of guided, automatized tour functionality. The value is specified in milliseconds false
delay NEW Boolean|Number Specifies a delay for the showing and hiding the tour steps. It can be:
  • a falsy - there is no delay
  • a number - used as a delay for both showing and hiding. In milliseconds
  • a object containing optional show and hide numbers - defines the delays for showing and hiding respectively
0
basePath String Specify a default base path prepended to the path option of every single step. Very useful if you need to reuse the same tour on different environments or sub-projects. ''
template String|Function String or function that returns a string of the HTML template for the popovers. If you pass a Function, two parameters are available: i is the position of step in the tour and step is the an object that contains all the other step options.
From version 0.5, the navigation template is included inside the template so you can easily rewrite it. However, Bootstrap Tour maps the previous, next and end logics to the elements which have the related data-role attribute. Therefore, you can also have multiple elements with the same data-role attribute.
{% highlight javascript %} "

|
" {% endhighlight %}
afterGetState, afterSetState, afterRemoveState Function You may want to do something right after Bootstrap Tour read, write or remove the state. Just pass functions to these.
Your functions can have two parameters:
  • key Contains the name of the state being saved. It can be current_step (for the state where the latest step the visitor viewed is saved) or end (for the state which is saved when the user complete the tour). Note that Bootstrap Tour prepends the key with tour_ when saving the state.
  • value The value of the state been saved. Can be the index of the current step if the key is current_step, or yes if the key is end.

A simple example if to send a post request to your server each time there is a change:

{% highlight javascript %} var tour = new Tour({ afterSetState: function (key, value) { $.post("/some/path", value); } }); {% endhighlight %}
function (key, value) { }
onStart Function Function to execute when the tour starts. function (tour) { }
onEnd Function Function to execute when the tour ends. function (tour) { }
onShow Function Function to execute right before each step is shown. function (tour) { }
onShown Function Function to execute right after each step is shown. function (tour) { }
onHide Function Function to execute right before each step is hidden. function (tour) { }
onHidden Function Function to execute right after each step is hidden. function (tour) { }
onNext Function Function to execute when next step is called. function (tour) { }
onPrev Function Function to execute when prev step is called. function (tour) { }
onPause NEW Function Function to execute when pause is called. The second argument refers to the remaining duration. function (tour, duration) { }
onResume NEW Function Function to execute when resume is called. The second argument refers to the remaining duration. function (tour, duration) { }
onRedirectError NEW Function Function to execute when there is a redirection error. This happens when bootstrap tour cannot redirect to the path of the step function (tour) { }

Step Options

{% highlight javascript %} tour.addStep({ path: "", host: "", element: "", placement: "right", smartPlacement: true, title: "", content: "", next: 0, prev: 0, animation: true, container: "body", backdrop: false, backdropContainer: 'body', backdropPadding: false, redirect: true, reflex: false, orphan: false, template: "", onShow: function (tour) {}, onShown: function (tour) {}, onHide: function (tour) {}, onHidden: function (tour) {}, onNext: function (tour) {}, onPrev: function (tour) {}, onPause: function (tour) {}, onResume: function (tour) {}, onRedirectError: function (tour) {} }); {% endhighlight %}
Name Type Description Default
path String or RegExp Path to the page on which the step should be shown. This allows you to build tours that span several pages! ''
host NEW String or RegExp Host of the page on which the step should be shown. This allows you to build tours for several sub-domains ''
element String (jQuery selector) HTML element on which the step popover should be shown.
If orphan is false, this option is required.
''
placement String|Function How to position the popover. Possible choices: 'top', 'bottom', 'left', 'right', 'auto'. When "auto" is specified, it will dynamically reorient the popover. For example, if placement is "auto left", the popover will display to the left when possible, otherwise it will display right. 'right'
smartPlacement Boolean It dynamically reorients the popover by default by specifying auto for the placement. true
title String|Function Step title ''
content String|Function Step content ''
next Integer Index of the step to show after this one, starting from 0 for the first step of the tour. -1 to not show the link to next step. By default, the next step (in the order you added them) will be shown.
This option should be used in conjunction with prev.
0
prev Integer Index of the step to show before this one, starting from 0 for the first step of the tour. -1 to not show the link to previous step. By default, the previous step (in the order you added them) will be shown.
This option should be used in conjunction with next.
0
animation Boolean Apply a css fade transition to the tooltip. true
container String (jQuery selector) Attachment of popover. Pass an element to append the popover to. By default the popover is appended after the 'element' above. This option is particularly helpful for Internet Explorer. 'body'
backdrop Boolean Show a dark backdrop behind the popover and its element, highlighting the current step. false
backdropContainer NEW String (jQuery selector) HTML element on which the backdrop should be shown. 'body'
backdropPadding NEW Boolean|Object Add padding to the backdrop element that highlights the step element.
It can be a number or a object containing optional top, right, bottom and left numbers.
0
redirect Boolean|Function Set a custom function to execute as redirect function. The default redirect relies on the traditional document.location.href true
reflex UPDATED Boolean|String Enable the reflex mode: attach an handler on click on the step element to continue the tour.
In order to bind the handler to a custom event, you can pass a string with its name.
Also, the class tour-step-element-reflex is added to the element, as hook for your custom style (e.g: cursor: pointer).
false
orphan Boolean|String|Function Allow to show the step regardless whether its element is not set, is not present in the page or is hidden. The step is fixed positioned in the middle of the page.
You can use a string or function that returns a string of the HTML template for the orphan popovers
false
duration NEW Boolean|String Set a expiration time for the steps. When the step expires, the next step is automatically shown. See it as a sort of guided, automatized tour functionality. The value is specified in milliseconds false
template String|Function String or function that returns a string of the HTML template for the popovers. If you pass a Function, two parameters are available: i is the position of step in the tour and step is the object that contains all the other step options.
From version 0.5, the navigation template is included inside the template so you can easily rewrite it. However, Bootstrap Tour maps the previous, next and end logics to the elements which have the related data-role attribute. Therefore, you can also have multiple elements with the same data-role attribute.
{% highlight javascript %} "

|
" {% endhighlight %}
onShow Function Function to execute right before the step is shown. It overrides the global onShow option. function (tour) { }
onShown Function Function to execute right after the step is shown. It overrides the global onShown option. function (tour) { }
onHide Function Function to execute right before the step is hidden. It overrides the global onHide option. function (tour) { }
onHidden Function Function to execute right after the step is hidden. It overrides the global onHidden option. function (tour) { }
onNext Function Function to execute when next step is called. It overrides the global onNext option. function (tour) { }
onPrev Function Function to execute when prev step is called. It overrides the global onPrev option. function (tour) { }
onPause NEW Function Function to execute when pause is called. The second argument refers to the remaining duration. It overrides the global the onPause option function (tour, duration) { }
onResume NEW Function Function to execute when resume is called. The second argument refers to the remaining duration. It overrides the global onResume option function (tour, duration) { }
onRedirectError NEW Function Function to execute when there is a redirection error. This happens when bootstrap tour cannot redirect to the path of the step. It overrides the global onRedirectError option function (tour) { }
Name Description
addSteps([]) Add multiple steps to the tour. Pass an array of objects.
addStep({}) Add single step to the tour. Pass an object.
init() Initialize the tour. You must do it before calling start.
start(true) Start the tour. Pass true to force the start.
restart() Restart the tour after it ended.
end() End the tour prematurely.
next() Skip to the next step.
prev() Go back to the previous step.
goTo(i) UPDATED Skip to a specific step. Pass i as the index of the step in the tour (0-based).
From version 0.7.0, the method has been renamed since some Javascript compilers are confused by the property name goto, which is a reserved word) .
pause() Pause the duration timer. It works only if tour or current step has duration.
resume() Resume the duration timer. It works only if tour or current step has duration.
ended() Verify if the tour ended. Returns boolean.
getStep(i) Get the step object. Pass i as the index of the step in the tour (0-based).
getCurrentStep() Get the index of the current step.
setCurrentStep(i) Override the current step. Pass i as the index of the step in the tour (0-based).
redraw() Triggers a redraw on the overlay element. Useful for Dynamically sized tour targets.

Bootstrap Tour can be used to create tours that span multiple pages. If you have URLs for each page that have unique paths, and the dependencies are loaded on each page, you can easily create a tour like so:

{% highlight javascript %} var tour = new Tour({ steps: [ { element: "#my-element", title: "Title of my step", content: "Content of my step" }, { element: "#my-other-element", title: "Title of my step", content: "Content of my step", path: "/url/to/go/to/" } ] }); {% endhighlight %}

It's that simple.

If you do not know the URL you wish to go to because it contains a different value per user or per instance, you can use a regular expression as the path attribute and set the redirect attribute to a function that performs the redirect.

For example:

{% highlight javascript %} var tour = new Tour({ steps: [ { element: "#my-element", title: "Title of my step", content: "Content of my step", redirect: function(){ document.location.href = '/url/' + userId; }; }, { element: "#my-other-element", title: "Title of my step", content: "Content of my step", path: RegExp("\/url\/[^/]+", "i") } ] }); {% endhighlight %}

Finally, if you are only using GET parameters to define different pages, and wish to redirect using those parameters, you may run into the problem that Bootstrap Tour will consider the path of the two steps to be identical. For example, you cannot use the path parameter to go from your homepage at / to a search results page at /?q=foo, because from Bootstrap Tour's perspective, those are the same location (/).

To work around this limitation, you can set the onNext attribute a function that returns a promise.

For example:

{% highlight javascript %} var tour = new Tour({ steps: [ { element: "#my-element", title: "Title of my step", content: "Content of my step", onNext: function(){ document.location.href = '/?q=foo'; return (new jQuery.Deferred()).promise(); }; }, { element: "#my-other-element", title: "Title of my step", content: "Content of my step", } ] }); {% endhighlight %}

Doing this will prevent the next step from popping up while the redirect is being completed in the onNext function.

bootstrap-tour-0.12.0/src/docs/assets/000077500000000000000000000000001316367154600176335ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/css/000077500000000000000000000000001316367154600204235ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/css/bootstrap-tour.css000066400000000000000000000035331316367154600241450ustar00rootroot00000000000000/* ======================================================================== * bootstrap-tour - v0.11.0 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2015 Ulrich Sossou * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ .tour-backdrop { position: absolute; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .popover[class*="tour-"] { z-index: 1102; } .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; overflow: hidden; } .popover[class*="tour-"] .popover-navigation *[data-role="end"] { float: right; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"], .popover[class*="tour-"] .popover-navigation *[data-role="next"], .popover[class*="tour-"] .popover-navigation *[data-role="end"] { cursor: pointer; } .popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled, .popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { cursor: default; } .popover[class*="tour-"].orphan { position: fixed; margin-top: 0; } .popover[class*="tour-"].orphan .arrow { display: none; } bootstrap-tour-0.12.0/src/docs/assets/css/bootstrap-tour.docs.css000066400000000000000000000022101316367154600250630ustar00rootroot00000000000000body { padding-bottom: 50px; } #github { display: block; position: absolute; width: 150px; height: 150px; right: 0; z-index: 1050; } .navbar { margin-bottom: 0; } .masthead { position: relative; padding: 30px 15px; color: #fff; text-align: center; text-shadow: 0 1px 0 rgba(0,0,0,.1); background-color: #3276b1; background-image: -webkit-linear-gradient(top, #285e8e 0%, #3276b1 100%); background-image: linear-gradient(to bottom, #285e8e 0%, #3276b1 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#285e8e', endColorstr='#3276b1', GradientType=0); } .masthead small { font-size: 80%; color: #ccc; } /* * Social buttons * * Twitter and GitHub social action buttons (for homepage and footer). */ .social { display: inline-block; margin-top: 40px; margin-bottom: 0; padding-left: 0; list-style: none; } .social li { display: inline-block; line-height: 1; padding: 5px 8px; } .social .tweet-btn a { width: 98px !important; } /* Style the GitHub buttons via CSS instead of inline attributes */ .github-btn { border: 0; overflow: hidden; } bootstrap-tour-0.12.0/src/docs/assets/fonts/000077500000000000000000000000001316367154600207645ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/fonts/glyphicons-halflings-regular.eot000066400000000000000000000333771316367154600272750ustar00rootroot00000000000000ÿ6¡5LP‰˜(GLYPHICONS HalflingsRegularxVersion 1.001;PS 001.001;hotconv 1.0.70;makeotf.lib2.5.583298GLYPHICONS Halflings RegularBSGPwŒ5s5y-ÆÍéŠÍÒÕŸ(tÛŠKûÁDâÂ'P îMî ‡BÃj¶ôübeJ2ccÅÇLF1+†WEeuJôÕe•~m•©%‰çÇW¾Ù*ÖIzI€ásLœ„ x æö4ÛxÑ—PSŸç-Uu×T í²˜E ÕFª“œ?ͬ Ô¯Ò4Û Ê¨gå•q ÙeÒ$ö{í-+1u«„±©{šá¿Sóð"!EÜB&/ ˜†äL¼³öEØÀKîÒ7fí¦Ò®ý|ö'ð=þÿŽ›j¼Ôp¡ÿEºA_BŒ@Üþ*·?~Œêë ã9Â&„Iè„Ùvèð«@eý—rŽâ’>Mo<†LXéáÌ%Ö×üa>Ë’ ‘¦jp?Pú;ÿ_ý஫iÆ¶Ç <î³}LbXÉUe1ÀL €!Ñ;„ö® ¦¨ D å^%‡ Š PP‚”A‚@‘üµ5ã©óˆKa€lÓ´ÄŸ§a!œ£å‡åò|Zhެ®FFIò0”EüF"Ä‘ „”œ¦š'MÕ¸¹9°@…)Œ 1A£¤ÓÏÄȶøŠÑ€‡‘ã< ÍéÎ,â@¬ëA† pA‡¨CϲÌ\‘.ÛmȤIxŠ”±›sS "Ârör}‹nNŠÁãðÕ~lQo¦`>tŒ™Üóé°…¶Ã׶޶ÔéîÒ5Óöý€ X` ­g9KŠªÞ ògö]ás ½zT0%jЇkTËãÖgÌ™0"µYVg‘€@¬°)šÜ>aFc!tzÎ’à¿=VÁ²k¨âÔ@op^vÜ?ùJÀÐ=fà¬í0[7üß@¿›}œtì³\ç¹Éñ}ÅÌv\|f{öy†?=é1"f˜þù´x‡´ÏHxxþiô8‹k™PYÀ8œö~Úæä§ç7@æ(:3vìô°¬¨XÇX+( 뤵±ü¢F jÖç19Š„’'(m¨}ºÊ ºœe• ÝÓC¦§Å’£=‡œ&Ê úóe y²…EÐÉBƒ(™2²àôE?xv5¤ki{P"ÒIG kXLPØÅ€Eð>GÔ[Á|q!œcæ+o0º a‡‹~§\®´;šñ!ê!ê+¦¦uX1ˆH£"ª¤—¶¶š¤ä¦ U94%‚Ñ`³§Œº)ï§y1‚*ÝÙÕÖ/Û:>\gÇ@¥xžîñŒµZäã.]¼“A¤Á·œÒÕK¶ò/ «{[8Æ]©bý.q~˜öš2—DÜoR”zK²ÊoGlÐì¤{Eý¸¡„ 9ï› ×E ¨ZRÂ}3QO•ãЕ6ÁÀC–).¹R„Äú%Oy¼ó¡¿r È#ŸŠQ½ŒV?l ËGÛIðòVÊ T.šRÒðèt †Þ‹ÑïÄmݯömbÎv‰vtOn#<œuï9ÇÞp3:¯³ß)Ø% ®Tz´õîëc‡‚ BWœc ©‡£†Œ³ cFvEZÓOäIkÏÊMûY’uj%[Ü(0i˜‘>)»aQy}Ævb2åý'*ƒb†G½è £´~ —5òs«'ü¡ó·éÃ¥¶vx8)#7J Ìæ ÿç†@IÆ š ˜`S(E Ë–Bè«!$<÷sm±¡¶{Ѻ Áîæ×û!`x뚢"ZaB3”ý޼x´´WœÉ[׃˜²øjƃhð%ptKÀ[³dµ“±C$UC@\)ÖA~qË…ÉÃÑÎ/æ@znæ2e?9¬ÚŸ‚NÌØ¸Q²91¯ŠBaïƒì•aØ0æ#¹Ú˜.3ÃàÚ—‚Øþÿ•½¿²+z%µÔ†¾ÃÆEÚ”s¬A íU’|hà±@£ôØ¥s5S8*v0Dè×âó®UøYmãïžI½€ïsâãå:ŠÐDt¸ÄXrµ/Šì©0[L Nû ûðŠI»øâÄŠ$aŠ‹¸pp™’†MNÊ¢7›ÉtDÞI'alˆY"4¤žX îr¼ž[†{_£MW½ X1Ú<ª”c®ô)L|Š»–SˆQ™’Í–˜V ‰ÈF£æFËþtu¼Ï4dŒŸr-Mv«Mºu¤Sú¢8•91c˜˜Õ Ã’`Ì AIÿ#\¯*p•XÚ×¼ª)–¢§4%>ÓÄçbmž]„5ˆÞ5N=G­€’#ûr¨—¿96#R–©ÿ YiŒ¹ £+ f'F5 8@éxþ4í ýK€‡ª.§µ- 2¯¼:ýQ 4Ü¥5 Â2ÿXC°7`M-šŽjÈ >;~ÐLýÂ5œn”H­šHF4öKß¹ºY‰p¢ÿrÒwsã4ˆÝŒF¦Ûä•Fø:î0Ó¢œL[f|„Ô†©âÎJšÀ¢¦«Ö :h©$¨I¢Žry(*‚u&~Kÿe“`Ç ±§73)„Wä$ %ضö ¢Àpâ@Cõ\¤r|SÈ"ÙºE"¥«Ì0iÌrOÿDh¢md#$4Eù¥@J©¦"Ñ÷ÈæTÁ(ô“L™9Ù´ÒNÀCxM¼‚¤à— º}D¸-£BIá„rx¬Í)\)×gU•J…iûšŒÅuáOÏ1T>¸|æ>J‡ÕDè–bs -Ó@´EŸ@Þ]”8ðå¹ÄÖÂàBŸð´¼…‹Ú–ýÈ ®X…_3áU  ÷dD„Ç“_± ˜¬‘Ù ”t£Ù ×Kü4n,ÀD²ÎÎù"6°¾@…šë‡‚– ­žFËm­`Y’Ê6ï'3¨––2lápM±`<­hWâ"­’PÎ@Ìò¡¢ (J(ü^Ÿ3´°Oëy¿Lq½Ãè‘](D”¤R¾rc¯{e ‚¢Î\3P!}"èùǼVt„)w¸™®4?­u~•DÁðŒ‰U2]›0ÐOVFñ6-§ÆM§)¨’ÔeYðl.HÖÄRψ_ A†ùJ½ Ê»YÝå’“oIFäÒZt:¿Ù¬‹º·ú¹‡þ˜h"Bâ¥íÀËê&í¶ü"ÿny󘋉AÐ-ì îx#Õ~6–Õ·ÞÍhX©¹œˆ¥{9Aé"Ü5io¬rjÍ{¬H8ç)¥ÜIZ^мÂij@.@‚ΓF.Àá—RòKŒAD Ÿdûô Q„, ƒ†€a[q‚g@÷ ¸D_¥š…#E u€)èR1•åB]F ±uÄVˆ²èÑG{§éø”ܰ‚Ÿx Ð]ε(@m¢ l¦­f‚£Üî¬P­:ˆHøµôs¬,i”û¥í“Q>2¿"d[ (Éà ñü /ŠuÒ¼bS²L˳ý.‰"•:®A”U@Ÿp¥ÛÖ½RüE•”Ä{ÁŒBèH¢™ŠÆ¥ò!IµÕa¨ -w"À)w% âì᜙™¯ªžÕrw«¿Í³¼rÀ6§ñ!©1£Y§à˘LT’pŠxááÃrôš8]Æ>ÒˆŠÆS"ž#^”m²ê¤¾ìïB\ Çõi‰&UÎ=ŠQ˜1ÄŸ,? t&r,@lé5AÛŒÑJ´­6\²–¢wØæx7I™\`nÉsKpÊ´ýÝ€×¼ î2 LªŽá'„M3ˆ‡–ËKi[v&V‚tF’THè rxøœÀTUYÒEe¯}ª±Ø$WÑ=îX/¥}%¤KÃDï©*ê¥:ãD=Kª_¬Àä†ã`äDÂ#ó[ö¹JÛQ‚l£$ ˜ÓzÔs/¾À«Úq’ÀJº„äI+¹XñÏ,˜$ °gÎf`æÃ%²Qü6Ö"@tšµN"9()yŽ.B™Œ LÏì*ˆ6Üo^4í4Y‚‰e-Ò«‹—z_º|¾•~înM7ë¾ÚŒ¼TgŸ §`î΋dËkbrãØÈ÷öì¹f”vÄø/$}%)Ì-Ä—¼Rž à& H|&‚X’$ ;cŒ+s-ŒA«Ðˆ>>;_»?-§1hG*Èæ@ë UrȳàËŠ73ã6h)»¥óùé— O¶‹Û.ÉM2Ð>jj=B¦õ1²Mè XB`LâѰ >xéì¬ d™´îbN ·XËK³‹n,ཫW{í“™’ê;Õß´ªp[j)^òî`z‰ÂWIÖ®•Ëøp¸hä4?Í¿¹²eS¬Úƒ À¬4+v{À1¢ˆX’PBXÿ ê q±ÎEsG–…‡p?g±á¶i{Ó˜ýM€tøÉü’ê›–™–¤ ­cïõ8;$<¬\3QÊÚÀZÈ ldv©f܆"†»cž«Å¾›¹þ·\"ZÚ…T)Uð•Zlô÷UA'hÿE£,ÔÏ.A=ÍÈtú¹‚FÙDRlßsô †)È™ù`/";É .ÜÓ2œæ]b—P¡cBáŠroí*[©í ‚ÉBƒ K|e¸€40 ìM ã2BŠf1ü®è1yÂþ×Ïé½å©R<"°FªI›'„Vª´çP±‹ðNÞÉ£ ô„ PF8`Âj"jmŸðÁߘ gxDüA ‚ÚHÞu*W‡X_Ûæíˆ9qÚ[µ·LiÞu N§9v@pkvmRÓÃsSÝÀ(ý¢@ص Û™ñˆø“bqLÂ$· ËŨ!™ág¯XY¤d‘· ?È©ÈÁD|'¼²‰CÏ#ru¢*(n„oõ5¤´³˜À "xÙc!B¼èœiÙá2¼è쫳’¸èžú¸±D\C£§EÁ=»—„z®ØJÐåkàå)áÙgYØ]”eªƒš0›Ÿ#˜Ñ`†P"ê{½ø—”ÆêÐQ]bÚPbŠ»jB!»Zlv;‘"禥N…‚[",À0yÔºã#u- × âìGîãÈ÷!àˆÿŒÒ.ãÔ¸n¦böìæFX ì&‰tµ!2ð]6H·GH<½hCƒ¼K4N­Å"‹Ò7Þ ß|2ù~™’·ôì'h¹•µA$Þ VTvˆŸð´Y˜¾ “ =<¥IÅ##ŒÜ!L$ãòäÀ[%Àú'Rÿ¸ùF¶!.Åœò¼| —m9Ž('…%Ô t P+‚l¤w8D­1›þöœgö WÞÓY1°¶lbã ÷ÁÊ(¡ä˜5Vzk®†ò1m’Á¼¥Ö»-—²½ …I’–ˆ¢Ú6“ A9xŸò–?;gHɬ¼{) ³G†)°Ö «êNp”È€³ O9•SŠ¿…%<ªE)¹¶Ly|wðx.äœÓ¸3#"Vï°ûʵKIÆZ £aêÕh³­[PýÈ‚=žÌ˜AaàúÕ% [(ŒP±'R°DÒ8cß PMn+jc¥©Ì›­3shì[¦t·Å8(CÐ3<#`eŠˆh²up#‰¶5êAa Ï…Í)&DO‘ØÛâÖÃÙ/Þ˜Z•)ãâ=) ½ñD'n_¤ß¼…BGÛóY³\lZˆø÷º@„0!öÓ•!CëƒDFié`("ؽ5Ýáþ™É9ZGG4œ?‘€Wã‚”M†¥'iÈ?9½úàl*ã‘FV–H}¤‚Pù׊JM¯Î—[|ØbdML(LÔ•ä(ÉâИ_©\.èé2 ‹óB¥ø“ ±ÜI?wœøTwÑŒ‚¶Ú2g¼`¢à:ðËÌkQ‚Ù}$¡U±ýîáz¨ªÃ>’/H P@f}Í÷‘2(A ˆìŸÊ ßšÙ%†Êê‘“,q3)ÑΊÉ°¤¬jh×ðñÎhw´Vµv÷—VQ€Þù\!` tX5âù“^Š¢B/¦')“0ót3ƒ~ƒ ½¬…æù$  ˜°ˆ•4èÏwV 2©(ã5ƒ[•Å ŒÆÇRÂu Å¿˜¢[s~-b| PØQ{õ?˺JTà1€š[Ê5kŸÂÅ> ZNÄðw&œ|úr´>„Ždœˆ;Ũ8†’^V ½†àç0úZ"d&[,ânY"}|)ÌÃn6˜Òâã(4S³„ŠËÊèu|[‚ãL6ñ¯ôtÝc DD‹‡K ø¶i¢ KëŒt™2* ¶2¤åÈeZÈ Í—7ù4 QÐM²Õiq±¡HTžy‰YÎÈ(9T·óüêða-kpx±d [ NÒyØ~O”qÈ^ŽlqQš0Z• óê¬d¢âa-Å1Ïsò Ç#€Ìû†Ý#̨g ä|]°Ã6“®$dÇŒÔ?~tM €÷ 褺¥™¬êܵï6cƳ5e†±˜ï¹´XUá8GEéÍê§væ?chéV©K'ÂÃC‹$üΧSÐAîÿ`¥nÍÿJwZ˜©'¨Î'ztOãØG„lĈ¨Ï[DÉÄQ›+Äq áBÉ 9ÔÚ<š?l\å¹ Š$éssb'¶¶¬<©ÃW¦1üÂŒä0DLÿ6ð+AkÑèœ=àôÖm œý_GÔñv˜5p«,Ùs‹në”ö.´øê QaRöPD+<3÷lMˆ5_BÔ†AÛÔNµÖp«åH Ä£Ë<„.ßà€€ã‹ú|[P ZŸúmå£X%-6¥têÎgš@@ûãzš&·˜•mLƒË3¼¹'t]õüã×]Øi¨Óulz‡$´²|èH Én3º0v?ÅyU‡t{ÄŠé)¶U½0Òý~O[}Þ"§÷ä) ¥žŸ Ù“¾'jßýká£MCX”<-‚Á³ªè¤/p¾õú’Gè? lÁ ˆ9 4µFÈÑ~º´ýuªuÂh+ï+¥cH¨µàèë…™Qƒ&îtÖ¢”xèqát+ _Q$T^؇¡Ù`u“O¿Ðd³Qp]äÞÉÜä Ù!H舰ßŶ”SJTˆÍJÍy€Åg×xh!¨8Gb*Ê<¦òŽT ™h}„Õ×"ÖN4bxš#$¡ |ÔÍ‘±aª¬PælÓI þº:W`ŸˆLåU„ MK¡¾½‘±èbTs(S”×·ÀˆÚ÷pø~¬U1þpÓ.7Š¡Ê NúÐæÙ¨à€D¿Þ›Êh­AXa‡„í @+Ά´-'„í€ Ö6O]¿TU<1 Œêäq­ÓÏwê$µ­âè˜Å=Ò¼L¾€ äõ3èfi¹+˜ô§MçpÃ6•Å“6ãÈîþ{L†¤‹÷¿’ŽE’;0‘À~pNüÂlZ§Ÿ$¿²Nø™…ж•¹ž„bÀ÷…iß)éyÖë^M™\§ÇD¸’¤ü dÖ¼·ÉPeÂ#6 ÑAX4×̆š[ŽÀ;´Ek™7ãl-ÇÙbG€°V‚Ö0èúÓãõrÊ)*rº“Óï:†Gw6˜U˜I>jÞð¨…#q’–RäôH{éU곎Š!BR"¯£û 3x"3Š‘êÞ—m0>=‡&ÏÂç—B@˜J´¾ ¢‘k³§Ìªts0p~ TÝažh¹Bßàà!•s[ 1yκ ÖVJ3!z„‡´ TPŒ¸LI:ü‹ — åqò‚s/ÓC½¦OÊü-ð©“Æ!¼õ…º€„œLƒ21¹ùy‡ØØ‚¥Fª 䤣['ÐÖ'í€VþÁDz•ûd¼ÏÓ†™³Êp²ØÆ.º»Ek¡¢Ê¤I$©„™æ| e‡ôÄ\à«T©•œ'ÌáH>;Y ˆ¹:+UCâ7ëîÊÒcÜu”@ʸ×.Êùx‘~ºJï+IÀ"FHÎÕ8óÃNçáákê„Ð"‡up›¢Moz¿Gä°¦r{;‹©Dz æ³øUw‹RpRr`Ñõ{l¼¾¹s>˲$@Ÿ)‘….x-ÏtŒÍèëa"àNà ³^²à~&@á§§ïƒ<¨K—Ëë”ÂÚÍ,êï“Rð̘æPÚ–¡–®é¯ŒÔ¬k ÂÄÈ9øãPS4¤Í³ b¤nÀêZq«˜dÆ#-±œC  ôxz»W6>Þ/¶æþ-ÈQóèNôñÑkÐsˆÿwl^‹ÒÐŽð¯ÉFVéŠæ£Y‚™ý¯¯“ó'C?ù ‡xBo܉ðQ MÎ?¯~ÿûUjÉa³SÓ¯¾ýÐs5À É{Y¹2ÖaF܈:J±s»Ò´@Wîi[ú'Oüí×vWÞBæ6ï}{IŸ5ÎñÌ‘ük§r±(˜4¬u-Ã0¤7HñX… %$¬Ù‡Ad§?[ª•h\<ƒn ƒ—_Ê©XÕVÑ3/‹2sE°Öu9¦’áþâ‹>Æ^Oôæ5ê¨QkFñÂ&%Y0c[£¥²kO‚º™ß&©ÄcàfÉhi‹1…‹ª¹3_åÁ“3û}wajiA$t‹…Åž¶„Û€ÚzôŸ'$‹0ª,NÿŽØßRâHJ(‹%ƒBíܼÂv5Ð|̱Xx,‹ãLå@H‹^×éÅG#ï¨ßì®Ùq;”_§uJª•gã*ÿWÍáÚ ‚§f#®;0//ZÓöý¬U¶~Ïn6Ü+ÙÈ$zv}.é0.=ô ­&Æp âÓûæÕῼ|“°f&s܇bÛÑ9ùŽ.¹AàÉ=¼`ü„ÄD‚ Öá¿ü¤`*˜yR”¨úpõô¤.2õ謅?Àè0tºö¼hZ3Ë·e5Â,’i•æÞ¾0´Qe®”º;×ñüš,b·ƒèóê‡ ²Ñ‚Ђˆ)Q@¿.Ö‡ß@ÁŸ(Úšz.°1E½>•ÍôµªÆ J|W[+U"Ä"A Œó*†¥wî]ySìAH>Õ>ÈŸ®Ë©Ñ F,÷#â/즊Áw† –ûk~Y¡ÀHò»l¾eu¬HŸx}+ p8'[»…¼U‘ÙÜ¥ÄÈV’¯#‰È6€Ÿ“0(Δr£úÊXS¢Ž6YB‘ËÂm% MõÙÓƒYï67†ðxÕ-nhŸ'*ç,RÝ*³¸ñ¹ ;Œ´|°6 %UŽCr—c±É2Ìâ*y”E¡Çž+õ‰xk„ *ŒZ…Æ^0N—AÞoôò’*ZY¦5uèâ¾C?0 0 2Îìí¢ÐPŠ™ï¤ Gƒ‡X2z6P3ÂÌÔ´€1ÝSûÜ`ã ¸|&|Ó€iEÓðËïñA‰Ð)¥ªúkÉÖ0NÞˆóõjÓDé܉ ®@šîÁïì‘æê}†~w§ÉUì,rqt°Â¤S>^0$rI)V¿rqúéýœyºÏÿ7©¶íEÝún UÓwið‚!u%b”…应™Ž^›®IâOËø™iÌŒÿÏÇ‘ª›cI›ãѾd…ˆC÷¸üºN];"Tëó‹B’)Ì8$¤VÁ ¦Fk?ݱ¡2HO¼>ÚâÐŒ¿ ¦Ðþþc&ŠÈ—à%ôZ˜:÷hÚ äŠÓ>®¿p%ÎùH™$zd›×fn(="‰®œóèæû¶Ð^Ç×Ó‰ÆYÒ+D<û*;§{£+Zy lˆ—‘B0Ûà‘È!¶ŒÃ Þ¤óOdÓ"R•¸Å÷g‹aê™H›—™ò IÒ¶igŸÈù…u­*ÙxÐxë˜Í\’¬€ŒÍj&>™Ícþ5Ö〸¹ŽÍ”?MlÒn£,ã³…zá8çÙjpZ{c,˜ S9<Ì, ЬS·ÿ¦ÞãÒ”ßgP37B„xW_Ø\¹M˜ìÕb›ØË œ©ã:-¦Í!—¼žÓ ]1äD¦EÔ¦ýæ<æ`è®»FvÓç÷õL y|òe÷2&}»È×Ú›‚ôóæRÚÏ’Ã{I´~±|ê¬1NÖÆØ5ß®NhâÖ(f 1Hl¤õV8@EÍ)+€eeR ‚òñh˜Z é[£±VåPgRÞÜfU³ ïi°þE(4"Þc“l¸"EêBÜúäâÀ`»2¼û| Æ@‹#¿*qSšð&› ”@¹7±[|ú„<¤ “¨j-ŸH›»Ðt*/Á®IÁ‹ôÚ6q½‡8Z`†Úb[“ˆÊY'P™HŒ øW‡'4Dë”´5¬F„cÝPäÆj¢×¤ÆÓdþ‹"Å©RXrgI…7Ï€År—èû7Ï”0„FŸÈ ¤"Çp2h‰»ADy«pœœ°Pã” –\'œ­T Á„&Ž”†Øsv9.+.…¯šLÝpi’ߤvŽHbÈ©þ©EøTáäfe£é–¹—DYÿûÔ Ó+ò…ΰÆHÛ¹ ¦ö¥#K4xB±2‡(Dµ?¨}iS|’fVWxúîÁ©„’ý±üeü‹õ›úïJêΕp+g°Ø²• Áx¹ŒCáAàe†ªxT¼ÙHq¥ggл†^#ÍiÇovÍWÅð­GîÏk÷è™ ¸2ÁÐF¾Ù¨)Ü1£?”²t‹‡¬© ÜÉÐpÇát©?ÐØ¯á"Ñ IV~W¶g¥7b€t* ̯²ìCˆR€r ›DÙ~Í*¨ðGP´%Fož1™(Hþ”%Y‹œ”ZÁˆÕHÌ^X V¡r™(æ dˆôGóÏß; 4$Át*†Äe¡b­m\E‘l¬&‚œí{J£áÞAë É‹êj°.µ#§<2j}ÑÒ•J:B¤ZK?7¥6á‹DDÁ&ÀB_a/›#§ßQœµ‡àM`äçµNª`ðPöoÀ¦€$_ €q—V¿9¡K1¢š=ÁŠ9)ž~7>¸¢GoñTXÜÙú Tc¨*†ðÄè!°’a”¾?”X¯šXüC Oº4¸"„!Òjå¾i–öÊÕ¡E;„3ŠëßXM a±HÔž] ĽšÍµE®Žæ¹”LôD¿&Ú "^·}‡«)ëa*ã+›áúÈVt@Ïjg9a鱯ÊÕC“}ú» %X*+ŸAµ& ­à>æUÛÅRƒ)¢cÍ|M+™-–¡#@ñ\‰­ý˜+Ó”WŠl1ºªÔ‘5œS™¸Î¡³:È“/Šdd2@#FUú2šÉº"ÈØ47]ó83‹‹‡dlÐÀØXŸ„f¦24½ÚgŽü(%œ…±Ã[ }5Ÿà"Ǹ5·È'uÑ KäÎ R*#óxïÛ™X#G!™t‚bH°¬¦w¼Ë—vœäѰ¬¹˜tØÓB™TÕñt®í«>§ƒÌF³] p^2ÿàü Ôep@XÌw9aÁn›Xõµ)@FÀ¤@Ó …h>J&mAع!äu=üìæ}TŸQWÉì3AÒM@¿CáØÀÖ\ÑäŠ"µÀ—F¦â±ä˜d+ø ˜›žO÷QÒ‡Bœ®®—ìq&áêÕ¼­W„Ëù«:5sz%)Ž y¿R#‹ ”ž‘˜|Rƾr%³fr”_ ì×yEî-Îøp&Ñ_•7D„±Î4£ªw@É"ݰ0ÕUìYbÛ!Ñ(ýepQí~"øV vQ»ß·þq\yá6ÈGYR¤_ ÆUÑ›˜†òžÈݸ±ÑoPØcZ&‰ ¢4ÆRf{`ñâPhê;N¾  íH(œTÆô´Æ7^ˆ¥Î•Z« ânß[óεœƒŠÁ²x.“¹_3ü¸O‚¦¯Dö¤Ñ E­F"DÞ×(„33ºÖtuàŠá’¯utŠ`RhäÁa°Z¼(DJ·$lÀ0±¿A ÷H2Ÿ"Ò^H"íy1ÊÁúe¼@-åooäÆjΛ˜‹]Ë~!†H§”Îl]Sž3ÆÖÒ3VîYX£‰ „CgŒ~È AGžI6êü¾œ«×¾3BüZcºãúĉ«‰Óé#LvŠ-C„P,Vò@ºŽ‡+ԘáQL»s Ñ$¼E¦Ï–a,Aâ#R† Š€Æ”fWÄd‘Rê60ð€C­â— Ùi ¯dfè¥ÂÕT:HŒ‡«Ï'ã gŒ"P´4Õ I9Ù÷U^—@±%2E.®„¶h·¦Eï:§šhà|‡ îÈÕ°öœü!O:Å:fËÆÅŽµ¿ ‚”hs¸Ú> 2äE°µ‰}—ªÊévnÓrQäVèàlÛÖŽ“Fœ¡áeöJ™Á‘KÚðŽ(dÜlÎÒþ†u0Ÿâäï@UÖ^¿Ôô_~¿ëB¡rÄÃ.‚™*hÓE{úXI—ä¬ãÜìx9>å‰gñcÊÔÔ×ÿ}Äâã~ˆ>nN’Ì¥Zä÷dïdÀa¬ð+3Dˆ6wp;µa®O‚¸E¦~*²Mͪ‚\·©‰ßâÁ›ºGÙG]>lyNóÀa’D³JI%B,GÑ,ËûçKÏÿ͸3Ät¡ó2—µ4½l×G@åÜë{¢£•†®Òk™¡ùîd?Òá$.ªCDÿ¥Œ0‘¤¹²”7d:[­ûÔîƒ>}¼ Ï)_è’¾3Ë’]ü š­[ðˆÓ7 Ÿ èì#;Ë>øPOÏçf „cîæì&¨aulõŠh=¯wÔ!øX™Å“@wÐ/âzê]„YawÁ[ªtÐfø——$ªµEèÅ\Ð.”Ã-ÔvWÍ!‹Ï‚‘^ÜJûøƒ26ôUü®ÃinšÿØÍhÑò£‹%ÀÅè+WŒ;’èén"1]„Cú?`ÖÙ”,i(÷†…ÎÌ-±×à¬+G†Ö…1°LÔÖò;àû3QÍ¿s'9Î@¿ÂÑ­‚N>ÿ]aÓ¡ˆ&˜6 úG 2ü›`QIBªN¤óR wõcÒ 4R²õ>¨ÊšMûvŸº.¥u…'3ÝÆÊ‰ :ˆo"á’Zg?ª%ìéhÙ‘³ÏÌ~ÈHg¥´ýÙ¬$%ÀØ&]÷Ò'gFOaç̓q4nx<»>"JÃr žÏ¢u¯G^ÔÏ}Ö„‘º„óAîêÅáú5c‡ B²ÈZ‰X‚b«µŒ'ÚnQi0“3†anL'óuÅe[é1•Q/u°0Gýó¡ abŠ-ž_jå!7Ç·²2Gngá­þu"É#óÐGRcí©‘ƒ+µ+¼I„Ž2§;£W®ù˜]n)«DÇÂ&ùá‘3=ö!ض›7ˆyÈ™> ùߊ”É:ÞW/-±Q6qW,WEn÷ VL¼_N‰|YkÙƒZÌz ƒTùn,P<8xŠèß9­¦AûII±À‹-b(<¬iòÇ.I¡;£ÇæmIˆ^¦µÐ/0Éñ€„}Û‚{P€E7.ŸÉô3{ÏH«ð[^`Qu5qÞ|ä2õÂ?–\ù**!ˆŽ‡ ÛS¢%YiQC¿ßU| &gyáV¤Ê\ a[uˆ¢Ð©5þ­W Ý–éò‚ø¤ƒ«¥@ÂÀ’Òï=¥è¾=ƒt9(Zå* <¦U¨§D¢š±j)’ \j± ­CÜõB/åtsš|U…vä—zUL×EB®"çî z`{8) ¡¡ZÏq(ÐE¸¨"uE »eE’ÌÌ[ºfÀ p)Œ€KÓL¡R‘ÔÁM²A’+lGÛ”$Ú%Õ¬¦¥5Öì,¶‹¤ Zµ@*Yß§ìÞͦû‹P›fÄÍ1F©t2€Immö¥èšê~£ÐMø¦w` xJƒ# ´ÝùŒErH2tíŸFé.»ƒVPEl‚*OÐɪ;Ëai<À½(*–"RFö'ìÄ~¡UO*W¦epÚ†6K|ÀРv2Á{³Î.6ñjNq¯ï Ü:IÏãÏyg½øLì.¤ê„ü¿áê:—\÷¼ ,º®Ù`0 x–ºá`)S ¡³Ê@zwQEÉn÷^/!Ð?÷ íÆ…ÒQ±œer ¨Šï¢Ùû ý¼* ;í‘ä©&¥"TÊHÄÏ¥ÕhP ôCQÄŽ4ON=ÉÅçÀzcø"~tÞE&X!u%Šr””¨EÂÔAé02t„s“F)6E8Áñ¡óc=†éÆj0 à£jŒ 6°à£׊#´X:…HhD‘)Ŧ!à’âòV0ÞC@7 ô¡ð€Sƒc4Â#[@ˆac|Ì'€°@m‚„07Pp6€ó€`AÓX-âÿ° 0m¸c(E刵:ÿ*¨½wâð8Xu€ëTåAʤŠ©<Ž~ E18v€ŸnæŸ?$™X(\nž^‚ ˜­3 Zp¦€<\4ŠD˜u †e¬â¥øq(ä8mn)6ƒp›Ps0 ²à… «Õ€+R(˜I(‚Pä`'€;sÓ0”T9|T9|L9dL9TD9>@8Ì Y $Ɔ‘ä@``¢0@0@V,@"(@$C|H† ‘ ‘ƒ ñ‹ñc ñ@b€)c‰À À ´ ¬¡ô1+àb°ÄAƒ'A‚Ç`Àí@:€yêÙ˜Î`€n䵈~ X€`âcˆnXI`pfÐݰv@MYÏdp UÀÔøù’6/¢2 ŒGA êD/qb‡¡¶†j„m‹LÆ=ÓL]L¥;/R@ñq@߯è¦5C1¦ŒÌd†b Ù‡‡f˜gvؼä§ ,90œÜÀ¯ê/¨~}çO¾oûæ·Šæ§#;ò#¯Úœsâƒgø ¶Öa]¨‚{0Ù€âÄÖ 4/x KÀP^rð€t´Õ c«Hê@³Rb%Ôœ”à=#ÙH@yB©ðÏ€Òl`.™TÈ %ÀE.´¸òà}—ب…@Õ*Di²É˜Ê$Í1w©ÃyvâݳV†8¨Ì07ˆ™F¦HÄ.µ¼ ŒÆŸ8±ÁJí@`¡'â‚`\LTþðÙApBs)r…!Õ â( Òi‚`bootstrap-tour-0.12.0/src/docs/assets/fonts/glyphicons-halflings-regular.svg000066400000000000000000001732651316367154600273060ustar00rootroot00000000000000 bootstrap-tour-0.12.0/src/docs/assets/fonts/glyphicons-halflings-regular.ttf000066400000000000000000000715101316367154600272720ustar00rootroot00000000000000€pFFTMh+¶ üGDEF OS/2ilã8`cmap©/Vð˜.cvt (øÈgaspÿÿÌglyfòÆÔ[Xhead8=ðb,6hhea ®xbd$hmtx pbˆælocaÉîà@ep¸maxp.Ëg( nameÔ–™ügH|postÖcQwjÄywebfK)QÑs@Ì=¢ÏÍ÷–Íöû§Ú ÐZ Ф2¸UKWN@ ÿÿxÿô”  , œ(, œpX@ +  / _ ¬"&' 'àà àà)à2à9àCàEàIàYà`àiàyà‰à—áááá"á)á5á8áAáEáIáYáiáyá‰á•á™âÿÿ *  / _ ¬"&' 'àààà à0à4à@àEàGàPà`àbàpà€àáááá á$á0á7á@áCáHáPá`ápá€áá—âÿÿÿãÿÚÿfàßãß´ßhÞÚÙÙ     ÿþý÷ñðêäÞutmgf`_XWUOIC=76Ð Œ5 *+    / / _ _ ¬ ¬""&&' ' ''àààà àà"à à),à0à26à4à99à@àC?àEàECàGàIDàPàYGà`à`QàbàiRàpàyZà€à‰dàà—náávááyáá}á á"‡á$á)Šá0á5á7á8–á@áA˜áCáEšáHáIáPáYŸá`ái©ápáy³á€á‰½áá•Çá—á™ÍââÐô¼ô¼ÑôÅôÅÒôÌôÌÓôÎôÎÔô÷ô÷ÕõõÖõõ×õõØõ%õ%Ùõ'õ'Ú(øÿÿ(h .±/<²í2±Ü<²í2±/<²í2²ü<²í23!%3#(@þèðð üà(ÐddLL!'#'7!5!'737!Lþý··È··þý··È··ô··þý··È··þý··LL !!!!!!LþpþÔþp,þp,þpdŒ®7!32>53#"'.'#7347#7367632#4.#"!!! þÔ 09C3JL3®ak§Íw$B ÙdqÚd‡%Ku´òp<µ3LJ9D?{dþÔ–ôJtB+0W5¬juž.«xd/5d§Z½gj7X0,Z>d.6ÈL¼!!Lü|„¼þÔÿò,ÂA!2654&#".#"²îxªªx.,,µn˜ØBUq,¬zx­aw×™ kEPrd°L !%!!°ûPXþÔþÔ°þÔdûPÈLý¥gþÔXý¨,dþpÈÿóÿó½½ 764/&" '%'Mc ™$^þfÖýšÈMßy\ '™ aünfÖýšþ`pß1°° %!!5!!¼,üà,þ °þ ddd&&ýÚL¯ &7>54&&7>5è@JOW‰OFS ý @JOW$ˆOAX¦ý÷r67)Q7q Á ýOrn)`*^ÿìÄ™ "'#"  6& ‘,mþÔwŽÈþäüÑÂÁÁþî°þÔm,NþäÈŽþðÂÁÁdX¯D>.54>‰0{xuX6Cy„¨>>§„yC8ZwwyµEH-Sv@9y€²UU²€y9@vS-Iÿ¸G•°  !3!7‘þ€þ‚’þ|ß’’Øü þ?þí¿þpý'ÿ¸G•°  !3!'7#'#77‘þ€þ‚’þ|ß’’ØþVJÁëMNïÄIÀþ€ þ?þí¿þpþ+åŒÓÓŽâŒþo°°%!55"&=462#°ûP%?°ø°?%d•3È|°°|È3•d °L #'+/3!#3%!!#3#3%#3#3%#3#!!#3%#3#3%#3°ûPÈdd¼ý¨XÈddü|dd„ddü|dd„ddÈý¨XýDdd„ddü|dd„ddLû´Ldddþpdddddddddþp,dddddddLL/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2ôþpXþpý¨þpXþpþpþpý“þpþp LL/?O_o+"&=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2,ÈÈÈÈÈÈüàÈÈÈÈÈÈüàÈÈÈÈÈÈÈÈÈÈÈÈþ[ÈÈÈÈÈÈþ[ÈÈÈÈÈȰL/?O_+"&=46;2#!"&=463!254&+";26%#!"&=463!2+"&=46;2#!"&=463!2,ÈÈ„ýD¼ü|ÈÈ„ýD¼ü|ÈÈ„ýD¼ÈÈÈÈý“ÈÈÝÈÈþ[ÈÈÈÈ"ò*%''À2Ôý¡ÎÔ"4Ôý¡ÏÔjjFF % ' 7  rþæþæÔþæÔÔþæjþæÔÔþæÔþæþæÿìÄ™' "'#"  6& %3##5#5353‘,mþÔwŽÈþäý“ÁÁþî¨ddÈddȰþÔm,NþäÈŽ¼ÁÁÂþðóÈddÈdÿìÄš "'#"  6& !5‘,mþÔxÈþäüÑÂÁÁþîF°þÕm+MþäÈþðÂÂÂßÈÈ™°+4&+";2675".547 654&¼ddd§Ò[›ÕìÕ›[Ò§g|úbú|îþpö¦>þØ·vÕ›[[›Õv·(>¦7Èx±úú±xÈd°± %#3#3#3#3°ÈÈþÔÈÈþÔÈÈþÔÈȰûP üàôÈþÔ––GQ%32?6?67'76?654/&/7&''&/&#"'72"&54è&("/&./†80P˜˜P,<†-0&("/&2,…;.P ——P-<…-1²~~²~·—— Q,=†,1&("-&3*†:/Q˜˜Q/:†/.&0!)&1,†;.Q v~XY~~YXdÿÿ°'+/37!2#!"&=463!5463!25!!#!"&5;#3#3#3#„  ûæ  ;),);dþÔþÔ„;)ýD);dddÈddÈddÈddL 2  2 d);;)dddÈüà)<<)¼ýD¼ýD¼ýD¼Ý #!!!#ÈþÔþÔþÔÈYý¨þpX„dè°!#!"&5463!!X ü®  ÛþÔ¼ý]  ~ þp,¬¬   $  63!3¶D  þîþ¼þî  _þªóóVóþbÈþÔd¬ þîþ¼þî  DóþªóóV«dÿœ° #!333! #Ñò(ýå¯Ñ¢Ð¯ýæ2ªþp°þÔ,ûPô,þÔL° !!3!3#3Lû´êþÞÈ,ÈþÞz¯¯þp,ôþ þÔdd¯¯2".4>  63 33ÞôÞ __ ÞôÞ __ þ¬òòTòþÈ–úú–ȯ_ ÞôÞ __ ÞôÞ \òþ¬òòTªþÔ,,¬¬   $  6###¶D  þîþ¼þî  _þªóóVó¤–È–ú¬ þîþ¼þî  DóþªóóV«þÔ,,°° !3#!"&5!3!73È Ç û‚ ‡ý¢aÈ2,2Èô¼ýDþ%  Ïþ ÈȬ¬   $  654¶D  þîþ¼þî  _þªóóVóÙþ׬ þîþ¼þî  Dó«¬òò¬«­É‘™°# &632!&#"2>™–úþžúú±ˆn’‘ÆvÕ›[[›ÕìÕ›[X±úúbúQ’‘z[›ÕìÕ›[[›Õ™°!7&#"#4>32732653#"'¼“p‡±ú–[›ÕvÆ‘ý¨“p‡±ú–[›ÕvÆ‘ “Pú±vÕ›[z‘þpþp“Pú±vÕ›[z‘ d°° #'!!!#53!5!#53!5!#53!5!#53)!dLdü|„ýDddXþ ôý¨ddXþ ôý¨ddXþ ôý¨ddXþ ô°ûP°û´„ÈdddþÔdddþÔdddþÔdddLL3#3.>>Èdd„({„‡tZ<‡x|rjdLþ ôQE (( EQþ <0 !O°—!1A4.";2654> ;26%+"&546;2+"&546;2°c£ÞèÞ£c 2 ää 2 üà     X     ,tÞ£cc£ÞtþÔ  ,ÑrrÑþÔ Øþ4 Ì þ4 Ì ÈXè! ''7'77,,þÔŸGGGG þpÈ ÈÈGGGGÈpè!%7'654,,þÔEojCV þpÈ È95‡¯©…6nŠ’ºb÷ %7654/%%!%7'654ÎŽS{wý¯,þÔþÔ¾EojCVº²ãæ²@—Á½–%ÈüàÈ95‡¯ª…7nŠ‘ °° !%-;?CGKO!535#!3%!33!5#5!)!%35#!3###!##5#535#5!3%!#53!3#3#%!5dddþ dLý¨dÈ,Èü|,þÔ¼,ü|dd¼ddý¨dÈôÈXÈddÈ,Èý¨þÔÈdd ddþ ddXþÔ¼dd,ý¨dôÈþÔþÔÈdþÔ,þÔdddþÔdþ ôþÔdddÈdþÔdÈþÔ,Èddddddd °° ##;#3#3#3!#!53#73#%#5dddÈddÈÈÈdd,Èý¨þÔddÈddȰüèüèüèüèû´dd [[[[[[°° 463!64'&"2°þ ýE Ú´SSôþ ¼Û þÂTTݰ  463! ' 364'&"2±þ ýE Úèþ 2ÂýDdþTTôþ ¼Û ýDþ 2¼þÂTTd°° !!!7°dýdîü|¯°üdèdü¯°° '.#!"!%#5!#3!7#!"&?>3!2³^ þ> ^(P;ÈüàÈÈdXdw& ý¨ & ô =Z  þ¦|_ýDÈȼÈÈý˜  ˜ 5°¯"!5&'./#!5".?!#°"(þ]þq *m)>$\‡R+5þ‘².tB*. æü0 BB6,êÞ-WB ÉŒþÃdï (1!2#!5>54.'32654&32654&+d×xº!" E4+v¦Oþ ); $,‹Ll¨›¡Y€}^Ÿ¯°Œ7]7( 3AvFT‘MY3(; 2þ…{MRaü‘aTZÈo°!5>76&'.'5m!:"€ 0Gþ Ms­ (G °9#'% üÇ4<99C/Q8$9ÿµ°%3#4.+!57#"#33'3#7~–2.!"ÈdþpdÈ"!/1–þ¢K}}KK}}°þÔ' ü®2dd2R ',Èüà§§ §§!ÿ¶±%3#4.+!57#"#3!55!'7¶–2/!"ÈdþpdÈ"!.2–2 §§üà§§±þÔ' ýv2dd2Š ',û´K}}KK}}°L/?54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26¼ý¨XüèÈüà ,û´L¶ddþèddþèddþèdd°L/?54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26èýD¼Èû´LÈýD¼Èû´L¶ddþèddþèddþèdd°L/?5463!2#!"&5463!2#!"&5463!2#!"&5463!2#!"&ôXý¨þpèüÈ üàþÔLû´¶ddþèddþèddþèdd°L/?5463!2#!"&5463!2#!"&5463!2#!"&5463!2#!"&Lû´Lû´Lû´Lû´¶ddþèddþèddþèdd°L/?O_o546;2+"&%5463!2#!"&546;2+"&%5463!2#!"&546;2+"&%5463!2#!"&546;2+"&%5463!2#!"&dd, üàþÔdd, üàþÔdd, üàþÔdd, üà¶ddddþèddddþèddddþèddddÿ›°L#*:J#354&+";2654&#!"3!265#53554&#!"3!2654&#!"3!26dd,ddþ ôüÉɦzþÔ,,ý¨XLû´¶ddþèddÍKdK}ÈddþèddL#*:J54&+";26%3#54&#!"3!26535#554&#!"3!2654&#!"3!26ÉddXddÈþ ôôÈȧýëþÔ,,ý¨X¶ddªû´ŠddÍKdK}ÈddþèddȰè#!"&5463!2 „,ý,,î,,þÔ,ýv,,Š,,ýp,,°L#!"&5463!2!7'"&462°û¨Xdü÷*J%ìýNpNNp ü ôJý¶ƒœ>þà2pNNpN”ÿó½2.'&54>264&"X{ÐyII»99 "c]s+?yÑyk——Ö–—½~Õö•röBB "ko K‹{|×ýE—Ö–—jk—¯¯2".4>"ÞôÞ __ ÞôÞ __ X°ûû¯_ ÞôÞ __ ÞôÞ ü]Vúþžúuß%.54>.'&6?*IOWM?%N~šOrÀDmssE.  \7[[Gvwsu†EY™d;^·w^¸¡ÅüyJ(I43n–QRlÅh!&7/#!"&5463!"3!26=7'Tq\qië¥þÔ¥ëë¥nºþÉ);;)ô);þ0¡œrþk†qUqþzá¥ëë¥,¥ëº;)þ );;)}T2œqþk•L.#!"&5463!#"3!265' ">Lë¥þÔ¥ë륅U‘);;)ô);Whþ™HCVC9 gg_Å5¥ëë¥,¥ëP X;)þ );;)ƒD>Ø3CmC&4 §L##!"&5463!2!"3!26=''Lë¥þÔ¥ëë¥,54.#"32264>:3235¶D  þíþ¼þí  QÈ-"#1D1i† 'È­ þíþ¼þí  Dýç )2X23L(p  =Šdd­­   $353#!5#¶D  þíþ¼þí  QÈþÔddd­ þíþ¼þí  D‰ddÈdÈdd,°°1##5.'#53>75367#53.'#53#5°Ë·YÈŒˆÂÂ*EkIÈ6vkþו4ÉÈfIÈKnÑÒoK¼Èf¨!ÅÅ—}Èó«sDýÌ;ó«pc°è! !°ý¨ý¨XXþÓÀÅþÔc°è!! Xý¨XXý¨,,þ;þ@ÌJ°!!!JþÖþÔþØÂXý¨XXhæ° !!æþ?þC(,Xý¨XXý¨Ç°L %>7X_°¤‚#F‰çœXÇ-$DuM„Õ­gþ;°° ! !°þpþÚŽ&ý…þÚþp&°þÚŽ&þ‡þÚ&"#ŽŽ !!''gþp'Žü:þÙŽ'Ú‚'þWþp‚þÙ'™™#2".4>6&+";26#3âìÕ›[[›ÕìÕ›[[›¡:Ï:#6#ÈÈ™[›ÕìÕ›[[›ÕìÕ›ýç.þÒd°°&-37;#<&/.#"&/&#"#3!3!53%7#)"6?!)!°o" =' ïî!'= #odÈdþ+Ê ýùþç"§þpXþp„ ¬'0  .&± dÈ,þÔÈdÅ )W9`0/û½þpÿ꯰257.>7>7.#>7>'&"76Ø 8./ieš‰èh,Jhqƒx{\ScÉ´Fak[)!#==þY0'C7yÁ5<€b‚;22>7.'"&5477.'íFOsv““vsOFFOsv““vsOFýE€wRY,H 7:91°ø°.f|C-[TFk1ii%LX( (WT`G//G`TW( (( (WT`G//G`TW( þp(3\;hI%E:JY|°°|UIW« `=^8ßj|Ci`$ÿÃí°.8A #7./7>3277>7&'77.547?.'ŠþÆ”%R¦ri' FOsv“H=<%÷%Ze“I&-/"0/a+'C. ý.%k.f|Òšk1i/:°ûPegy8(( (WT`G/Žý¨( 4kbf‘&2&?@0’6@þˆ§nUIW«þæ¼j|C/WRÿž« #!26'.%5#! #/%ý~8ý~Èþ§½½þ§ÈddG  ! ûÖ DÈddÓý-ôdþÔ,d°°) '%/#&=47&=467462 kþ™d^Þ^dþ™kX|XÇþ»1) ùþù[@ NN @[ù )1ES>XX>x®  !5!35 57'!! 5#'73­ý¨þ«Xñ,þÔý1µþ«I,þÔñµzŸ ý¨ÈXÆþÙþÔÅzŽ´ÈÊþÙþÔŵŽ{°L!2#!#"&546dè);;)ý¬þÐd);;L;)ý¨);þÔ,;)X);dL°-!!!!".=!32>'4=þÔ,¼þÔ,'MeÀeM',U'5%;) „,þÔ,þpÈ*R~jqP33Pqj~R*Èúq \ #(,.úÿâ¸hÞ%7 †âý¾ý¼ã`¸ãCý½ãaFÚÌ%' ŠBâþŸþ ãÚCãþŸaãÿ:dvè!!# #!!®üä×}Æ++ùÄ+,Ë×üàXÈþpþå,þåþpÈXª°232++"&=!"&=#"&5463!7!"&'&763!7>^6É*þÔ*20ý‡ -d€&°*ü? 2222È*Û¢°L !53463!2!!°ûPÈ;),);ýD°ûPèdd);;)ÈüàÝL 3463!2!!ÉÈÈ;),);ô,þÔûP, þpX);;)ÈdýD¼.‚° 3# #3.ÆÆ**ÆÆþÖ,X,þÔý¨þÔ/°‚ 5! !5„ý¨þÔ,X,/ÅÅ)*ÆÆþÖ°° !>3!2!2#!"&=46#37#3¬$ %¬ûÓè);;)ü);;IddÈddã'-ý$d;)d);;)d);ddddÿ›d°L '3%4632#"&%%##"+"&'=454>3546?.Lüù£ý]&/ S8 â2"ÈRü®lúü®Èþì Qú È22 ú!œœ'777'7'7'7'½-àNé³³éNà-››-àNê´´êNà-›œéNá,œ›-àNé³³éNà-›œ,áNé´d°°*.#";;276=4&#!6=4&!#'#?33¼20`‘d={ú.%î='þ¸='2ÂúÖˆd–d2ýDȰ(ÆÄ%þpKd9X+d,Qv–,Qþíá}þ‰dwÔÕþÔý¨X°L".!#"&/&54;6;2#!#3'!5##3¼20`‘d={ú.%î='þ¸=ýåÈÈô2ÂúÖˆd–d2(ÆÄ%Kd9þ¨+d,Qv–,QXý+á}wdþ‰ÔÕdU=A%632!2+#!"&5467!>;2654&#!*.'&54?'#3lj  m U.UkmTk‚þ«¦:d%ƒËþ7   “VýåÈÈiæ pyLNþ­'¢  % Hþ YS(  ·SüÄXÿ›e¯V8<#!"&'#"&46!'&54?632*#!32!7%#3Ûm!«þªƒjTnlU.U m  [‘   þ$Þƒ%jþªæÈÈPæ 'ýò ¡(SNLy q ¤¸  d)þ­YöíüÄXaL6:4&'%54&"'&3!26!77><546!5L(þ­NLy%pæ ' ¢½þ ìS·22(Sý¨ÙVƒjTnkUþÒT  nþ•¦BSV’   ÈÊ‚þÚþÔÈÈ í65!%>54&#!"?265&5<.'&'!1XþÔS)¢ ýó% æp &yMN,þ¬(22¸Sí÷PÈÈüæƒV¦þ–n  UþÒTlnTXþÚ‚ÊÈ  ’VS°«2 $54>!! [¢  þíþ¼þì _ ÝuþÖ,’þn« þìþ¼þí  ¢zÝ _þÉÂ&*««2 $54> 5!5!5UzÝ _ þìþ¼þí _ Ýþì.þÔ«_ Ýz¢þí  ¢zÝ _ý­þÚÂÉŰ«2 $54>333[yÝ _ þíþ¼þì _ ÝµÈÈÈþÔ«_ Ýz¢þí  ¢zÝ _ý­þÔ,°«2 $54># #[yÝ _ þíþ¼þì _ ÝÈ,,È«_ Ýz¢þí  ¢zÝ _þÙþÔþp,°«ˆ™2 $54>&277>7.'.'"'&65.'6.'&76746'&67>7&72267.'6'?6.'.'>72>[yÝ _ þíþ¼þì _ Ý’+>=>1" T>9.*-fw"#. F = .2) ( (%  )#? 7 .R  ,$   «_ Ýz¢þí  ¢zÝ _^  ' "q!w F  /JG  r$>   #/ & % I+ *  ' ) $# h1'  $ `°¬#'7;!2#!"&=46#3!2#!"&=46!!!2#!"&=46!!dè);;)ü);;ÈÈüè);;)ü);;þ ôüè);;)ü);;þÔ,¬;)d);;)d);ddÈ;)d);;)d);ddÈ;)d);;)d);dddL° !5!Lü2„þ¢È°ddÈþ þÔÈô°° 7'7!7''7'!77!7'7IŽÈþp/ÈŽÈýïþpÈŽXþpÈŽÙŽÈþpþpÈŽÈûÑÈŽ:þpÈŽ¨¨ 8BL  $  654%2#"&467&54632#"'"&546762#"&54$2#"&4²D  þîþ¼þî  _þªóóVóýÕ    73H3)ö.  þ".  ¨ þîþ¼þî  Dó«¬òò¬«Š . !,!T! . ‘$33$ 1.   .P6ÃX3%'&'.546326327>54&#"'&#"6‰ZËGCW#Å„bgÂ#WCGËZ² @C>`9J:vr3H@]aR6}ÆFGlZ.ƒÅŃ.ZlGFÆ}À >FXG`R«®ObEVA>Zo\9ÿòw¾27'7>54/&#"32764/&''7'&'ÜiÔ…÷_.#7BB]_@þåBBÔB]_@BB iÔþ{÷_.7B–iÔ…÷`.5#j+]BBBþå@_]BþžBBBºB iÔþ{ø_-87B]^Èè°74>2#!"&!!264&"È753#.654&¼@"‹ª MNW(kVMcO/9X7\‡CNO,?iBHKþû;I,ÐþÉ…@Gdf”­H#"&'>7>'#53&'.>7632#4.#"3#>3632b2)O'*Ò2'V7   0 $ݦ /-a¦Ê™DP$%T) òÅ):#b Œ"L,“B ‘  7Gd17;V^(X²w4K,9  %(d2‚;6 "®° !### ###,*ÆÈÆ‚*ÆÈÆ,„ü|„þÔü|„è°"3 33!#5###3!##535#3!53ÆþÖþÖÆÈXdddÉddÉ,cdcÈdÈþÔd,þÔ,„þ ddôdÈþpÈdddþÔdÈè°"3 33!##535#53!53!#5##735#ÆþÖþÖÆÈXcdcÈdÈþÔdd,dddedd,þÔ,„ÈddddþpdÈþpþ ddÈÈL° !####53##5##3,*ÆÈÆ‚dÈdÈdÈÉdd,„ü| dþ Èþ ddÈL° !####5##3#53#,*ÆÈÆJdÈÉddedÈd,„ü|„þ ddÈþ dþ °° !####53!5!!5!!5!,*ÆÈÆ‚ÈÈdþÔ,dþpdþ ô,„ü|¼Èþ Èþ Èþ Ȱ° !###!5!!5!!5!#53,*ÆÈÆ®þ ôdþpdþÔ,dÈÈ,„ü|¼Èþ Èþ Èþ ÈLL!2#!"&546!"3!2654&,¢îí£þÔ¥ëë5þ );;)ô);;Lí£þÔ¥ëë¥,¥ëÈ;)þ );;)ô);LL")"&5463!2!"3!2654&%¼þÔ£íî¢,¥ëëAþ );;)ô);;þGMë¥,£íë¥þÔ¥ë„;)þ );;)ô);dþ úLL"463!2#!"&%4&#!"3!26!ë¥,£íë¥þÔ¥ë„;)þ );;)ô);dþ ú,£íî¢þÔ¥ëëAô);;)þ );;¹þ³LL"#!"&5463!24&#!"3!26!Lí£þÔ¥ëë¥,¥ëÈ;)þ );;)ô);þ¢úô¼þÔ¢îí£,¥ëëýËô);;)þ );;Úþ³L!2#!5!2654&#!5!!5ô¥ëë¥þpô);;)þ ÈþpþÔ,Lë¥þÔ¥ëÈ;)ô);þ¢þ¢È,ÈØÖ%276'&!676/#"3!“  þÔš  ½þõL .› v¯  ÕþÓXþJ L%!"&5463!5./"3!2?5!!5 þ );;)ôÈ]]¥ëë¥,/5dþÔ,È;)ô);¹ë¥þÔ¥ë¹È,Èþ¢°°$'''!#!"&546;7'#"3!26=°•þªÕa•ô²z;)þ );;)œvJd¥ëë¥,£í¼•þŸÕV•ý‹{”);;)ô);zNë¥þÔ¥ëë¥b¬¬   $  6$2"&4¶D  þîþ¼þî  _þªóóVóþ rr r¬ þîþ¼þî  DóþªóóVr rr L°!! !2!46#3¼þÔþÔ½Âü6 û´Údd þpþ ôþ  þí d2L°!! !2!46#3,'þCþ>K û´Údd¼þÔ,ôþ þp þí d2L ''!2!46#3•TšþF–›K û´ÚddT›þF—›þk þí d2L° ''!!2!46#3™aÔaŕԕî¼ü• û´ÚddOaÔb•Ô•ø»üà þí d2L° 7!7!2!46#3•Ô•øýEaÔbþ û´Údd¶•Ô”í¼þaÔaÅ þí d2ÿÿ°¯ ! °þ%þÊþxwý`¯ûÉþw Ýý8âdL°+!#"&546;!3+3L–ýD–úôdÈddèü®þpèþÔ,È>°!#"&546;!3'#3 '7Bþ†–úôdÈþìxddXþ%ô{xaôþpèþÔ,ÈÚþíx=Èþ2þ$ô{x`°#!#"&546;!3'#3''7'77þ·–úôdÈgªddÓªªªªªªªªôþpèþÔ,Èþógª’Èüªªªªªª€©ª°°!#"&546;!3!#53## #¼þ –úôdÈþpdd,ÈÈ,,ÈôþpèþÔ,ÈþÔ,Èý¨þÔþÔ,°°!#"&546;!3/#533 33Zþn–úôdÈÈÈdd,ÈþÔþÔÈÈôþpèþÔ,ÈþnÈÊÈü|,þÔþÔȰL 54&#!"3!265!!°û´Lû´þp„––dýÚ&þÔÈf°® !5 5)533#53! !;#735ô,þÔþpþpdÈdd,þpþÔ,dddÈdèÆþÖþÖÆÈÈÈýDÆ**ÆÈÈÈÈd°°/%4&;26+"&5'7373°$þì% Èýv2dÈd22d22d2RuEþ™5!þs“dþpËþA¿ËddþÔ,ddþÔ,d°L3%46?5!2!4635!2!5"&5!#!5".L2þpKþ Kþp"2KôK"jx88 &þvŠ& 88 üˆ88 &Šþv& 88 LL !%.'!!%354&#!"3!26!!%%!)%!!'!7£dþ‰dÈ'iý¨;)þÔ);;),);þp,þÔXþpý¨,þÔÁ'þWdþ‰dÈèddÈbbÈýDô);;)þ );;È#…£…bÈbþÖddÈžŸ!3?6&/&&'&'7>/.³¢>’fgÑ—{£À4w|~ev‹-‘¢ +‰Ôfg’=!¢/ˆvg|~Žv1°L"@5.#"?>=6 6#!"&=46754>2°d|Ú~\¦ud?, Ê>Êþpmû´m&RpR&ÈÈA1)!((! È!"’’"!)þÑ3ÔÔ3/2  d°L7!'57##5##5##5#!5¯¶}dddÈdÈddd„û´È–údÈÈÈÈÈÈþpdúúddd°L 32!4632!464&+"Xd);þÔ;¹d);þÔ;ýÑ;)d);L;)üè);þÔ;)ýD¼);üà);;)þpÿœ°L'+#!"&5463!2!!3#!#535!#353#1#°°|ýD|°°|¼|°Èü|„üàÈÈ,ÈÈ,ÈÈddd þ |°°|ô|°°ýDXþÔdd,ddþ d,þÔ,ÿœ°L'+#!"&5463!2!!#5#3533#!#353#1#°°|ýD|°°|¼|°Èü|„ý¨ddddddÈÈddd þ |°°|ô|°°ýDÈþ ÈÈôþ d,þÔ,ÿœ°L##!"&5463!2!!!5#353!5#35°°|ýD|°°|¼|°Èü|„üà,ÈÈd,ÈÈ þ |°°|ô|°°ýDXþ d,dþ d,dÿœ°L#!"&5463!2!! 3-°°|ýD|°°|¼|°Èü|„þ þÔ,d,þÔ þ |°°|ô|°°ýDô––––ÿœ°L'#!"&5463!2!!!3264&+!#";°°|ýD|°°|¼|°Èü|„dýDd‚)69&‚ô‚&96)‚ þ |°°|ô|°°ýDXþ ôþpT‚VV‚Tÿœ°L%)#!"&5463!2!!3#!#5353#335#°°|ýD|°°|¼|°Èü|„üàÈÈ,ÈÈ,dÈdÇdd þ |°°|ô|°°ýDXþÔdd,ddþ ôdþpdÿœ°L#'#!"&5463!2!!5#!3#3#5335#°°|ýD|°°|¼|°Èü|„ýDd,,dÈdþqddÈdd þ |°°|ô|°°ýDôdþ þpôdþÔÈþÔdÿœ°L#'+!2#!"&546!!#5!##53%#53#%3#!#53ȼ|°°|ýD|°°œü|„ý¨È,cdcdÈdý©ddôddL°|þ |°°|ô|°ÈýDôdþÔddÈdþ ddd¬¬   $  6!!!'57!¶D  þîþ¼þî  _þªóóVóÖþÔ,þÔdd,¬ þîþ¼þî  DóþªóóVGÈddÈd¨¬  $  $  6#5#3##!#53²D  þîþ¼þî  _þªóóVóÒdÈÈÈd,ddd¬ þîþ¼þî  DóþªóóVGdddddþpdÿòÿœÂA!32654&#".#";!3 33 €xªªx.,,µn˜ØBUqOÞdÈþÔþÔÈÈ,¬zx­aw×™ kEPr,þpþÔ,,ÿòÿœÂA >54&#".#";## #X“^yªx.,,µn˜ØBUqOÈÈ,,ÈÊþmœdy­aw×™ kEPrþp,,þÔdLm%!33 33!!'¼þòªþòªþÔþÔªþòªþòK^KÈ,,Mþ³þÔþÔ›--y7›)%32654'>54&'.#"&#"327!¼.6Ji 2;{Y“^t£ Ji9/iJ8,K^-2iJ f=ZƒYq£tiJ5XJiþÎ-d°°%!2!5#!463!546;235##!"&= ,);þ Èþ ;),;)È);þÔÈȼ;)ü);è;)þpdd);d);;)ddýDÈ);;)ÈL°#'+/37;?CGKOSW54&+5#!5##"3!2653#73#73#73#73#3#73#73#73#73#3#73#73#73#73#L–dþ d–èüddÈddÈddÈddÈddüàddÈddÈddÈddÈddüàddÈddÈddÈddÈdd„–dddd–dýîÈddddddddddddddddddddddddddddd°° "/' 7'!'&4762†*$þéÔÐþ„/ÏÒ, #*¡þæ*#þõþÔÒÏþÑ|ÐÔ$*ÿØ;º°O%>'.'&#"327>767>'&'&#"67632#"&'&>767>32EC8fOESkZ(GþD0#vF?8!@)'(Š#Z .C"þ|Ey&$ýÝ4I7Z 0$&\4=k6_v[üýw<ÿC´]W†$!7GþD¾N9@1*+,Š#b/W""þtCu$'$ýÝ4B?#>@$$\475›be[ùÿd°L!)1%4&+.+"#"3!26#53"&4624&"2°;)–37S*È)R:. –);;)è);ÈddœÈÈ>X>>XÈX);E5+);;;)ý¨);;dÈÈÈþàX>>X>L°#32#!"&546;5463!2!54&+"„d);;)ü|);;)dvR,Rvþ ,È ;)ý¨);;)X);ÈRvvRÈ–Jf°'/32"&/.546;7>7'&6;2"'267&Rýúñ::v?zS^Sz?þÞl1 8F8 ( .))­GM~ %Mþ¹þ+1==1ÈL± 3 4&#!"ÈÂÂüà¼þE~o DçH.7>7>'>7>76''&'.7  &:4? FFB:8( OV $9DkC@&¥¤'GOS3 *gJ.ó ;4( .MV .nhB8- %>=Bí'P¨d!I,  =CnC¬Sm,UŸ!†Ù•fm§¯…7'"/&47&676´û ¤{‚ý¬+oX!N`¤Žþý ~¯\F/ý¬n+WeÉ6\eŠA(˜‘_<õ°Íöû§Íöû§ÿ:ÿœÝ”ÿôÿ:þÓݘ¸(°°°°d°°ŒŒ²FÙÙ£HF°d°È°ÿò°°ÿóô°°°°d°ÿ¸°ÿ¸°°°°°°°j°°°°d°°d°°d°°ÿœ°°°°°°°°d°d°°°°°°°°°d°°5°d°È°ÿµ°!°°°°°°ÿ›°°°°”°°u°°°°°È°°ˆ°È°È°È°°°,°d°¹°°°°°°°°°°°°°°Ì°h°°°"°°°°ÿðÿðÿŸ°d°°°d°ÿâ°F°ÿ:°°°°.°°°ÿ›°°°°°ÿ›°a°°°°°°Ä°dP9È'dØddddÿœÿœÿœÿœÿœÿœÿœÿœÿòÿòdyÿØJÈo****VpppppppppppppppÀÎôBJbšÐúNnÆ&âfzœà^€úPjŒÀä<ršÌú0z¢ & F | ø 8 ^ ’ ¬ ð . x ¦ à  v Ò . †2ž.f˜Àü>†Àì8N\Œ¨¾ê0D\ˆ¬Þ b”ÜPˆž´ÈÜø>xÖ&Œô$fš¼(Pš¸Úò B¼L® d¾ìDrX²ÊxÆN®  4 l ¤ Ì ö!$!R!†!¾!ö"0"^"˜"Ì##@#j#”#¼#ì$$6$`$–$Ô%%<%f%œ%è&2&„&¼''D'x'¼((:(l(®(ò)6)|)¶)ø*.*d*Š*È++€+²,2,|,²,þ--‚-¬Ûš@.º j (| ¤ L² 8þ x6 6® ä ú $ $4 $X È| É0’www.glyphicons.comCopyright © 2013 by Jan Kovarik. All rights reserved.GLYPHICONS HalflingsRegular1.001;UKWN;GLYPHICONSHalflings-RegularGLYPHICONS Halflings RegularVersion 1.001;PS 001.001;hotconv 1.0.70;makeotf.lib2.5.58329GLYPHICONSHalflings-RegularJan KovarikJan Kovarikwww.glyphicons.comwww.glyphicons.comwww.glyphicons.comWebfont 1.0Mon Jul 1 05:26:00 2013ÿµ2Û      ï !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×glyph1glyph2uni00A0uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni202Funi205FEurouni2601uni2709uni270FuniE000uniE001uniE002uniE003uniE005uniE006uniE007uniE008uniE009uniE010uniE011uniE012uniE013uniE014uniE015uniE016uniE017uniE018uniE019uniE020uniE021uniE022uniE023uniE024uniE025uniE026uniE027uniE028uniE029uniE030uniE031uniE032uniE034uniE035uniE036uniE037uniE038uniE039uniE040uniE041uniE042uniE043uniE045uniE047uniE048uniE049uniE050uniE051uniE052uniE053uniE054uniE055uniE056uniE057uniE058uniE059uniE060uniE062uniE063uniE064uniE065uniE066uniE067uniE068uniE069uniE070uniE071uniE072uniE073uniE074uniE075uniE076uniE077uniE078uniE079uniE080uniE081uniE082uniE083uniE084uniE085uniE086uniE087uniE088uniE089uniE090uniE091uniE092uniE093uniE094uniE095uniE096uniE097uniE101uniE102uniE103uniE105uniE106uniE107uniE108uniE110uniE111uniE112uniE113uniE114uniE115uniE116uniE117uniE118uniE119uniE120uniE121uniE122uniE124uniE125uniE126uniE127uniE128uniE129uniE130uniE131uniE132uniE133uniE134uniE135uniE137uniE138uniE140uniE141uniE143uniE144uniE145uniE148uniE149uniE150uniE151uniE152uniE153uniE154uniE155uniE156uniE157uniE158uniE159uniE160uniE161uniE162uniE163uniE164uniE165uniE166uniE167uniE168uniE169uniE170uniE171uniE172uniE173uniE174uniE175uniE176uniE177uniE178uniE179uniE180uniE181uniE182uniE183uniE184uniE185uniE186uniE187uniE188uniE189uniE190uniE191uniE192uniE193uniE194uniE195uniE197uniE198uniE199uniE200u1F4BCu1F4C5u1F4CCu1F4CEu1F4F7u1F512u1F514u1F516u1F525u1F527QÑK(bootstrap-tour-0.12.0/src/docs/assets/fonts/glyphicons-halflings-regular.woff000066400000000000000000000401001316367154600274250ustar00rootroot00000000000000wOFF@@sHFFTMXh+¶ GDEFt OS/2”F`ilãcmapÜ~.©/Vðcvt \(øgasp`ÿÿglyfh3Ä[XòÆhead8,468=ðhhea8`$ ®xhmtx8€æ ploca9”©¸Éîà@maxp;@ .Ëname;`„|Ô–™üpost<äRyÖcQwwebf@8K)QÑÌ=¢ÏÍ÷–Íöû§xÚc`d``àb `b`Â[@Ìæ1 ¨ xÚc`fidœÀÀÊÀÂÌÃt! B3.a0bÚ䥀 ‰êîÇàÀ ðÿ?kÅÿ/ 2¬Sx€ÂŒHJAŸ ÍxÚÍ“?LSQÅÏ£-PB¤©€tÐ{Ó 0 0K*N¢‰\hˆA4 jÒÁ„Í`X1YMØtÔѸ¨ñ¿ÂßNN’h˜´žûn]˜\L|ɯ¿ónúî;}ï+€€9Jê€à&Dp5×#•õh0ËóqäxM ,:±bël—´«éd[‰g$"qII»ôÈ äeX 2!E™‘’ÌË’F´VSšÖvíÓÒa-è„ÎhIçuQ—·P.óÜ{v†Ä$!Vº¥WrÜyDƸó”ÌÊœ,h 1M¨ÕVíÖ¬æ4¯£:¦EÕ9]Ð%·sy»¼^ž–šÍíÍÇ›7"ëMkûÖâ6e[lÒÖÛj3eóËü4»fÇ|3_ͳa®š+æ’¹`¦MÑLšqsÖœ1'MÁäÍ1“5ý‡^û§õOŽz÷Qu«rÖ>{_¤Ó½(²R¡ºò¾/ÔÐ]$éIöÓ«4é¤M@[àA3‰{p€nðð­C(q÷OÑœqß9H'צYBÚýLI7éaî§{É 3‘É3§‡=์ó zŒL0»µ¢§è)2Ã|šæLJ‰ù=Gæ™ÏÓ d‰ù2 üMê:_£ÙYk™y²³ºÎ×ivVvÇ º•¸þ7iöW÷칟fÉómšýuˆùÍÞêúߥG‰ëŸfuýÐì®®óCšÕu~D³³ºÎOiwEæç4»ë2óK` pÚ¾? ÞÐÏB€·ô‹àý*xOï†üH†éÆàÝ|¦‡kt&XçÿŸ³õgÔƒ*7˜{¦5ðcéh ÿõQ½w¡ño®ú •ýH(øÿÿxÚµ| `TÕ¹ð=w™›Y2û›m&¹™ÌLÃf23@H‚aûQpDÁ€@qm ‹`¥Ø „HQ»`_¥…^Ô¶j£Uú´¶¶”VñµÊk+d.ÿ÷;“L´ýß{¹Û9÷;ßùÎwηžË°L%Ã[¸2†cD&òaªGyæ|ô9ƒðŸ#Žr,\2ÏqøXÀÇGEéq”àó˜Cqb%©ûë_¹²Î*Ùפ˜ßÄ712ÀVd1äð;ÄPR‰+¡¤ìˆ9’²¨ðMZúÅM/ªðÓÒ„Ë\Ž\èý„ÖcàÁ…kF¸Ž®ÿ«EëÐZH ï-{¥µP\þ«üa&‰ïøøX´žÇ ¢Á_Š?«IÂ!‘LÄ¢²Gö×DX¹•Q1H W¦u“¼šb‡K,Ý÷óU–wS+„3©‡ï<öiËÃó±¦ ¾‚a£\dmJë0ä„;ÚŠωZrç7"W§ªã©}s7½tó’dóàBwxn}*’üTÒÆ7±Çþ´O|Sç:n#{\ë`ÈåOI˜?Á_ÅxÆ¥Dñš ¿\Œ¹ArËV"¹=GÙOV8°:?¿üëï°³Vð¡»V?k]°ê×; -Ö¥c¦®¤dƒ_ŠoÚ±ŒÀä1ùØ  áJæÛ/Me›Š|»Ö‘"m—¦’6•oJûf­ƒmNï'áÒUeîòg—?ã_â_bŒÇ’‰šj,·# .â'ݘŸ¿ÓVa›§±‹ÞN?¡’I¿åÖ\—²îÌÏ_йœ>Ôæ·ü¶k\³ÿ†dǹoøL@‘€o€"{œ„;? aÍZR©dƒé3XßÊä_aÊàÆ­Dö‘d=‰;j‚¢t¢Ï2¸s#'L™ãt<2eì «)m7Yñ¾âá)W5sϤÿa—‹V&’U…ò´$·Âdæ^æ\¦ôGAáÊåUEÒüì<  |ùcþ§üNÆÅ3Œ‘xÜ6b(à) G#¹»§,a–q[IX—å¹ó´ŽU›Uí¤X³¤óÄùòËÚ'h …ËD‘„'ëeÚÔÍÄ£ýõÄËP…òo3„ÍBßêY+¹­œáã5pCØG¯]}gsbÔšûëë÷m\3jèÜU«ÖpϹš4£uä°5÷ÞstÖ¬£÷Ü»fØÈÖƒøñ@Zöò÷˜qüv ¯‰±T—‘¸ˆâй’ää­Ú½Ú†Ç´uä·±‘w:],kÒˆK;Oþƒà¤J‡ð@7 7òg.”PÒý²˜ìž6{ÂËMšü_?ÿcíÞ> µüê¯~µù÷_Õn#9|à>6 ñò`©ID=^â6ø%äYÒhhÿg{C`Ë–-„¤¶ÇÔuííëÔØöò8}¿‰®mfÆpd±RÆÏ„˜L5C~Q²_Š`î¹à,àuÎÙÏI¯gØ® üw<½Ÿm†‹Îu©·±û¬âóôèžù¦KÇø&`[œE©ì?¸ g.éÕ×7àXÍ4 vÐO¥<œœˆ)QÐëþKË/x%­Eòz%Ò&yÙæÜ»ôþ+—ñEÝ׹ϽémW(Ô}ðŸÂÜÀÜÆÜÃlžHnÃ@¢_-L¿äþÿ¼~Ø+©ˆ=H[ÿ×üïÔዲWý´kÿ'Å cèâó\º÷Kqä ¼§¼âÊ 0—Ûº¾ùšõë¯if€V©Ë—ùvÁ :…·KRý8#Y»fy\Ÿê’W$AÉ —Zâð»bÝ?n#q™lVó¥³f«ÍD\µU$\U›Be’ÛX[• 7:WÓ?¾ÉfŠš­VsÔdKUÕÖVaaçU#FTHÝý£sþ ÿè Œª®ñûᑊàaLÙ6öÐNAy`›Ù Sœç€7­ŒƒjÕ¹BnÙfÒf5wFÈoàÕhïz¼ã×›­(’£x†çñ‡€¯\¨{1e¼ÓÎòe¬ÝÉÜÆ%Ä$xí2š8÷ìÑ>ÑŽkŸìÙÃÞ øì32û3m!à˜âu•'Öô|¦—%t±Ý #¸WÊ¿ÄÏ)$ÆÁ¢˜á†}ãÓÊôÉ‘7¤½î×É‘ôÙhñbì+*é$ êÏPˆ;°ÏºìÍÂA2´ÏbµT>È_´÷UVµ÷É]GŽtYI4 ` ƒ>­A×<dÆO¢>VŸÄ5õ¤»Óf#ï_xÏ 7ìÉœXV;ôé§dæ§šºãâÅ*¤«O×}ª@¬¼½è[Ô?}E?Ž~× ü­ÐØ•é›m‹íÒ#- «2—âŒeY‚(\LV’1•+ûÞ`¶r¥÷.P£$UÉdD-€¬ÁýR³¨¸ìôÀ]b úàžYêDÁqEÌßÕ~ÝÞF‡>{šl…‘È®¯%ÈnCYÐŽª¨8Ä ¨n –,¿sÇEí° >¼ü1Ò¶õÉS™Å×T¶VJXS§aÉ]™‡p¢k7CaÛ­· ”~0( $؃°&â1y°‘E{|[ËCÏ]Ükð©'·¦÷÷¸åʶM½ø6{×VÐß[ºï€»˜µ© íûÓÁp(¬*€lÀÎ#ýœ«ˆ¤Àš‘B»•j°R-äBzÿ]á2¿cÜF•ìŽÜƒ¾>P=•ƒñcb(/Vá ¢£žøØz¢¢Ê^¹vcÛCwÌuxhõº•KèHÛ˜Û–Œš…1,þБïFra>‡0aVœáÎi–(9ëˆVªƒC¼Ù ‹=³ÇsÛ!]kê Ñ¡ˆ¨„$ùöTÚ™b?é\wûâÎ¥: xr„ÉYP˸Ò.B@âDNVà`”<œì¡’¨ÔTµ¸ïÎcí&­ÞdgçU²SI-2¯ ŸZdͦô~“™ ².¹`rqud.Nví™u7¤G«*{\UÓm_7Y­&<èôŽS<Ž€®lß>:¾Êåø-`}a›œ—Q‡%¹ Mwuw›ÉÝEpfŠÞfºÛdÍ´yéX©Œ/¹§¿A_r7ú€‹½ï¹/)G«0½ŸúšußIgÞqç$¯ 7Л2( {¥KÇðŽo’¼Ü º)éöù´s_rù/áíú¼û”ŸËõa¨¹¸©W,ù÷°¾ÞÔ0ËZk½ï]_RŽ~A¤´Nu­E§´NuU§´NuàгŽÿÿ˜ÞŽ^xü»÷¹Èü+×ÿÂyýúÑÐIñFÍ ñ@M-Ð}ÿ/Ë»}&8zÏÿ^IµÜýQèÿç!ÔpyW—ÞzÆf83Zó±Þ>ÈÞóQ •,|Éò  w·JÚ|nÍB}Óܾ΂ӧŸaï‚GôQ*@åìzãö¡uÜ?§ü|bjâÝê&¦uA¢ü’Ó/Wo¿*zHúô õDñËúuº»K ¤ÔÜ^ö§îKtå^åôèÀ¥cì£ÿR§t{ txãì0²ÜÆpiÚY—²Ÿ”ê}˜{2ÝJŸ< Çt‹nuwë@MÔŸPÚ¨QI!D\ zÌj úº.íw9ùfW!(Sÿ &ÀÇé¶É-“'·ðe,ä.ÀqBºô…ûw“zíÅÂɈû×.Æ—ð/•]!QqS%'‡‚q0Á\ÑDMc§¶yíëkÆÿá°a¦ò¯¿}`Ú7Ö,}üñ·w<ο´þ­¿o_ù÷ÆFcùÒÛöLüÊÚu¿¾/=‹–,}œê¯Y‰ÔËCBå»§—c„4·_ºÔËÒy=7Ív*¿ïdxî·‚ñPùí3 ‚$¢Û´žã"l(˜h 4ž)³¤ñSæLjL^ÿÄ”•?¹wô²Ûo#z"&k4^—´Y¯½V°ÛÒºêö;sÍÎT-o˜÷âªyßûæ“';×<*Çoª‰-ß1mú­EÙ±9Éß«´ÂÑ †–KÊ ^Ý£‹¬XG„$ ~æ 麋?ú¶Öñí>ú6Y^úí4úðÈ…ªZmð7Éî•ÚRîÁ³JVhwýŽV û#CÞj«P«­º{f”ì^¡-e²~™íÀ%LDWts‡lýÝ­ÇA£—Ê­‚XÏ•¾©«y}`ÖÖlósÈ-ÚN±àêQ³G 3ûn¾ùŸ—œŒgq˜ZÖœÅá~2šÔ¿ÃZ娍e£‚5.#!L>û/ZC=ñ‰ö¦/ä 1ê¨öt)㉇µéÛf‡}'‹ü\1›|D›¶íaãÔ}ؘ+÷K10]àÝ…“#qÂmT¢½«û°Aý»„~‚ÇêSú“Sp]yJÅÙ¨žÒÞéÒs7B_ÀÊRH/ƒä˜š%G\ ç´ YË+iÉŸºâ¯4`ôÅAÐ\ë aô…§R˜g`(LcDú5¶F£ú´ªÞê§a1®áÀÔ,½t ÇJeRÜFºNÁÊèè}úN‘¹ÝÂ/WziÛ`§Søº?gôù¦ÜWº`àªÓ¬2Ó?$ƒ yI.@ÿ w|ö ³˜žô%1$h–À$ó¿&Áe)‹tFêzióT=&/PBg ÂïyÉ  ¨ƒõœ>ö}áÖ$¸éÝ0ûÀ£°(ô“,à+áʉ# ô D=ì£é3ÝoãPó•é×vd¡#.Ì÷‘ûœÿÉ%i~ˆñ¯ÚSdÁ_Óíâ_ɼ8Œ8Û/¿ÉOçï@-LÀˆ‘E‰%# ´§þÆŽH$Sù¤g+ +Ç?Ë?KíëXA‚IÓ%,uÀºöìÑÎkǵó{öi*þãŸí~âÂÐÇjO¸¶žp]˜Ð Þ#lsXÚ»"~.Y”“r2” ‰¡ÞðfnÚüÖ¦MomÆc_Àïd‹:6mfzâêèÙ,MHêÞ½¿gÑaâ&»Žô½pÑaí#²ë°.·»á&@§é 9VÏÇÁÄÄÅX $j½0œ2™Û Zy׫¾DœƒÊKüCF)^ü`o ¬Ày+ïâ\ž”3~~3¿9‡¾/CÇB¸ÂßL_ mîõµw7“{f¾Ú¤ÍÑZ6hïn"!Ì] 1®T†û{kÓ®á²ËGP„c’ùýÇÝñ­kw‘oç ¤_º øá¼ßpû°´ïìŽtÁ)ý'q{½níM8Þ—B)”éD£Þµh‰Ž Áj‚‰•6báùÊz·›Ê…zþc¤óW‘rÐÈ9ÅQÅ"gÜÆ²åæºP™÷¿< >Q¼¡:“ŸeoCg8¬*ÚÀWk™“M®ý‰+w:÷éqjel‰¡¨÷ƒô˜{WM¿&|µ™$½Ã‡ù†´ÿ³=²h8jе3Ç.²xq ÉÅ6Wš*çÌœ?®ºzÜü™s*1Z×ã^k©Œ]W{‹•ŒŒ^8áÌœ5~ÎAÓüºyCÉo—¬µ¸`~ÃC_èK;Øef(Fõ@äig0N ãE¸NCIXù ôöȉjf qj§¾˜þÌÊÅ!SW_®® ÿ(soÚ6>èT]>ØUM º/’ŸŽ–n.½ùt§Zö ·a s‹tÓÍk†ÚºzâØœÞ_i©YºpQÉV[0l(ÉÞ3ø±Ä–‘níáMÎ}˱?ÚYr:S=§dz1›o€^åäÂ:êDÄzl°‰ÁƒC1²~©˜T Ö@±”^ïêN¯—Š9»ªí#/‘—´} Ç•ñeŠ¡ìÒÛe£1ýñWéAäB †ÆH$:¯ªR>‚ªb(à ¬jâ ¨4&='’¨†‚ÎÀ•‘¥6OCÛ™*rÍ{ž«(¥ítxldióºfögÚ­CÜUî|ËçÚç×zFJvãäÉF»4Òs-?·äCÑ+CfÔ77×S›–Vó‡c§ñ ‚!äXÜHâB2¤HŠW~K1îÙô~í áØæ¿álKÙô<ÞrãñîoÏoºë)®,½_e›O¡Ýuò®ÍÇÔWèÕó›×æèíÎLLƒú5ˆÃ¯ÛF)îyéCÚë˜ÞÂ7Áõ~0 PµUlsUm66Bó507H— T.€ý/À¤©#Šä–=˜ToÕÔ=ȇ‰á$l(MºéÉ?yÓ¤Pn³Bñ@mU©Ã Ú,,Ô+£µ¨¦¯_²bj,6uÅ’õÓ¨W”]Wh6»Kü•áH#ï"4{ù÷Ì÷ø[¸÷³ú¹L¸ŸþQúø‡dþ÷>dG¥_ú,ÀñËœá_ã™Ln‘ˆì£lãïµ§´=žaG}ˆ*ý‡Τ„V‰y4÷Æ¡€dðy?½àwþá×äîSd øùOá~•Ü÷ëÎHÛ¬j-ÚI1Íbí€;JClhÌ:Eu[-ÎÊ$t ¡T¢g¤=%I0OB\0‰—õ„/š‡ÞÈÄi6Ïç,õ@çço”ºÈäÁé‡Ê )Áf-äî Å|;”u6ðùž(¾Õ>·äUxÈo œ®½)GlÊäÚ€fËäI ˜ÁÙÁz Tz4Í7;—¢iNjçzüSxÞµ`漋sd_U$(ä´šyUOì¹4•„1TŽ\R4+Š0Ð=?#>FêJ%‘S§È2àÔ)ímÔ(cïÇ}P«ô” ´~\Aç‚‚^»¥5IõÉ“¤J·ËoðõÈ8Sœ‰NÊ.¡WŽf%áWzH¨p³{\áÐ¥_é ³ŽÜøLl˜ýÐ$§+RµUzÒM £yG—weö&ä3!ÌÉ Ç%3­Êƒ÷÷»fõ~¡ÆÁ¢‹¡– Ë"éJ@?ƒ~…ž8Q‘8Èïh 1Ú{Úþn|pþ§þîn²*¥=Òñ]ó`‘øY€OÍ© K”š ¢d—’õÏ%e‡¬¸ê©¢H}èXÝéÛê(âz+Yb5;,ˬæY$2ké²™K7ˆÅ6í øL‰uxŠî7Û^µ;v-I̼‘yžLÛfc¸Åg –«Ûi]ÓÔ6Y{ÖÚ›Ïæ;¦«5ã5d†Té“Ü^BXNà,yÖügtþ”.^È×7¾6ú0”}|¬”ñ‡À‚Ö$dEÇ:GÓ\D«0z…¦µìR’ŽÅþ7d™èRæilņû—Ì\~+öÂl]–o7_»Õ$6òf¢U¼5H`‰v€= ÚðÔ³|~È‘þ4ÿ›•™1¹­‰¬±Û¥ü–o}Ïl394§IªÊ­={ ùûyqŽY€²I°‚žIíÌî âÔwîA3F­œEW˜¨pIÙJè ä'9<²Pˆ ßT)iÏB“klk‹ÇN1aóó÷¾¤?žñ¢§Po<EÌÀ^z—ÌÎôné,íÍ™’¿ÜSªm7¸JŸi$3f?æÌ×»ÉYQQÛ~Å^lØ A¿(Í]4qç…¸*¬é:Gú ôÝaœ¿ôÐÝÝ`â¬TIþÚZÐFB.… Á2Ã]µ7?ýŒ±é¬ÍÓ’´­!“Ú&Ã’zÈ]r¢¡Àó½çÉ?ø©ªÚy¹‡ÌF^²i;J=Ëó‰»pëò™íÌC‰íÓé!ªY´çqùÎÇf“ ݉…sî cÅX‰f-[\Ý\ ®ˆ`O^»·Ë_ññžö¼w']ÜÉcÚrþàíã¬Çbï]ïí¹Asž>A‚d@—Œ:°ítåŠâÆ¡.à fggá[Y(\û¬ÖˆÖÁ„›»öæ€N?«9qúdÎýÁå0G*H¯¡p»~^E×u¿P1G³ù¸.]ÆõëB'xXí u5=¿•®%ݰfvö.ƒõlÀb`.eŽnõP¿|lÒc€³ÛJÍY´TàwBÁú DÃu2f€”‚P„’$˜bÁ$:È’.”!çAÍAt`x¦›'Zß—VÙÕçÙêlR=ǹ7DÈ+6”‹§ ¯`¦§~˜7/ d ¢U¾r?gä[Ç:Œue{ÔÎCÏæÉ.—Ù`7T,•V«‹ç¼` <{^©S6šªü ³©4i1"Óm®2»ƒÃ%®ˆ39ÌξgqLè$†lfY,_!+«JŒc Í.ÞâË«öñÎ îq` š,ìJoE})臢ÝLX³Ù/³Õl~ç :½…ÞŸÝ@ˆhrÀ*/ÉMÖîB£ÓÅÍrH*«¸|Nà+ü w‹sHˆg ¼%ÏR!š,èâ¤{]æÃXÊÄ\CºïêG+飩 ÐϳT޶Â;`:ôx€.òÞ€iùC¹zŒzÅ›l>zF×7êú¢¬`ßÔYå6j{ARÃk˜ˆ Ò2GÿBߊ½^ ÅVuçQoKR’ž“ñ›Uô·ðÕ÷©p•þ/¼Q7³Í™ó»z1±Ñ[õ¾Ko GÝ<\/ÏîÚÏï§ùÌ¥ «™¦+e5PöRÑ%$©Æ­ß‡Ä¬QŸH&2Uâ5Ô-ŒµÉÑ+8ÓoyÊÊvùS~ÿ#À ­G´÷­ÖP§Xë`rh& Ýte,g(!ÿéZÜAøÇ ÎH©×ŸlÜÔxý #µ?66vÐ+RÜØ¸É".îÐÖbo²‘ìpÐæ;#q¯ÉÀëá•Fí#o¸¾Qû\Â?€W|åŸ78 M6^?O¨™=à/Ã$°’F»õº—Y·»Õ‹vx"5\·ƒõm“Úwf×ÕÍ®Kqß—¢Ÿ/•:Ç¡¹ðlz´V‡Ež„'¨5¿cªaŽÓ¼j èx§™z1XJ!º–P0rõ‰,â¾Æ?Ë\Ms Y˜Ô/ªÐMçǰ€:e= ÝÙãè3È1Éïk쮌6·0Z5%4@~3š-$ ’Éaq[*Þ{¦Àm2rÕƒÙˆ™ÑäÿÉ^øÑU9miãÈ$lçéóz†n„ë.J^ìÛ^!én {×;ï€S\_ »ŽØÐN^EñÐkïkßíÛ^ï|,®W{„S¾€dÚÞ‹¸?Jë@bÓþ§_Ímò 4©à¦¹E¹cÏÐЯ¸Àq(qà¬6lø!§jZ™5Û,èK ô£oæ†poóOÒ %b((* g2Q +),µŒº{L‘.“mÆü|¶ÈfÌ+ O°l^žÑnä_Òþ»Éa2yHd— Ybg[]'Ë“#‡)Ï&¼¥ýªÙ%¹´ nÉÜÅ‹´?´Õ.êÅ1­¾‹t ™>qeYzYÕë¯×ÉXOéVO¦CßçE–Õ»hû>Ý ··gœ®ºŠaµÂ‰99Iµ úsS’øöíÚ·È‚íäÂÑ»²#µ»uBJo÷éóìñíÚSo‘ÙÛÓ_Yûµì0Þ59›Â´a¾8ÞšíV ‚‡JÝw>:÷¬\¹g壻òJ,Ïsú:íÎì\4²”O‡®É#“É^"':|Ù~阕;ƒ›bè'#p»‹ÅfÒΗٚŠ^&ps.PŸ i£´ú‰90uÿ:ÝÙÒÌ{èÞ&ܹBó¿zÜÎÎ|B»cW.DÒÆÎÜ¥}|—¶4 ß…#G¿ Q€c,ÊüDüÚI°;t, '·wlÿ„=Þ¹=6?eAÇB/ü“ýaç¹øò94ÈÂÇ´ðœz’·!¤ÇpL+Î%ð Û;¾\£I€ÀÉ\ðô(—é¾üš C¹€Äß®´W´Õüªô|þÈ¥ÓÄ®­"{Ø÷ÒCOy:Eq’èî š•„;§²üŒ;­Ü­êsïHÞ®Ú‹(Ø•s‡1uKOUwûhÚ[†êéž ÜÇä¥q”ðd‰„8šVJÊ„mÔì«}¼š§{ªÖ®& `Ôs¡ŸÑίfëT-ªU`ñ|Ú–A°fÚò÷Ó–C¤m‘®Ýs¢Ì:´»[¼ùÀ=À¿:pàžì_¯FµÏn>@S;}Ùò{¿s ç~"”¬ýõ Ç­[¨‘Á˜YrúÙB·jéÎ’Þ vd6qéq¼¡jÔ2ª;W[ÞÝNfKݔ֧åê+™ýn˜=ÁéyưŽ)5»wb°]–€qηç&õ_:¦GÎi“;Ré34„æ²¾EópFÑ÷õA0XEÀ>ˆ!æzü£–€Â‡ÉJp!@o*tTÇkÑ—gºÓ;—ÑU5=Z¯ÐD1¶kO˜¬š!¨iÈícKI6ë¢+õ.äÈ|û |{E‘öqaÐ7›h""n·¡©h”þñÓK]Ž;ícJµÞ¸R`´Û¡6¿ ô¥Wµ«h²Þ¼J÷¢ê”‰Â2]{Õš²q”DRv¶ÇðÚǡַ~^tw<ÝÆñMÑÂB­eb¡f)œ¨µÐˆ Y­övèPKPk%-C‡Á(Y;Î>&j­ÙÇLÖ¿ÐDÇ:»Ó#!ETd)cÐ[ï@OM@ŠTE¸Ý.¤$Ù§S²hSIhqz?ˆ·*Á ´Ð]”4«¿S×/ÃÊ>'SÃoêÂ…0~9Ú ëUý<ýÀBu¡ö6ÝìŒÿÿF»\¢¬Gk LbÁ› “D¾»—ÒúÇÝüÆãkKKŸ¶\?vÕØWmY·þ¦V‡Áúë ~ë^óÀG¶t,ºù±:…ìuT[¶òŽÖ›×­ßÜêâ>á2äÄË™‘ÈýÞ_nåmø Ü XGe2\—OBȄӳN«$Áäð(2ßn(J­;³þºgîL5„F¯û·w©ßD/€0ˬ’ÏH²’e¬'8½ezÐC«ªy…W ©’”ÊJÅlR¥B^á贂 “Êá²°J{ÃsÓTGùü²BÉ]\b2u}câO×ò¤ÂÝfµ£ôŸC–`«#Ü w§2©t)nã¥cꎋúöQô ·¤.^Ì|{ ϨïýÕóV‘is®º²zÁÄ€:èµú9ýu·a¨]÷ÕÁ³* –VÕbt™;Í¡ð{ ™= ˜7Ò¿^Òg_‚B4g×Ô¸âwÄÐÔÖ ßÞ¾.=³FØãëÚU´³pƒ¦¾¼ª´“ óa9¹Ç@¢9kC¢AÖg꿎’2†k—Ãÿ%xàöwü‡ÔíxŒ_0@ݦ †ïG1•jýRCÑÑÈœû¥í?ú¡6©÷?Õ«MOVèÓf>‰ "ý´„~R€ƒ}èÓÇ ;à_Ÿq–)…ûm…ÎrÅÐQ5( NãÊÝO›©ôèÔ†ªÄ°àraCpX¢jCD™7sÃìÙföÇkÌù2^Ãx>˜ö±¸ÿ 9 ¦ÓϾ˜Õ¨i¢r±…Ùo/ô‹ Ýî®ã@]ýãÄ@]w˜¯ áý¾ã€à'F0A(}ððf¾Â–“A“µç)×+t9‰¨“¿ ¤À•Š(dÐávëL¯Rz:RéïPG(™íëºRu|:èŽxK&ç ‡ã½B+È! W6劖ÎÛÙ÷¸‚µ3.ó­&ÔÉy~¦Í2´ëúm•® ô“QøI:ÐX®ä;“ª\Ô;uåÆ3KB†ØËŸ^ÞM¿)YD¿ýë÷«’¨êqº†Ç•ÝÛë“SÞ§^%]Éëó±É.ý)œÓVþeªzÒo[Yµ™l›·¦gSy,›Q[ÙW´eE»Skz4¦µè•Èê=Mü2̪ (DWP j{ =°ÇŸÀ?@›ž?­†Ì›H“IÚw±`× Aºµ`%ù]8_=·8D‘eP÷HzXÀ#ã!M:D…=ILXlŒÖ®½¦hÛ¼;žf­Æ ‹‡Uó‹' CSƒHÔ·xBAiÙ¢º¹÷®Yñô¼cOˆ7KvÏ„Å>íƒ2z¾ž"gvtë¦fè92_d¢{otVv}‘ LaT„Ðe†:Qm•Š"¿ ­¸s(‘ªj3Ÿ\JViNC÷è¶¢£×ד=¾‡1ƒ™£ëéq£¢äg?‘ûûWŸa Ïœ;²;I: r>…Yüà‹ï©U€¼N-'江¨©/úÇä~k´@ÿvšh(¯&g3’dH!¡`M2å$Å6›u€µBûsÇëÚFRýË7mÌ~|ÈS;k`µÙüÚkoþR{ƒ¬{½ƒÈPßFùéò;L-ÿhc ú©``ì'‚AÔ÷öÕ³IPì0y—FœD°ÖI棴"~Ê gªàWz|DÄŒÖ0†F uØM3céÜÊq3ºh°¿ulÃPedU¨ÒAõ؊纑QåÚ:q YãvÉÅA›½"ý^Íøä\£`\,p“ëjê–& åZóÄk;Ó«FË£Ž]?çÁ %Y€@4yØÈûÃraõ[^®Ý!Ž"wzìrEÁ56øëGVTH,ç»Þtíç—{|{uÿ*Ü?¡ïÏŠð Íáç rÜXè 6döƒ:iô? R[µƒ·Å’3¨UÓ‡GÌ–Ⱥ¨çÁïnSÛÚTC}s}}³Š‰ryÅcâ¡‚äÖN ìÃB uÚ´°R=“û½¬BªóÄzÊ Úì†yIP2Ûy%Ph x?­ÓIxz+9ý+ˆ\Y¦-šà©Nom®RV¦mM€¶À2…yUi 7˰å4éœÎ褫ø-Hç¶ ô}ÙÅ”‡|ø%=>èp9=ÓÓÿ6|¸³¨Øíhm°Ý5Ãipºç¹á8ã.[ƒöþ­C,CÇ5ãæ6w¥h,‰TIn±Ê-yŸ%ã&­w—¹Š$WÀuÏ$íûÚ@úº!ÝûëžÃïšÀr™µÂTr‚œÐw¸‘ãÚ~=Î%:Wnc,ühþO4žå㬼hˆ°I+ëÆí©=÷8ÓŠ©Ñ>ŒkÕóÉòÈ ³BMž´±>³½È.‹Öš›`;¶´qøÐJ[™Õ=e¶C(õ˜Œ6ŽË³V ½tÔH[ðÛßòH¡q6ç”B,ÀÍ"ìg–ÚâšâJ¹ÐΛ"“f—E–ßÒèzÏ É¨¯ó5žMÝŸRƇ]î2›œg&¼Á]R7jù¨CdƲð¬§VT|w{^é¢eûèÀòGø¨¯0é !‚«L}„9( ܱKùßZ»!}È6Ðv›ÍÆ6+“çk³–æLë\7¶:}Èn_nhgçÜt:qÝM2Ìÿí¯üxÚc`d```dpdÒ˜11žßæ+ƒ<Ë ÃÙo¿—ÃèÿVÿç°Þe•r9˜@¢†ç°xÚc`d``òÿ ”øoõï2ë]  ˜¤è0xÚcÜÁ Á² §ÀØL= ¬šq»100Ü„âÅ@> ö€Ð 9¨þ,þ‚˜óÿ3ã¸Ù|@,Qó£Ø ò@œU+ŽÐà ¥¡4 ÐŒ9P=Œ>˜Í‚¦/‡=0}LHjL‘ü°H+b×÷6T/Ll ”_ŠEý (ÝeŸ@bF¨;l ÍŒÃüÆ‚äW>ÄH|%¨ßan= ÅóÑ€´¶ÒBˆ0aÔCó«(’>¨X"ÔϬPqV8>1Ÿ,N0ªyL(n€I$qT6KÂú?‚tþÿôÿP®¢ü?ÄD/† ù t ©xÚc``ЂÂ0†¼ðÃ9†/ŒRŒNŒ^ŒIŒ³/0þb’aòcÊc:ƬÆüˆ%¥ŠeËVÖ8ÖÖ_llYl=lØž°³±Û°±Ïb?Ãþ‹Ã€£Šc'§§g ç. ®8®I\k¸>pëqWp/ã~À#ÅSÆs‰W·Ïˆo?¿ÿ þüìÚ¼ä´ôŒì\!¸O𕟋PŒP‡Ð¡{Â\ÂIÂS„ïˆH‰ˆtˆÌÙ"rBäŽÈQQ;Ñ Ñkbjb=b_ÄUÄÓÄg‰ï‘`‘И%±Câ–Ä'I.I'É ’{¤X¤|¤ÖIsI§Hï“~##!ã"S$!»Iö”“\…Ü1yy?ùu b & 9 KÎ(|STQ RlSܧøMÉ@)Ni†Òeeå,å)Ê{”ߨȨ˜©$¨LS¹¢Ê¡j£š¦:Gõ…š‘Z‹Úuuõ õ= V9ë4>išiÖhnÓü¡¥§•¢Õ¥uB›I»A{“Ž‘NÎ&ºbºMºkc±yiÛš@.xÚ­’ÍNÂ@…O ‰F$¬»páÆ¦  Èʸñh] B©Jl¥’ø>ƒ7.\úú>… ã™aD‚,Œ‘ff¾¹=÷Ì[ÌáÄ/ŽÎhÑ×Kîú¬a ·ŠuÌâ^q»xREŠ'p£eO"£=*žBB{S#¿+žÆ¢>¯x†¼ª8N>Uü‚„þUÃ+,ý. CÓv{†SõÚ¾YõZØ„‡z¸‚ 0ðÀ‘‚…$VH¾5PÄ9Ú\w¨ï’…¾ “‘ ¸|Œ!_îj\k\»œ/¨ÜâÍÏPBÛ<õû8¢®@/u‡þ6s©·q͈8%ÉLKÖ’Ç1O/3/?Öë§Óòˆ×o+0FòNä=|¾÷d†k*Iþî;Ú 2@U껃 kœóhѵIO¡©3*N®°ã&ÒrdÙ÷r¼åø/5>ÊÇd¶Ë¯ÜaÝŽªÚgTPëß4eVYaå" z²§zZ”õ2.ú™Æ:{á,z:ø?~mˆ{xÚmÔÕ’œUEá^IH°ww‡ÞÿÒ'CîîNI ,¸»»»[pww¹à!x Ókîè›]]Õg3U_Mk\kôóÏÂVÑú¿Ï_­ãßߚܚÂc"“Xœ%X’¥XšÉLa–e9–oýÍ ¬ÈJ¬Ì*¬Êj¬Î¬ÉZ¬Í:¬Ëz¬ÏlÈFlÌ&lÊflÎlÉVlÍ6´ J*jºôØ–íØžؙؑ©Lcˆ]è3Ì®ìÆîìÁžìÅÞìþìÇþÀÄÁ¡ÆáÁ‘ÅÑñÇñœÀ‰œÄÉœÂtf0“S9YœÎlæ0—3˜Ç™œÅgsç2Ÿó8Ÿ ¸‹XÀÅ\Â¥\Æå\Á•\ÅÕ\õ\ÇõÜÀÜÄÍÜÂ­ÜÆíÜÁÜÅÝÜýÜÇý<Àƒ<ÄÃ<£<Æã<Á“<ÅÓ<ó<Çó¼À‹¼Ä˼«¼Æë,ä Þä-ÞæÞå=Þç>ä#>æ>å3>ç ¾ä+¾æ¾å;¾ç~ä'~æ~å7~çþœ8}Öü¹32˜bÒÈì™íöÔö¢-Úí±[¸·t+·v·ëöÜ©ƒ-†[ OèÌ›3ú¥ö’Æ7íÑõ}DßGô}DßGô½¼ïå}/ï{yßËûíØ‰Ø‰”®½Ø‹½Ø‹½Â^a¯°WØ+ìö {…½Â^a¯c¯c¯c¯c§c§c§c§c§c§´SÚ)픾«´Sz¾ô|éùÊó•ç+ÏWž¯|Oe§ò=•½Ê^e¯¶WÛ©íÔvj;µÚNm§¶ÓØi|Wc¯±×Økì5ö{½Æ^×^×^×^×^×^×^×^×^×^×^Ï^Ï^Ï^Ï^Ï^Ï^Ï^oЋ¾£ïè;ú޾Óûýàþè:ºŽ®£ëè:ºŽ®£ëd¬3ø;¢ëè:ºŽž£çè9zŽž£çè9zŽžÓñ]ºŽ®£çè9:ŽŽ£ß”žÓqʱß{¯~£ßè7ú~£ßè7ú~£ßè7µ=GÇÑqtGÇÑqtGÇÑqtGÇÑqtGÇÑqtGÇÑqtGÇÑqtGÇÑqtGÇóÛ³Ótþûo?q$Ã崡Ѫã·þè 7‹¦J1˜r0õèÕ`š Ÿ-|QÑK(bootstrap-tour-0.12.0/src/docs/assets/img/000077500000000000000000000000001316367154600204075ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/img/apple-touch-icon-144-precomposed.png000066400000000000000000000067351316367154600271230ustar00rootroot00000000000000‰PNG  IHDRçF⸠¤IDATxì—ËNaÇËNŸ¤aY7cª¥±V™x§Ñ hâ²T‹Ü†æHH|— 1]è÷uaâJsúï:èÍר ßâ·’8¿üÎ9¯ˆˆyÍ æug nèÎ8ÛH8—€üEÓC^çOnP´ÇØ ¬Ëœj£¬jªµ‚<Ÿ9išo L ²œûFüeá/ŒÍÕ:‡P-C6Ç^D Åè÷þ!:¤éÜ9Õ¦ôŒI«S5ú«ÐòÄ-½+^ÿ±ïa!ƒ½ÌJø1»}3×÷}ðû–'K”úP¦µÊÄM‚@wd•FÇPz2´à&£8Šs|+MV±ñÅj®,/$þ²p†ƒ, B;O‚χP´>['”ÈÅPÇÙ”þ™@¨Ë(ÄiAš“”Š•E]ø×…»0ÉgXœØ§µO5HÔ pc(f;¯râ!Íémqø‹#êÂ_Åû@¤=©+jt ‘‚\ÂÈŠn&œ ì;înヺˆºx(²yÛe%V"Œ2Â^t‘–Í(Ë–<*ªs…ñE+ïË~«‹¨ [—Ä 4Ýuk”QÌ«´\WÿJ Èþ#![´4Qòe]D]زÞü WZ… ÐIF®0ÂÅÕÆÎãŽ-QN²øF˜o=I„ Ýq&×ÚÏ „½GB}®±0A]D] GßÌEv õ5–k©§@"y~âTu¢º°ÐÆ·ïXšÜ£õxõX“¶P=«Ø¢.CS†0RoV§Ë8ñ«ºG  ½ù#;uʺ©?’‘¡Bå5{,=kŠº c]¨ÒW©©ýnßLŸ¬ª®8ºùÆÿ5‰”I[$J"s7âÀ$£2ƒ€Ì"ÈDA4“*$B• `ŒŒ¢Ð@4¡;d(h† RI•´Æ”`,­“]§éK¿þùú¼PwŸ}ªßÙUë£bɪõÞ»ûî§Š$ñsŸâþæÆºäg]P¶B… V% ë±ø±.±.Y¹Ôeî+?ói9¸ó‚X—X&“)–GnЧýL3¤û¼¦Ä_úµ›ëë²$ ö¿‡O¼¶ßëëR‡,HëÉ–A]æüŒ†t]x,Ö%Ö%azÔ¢ßó¿lýa¬Kmb]P¤w»‰ßØÿ,Ö…‰uÉ‘I ·öâ§Î±.±.ÙdŠnbÿÄ¿º‚ªË…³—E8_á?—Ÿ5»w±¼<{“yvðÒÐëâæ>Àþ3Z]êñX¹øÀ¬Y²Õ )šl]@`b…öÝ%Æ–êëÞ «.( PX í»K>NåÕóÇ]IuAY‚jž5Ú/#œüiõ’×Uëâ maP 8*¯0ƒ ç¨×%Ýk@¡ýŒ®š8W>ú—•H¡.( 0!B{î’9Q¢A…³•ê‚Â$Ü{ í©®Á‰uŸ­P&¡[ (´§º8qN;å³.( 0>BÛ}óÄyqÖFÏuAaî¹ …¶3Š“ý'¾×º 0 ]k@¡m¤ãdŸŸ¯Ýáµ.(Ì8€BÛH×=ñ µÏº 0…ö¾KÝgì€EòuqÐ¥Õ3 Úû.uOœ_½¶Ç[]P„B{›.íy{gIj;£q›Å³6Z^d¶mÞkÞÛœ¯¸äoÍQVá¡.¹CA½M'"Ða/;£ÝfÙ/¹•W?5’sýÚòuqÐ¹ÕØ*ZŽ5¤þ®®¼@ÞwF¿ÝqÈHN7Y†{WWD …‘­‘Ô,š¹^EdŒ¡ ÞÕHggÄ_xÅRÅÒ©¤ /æÎè\Å%< ƒ´¨‚B»H] ‡UwFÅ/m1iÏOž_ïI†…u !Ð!í‘„@B€,@ÇZPh—iÿ"Rß«ø0e^õR—Ž9@]ˆ¤°3’H¾.HóQug$%òÎèTÙÄë²<Œ ìÎHD íQÊ’® ƒŒL €îŒ¤RØÉ Ä«?uYÍX  îŒ¤ÒÝ¥ºûÝÑr_uY†»3Hsg4úÉ&ÍÙ¸z»§º€,CaÝIôžêÎhë/ß6iNŸNÓ¼Õ¥.ºug$)ÂΨoçéi| ×Å-LÂÝÃ-ÚQÚó ¤´3²áiÎÈ~ó<ÕdÉ …ug$$ÂÎè­_¿kÒœƒûŽ{®KvÚ×€‚º3H~g4ªß|sîLºÏ}þ~ùŸ¦w§)Þë‚ «â®›P`wFyÙMóŠýÈ’x…u꘥*uAa íÎ(íá¿TûèYgY˜Ùá§„Se§í_2Œ<£—ú¯‹ƒvw M F÷Î(NMy–¨ÔeÉ¡0ºwFqìwÇs]²Ó4òY7Q ƒ{KM¯Ž“•êâæÇMŸÎ€PÕ;£¼®Îük‚ª ƒ £{g”óÇ“§¬‹ƒƤê‚Â$ôO ÀîŒD `gT-FÚ3gÚ ‘º 0éßÉ ¤¿3J°ßYÒž-›v Ô%;÷×€B»3’xà–»0òOu'ŽXdÒž]Û÷KÔ…iô$@ÜI ¤¼3BÒžŠÓ© ƒPXwFRéïŒd©K.Ph—õtg”„@©ÕÅAëFýª¸³ íÎ(íÙÅù¬‹û¹‹ˆ@"uAa ìÎHJ å#+H]\Üwg_CA݉ ”»,žêÊäG€ôïŒäòY×s—ÙS—K$'‹ íÎHâ‰Ïº¸ž»ØsDL ya˜ïVÓÇBaÝÉ Ä‚h쌉—Ìöï)–Å 0Ø‘ˆ@>ê‚ ;·ï3³sÛ>º€,CAÝÉÂhìŒÆ_`7çó”eu…qg$º'b4vF¢òðHÔ%;ßém¹÷rèîŒBY|쌖,\/*Oùþ"U—D+ €éïŒd’ª‹KûëHzÖ®Ü,V—\ Ewg$!@]¦þÔ¬[¹Å+ù=Gò´§{ÛbuAzÂèîŒD®8¹©°¬buAa{¾Í0Ê;£8¹×gÀcSDë‚ Â(ïŒâä6;¶í®K6žÈ€@åQœÜ>–»=8\¼.,ˆY”wFî‰óÌйê‚´B 0Ê;£º'ÎÚ›½Õ…A…ÑÝÅÉ>ûw—x­ pÇã¡0º;£8Ù~²à½.( BnYüÞáÄY»â5ÿuqÐòä³.(LÈõ¬gæä¥(‹–0 %Ϻä.Pœ£ü‘ÕõaAÉb¹=Ê"ŒÚQ¾OÅé ¶:As»òYˆâh×ÅA‹ZS¿wFy÷DyßîæÏIAÖ…y Ѻ¸…ò¡4;¶í1c‡Î ¾.( BÞeqPDIdYÃ?ߟ¼4ôºÜ ÿ%–á3Ma4ߦÓªv]€Û€‰å¸(.‹Â»ºˆèΨžÕ„šßÖÓ0ˆ…)‰uab]Ü %ÄBlˆuAb]rb±$cb]b]n‘QÔºQßf±.±.·ÿYMÈC,É•X—X;õHM>bwÈ Ä²,‹u‰u©[`Y ú´Œu‰uù?iY-…¥(u‰uÉ‘RëM-Šb]b]r¤ba°ïçu]b]ô0ÌûLˆ!–£€ù*Oëë²_1Ö¨ ¢8oëëâ¢Øzâ¨!S–wu‰uîΤŒièÈ‚4f*c]dd _ঠº‚%°m˜Ïë]b]|δ±^¸‰ ™ë±.ù" p)Ìî °˜ÊX—ú. PÉt@'Ü,Ac¦<Ö¥¾ ”3^¸‰2+™¯c]e‘åkfüÚJA ¥€9ë¢ Œ,'˜ä!¡”@¦ËPĔƺË"O)SÄØõ„´@‹ÒœYÎ\Šu Uà2³œi§X€&Ì(fs9ÏT2_ƺxçK¦’9ϼˬcF%SâëŒ]A£O³IEND®B`‚bootstrap-tour-0.12.0/src/docs/assets/img/favicon.png000066400000000000000000000015671316367154600225530ustar00rootroot00000000000000‰PNG  IHDR szzô>IDATxµÒÙKÔQÀñûd›¶¹ï:ãÒniΨãZÚfe–¹TZjZ`Œ”Qd"¡T EÖKA ½Гš•Y! P¸õxºçàïrÇó‹ùÍ/:ðyþÞsïÆ”gwº%¿4+5P–µÔ9(Õe¢vR’Ù>+ù%6õ¸×~ÇTÐÑÅZ‘׈»þq;CzŒ8[Áã<«9зÀkä1…LjÇ<¨:Z 0½Å/dh†o§bö·ã1RÞ JZóŒy;ŒãAŠ-†NƒÛz \’¶Çþv1å$ä£ÔÂÊvVæãØWxâ{ M½ÒPLw¡dÔy’°²]¨óâÙS /©rI=+Wign^ñ±Xnb=ì$'ÈŽ„:V>Š>Sß§¡ç \FçÑܽ5 SߦAŸ÷ïFYÌ“prâ  øG!KÞzÒô*몺AŸñÑI¤9ÛQª…m’°òQô—0¹JÄncc†Ø£°•Ôa1†L¶3ÛŒm÷èþsЧ»£_ÅŒà–t„lFчAXù(ú,ÌÿÆCH_”Ÿ?~>·ûÿ5¸ E"£ªAäª1Ý.”ÁÃ\ïÂØbb*H"«!;ò V>Šyýê-‹¡¬ í‡LI˜|övú|Wn¶Ýµž;0/ŸGŸ®ö^-&­Gû ­C{AP0ÈG <À¿J$Cƒ}Ù-AŒ!'©ÇZ‚ÙvìúUêÛuµÝ}ÆF>S̉1R Ž5•NöÁ&Û.ð#Cl»¾ì-–†"v+© ,|ví*ÕvW/ Ê?°úøî= †W”ðrEàÛéA³íì &?»60¸•A²aU)~•l;[ñÆš‹zŒ$É !%¸²D` Uýí¬ ¾ù'ð C^V n§ÇŒ TL =FøGáoǯ2x ­ð(ñ¤û™á,ȯÒFcñË Ä‘B"dhæ¿lG1B!%Œ@lXš2æ·»Š±í̃º˜enä2äq;{1Æ…ÜGƼv·£ˆõ DâúÈ`ŒùehÎîv<ÆÌI~ÉmtÿfÞ»Ö̉!™IEND®B`‚bootstrap-tour-0.12.0/src/docs/assets/img/masthead-pattern.png000066400000000000000000000144621316367154600243650ustar00rootroot00000000000000‰PNG  IHDR,,N£~GQPLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxTltRNS    °d8uIDATx^ík·›¬·GA.‚¨€wóý?èyš¶guoŒ‹KÒ¤ã//ú.“µc† ?ésRJ¥Fzë¶É7ìtLRJ9±'ÆO[w££RRJçúÿj…|IV®'n¶vžõZ†‰i£ÒÑM˜J“£QQZvÿ÷9CWFlÔIºM‚™¡^µÞ)z·SºkÜ È<"­æÙZÞi¿øúc££ÞÔ6DÂ~Áʆ­§nüQ‚•cpç,0«´Î³ ìvÑI5™õ+â),×j&%;±ƒÏW†•ÎŒÀ*s„ó8µ‚a%Qó`u«9ˆß!Ùåâ5ëÃ|6 +å Œ«tþñ<«ôbÁühï¼&É,—6Ìñd³’ó ª¾[*˜‡ö®§•Ÿ¡k b¨Ä8Šš$µ\¼ã(*3 =Ê5†ÁÁ ¡-«!fz„b¡m:9UüI,¯&Ù;•Ê5ŽVØMX2ÀŠÜ–„6é'D"µ—Û`¦±ÜÔÇ«:±T¤¦`uÊ+²UIb÷Q5:~*ºQÝnÓÕ6VˆI`ÕÕ)¬6›Æ¨6âw 6·}7ð º¾ÉØ=Ý›p€Õ)¬bZaÒJEîz’Æ0º‘S °x†7ƒ…¬BFhţЊ0–2 €Ø¶ßê3L½õ­M*X—lE’­X²Ù}¢@†Ž0í†Ëðûæ“?ZãЊ%šùT[´PY&ÕòÚ–ÏØªiËû$XŒÀŠ%ÚmYi‚LÑü^®¡•B¨]=Íü4X ßJX±DCº+“DBÈÜHý“&`§1¤mÀ*¯\»tþO+þô³DKi q“À Z(ÃK)¡“7Qî«ã3¾[!ó@ÜBF àUŒÃÀ0Š5À„ø"ŒÕÑÀ¡Ub±€V„t5‚ÔÓmYnS}2•hFÝÖÕ˜Î+l8ãnEˆ0Á)Ó÷æd* ŒÝ& ¦3À Ÿθßcµ ŠÕJÆd{"ÏhZÂÚÓÀ`…Ïg4íÀˆìb­ThB´ ëƒ©¤0¶Š°jC=pX¡óÀÛŠq€È,oúý'`ï`R÷TGM˜ „X!óÀ΢hÏIY±ê\x3Öß1J%ý9¸ã„q‡X!ŒÐª¬X„÷T‘‘*]T,ëûáOÀÐ{ûu"ã˜T,=þ`Œ˜UÈÀ¬ŠŠ¥ ©¤*¹ kü7ª.¹ ‡éc2.CĪä2Tò>6åÿÀó¦?˜ÔÐ7<ÿ¾i0Ú&ë±ÊÿŸØ¯»­ì[M?pAuö­CWÿ`Ô]æ­b•yëðûÞÝÊÜ›ÒÝ™GãDîM©´?VæÞ”Š3«=÷¦ô÷“{5g-w¸÷ËcÄ(;žµÜ™ÕO†š³–;¼“ãcÆâ=ÏZîÌê`rÒš6爆êœÕaµýdL‰;­`uÆ«¤…4ì‘¶MÆM%[ ÑÊÐg4íV‘¥«X%nÑ4-<=LÞükû GT} „3nËVÑ¥«cXÅoþÜ2'n+óIÌ1ˆYLKz¦G? ØóÄðÊÀ*Ö ¬N`ÅRV° _./ۤ߹ÄKýÞ¸eÉVK²K´‚+23ôCÚ¯Ðà†È¿!¨0°BAÕeVP¸hŒé}êíÀÒ›¸å |XE1L¿Œ[… ° /IÄfÉ7šZDÿ˜6-«mPX¥ßÀ ÁÐy€Œ•"X‚"Âa…ˆœ ]¡X+Å`•±4b`õ˜V0Ô…‚“œ×$ ¯,ÁX1À*ç5I°:a€ðL Æ‹üp…™ŠùeÏÀ ex‘ù.X! #‚_0ãEÉ«ÝÂÇï‘„6/J^ížàŒ» .-ŠéDYh@|*ŽÿÉàgQʰ’oj!c“h¥x^âC⟥q¹áOȃ; „Á/ :qÁÐ富«Ò SŒÕwraË#tVüûŒ(«Â]¤Õ·qþ‰¡×ÿ‘ùy0ÝÈ÷‘V V÷Á~ ¯Øãá{_šd…ÿèñPÓWnU˜d·º¨ëPËýYIÖA®'WaÀÀ­Š/CÜêdý;¶ÏK²šÇ‹…¶ ¸Uy’· ‡îø=3ÉÊnühÔ!±zJ’³ÂïSaLM-*W3s–ñˆAϬž•d=³º†ãI´"\&”•KïiJuÄP²z`•<ÎæZ…wëø’§îu¸-+×Ü×gK`À’'´šÓ¹ç󬂥z«5Ë)+W%çpF3D °Ê€bóhÀ Xá?ñ|T€Hi¹Z&~z}ÌÐ}Àà´M/>5òÀôñmoäG¥D)(—ðß?]u¬¾1¼()0Ù‚ÕÙ¾<ÔºCBÙåò;|ò`µÊB+` S^©ðyt߯£³ì¸~AìnA ÙåZœþò©u°Fˆ€?âÒ'BPécp¿„_¬V錜y€0Ž\Õ„Ð=¯X©IÖ²(Ž3À g” ¬BFˆ&Ò Rž2…Ài@`…3Š‹V!#DÜŒÓÅJJ²jgn¬pFy±À*d¨±ô ƒd§LCå~A`…3Ê‹V!ƒŒ¯/Ö8¾®XÀx}±ÆøË𺠣à¯ø÷ß: ”“úÓnÀ y7¥×M)¾Ü¹–;ï_HÛ\Hƒ0 ¶h®-|óïÚü þ„¿1öõÛÊ6}[Ù¾~[Ù"ÛÊÈ‹ëÅ¿ú(L½ûQØõ·Âß_ïÿõCvÿ–CðWŽ®WŽÊ_f»^f»^“Är™ø ¸óõnÑ«Ý׫Ýxhà \qÌ*)è4+óIA'°zCРЭrø¤X½!B‡‡¤k· Ь±¸#·*K²FZIVº±“±õâIVÑŸSè7nU–d·º+Pc•{TÁuTÁu¿ÿûÇ«ø÷x•„«ð:¸'ëH(ž»æ¯<Šç.¤yô‘PY‡Ù¼$«}íac6/ÉjãË9ÆŽ‰9'É: ö’cìÀ*'É Vƒ®Y$¶y$¶¯= ±Í; ±Í9 ?zó:zóüP×-ùP××l>ò¸`“z\ðGDÍØ‡D V×ç(¬®ÃóX½¾-Cû‘mÚœ¶ % ?ꘆõßnøQÇ4ü¨³~µ’™ñV2óßo%3ã­dæÌV2 MŠ®&EÅí¯ÚGöí¯N¬JÚ_7V»/ø­¸½­±bUÐX­´eaÇÍñySË>άe_q3Èå¨íâò¦fˆUq3HEÕZÚf´ú¢´Uê•mFX·Ud|B[õg«XUã)Óò¶#´*o`;^­‘cÎ$4ݾšn?±»cÌ}T;÷Ъ¼»0% а%yÊt÷„ S’– ­Ê¹»‡x]at™nËr›–¢”)¤XW—§eÁª0‘ Ù…Q—'@Wñ3o7Œb-O™êöWsÓ²U~"¬q¼4ª…2ü'€%tiÊ”;Â/MË~·ÊN䂱²0:7Òp pïä^›”¶‘…9Õ]:ÿ§•‘Í\˜È•–¬4/ ¥jùWÄІbi ºzšùi°¾28Xe&réJª­ ºLªå!‚·jZ ʵUÓ–÷I° `•™ÈÝ*²ûìèÐÑ#ø@»!»\~ß|N©À*`€Uv"×¼¨5ýVŸ!ê­7636ɺd+’lÅ’­ˆ09 Ðz’Bc-äTç”ˈ›I.X…ŒÀ*'‘kñ{rÔ¶}7𺾵ÉåÚ=Ý“KV§ °bˆMhE¶*m*|e£ãº‘ÝÎÓÕ6VˆI`ÕÕ)¬6žÆ¨6xzƒ±Ãæü”º„©½Û›ô°\-q °ªS—F5«SXAoV£M'§Šç$Yy5ÉÎDÿåW*×(Xå$YÁê”VdÔ1˜¡ã(jžŸdåµGQñ˜©èQꫜ$+X À8]²ªŸ&£½óº<ÉªÍæ:Vsl*³’sÀ­:·]ždÕÞõ”á%Ÿ’Ž™Aïó+H²†s¤b˜Ï¦b¥³À8±zV’¬N†•‹Å׽餚Ìz’Í«™”ìš}åSbãØêYIVÌ ŠåxàS™fõmm‘hÁ°uë©·ÆT+ÿÆàÎq` V¥A'Ü öhzní<ëµ® küF¥£›h+“-ºjÅF¤›o˜©êUëÒ¡ïJwZ•'Y#­æÙZÞ“ÞI©ÔH»M°v¯V•}ò°kµ·Ll•’®ÿo¸(«Â$kŠ•t?ŠåœüY¯[·M¾‰J€>y4~ÚºÛO'éîÅŠ´*K²&Y¹ž¸ù×e8&¦_—¡ù{—¡ùuN‚™áÿ/C·ß/Cܪü2Ä­à2”öà^ÜJÍkàÍý§TÿÀ[` V¥IVÌ ÜÙ­ƒxí­ƒÈ»u¯½ug·jþÄ›R9âMiÊrçZîÐõ#Òë'.¤¶h®-šäÍ?™³ù'_½ù's6ÿdêæ_ò¶²ÝG•¶­¬ºÝ¾z[ÙîX2Àj³©ÛÊ9,æ´óßy`1§=°˜3Xä? k4†ÑÍßÖhŒ¡›ìGaùY[üqfû7²&[±d«ÒÇ÷0ï}|ÿˆQøøþ5/†˜|1Ä”¾RúÊ‘>|åHè÷¾r¤_9ºð•£—¼Ìf>òe6]ü2Ûõšd,ƒ»§½€;~ä ¸ãS_À}Ú«ÝõÏ—¨ëOyµ;´*µ;!4p…žG‘ŒÉÏ‹£€Uy%%ètR"tW„N=!œ9‚ oÆ:L™¾2œ Ī8œ©ÈH•.ý_sÛÞâIÖòØoÈ@¬Šc¿cq ¼>Šn×o ”#V…òÒ£ xs|(@ÃßtTbUrTAñ!Tð#ôm‡` Vù‡`¯bÌW9±*9^å:¸'–1«¢#¡4~$”þûGBiüH(w$TÉacUÌacÕß>l¬Š9l¬Ê:lìõÇØ±<ÆŽåcwˆ0Àê:z3>Mô‘‡º¶Í§ê V¯?.¸ýÈã‚ÛÔã‚ÿÇ¢ž²¢Æ8¿Ž8Ï:<ŸåžÏ^{x>Ë;<Ÿåž·e€ÍiË`…xI[°ÊiËVx[†¬†<¯ámÞ×ðƒG7üÈj%“Ÿd}e+™ü$kN+d÷èjRô÷Û_‰·ýU^cµ«±ÚÕ²/þ*¼šAâVx/wC¯Ÿ‘dÕý€|ßiUždÅ­‚ž¬^±ÇÃ÷¾4É ÿÑ㡦¯ ܪ0ÉouQס–û'µF«7´FÆšnÛ±ý¤¦Û`õ†¦ÛW;wÄ ¹O [ò?+ÉzÖ’ Sï~v=dÅ­ðÇ÷×ãûýÅÝ¿åÅü•£ë•£ò—Ù®—Ù®×$±\&þî|½€[ôj÷õj7¸BW³J :ÍÊ|RÐ ¬ÞtÂ#t«>)BVoˆÐá!éÚ-Ïéɺ¸#·*K²FZIVº±“±õâIVÑŸSè7nU–d·º+Pc•{TÁuTÁu¿ÿûÇ«ø÷x•„«ð:¸'ëH(ž»æ¯<Šç.¤yô‘PY‡Ù¼$«}íac6/ÉjãË9ÆŽ‰9'É: ö’cìÀ*'É Vƒ®Y$¶y$¶¯= ±Í; ±Í9 ?zó:zóüP×-ùP××l>ò¸`“z\ðGDÍØ‡D V×ç(¬®ÃóX½¾-Cû‘mÚœ¶ % ?ꘆõßnøQÇ4ü¨³~µ’™ñV2óßo%3ã­dæÌV2 MŠ®&EÅí¯ÚGöí¯N¬JÚ_7V»/ø­¸½­±bUÐX­´eaÇÍñySË>άe_q3Èå¨íâò¦fˆUq3HEÕZÚf´ú¢´Uê•mFX·Ud|B[õg«XUã)Óò¶#´*o`;^­‘cÎ$4ݾšn?±»cÌ}T;÷Ъ¼»0% а%yÊt÷„ S’– ­Ê¹»‡x]at™nËr›–¢”)¤XW—§eÁª0‘ Ù…Q—'@Wñ3o7Œb-O™êöWsÓ²U~"¬q¼4ª…2ü'€%tiÊ”;Â/MË~·ÊN䂱²0:7Òp pïä^›”¶‘…9Õ]:ÿ§•‘Í\˜È•–¬4/ ¥jùWÄІbi ºzšùi°¾28Xe&réJª­ ºLªå!‚·jZ ʵUÓ–÷I° `•™ÈÝ*²ûìèÐÑ#ø@»!»\~ß|N©À*`€Uv"×¼¨5ýVŸ!ê­7636ɺd+’lÅ’­ˆ09 Ðz’Bc-äTç”ˈ›I.X…ŒÀ*'‘kñ{rÔ¶}7𺾵ÉåÚ=Ý“KV§ °bˆMhE¶*m*|e£ãº‘ÝÎÓÕ6VˆI`ÕÕ)¬6žÆ¨6xzƒ±Ãæü”º„©½Û›ô°\-q °ªS—F5«SXAoV£M'§Šç$Yy5ÉÎDÿåW*×(Xå$YÁê”VdÔ1˜¡ã(jžŸdåµGQñ˜©èQꫜ$+X À8]²ªŸ&£½óº<ÉªÍæ:Vsl*³’sÀ­:·]ždÕÞõ”á%Ÿ’Ž™Aïó+H²†s¤b˜Ï¦b¥³À8±zV’¬N†•‹Å׽餚Ìz’Í«™”ìš}åSbãØêYIVÌ ŠåxàS™fõmm‘hÁ°uë©·ÆT+ÿÆàÎq` V¥A'Ü öhzní<ëµ® küF¥£›h+“-ºjÅF¤›o˜©êUëÒ¡ïJwZ•'Y#­æÙZÞ“ÞI©ÔH»M°v¯V•}ò°kµ·Ll•’®ÿo¸(«Â$kŠ•týÿžÔDDDIEND®B`‚bootstrap-tour-0.12.0/src/docs/assets/js/000077500000000000000000000000001316367154600202475ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/vendor/000077500000000000000000000000001316367154600211305ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/docs/assets/vendor/jquery.smoothscroll.js000066400000000000000000000030011316367154600255260ustar00rootroot00000000000000/*! http://mths.be/smoothscroll v1.5.2 by @mathias */ ; (function(document, $) { var $scrollElement = (function() { // Find out what to scroll (html or body) var $html = $(document.documentElement), $body = $(document.body), bodyScrollTop; if ($html.scrollTop()) { return $html; } else { bodyScrollTop = $body.scrollTop(); // If scrolling the body doesn’t do anything if ($body.scrollTop(bodyScrollTop + 1).scrollTop() == bodyScrollTop) { return $html; } else { // We actually scrolled, so undo it return $body.scrollTop(bodyScrollTop); } } }()); $.fn.smoothScroll = function(speed) { speed = ~~speed || 400; // Look for links to anchors (on any page) return this.find('a[href*="#"]').click(function(event) { var hash = this.hash, $hash = $(hash); // The in-document element the link points to // If it’s a link to an anchor in the same document if (location.pathname.replace(/^\//, '') === this.pathname.replace(/^\//, '') && location.hostname === this.hostname) { // If the anchor actually exists… if ($hash.length) { // …don’t jump to the link right away… event.preventDefault(); // …and smoothly scroll to it $scrollElement.stop().animate({ 'scrollTop': $hash.offset().top }, speed, function() { location.hash = hash; }); } } }).end(); }; }(document, jQuery));bootstrap-tour-0.12.0/src/docs/assets/vendor/pygments-manni.css000066400000000000000000000056751316367154600246250ustar00rootroot00000000000000.hll { background-color: #ffffcc } /*{ background: #f0f3f3; }*/ .c { color: #999; } /* Comment */ .err { color: #AA0000; background-color: #FFAAAA } /* Error */ .k { color: #006699; } /* Keyword */ .o { color: #555555 } /* Operator */ .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ .cp { color: #009999 } /* Comment.Preproc */ .c1 { color: #999; } /* Comment.Single */ .cs { color: #999; } /* Comment.Special */ .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #003300; } /* Generic.Heading */ .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ .go { color: #AAAAAA } /* Generic.Output */ .gp { color: #000099; } /* Generic.Prompt */ .gs { } /* Generic.Strong */ .gu { color: #003300; } /* Generic.Subheading */ .gt { color: #99CC66 } /* Generic.Traceback */ .kc { color: #006699; } /* Keyword.Constant */ .kd { color: #006699; } /* Keyword.Declaration */ .kn { color: #006699; } /* Keyword.Namespace */ .kp { color: #006699 } /* Keyword.Pseudo */ .kr { color: #006699; } /* Keyword.Reserved */ .kt { color: #007788; } /* Keyword.Type */ .m { color: #FF6600 } /* Literal.Number */ .s { color: #d44950 } /* Literal.String */ .na { color: #4f9fcf } /* Name.Attribute */ .nb { color: #336666 } /* Name.Builtin */ .nc { color: #00AA88; } /* Name.Class */ .no { color: #336600 } /* Name.Constant */ .nd { color: #9999FF } /* Name.Decorator */ .ni { color: #999999; } /* Name.Entity */ .ne { color: #CC0000; } /* Name.Exception */ .nf { color: #CC00FF } /* Name.Function */ .nl { color: #9999FF } /* Name.Label */ .nn { color: #00CCFF; } /* Name.Namespace */ .nt { color: #2f6f9f; } /* Name.Tag */ .nv { color: #003333 } /* Name.Variable */ .ow { color: #000000; } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mf { color: #FF6600 } /* Literal.Number.Float */ .mh { color: #FF6600 } /* Literal.Number.Hex */ .mi { color: #FF6600 } /* Literal.Number.Integer */ .mo { color: #FF6600 } /* Literal.Number.Oct */ .sb { color: #CC3300 } /* Literal.String.Backtick */ .sc { color: #CC3300 } /* Literal.String.Char */ .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ .s2 { color: #CC3300 } /* Literal.String.Double */ .se { color: #CC3300; } /* Literal.String.Escape */ .sh { color: #CC3300 } /* Literal.String.Heredoc */ .si { color: #AA0000 } /* Literal.String.Interpol */ .sx { color: #CC3300 } /* Literal.String.Other */ .sr { color: #33AAAA } /* Literal.String.Regex */ .s1 { color: #CC3300 } /* Literal.String.Single */ .ss { color: #FFCC33 } /* Literal.String.Symbol */ .bp { color: #336666 } /* Name.Builtin.Pseudo */ .vc { color: #003333 } /* Name.Variable.Class */ .vg { color: #003333 } /* Name.Variable.Global */ .vi { color: #003333 } /* Name.Variable.Instance */ .il { color: #FF6600 } /* Literal.Number.Integer.Long */ .css .o, .css .o + .nt, .css .nt + .nt { color: #999; } bootstrap-tour-0.12.0/src/docs/index.html000066400000000000000000000072071316367154600203340ustar00rootroot00000000000000--- layout: default title: Bootstrap Tour slug: home ---

Bootstrap Tour

The easiest way to show people how to use your website.
Not using Bootstrap? It works anyway!

Add the dependencies

If you are using Bootstrap, include bootstrap-tour.min.css and bootstrap-tour.min.js:

{% highlight html %} ... {% endhighlight %}

Otherwise, just include bootstrap-tour-standalone.min.css and bootstrap-tour-standalone.min.js:

{% highlight html %} ... {% endhighlight %}

Setup your tour:

{% highlight javascript %} // Instance the tour var tour = new Tour({ steps: [ { element: "#my-element", title: "Title of my step", content: "Content of my step" }, { element: "#my-other-element", title: "Title of my step", content: "Content of my step" } ]}); // Initialize the tour tour.init(); // Start the tour tour.start(); {% endhighlight %}

Do you want to do more? Read the full documentation.

Code licensed under the MIT license.
Documentation licensed under CC BY 3.0.

bootstrap-tour-0.12.0/src/less/000077500000000000000000000000001316367154600163475ustar00rootroot00000000000000bootstrap-tour-0.12.0/src/less/bootstrap-tour-standalone.less000066400000000000000000000010551316367154600243720ustar00rootroot00000000000000/*! * Bootstrap v3.1.0 (http://getbootstrap.com) * Copyright 2011-2014 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ // Core variables and mixins @bootstrap-path: "../../bower_components/bootstrap/less/"; @import "@{bootstrap-path}variables.less"; @import "@{bootstrap-path}mixins.less"; @import "@{bootstrap-path}buttons.less"; @import "@{bootstrap-path}button-groups.less"; @import "@{bootstrap-path}popovers.less"; @import "@{bootstrap-path}component-animations.less"; @import "bootstrap-tour.less"; bootstrap-tour-0.12.0/src/less/bootstrap-tour.less000066400000000000000000000010571316367154600222460ustar00rootroot00000000000000.tour-backdrop { position: absolute; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .popover[class*="tour-"] { z-index: 1102; .popover-navigation { padding: 9px 14px; overflow: hidden; *[data-role="end"] { float: right; } *[data-role="prev"], *[data-role="next"], *[data-role="end"] { cursor: pointer; &.disabled { cursor: default; } } } &.orphan { position: fixed; margin-top: 0; .arrow { display: none; } } } bootstrap-tour-0.12.0/test/000077500000000000000000000000001316367154600155715ustar00rootroot00000000000000bootstrap-tour-0.12.0/test/bootstrap-tour.js000066400000000000000000001057471316367154600211510ustar00rootroot00000000000000/* ======================================================================== * bootstrap-tour - v0.12.0 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2015 Ulrich Sossou * * ======================================================================== * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * 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. * ======================================================================== */ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; (function(window, factory) { if (typeof define === 'function' && define.amd) { return define(['jquery'], function(jQuery) { return window.Tour = factory(jQuery); }); } else if (typeof exports === 'object') { return module.exports = factory(require('jquery')); } else { return window.Tour = factory(window.jQuery); } })(window, function($) { var Tour, document; document = window.document; Tour = (function() { function Tour(options) { this._showPopoverAndOverlay = bind(this._showPopoverAndOverlay, this); var storage; try { storage = window.localStorage; } catch (error) { storage = false; } this._options = $.extend({ name: 'tour', steps: [], container: 'body', autoscroll: true, keyboard: true, storage: storage, debug: false, backdrop: false, backdropContainer: 'body', backdropPadding: 0, redirect: true, orphan: false, duration: false, delay: false, basePath: '', template: '', afterSetState: function(key, value) {}, afterGetState: function(key, value) {}, afterRemoveState: function(key) {}, onStart: function(tour) {}, onEnd: function(tour) {}, onShow: function(tour) {}, onShown: function(tour) {}, onHide: function(tour) {}, onHidden: function(tour) {}, onNext: function(tour) {}, onPrev: function(tour) {}, onPause: function(tour, duration) {}, onResume: function(tour, duration) {}, onRedirectError: function(tour) {} }, options); this._force = false; this._inited = false; this._current = null; this.backdrops = []; this; } Tour.prototype.addSteps = function(steps) { var j, len, step; for (j = 0, len = steps.length; j < len; j++) { step = steps[j]; this.addStep(step); } return this; }; Tour.prototype.addStep = function(step) { this._options.steps.push(step); return this; }; Tour.prototype.getStep = function(i) { if (this._options.steps[i] != null) { return $.extend({ id: "step-" + i, path: '', host: '', placement: 'right', title: '', content: '

', next: i === this._options.steps.length - 1 ? -1 : i + 1, prev: i - 1, animation: true, container: this._options.container, autoscroll: this._options.autoscroll, backdrop: this._options.backdrop, backdropContainer: this._options.backdropContainer, backdropPadding: this._options.backdropPadding, redirect: this._options.redirect, reflexElement: this._options.steps[i].element, backdropElement: this._options.steps[i].element, orphan: this._options.orphan, duration: this._options.duration, delay: this._options.delay, template: this._options.template, onShow: this._options.onShow, onShown: this._options.onShown, onHide: this._options.onHide, onHidden: this._options.onHidden, onNext: this._options.onNext, onPrev: this._options.onPrev, onPause: this._options.onPause, onResume: this._options.onResume, onRedirectError: this._options.onRedirectError }, this._options.steps[i]); } }; Tour.prototype.init = function(force) { this._force = force; if (this.ended()) { this._debug('Tour ended, init prevented.'); return this; } this.setCurrentStep(); this._initMouseNavigation(); this._initKeyboardNavigation(); this._onResize((function(_this) { return function() { return _this.showStep(_this._current); }; })(this)); this._onScroll((function(_this) { return function() { return _this._showPopoverAndOverlay(_this._current); }; })(this)); if (this._current !== null) { this.showStep(this._current); } this._inited = true; return this; }; Tour.prototype.start = function(force) { var promise; if (force == null) { force = false; } if (!this._inited) { this.init(force); } if (this._current === null) { promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); this._callOnPromiseDone(promise, this.showStep, 0); } return this; }; Tour.prototype.next = function() { var promise; promise = this.hideStep(this._current, this._current + 1); return this._callOnPromiseDone(promise, this._showNextStep); }; Tour.prototype.prev = function() { var promise; promise = this.hideStep(this._current, this._current - 1); return this._callOnPromiseDone(promise, this._showPrevStep); }; Tour.prototype.goTo = function(i) { var promise; promise = this.hideStep(this._current, i); return this._callOnPromiseDone(promise, this.showStep, i); }; Tour.prototype.end = function() { var endHelper, promise; endHelper = (function(_this) { return function(e) { $(document).off("click.tour-" + _this._options.name); $(document).off("keyup.tour-" + _this._options.name); $(window).off("resize.tour-" + _this._options.name); $(window).off("scroll.tour-" + _this._options.name); _this._setState('end', 'yes'); _this._inited = false; _this._force = false; _this._clearTimer(); if (_this._options.onEnd != null) { return _this._options.onEnd(_this); } }; })(this); promise = this.hideStep(this._current); return this._callOnPromiseDone(promise, endHelper); }; Tour.prototype.ended = function() { return !this._force && !!this._getState('end'); }; Tour.prototype.restart = function() { this._removeState('current_step'); this._removeState('end'); this._removeState('redirect_to'); return this.start(); }; Tour.prototype.pause = function() { var step; step = this.getStep(this._current); if (!(step && step.duration)) { return this; } this._paused = true; this._duration -= new Date().getTime() - this._start; window.clearTimeout(this._timer); this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); if (step.onPause != null) { return step.onPause(this, this._duration); } }; Tour.prototype.resume = function() { var step; step = this.getStep(this._current); if (!(step && step.duration)) { return this; } this._paused = false; this._start = new Date().getTime(); this._duration = this._duration || step.duration; this._timer = window.setTimeout((function(_this) { return function() { if (_this._isLast()) { return _this.next(); } else { return _this.end(); } }; })(this), this._duration); this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); if ((step.onResume != null) && this._duration !== step.duration) { return step.onResume(this, this._duration); } }; Tour.prototype.hideStep = function(i, iNext) { var hideDelay, hideStepHelper, promise, step; step = this.getStep(i); if (!step) { return; } this._clearTimer(); promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); hideStepHelper = (function(_this) { return function(e) { var $element, next_step; $element = $(step.element); if (!($element.data('bs.popover') || $element.data('popover'))) { $element = $('body'); } $element.popover('destroy').removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element").removeData('bs.popover'); if (step.reflex) { $(step.reflexElement).removeClass('tour-step-element-reflex').off((_this._reflexEvent(step.reflex)) + ".tour-" + _this._options.name); } if (step.backdrop) { next_step = (iNext != null) && _this.getStep(iNext); if (!next_step || !next_step.backdrop || next_step.backdropElement !== step.backdropElement) { _this._hideOverlayElement(step); } } if (step.onHidden != null) { return step.onHidden(_this); } }; })(this); hideDelay = step.delay.hide || step.delay; if ({}.toString.call(hideDelay) === '[object Number]' && hideDelay > 0) { this._debug("Wait " + hideDelay + " milliseconds to hide the step " + (this._current + 1)); window.setTimeout((function(_this) { return function() { return _this._callOnPromiseDone(promise, hideStepHelper); }; })(this), hideDelay); } else { this._callOnPromiseDone(promise, hideStepHelper); } return promise; }; Tour.prototype.showStep = function(i) { var path, promise, showDelay, showStepHelper, skipToPrevious, step; if (this.ended()) { this._debug('Tour ended, showStep prevented.'); return this; } step = this.getStep(i); if (!step) { return; } skipToPrevious = i < this._current; promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); this.setCurrentStep(i); path = (function() { switch ({}.toString.call(step.path)) { case '[object Function]': return step.path(); case '[object String]': return this._options.basePath + step.path; default: return step.path; } }).call(this); if (step.redirect && this._isRedirect(step.host, path, document.location)) { this._redirect(step, i, path); if (!this._isJustPathHashDifferent(step.host, path, document.location)) { return; } } showStepHelper = (function(_this) { return function(e) { if (_this._isOrphan(step)) { if (step.orphan === false) { _this._debug("Skip the orphan step " + (_this._current + 1) + ".\nOrphan option is false and the element does not exist or is hidden."); if (skipToPrevious) { _this._showPrevStep(); } else { _this._showNextStep(); } return; } _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); } if (step.autoscroll) { _this._scrollIntoView(i); } else { _this._showPopoverAndOverlay(i); } if (step.duration) { return _this.resume(); } }; })(this); showDelay = step.delay.show || step.delay; if ({}.toString.call(showDelay) === '[object Number]' && showDelay > 0) { this._debug("Wait " + showDelay + " milliseconds to show the step " + (this._current + 1)); window.setTimeout((function(_this) { return function() { return _this._callOnPromiseDone(promise, showStepHelper); }; })(this), showDelay); } else { this._callOnPromiseDone(promise, showStepHelper); } return promise; }; Tour.prototype.getCurrentStep = function() { return this._current; }; Tour.prototype.setCurrentStep = function(value) { if (value != null) { this._current = value; this._setState('current_step', value); } else { this._current = this._getState('current_step'); this._current = this._current === null ? null : parseInt(this._current, 10); } return this; }; Tour.prototype.redraw = function() { return this._showOverlayElement(this.getStep(this.getCurrentStep())); }; Tour.prototype._setState = function(key, value) { var e, keyName; if (this._options.storage) { keyName = this._options.name + "_" + key; try { this._options.storage.setItem(keyName, value); } catch (error) { e = error; if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { this._debug('LocalStorage quota exceeded. State storage failed.'); } } return this._options.afterSetState(keyName, value); } else { if (this._state == null) { this._state = {}; } return this._state[key] = value; } }; Tour.prototype._removeState = function(key) { var keyName; if (this._options.storage) { keyName = this._options.name + "_" + key; this._options.storage.removeItem(keyName); return this._options.afterRemoveState(keyName); } else { if (this._state != null) { return delete this._state[key]; } } }; Tour.prototype._getState = function(key) { var keyName, value; if (this._options.storage) { keyName = this._options.name + "_" + key; value = this._options.storage.getItem(keyName); } else { if (this._state != null) { value = this._state[key]; } } if (value === void 0 || value === 'null') { value = null; } this._options.afterGetState(key, value); return value; }; Tour.prototype._showNextStep = function() { var promise, showNextStepHelper, step; step = this.getStep(this._current); showNextStepHelper = (function(_this) { return function(e) { return _this.showStep(step.next); }; })(this); promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0); return this._callOnPromiseDone(promise, showNextStepHelper); }; Tour.prototype._showPrevStep = function() { var promise, showPrevStepHelper, step; step = this.getStep(this._current); showPrevStepHelper = (function(_this) { return function(e) { return _this.showStep(step.prev); }; })(this); promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0); return this._callOnPromiseDone(promise, showPrevStepHelper); }; Tour.prototype._debug = function(text) { if (this._options.debug) { return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); } }; Tour.prototype._isRedirect = function(host, path, location) { var currentPath; if ((host != null) && host !== '' && (({}.toString.call(host) === '[object RegExp]' && !host.test(location.origin)) || ({}.toString.call(host) === '[object String]' && this._isHostDifferent(host, location)))) { return true; } currentPath = [location.pathname, location.search, location.hash].join(''); return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && this._isPathDifferent(path, currentPath))); }; Tour.prototype._isHostDifferent = function(host, location) { switch ({}.toString.call(host)) { case '[object RegExp]': return !host.test(location.origin); case '[object String]': return this._getProtocol(host) !== this._getProtocol(location.href) || this._getHost(host) !== this._getHost(location.href); default: return true; } }; Tour.prototype._isPathDifferent = function(path, currentPath) { return this._getPath(path) !== this._getPath(currentPath) || !this._equal(this._getQuery(path), this._getQuery(currentPath)) || !this._equal(this._getHash(path), this._getHash(currentPath)); }; Tour.prototype._isJustPathHashDifferent = function(host, path, location) { var currentPath; if ((host != null) && host !== '') { if (this._isHostDifferent(host, location)) { return false; } } currentPath = [location.pathname, location.search, location.hash].join(''); if ({}.toString.call(path) === '[object String]') { return this._getPath(path) === this._getPath(currentPath) && this._equal(this._getQuery(path), this._getQuery(currentPath)) && !this._equal(this._getHash(path), this._getHash(currentPath)); } return false; }; Tour.prototype._redirect = function(step, i, path) { var href; if ($.isFunction(step.redirect)) { return step.redirect.call(this, path); } else { href = {}.toString.call(step.host) === '[object String]' ? "" + step.host + path : path; this._debug("Redirect to " + href); if (this._getState('redirect_to') === ("" + i)) { this._debug("Error redirection loop to " + path); this._removeState('redirect_to'); if (step.onRedirectError != null) { return step.onRedirectError(this); } } else { this._setState('redirect_to', "" + i); return document.location.href = href; } } }; Tour.prototype._isOrphan = function(step) { return (step.element == null) || !$(step.element).length || $(step.element).is(':hidden') && ($(step.element)[0].namespaceURI !== 'http://www.w3.org/2000/svg'); }; Tour.prototype._isLast = function() { return this._current < this._options.steps.length - 1; }; Tour.prototype._showPopoverAndOverlay = function(i) { var step; if (this.getCurrentStep() !== i || this.ended()) { return; } step = this.getStep(i); if (step.backdrop) { this._showOverlayElement(step); } this._showPopover(step, i); if (step.onShown != null) { step.onShown(this); } return this._debug("Step " + (this._current + 1) + " of " + this._options.steps.length); }; Tour.prototype._showPopover = function(step, i) { var $element, $tip, isOrphan, options, shouldAddSmart; $(".tour-" + this._options.name).remove(); options = $.extend({}, this._options); isOrphan = this._isOrphan(step); step.template = this._template(step, i); if (isOrphan) { step.element = 'body'; step.placement = 'top'; } $element = $(step.element); $element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element"); if (step.options) { $.extend(options, step.options); } if (step.reflex && !isOrphan) { $(step.reflexElement).addClass('tour-step-element-reflex').off((this._reflexEvent(step.reflex)) + ".tour-" + this._options.name).on((this._reflexEvent(step.reflex)) + ".tour-" + this._options.name, (function(_this) { return function() { if (_this._isLast()) { return _this.next(); } else { return _this.end(); } }; })(this)); } shouldAddSmart = step.smartPlacement === true && step.placement.search(/auto/i) === -1; $element.popover({ placement: shouldAddSmart ? "auto " + step.placement : step.placement, trigger: 'manual', title: step.title, content: step.content, html: true, animation: step.animation, container: step.container, template: step.template, selector: step.element }).popover('show'); $tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip(); $tip.attr('id', step.id); if ($element.css('position') === 'fixed') { $tip.css('position', 'fixed'); } this._reposition($tip, step); if (isOrphan) { return this._center($tip); } }; Tour.prototype._template = function(step, i) { var $navigation, $next, $prev, $resume, $template, template; template = step.template; if (this._isOrphan(step) && {}.toString.call(step.orphan) !== '[object Boolean]') { template = step.orphan; } $template = $.isFunction(template) ? $(template(i, step)) : $(template); $navigation = $template.find('.popover-navigation'); $prev = $navigation.find('[data-role="prev"]'); $next = $navigation.find('[data-role="next"]'); $resume = $navigation.find('[data-role="pause-resume"]'); if (this._isOrphan(step)) { $template.addClass('orphan'); } $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i); if (step.reflex) { $template.addClass("tour-" + this._options.name + "-reflex"); } if (step.prev < 0) { $prev.addClass('disabled').prop('disabled', true).prop('tabindex', -1); } if (step.next < 0) { $next.addClass('disabled').prop('disabled', true).prop('tabindex', -1); } if (!step.duration) { $resume.remove(); } return $template.clone().wrap('
').parent().html(); }; Tour.prototype._reflexEvent = function(reflex) { if ({}.toString.call(reflex) === '[object Boolean]') { return 'click'; } else { return reflex; } }; Tour.prototype._reposition = function($tip, step) { var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; offsetWidth = $tip[0].offsetWidth; offsetHeight = $tip[0].offsetHeight; tipOffset = $tip.offset(); originalLeft = tipOffset.left; originalTop = tipOffset.top; offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); if (offsetBottom < 0) { tipOffset.top = tipOffset.top + offsetBottom; } offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth(); if (offsetRight < 0) { tipOffset.left = tipOffset.left + offsetRight; } if (tipOffset.top < 0) { tipOffset.top = 0; } if (tipOffset.left < 0) { tipOffset.left = 0; } $tip.offset(tipOffset); if (step.placement === 'bottom' || step.placement === 'top') { if (originalLeft !== tipOffset.left) { return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left'); } } else { if (originalTop !== tipOffset.top) { return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top'); } } }; Tour.prototype._center = function($tip) { return $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2); }; Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { return $tip.find('.arrow').css(position, delta ? 50 * (1 - delta / dimension) + '%' : ''); }; Tour.prototype._scrollIntoView = function(i) { var $element, $window, counter, height, offsetTop, scrollTop, step, windowHeight; step = this.getStep(i); $element = $(step.element); if (!$element.length) { return this._showPopoverAndOverlay(i); } $window = $(window); offsetTop = $element.offset().top; height = $element.outerHeight(); windowHeight = $window.height(); scrollTop = 0; switch (step.placement) { case 'top': scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); break; case 'left': case 'right': scrollTop = Math.max(0, (offsetTop + height / 2) - (windowHeight / 2)); break; case 'bottom': scrollTop = Math.max(0, (offsetTop + height) - (windowHeight / 2)); } this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); counter = 0; return $('body, html').stop(true, true).animate({ scrollTop: Math.ceil(scrollTop) }, (function(_this) { return function() { if (++counter === 2) { _this._showPopoverAndOverlay(i); return _this._debug("Scroll into view.\nAnimation end element offset: " + ($element.offset().top) + ".\nWindow height: " + ($window.height()) + "."); } }; })(this)); }; Tour.prototype._onResize = function(callback, timeout) { return $(window).on("resize.tour-" + this._options.name, function() { clearTimeout(timeout); return timeout = setTimeout(callback, 100); }); }; Tour.prototype._onScroll = function(callback, timeout) { return $(window).on("scroll.tour-" + this._options.name, function() { clearTimeout(timeout); return timeout = setTimeout(callback, 100); }); }; Tour.prototype._initMouseNavigation = function() { var _this; _this = this; return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']", (function(_this) { return function(e) { e.preventDefault(); return _this.next(); }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']", (function(_this) { return function(e) { e.preventDefault(); if (_this._current > 0) { return _this.prev(); } }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) { return function(e) { e.preventDefault(); return _this.end(); }; })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) { var $this; e.preventDefault(); $this = $(this); $this.text(_this._paused ? $this.data('pause-text') : $this.data('resume-text')); if (_this._paused) { return _this.resume(); } else { return _this.pause(); } }); }; Tour.prototype._initKeyboardNavigation = function() { if (!this._options.keyboard) { return; } return $(document).on("keyup.tour-" + this._options.name, (function(_this) { return function(e) { if (!e.which) { return; } switch (e.which) { case 39: e.preventDefault(); if (_this._isLast()) { return _this.next(); } else { return _this.end(); } break; case 37: e.preventDefault(); if (_this._current > 0) { return _this.prev(); } } }; })(this)); }; Tour.prototype._makePromise = function(result) { if (result && $.isFunction(result.then)) { return result; } else { return null; } }; Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { if (promise) { return promise.then((function(_this) { return function(e) { return cb.call(_this, arg); }; })(this)); } else { return cb.call(this, arg); } }; Tour.prototype._showBackground = function(step, data) { var $backdrop, base, height, j, len, pos, ref, results, width; height = $(document).height(); width = $(document).width(); ref = ['top', 'bottom', 'left', 'right']; results = []; for (j = 0, len = ref.length; j < len; j++) { pos = ref[j]; $backdrop = (base = this.backdrops)[pos] != null ? base[pos] : base[pos] = $('
', { "class": "tour-backdrop " + pos }); $(step.backdropContainer).append($backdrop); switch (pos) { case 'top': results.push($backdrop.height(data.offset.top > 0 ? data.offset.top : 0).width(width).offset({ top: 0, left: 0 })); break; case 'bottom': results.push($backdrop.offset({ top: data.offset.top + data.height, left: 0 }).height(height - (data.offset.top + data.height)).width(width)); break; case 'left': results.push($backdrop.offset({ top: data.offset.top, left: 0 }).height(data.height).width(data.offset.left > 0 ? data.offset.left : 0)); break; case 'right': results.push($backdrop.offset({ top: data.offset.top, left: data.offset.left + data.width }).height(data.height).width(width - (data.offset.left + data.width))); break; default: results.push(void 0); } } return results; }; Tour.prototype._showOverlayElement = function(step) { var $backdropElement, elementData; $backdropElement = $(step.backdropElement); if ($backdropElement.length === 0) { elementData = { width: 0, height: 0, offset: { top: 0, left: 0 } }; } else { elementData = { width: $backdropElement.innerWidth(), height: $backdropElement.innerHeight(), offset: $backdropElement.offset() }; $backdropElement.addClass('tour-step-backdrop'); if (step.backdropPadding) { elementData = this._applyBackdropPadding(step.backdropPadding, elementData); } } return this._showBackground(step, elementData); }; Tour.prototype._hideOverlayElement = function(step) { var $backdrop, pos, ref; $(step.backdropElement).removeClass('tour-step-backdrop'); ref = this.backdrops; for (pos in ref) { $backdrop = ref[pos]; if ($backdrop && $backdrop.remove !== void 0) { $backdrop.remove(); } } return this.backdrops = []; }; Tour.prototype._applyBackdropPadding = function(padding, data) { if (typeof padding === 'object') { if (padding.top == null) { padding.top = 0; } if (padding.right == null) { padding.right = 0; } if (padding.bottom == null) { padding.bottom = 0; } if (padding.left == null) { padding.left = 0; } data.offset.top = data.offset.top - padding.top; data.offset.left = data.offset.left - padding.left; data.width = data.width + padding.left + padding.right; data.height = data.height + padding.top + padding.bottom; } else { data.offset.top = data.offset.top - padding; data.offset.left = data.offset.left - padding; data.width = data.width + (padding * 2); data.height = data.height + (padding * 2); } return data; }; Tour.prototype._clearTimer = function() { window.clearTimeout(this._timer); this._timer = null; return this._duration = null; }; Tour.prototype._getProtocol = function(url) { url = url.split('://'); if (url.length > 1) { return url[0]; } else { return 'http'; } }; Tour.prototype._getHost = function(url) { url = url.split('//'); url = url.length > 1 ? url[1] : url[0]; return url.split('/')[0]; }; Tour.prototype._getPath = function(path) { return path.replace(/\/?$/, '').split('?')[0].split('#')[0]; }; Tour.prototype._getQuery = function(path) { return this._getParams(path, '?'); }; Tour.prototype._getHash = function(path) { return this._getParams(path, '#'); }; Tour.prototype._getParams = function(path, start) { var j, len, param, params, paramsObject; params = path.split(start); if (params.length === 1) { return {}; } params = params[1].split('&'); paramsObject = {}; for (j = 0, len = params.length; j < len; j++) { param = params[j]; param = param.split('='); paramsObject[param[0]] = param[1] || ''; } return paramsObject; }; Tour.prototype._equal = function(obj1, obj2) { var j, k, len, obj1Keys, obj2Keys, v; if ({}.toString.call(obj1) === '[object Object]' && {}.toString.call(obj2) === '[object Object]') { obj1Keys = Object.keys(obj1); obj2Keys = Object.keys(obj2); if (obj1Keys.length !== obj2Keys.length) { return false; } for (k in obj1) { v = obj1[k]; if (!this._equal(obj2[k], v)) { return false; } } return true; } else if ({}.toString.call(obj1) === '[object Array]' && {}.toString.call(obj2) === '[object Array]') { if (obj1.length !== obj2.length) { return false; } for (k = j = 0, len = obj1.length; j < len; k = ++j) { v = obj1[k]; if (!this._equal(v, obj2[k])) { return false; } } return true; } else { return obj1 === obj2; } }; return Tour; })(); return Tour; }); bootstrap-tour-0.12.0/yarn.lock000066400000000000000000004056051316367154600164470ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" accepts@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: mime-types "~2.1.11" negotiator "0.6.1" accepts@~1.2.12, accepts@~1.2.13: version "1.2.13" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" dependencies: mime-types "~2.1.6" negotiator "0.5.3" accepts@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" dependencies: mime-types "~2.1.16" negotiator "0.6.1" accord@^0.27.3: version "0.27.3" resolved "https://registry.yarnpkg.com/accord/-/accord-0.27.3.tgz#7fb9129709285caea84eb372c4e882031b7138e8" dependencies: convert-source-map "^1.5.0" glob "^7.0.5" indx "^0.2.3" lodash.clone "^4.3.2" lodash.defaults "^4.0.1" lodash.flatten "^4.2.0" lodash.merge "^4.4.0" lodash.partialright "^4.1.4" lodash.pick "^4.2.1" lodash.uniq "^4.3.0" resolve "^1.3.3" semver "^5.3.0" uglify-js "^2.8.22" when "^3.7.8" after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" ajv@^5.1.0: version "5.2.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" ansi-cyan@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" dependencies: ansi-wrap "0.1.0" ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" dependencies: ansi-wrap "0.1.0" ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-wrap@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" args-js@^0.10.5: version "0.10.12" resolved "https://registry.yarnpkg.com/args-js/-/args-js-0.10.12.tgz#a327aea80e41072a3d85f9c274db6511eb95e49c" arr-diff@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" dependencies: arr-flatten "^1.0.1" array-slice "^0.2.3" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" arr-union@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" array-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" array-slice@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" arraybuffer.slice@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" async@^2.0.1: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: lodash "^4.14.0" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" base64-url@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" basic-auth-connect@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" basic-auth@~1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" batch@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" dependencies: callsite "1.0.0" binary-extensions@^1.0.0: version "1.10.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" bl@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" dependencies: readable-stream "~2.0.5" blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" bluebird@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" body-parser@^1.16.1: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" dependencies: bytes "3.0.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.1" http-errors "~1.6.2" iconv-lite "0.4.19" on-finished "~2.3.0" qs "6.5.1" raw-body "2.3.2" type-is "~1.6.15" body-parser@~1.13.3: version "1.13.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" dependencies: bytes "2.1.0" content-type "~1.0.1" debug "~2.2.0" depd "~1.0.1" http-errors "~1.3.1" iconv-lite "0.4.11" on-finished "~2.3.0" qs "4.0.0" raw-body "~2.1.2" type-is "~1.6.6" body-parser@~1.14.0: version "1.14.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz#1015cb1fe2c443858259581db53332f8d0cf50f9" dependencies: bytes "2.2.0" content-type "~1.0.1" debug "~2.2.0" depd "~1.1.0" http-errors "~1.3.1" iconv-lite "0.4.13" on-finished "~2.3.0" qs "5.2.0" raw-body "~2.1.5" type-is "~1.6.10" boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" boom@4.x.x: version "4.3.1" resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" dependencies: hoek "4.x.x" boom@5.x.x: version "5.2.0" resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" dependencies: hoek "4.x.x" bootstrap@~3: version "3.3.7" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71" brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^0.1.2: version "0.1.5" resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" dependencies: expand-range "^0.1.0" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" bump-regex@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/bump-regex/-/bump-regex-2.7.0.tgz#4a21e2537113476c026be588b8a7dddef1934641" dependencies: semver "^5.1.0" xtend "^4.0.1" bytes@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" bytes@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz#fd35464a403f6f9117c2de3609ecff9cae000588" bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" dependencies: camelcase "^2.0.0" map-obj "^1.0.0" camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chalk@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" dependencies: ansi-styles "^1.1.0" escape-string-regexp "^1.0.0" has-ansi "^0.1.0" strip-ansi "^0.3.0" supports-color "^0.2.0" chalk@^1.0.0, chalk@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" chokidar@^1.4.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: anymatch "^1.3.0" async-each "^1.0.0" glob-parent "^2.0.0" inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^2.0.0" path-is-absolute "^1.0.0" readdirp "^2.0.0" optionalDependencies: fsevents "^1.0.0" cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" dependencies: center-align "^0.1.1" right-align "^0.1.1" wordwrap "0.0.2" clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" clone-stats@^0.0.1, clone-stats@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" clone@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" clone@^1.0.0, clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" clone@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" cloneable-readable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" dependencies: inherits "^2.0.1" process-nextick-args "^1.0.6" through2 "^2.0.1" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" coffee-script@^1.10.0, coffee-script@~1.12.7: version "1.12.7" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" coffee-script@~1.11.0: version "1.11.1" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.11.1.tgz#bf1c47ad64443a0d95d12df2b147cc0a4daad6e9" coffeelint-stylish@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/coffeelint-stylish/-/coffeelint-stylish-0.1.2.tgz#ab501a64435e231706da13a27527ab695700abc9" dependencies: chalk "^1.0.0" text-table "^0.2.0" coffeelint@^1.4.0: version "1.16.0" resolved "https://registry.yarnpkg.com/coffeelint/-/coffeelint-1.16.0.tgz#83d8ed1dafde3a677de44e7b8a18be607761e6d8" dependencies: coffee-script "~1.11.0" glob "^7.0.6" ignore "^3.0.9" optimist "^0.6.1" resolve "^0.6.3" strip-json-comments "^1.0.2" colors@^1.1.0, colors@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" combine-lists@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" dependencies: lodash "^4.5.0" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" commander@^2.9.0, commander@~2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" component-emitter@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" component-emitter@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" compressible@~2.0.5: version "2.0.11" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a" dependencies: mime-db ">= 1.29.0 < 2" compression@~1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" dependencies: accepts "~1.2.12" bytes "2.1.0" compressible "~2.0.5" debug "~2.2.0" on-headers "~1.0.0" vary "~1.0.1" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" concat-stream@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" dependencies: inherits "~2.0.1" readable-stream "~2.0.0" typedarray "~0.0.5" concat-with-sourcemaps@*, concat-with-sourcemaps@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" dependencies: source-map "^0.5.1" connect-livereload@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.5.4.tgz#80157d1371c9f37cc14039ab1895970d119dc3bc" connect-timeout@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" dependencies: debug "~2.2.0" http-errors "~1.3.1" ms "0.7.1" on-headers "~1.0.0" connect@^2.30.0: version "2.30.2" resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" dependencies: basic-auth-connect "1.0.0" body-parser "~1.13.3" bytes "2.1.0" compression "~1.5.2" connect-timeout "~1.6.2" content-type "~1.0.1" cookie "0.1.3" cookie-parser "~1.3.5" cookie-signature "1.0.6" csurf "~1.8.3" debug "~2.2.0" depd "~1.0.1" errorhandler "~1.4.2" express-session "~1.11.3" finalhandler "0.4.0" fresh "0.3.0" http-errors "~1.3.1" method-override "~2.3.5" morgan "~1.6.1" multiparty "3.3.2" on-headers "~1.0.0" parseurl "~1.3.0" pause "0.1.0" qs "4.0.0" response-time "~2.3.1" serve-favicon "~2.3.0" serve-index "~1.7.2" serve-static "~1.10.0" type-is "~1.6.6" utils-merge "1.0.0" vhost "~3.0.1" connect@^3.6.0: version "3.6.5" resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.5.tgz#fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da" dependencies: debug "2.6.9" finalhandler "1.0.6" parseurl "~1.3.2" utils-merge "1.0.1" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" content-type@~1.0.1, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" cookie-parser@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" dependencies: cookie "0.1.3" cookie-signature "1.0.6" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" cookie@0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" core-js@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" crc@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" dependencies: boom "5.x.x" csrf@~3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" dependencies: rndm "1.2.0" tsscmp "1.0.5" uid-safe "2.1.4" csurf@~1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" dependencies: cookie "0.1.3" cookie-signature "1.0.6" csrf "~3.0.0" http-errors "~1.3.1" currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" dateformat@^1.0.11, dateformat@^1.0.7-1.2.3: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" dependencies: get-stdin "^4.0.1" meow "^3.3.0" dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" debug@2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: ms "0.7.1" debug@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" dependencies: ms "0.7.2" debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" decamelize@^1.0.0, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" defaults@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" dependencies: clone "^1.0.2" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" depd@1.1.1, depd@~1.1.0, depd@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" depd@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" deprecated@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" detect-file@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" dependencies: fs-exists-sync "^0.1.0" di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" dependencies: custom-event "~1.0.0" ent "~2.2.0" extend "^3.0.0" void-elements "^2.0.0" duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" dependencies: readable-stream "~1.1.9" duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" end-of-stream@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" dependencies: once "~1.3.0" engine.io-client@1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" dependencies: component-emitter "1.2.1" component-inherit "0.0.3" debug "2.3.3" engine.io-parser "1.3.2" has-cors "1.1.0" indexof "0.0.1" parsejson "0.0.3" parseqs "0.0.5" parseuri "0.0.5" ws "1.1.2" xmlhttprequest-ssl "1.5.3" yeast "0.1.2" engine.io-parser@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" dependencies: after "0.8.2" arraybuffer.slice "0.0.6" base64-arraybuffer "0.1.5" blob "0.0.4" has-binary "0.1.7" wtf-8 "1.0.0" engine.io@1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" dependencies: accepts "1.3.3" base64id "1.0.0" cookie "0.3.1" debug "2.3.3" engine.io-parser "1.3.2" ws "1.1.2" ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" errno@^0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: prr "~0.0.0" error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" errorhandler@~1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" dependencies: accepts "~1.3.0" escape-html "~1.0.3" escape-html@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" etag@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" event-stream@^3.3.2: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" dependencies: duplexer "~0.1.1" from "~0" map-stream "~0.1.0" pause-stream "0.0.11" split "0.3" stream-combiner "~0.0.4" through "~2.3.1" eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" expand-braces@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" dependencies: array-slice "^0.2.3" array-unique "^0.2.1" braces "^0.1.2" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" expand-range@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" dependencies: is-number "^0.1.1" repeat-string "^0.2.2" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" expand-tilde@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" dependencies: os-homedir "^1.0.1" expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" dependencies: homedir-polyfill "^1.0.1" express-session@~1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" dependencies: cookie "0.1.3" cookie-signature "1.0.6" crc "3.3.0" debug "~2.2.0" depd "~1.0.1" on-headers "~1.0.0" parseurl "~1.3.0" uid-safe "~2.0.0" utils-merge "1.0.0" extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" dependencies: kind-of "^1.1.0" extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" extract-zip@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" dependencies: concat-stream "1.5.0" debug "0.7.4" mkdirp "0.5.0" yauzl "2.4.1" extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fancy-log@^1.1.0, fancy-log@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" dependencies: chalk "^1.1.1" time-stamp "^1.0.0" fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" dependencies: websocket-driver ">=0.5.1" fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" dependencies: pend "~1.2.0" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: is-number "^2.1.0" isobject "^2.0.0" randomatic "^1.1.3" repeat-element "^1.1.2" repeat-string "^1.5.2" finalhandler@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" dependencies: debug "~2.2.0" escape-html "1.0.2" on-finished "~2.3.0" unpipe "~1.0.0" finalhandler@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f" dependencies: debug "2.6.9" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.2" statuses "~1.3.1" unpipe "~1.0.0" find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" findup-sync@^0.4.0, findup-sync@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" dependencies: detect-file "^0.1.0" is-glob "^2.0.1" micromatch "^2.3.7" resolve-dir "^0.1.0" fined@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" dependencies: expand-tilde "^2.0.2" is-plain-object "^2.0.3" object.defaults "^1.1.0" object.pick "^1.2.0" parse-filepath "^1.0.1" first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" flagged-respawn@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: for-in "^1.0.1" for-own@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" dependencies: for-in "^1.0.1" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~1.0.0-rc3: version "1.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" dependencies: async "^2.0.1" combined-stream "^1.0.5" mime-types "^2.1.11" form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" form-data@~2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" fs-access@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" dependencies: null-check "^1.0.0" fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" fs-extra@~0.26.4: version "0.26.7" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" klaw "^1.0.0" path-is-absolute "^1.0.0" rimraf "^2.2.8" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.36" fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: fstream "^1.0.0" inherits "2" minimatch "^3.0.0" fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" has-unicode "^2.0.0" object-assign "^4.1.0" signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" wide-align "^1.1.0" gaze@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" dependencies: globule "~0.1.0" generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" generate-object-property@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" dependencies: is-property "^1.0.0" get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: is-glob "^2.0.0" glob-stream@^3.1.5: version "3.1.18" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" dependencies: glob "^4.3.1" glob2base "^0.0.12" minimatch "^2.0.1" ordered-read-streams "^0.1.0" through2 "^0.6.1" unique-stream "^1.0.0" glob-watcher@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" dependencies: gaze "^0.5.1" glob2base@^0.0.12: version "0.0.12" resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" dependencies: find-index "^0.1.1" glob@^4.3.1: version "4.5.3" resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" dependencies: inflight "^1.0.4" inherits "2" minimatch "^2.0.1" once "^1.3.0" glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" dependencies: graceful-fs "~1.2.0" inherits "1" minimatch "~0.2.11" global-modules@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" dependencies: global-prefix "^0.1.4" is-windows "^0.2.0" global-prefix@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" dependencies: homedir-polyfill "^1.0.0" ini "^1.3.4" is-windows "^0.2.0" which "^1.2.12" globule@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" dependencies: glob "~3.1.21" lodash "~1.0.1" minimatch "~0.2.11" glogg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" dependencies: sparkles "^1.0.0" graceful-fs@^3.0.0: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" dependencies: natives "^1.1.0" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" graceful-fs@~1.2.0: version "1.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" gulp-bump@~2.7: version "2.7.0" resolved "https://registry.yarnpkg.com/gulp-bump/-/gulp-bump-2.7.0.tgz#4c3750bce93c5d816fe9a154e6619dd509a852d8" dependencies: bump-regex "^2.7.0" plugin-error "^0.1.2" plugin-log "^0.1.0" semver "^5.3.0" through2 "^2.0.1" gulp-changed@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/gulp-changed/-/gulp-changed-3.1.0.tgz#87cd1593a0bb4a5129dc2f229bece6d9488c272a" dependencies: gulp-util "^3.0.0" pify "^2.3.0" through2 "^2.0.0" gulp-clean@~0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/gulp-clean/-/gulp-clean-0.3.2.tgz#a347d473acea40182f935587a451941671928102" dependencies: gulp-util "^2.2.14" rimraf "^2.2.8" through2 "^0.4.2" gulp-coffee@~2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/gulp-coffee/-/gulp-coffee-2.3.4.tgz#e9975faf3f26746fb2e72da9e3f32c9db5746daa" dependencies: coffee-script "^1.10.0" gulp-util "^3.0.2" merge "^1.2.0" through2 "^2.0.1" vinyl-sourcemaps-apply "^0.2.1" gulp-coffeelint@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/gulp-coffeelint/-/gulp-coffeelint-0.6.0.tgz#b4706849c5e3b057658bf638ccfa5dee7351023b" dependencies: args-js "^0.10.5" coffeelint "^1.4.0" coffeelint-stylish "^0.1.1" gulp-util "^3.0.0" through2 "^2.0.0" gulp-concat@~2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353" dependencies: concat-with-sourcemaps "^1.0.0" through2 "^2.0.0" vinyl "^2.0.0" gulp-connect@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gulp-connect/-/gulp-connect-5.0.0.tgz#f2fdf306ae911468368c2285f2d782f13eddaf4e" dependencies: connect "^2.30.0" connect-livereload "^0.5.4" event-stream "^3.3.2" gulp-util "^3.0.6" tiny-lr "^0.2.1" gulp-header@~1.8.9: version "1.8.9" resolved "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.9.tgz#c9f10fee0632d81e939789c6ecf45a151bf3098b" dependencies: concat-with-sourcemaps "*" gulp-util "*" object-assign "*" through2 "^2.0.0" gulp-jasmine@~2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/gulp-jasmine/-/gulp-jasmine-2.4.2.tgz#5a7f47e27370c3619ac0a2a442be399671409db3" dependencies: arrify "^1.0.0" gulp-util "^3.0.0" jasmine "^2.3.0" jasmine-terminal-reporter "^1.0.0" through2 "^2.0.0" gulp-less@~3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/gulp-less/-/gulp-less-3.3.2.tgz#f6636adcc66150a8902719fa59963fc7f862a49a" dependencies: accord "^0.27.3" gulp-util "^3.0.7" less "2.6.x || ^2.7.1" object-assign "^4.0.1" through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.0" gulp-load-plugins@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-1.5.0.tgz#4c419f7e5764d9a0e33061bab9618f81b73d4171" dependencies: array-unique "^0.2.1" fancy-log "^1.2.0" findup-sync "^0.4.0" gulplog "^1.0.0" has-gulplog "^0.1.0" micromatch "^2.3.8" resolve "^1.1.7" gulp-open@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/gulp-open/-/gulp-open-2.0.0.tgz#a16f67e95cea8b2061b63a3b8c389bc559b8e1ce" dependencies: colors "^1.1.2" gulp-util "^3.0.2" open "0.0.5" through2 "^2.0.1" gulp-rename@~1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" gulp-uglify@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-3.0.0.tgz#0df0331d72a0d302e3e37e109485dddf33c6d1ca" dependencies: gulplog "^1.0.0" has-gulplog "^0.1.0" lodash "^4.13.1" make-error-cause "^1.1.1" through2 "^2.0.0" uglify-js "^3.0.5" vinyl-sourcemaps-apply "^0.2.0" gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.2, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.0: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: array-differ "^1.0.0" array-uniq "^1.0.2" beeper "^1.0.0" chalk "^1.0.0" dateformat "^2.0.0" fancy-log "^1.1.0" gulplog "^1.0.0" has-gulplog "^0.1.0" lodash._reescape "^3.0.0" lodash._reevaluate "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.template "^3.0.0" minimist "^1.1.0" multipipe "^0.1.2" object-assign "^3.0.0" replace-ext "0.0.1" through2 "^2.0.0" vinyl "^0.5.0" gulp-util@^2.2.14: version "2.2.20" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c" dependencies: chalk "^0.5.0" dateformat "^1.0.7-1.2.3" lodash._reinterpolate "^2.4.1" lodash.template "^2.4.1" minimist "^0.2.0" multipipe "^0.1.0" through2 "^0.5.0" vinyl "^0.2.1" gulp@~3.9.0: version "3.9.1" resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" dependencies: archy "^1.0.0" chalk "^1.0.0" deprecated "^0.0.1" gulp-util "^3.0.0" interpret "^1.0.0" liftoff "^2.1.0" minimist "^1.1.0" orchestrator "^0.3.0" pretty-hrtime "^1.0.0" semver "^4.1.0" tildify "^1.0.0" v8flags "^2.0.2" vinyl-fs "^0.3.0" gulplog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" dependencies: glogg "^1.0.0" har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" har-validator@~2.0.2: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" dependencies: chalk "^1.1.1" commander "^2.9.0" is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" dependencies: ajv "^4.9.1" har-schema "^1.0.5" har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" dependencies: ajv "^5.1.0" har-schema "^2.0.0" has-ansi@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" dependencies: ansi-regex "^0.2.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-binary@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" dependencies: isarray "0.0.1" has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" dependencies: sparkles "^1.0.0" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" hasha@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" dependencies: is-stream "^1.0.1" pinkie-promise "^2.0.0" hawk@3.1.3, hawk@~3.1.0, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: boom "2.x.x" cryptiles "2.x.x" hoek "2.x.x" sntp "1.x.x" hawk@~6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" dependencies: boom "4.x.x" cryptiles "3.x.x" hoek "4.x.x" sntp "2.x.x" hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" dependencies: depd "1.1.1" inherits "2.0.3" setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" http-errors@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" dependencies: inherits "~2.0.1" statuses "1" http-parser-js@>=0.4.0: version "0.4.8" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.8.tgz#763f75c4b771a0bb44653b07070bff6ca7bc5561" http-proxy@^1.13.0: version "1.16.2" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" dependencies: eventemitter3 "1.x.x" requires-port "1.x.x" http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" sshpk "^1.7.0" http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" iconv-lite@0.4.11: version "0.4.11" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" ignore@^3.0.9: version "3.3.5" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" dependencies: repeating "^2.0.0" indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" indx@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/indx/-/indx-0.2.3.tgz#15dcf56ee9cf65c0234c513c27fbd580e70fbc50" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@1: version "1.0.2" resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" ini@^1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" interpret@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" is-absolute@^0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" dependencies: is-relative "^0.2.1" is-windows "^0.2.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" dependencies: builtin-modules "^1.0.0" is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: is-primitive "^2.0.0" is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" dependencies: number-is-nan "^1.0.0" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" is-my-json-valid@^2.12.4: version "2.16.1" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" jsonpointer "^4.0.0" xtend "^4.0.0" is-number@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" is-plain-object@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-relative@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" dependencies: is-unc-path "^0.1.1" is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" is-unc-path@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" dependencies: unc-path-regex "^0.1.0" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isbinaryfile@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" isstream@^0.1.2, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" jasmine-core@~2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" jasmine-terminal-reporter@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/jasmine-terminal-reporter/-/jasmine-terminal-reporter-1.0.3.tgz#896f1ec8fdf4bf6aecdd41c503eda7347f61526b" dependencies: indent-string "^2.1.0" pluralize "^1.2.1" jasmine@^2.3.0: version "2.8.0" resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" dependencies: exit "^0.1.2" glob "^7.0.6" jasmine-core "~2.8.0" jquery@>=1.8: version "3.2.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" optionalDependencies: graceful-fs "^4.1.6" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.2.3" verror "1.10.0" karma-chrome-launcher@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" dependencies: fs-access "^1.0.0" which "^1.2.1" karma-firefox-launcher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz#ce58f47c2013a88156d55a5d61337c099cf5bb51" karma-jasmine@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" karma@~1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.1.tgz#85cc08e9e0a22d7ce9cca37c4a1be824f6a2b1ae" dependencies: bluebird "^3.3.0" body-parser "^1.16.1" chokidar "^1.4.1" colors "^1.1.0" combine-lists "^1.0.0" connect "^3.6.0" core-js "^2.2.0" di "^0.0.1" dom-serialize "^2.2.0" expand-braces "^0.1.1" glob "^7.1.1" graceful-fs "^4.1.2" http-proxy "^1.13.0" isbinaryfile "^3.0.0" lodash "^3.8.0" log4js "^0.6.31" mime "^1.3.4" minimatch "^3.0.2" optimist "^0.6.1" qjobs "^1.1.4" range-parser "^1.2.0" rimraf "^2.6.0" safe-buffer "^5.0.1" socket.io "1.7.3" source-map "^0.5.3" tmp "0.0.31" useragent "^2.1.12" kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" optionalDependencies: graceful-fs "^4.1.9" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" "less@2.6.x || ^2.7.1": version "2.7.2" resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df" optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" image-size "~0.5.0" mime "^1.2.11" mkdirp "^0.5.0" promise "^7.1.1" request "^2.72.0" source-map "^0.5.3" liftoff@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" dependencies: extend "^3.0.0" findup-sync "^0.4.2" fined "^1.0.1" flagged-respawn "^0.3.2" lodash.isplainobject "^4.0.4" lodash.isstring "^4.0.1" lodash.mapvalues "^4.4.0" rechoir "^0.6.2" resolve "^1.1.7" livereload-js@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2" load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" pinkie-promise "^2.0.0" strip-bom "^2.0.0" lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" lodash._escapehtmlchar@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" dependencies: lodash._htmlescapes "~2.4.1" lodash._escapestringchar@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72" lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" lodash._htmlescapes@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb" lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" lodash._isnative@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" lodash._objecttypes@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" lodash._reescape@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" lodash._reevaluate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222" lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" lodash._reunescapedhtml@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7" dependencies: lodash._htmlescapes "~2.4.1" lodash.keys "~2.4.1" lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" lodash._shimkeys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" dependencies: lodash._objecttypes "~2.4.1" lodash.clone@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" lodash.defaults@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" dependencies: lodash._objecttypes "~2.4.1" lodash.keys "~2.4.1" lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" dependencies: lodash._root "^3.0.0" lodash.escape@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4" dependencies: lodash._escapehtmlchar "~2.4.1" lodash._reunescapedhtml "~2.4.1" lodash.keys "~2.4.1" lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" lodash.isobject@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" dependencies: lodash._objecttypes "~2.4.1" lodash.isplainobject@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.keys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" dependencies: lodash._isnative "~2.4.1" lodash._shimkeys "~2.4.1" lodash.isobject "~2.4.1" lodash.mapvalues@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" lodash.merge@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" lodash.partialright@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.partialright/-/lodash.partialright-4.2.1.tgz#0130d80e83363264d40074f329b8a3e7a8a1cc4b" lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" lodash.template@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d" dependencies: lodash._escapestringchar "~2.4.1" lodash._reinterpolate "~2.4.1" lodash.defaults "~2.4.1" lodash.escape "~2.4.1" lodash.keys "~2.4.1" lodash.templatesettings "~2.4.1" lodash.values "~2.4.1" lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" dependencies: lodash._basecopy "^3.0.0" lodash._basetostring "^3.0.0" lodash._basevalues "^3.0.0" lodash._isiterateecall "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lodash.keys "^3.0.0" lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" lodash.templatesettings@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" dependencies: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lodash.templatesettings@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699" dependencies: lodash._reinterpolate "~2.4.1" lodash.escape "~2.4.1" lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" lodash.values@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" dependencies: lodash.keys "~2.4.1" lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" lodash@^4.13.1, lodash@^4.14.0, lodash@^4.5.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" log4js@^0.6.31: version "0.6.38" resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" dependencies: readable-stream "~1.0.2" semver "~4.3.3" longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" make-error-cause@^1.1.1: version "1.2.2" resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" dependencies: make-error "^1.2.0" make-error@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" loud-rejection "^1.0.0" map-obj "^1.0.1" minimist "^1.1.3" normalize-package-data "^2.3.4" object-assign "^4.0.1" read-pkg-up "^1.0.1" redent "^1.0.0" trim-newlines "^1.0.0" merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" method-override@~2.3.5: version "2.3.10" resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" dependencies: debug "2.6.9" methods "~1.1.2" parseurl "~1.3.2" vary "~1.1.2" methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" micromatch@^2.1.5, micromatch@^2.3.7, micromatch@^2.3.8: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" braces "^1.8.2" expand-brackets "^0.1.4" extglob "^0.3.1" filename-regex "^2.0.0" is-extglob "^1.0.0" is-glob "^2.0.1" kind-of "^3.0.2" normalize-path "^2.0.1" object.omit "^2.0.0" parse-glob "^3.0.4" regex-cache "^0.4.2" "mime-db@>= 1.29.0 < 2", mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" mime@^1.2.11, mime@^1.3.4: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" minimatch@^2.0.1: version "2.0.10" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" dependencies: brace-expansion "^1.0.0" minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimatch@~0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" dependencies: lru-cache "2" sigmund "~1.0.0" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" mkdirp@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" dependencies: minimist "0.0.8" "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" morgan@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" dependencies: basic-auth "~1.0.3" debug "~2.2.0" depd "~1.0.1" on-finished "~2.3.0" on-headers "~1.0.0" ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" multiparty@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" dependencies: readable-stream "~1.1.9" stream-counter "~0.2.0" multipipe@^0.1.0, multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" dependencies: duplexer2 "0.0.2" nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" natives@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" negotiator@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" node-pre-gyp@^0.6.36: version "0.6.38" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" dependencies: hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" tar "^2.2.1" tar-pack "^3.4.0" node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" oauth-sign@~0.8.0, oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@*, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" dependencies: array-each "^1.0.1" array-slice "^1.0.0" for-own "^1.0.0" isobject "^3.0.0" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: for-own "^0.1.4" is-extendable "^0.1.1" object.pick@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" on-headers@~1.0.0, on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" once@^1.3.0, once@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" once@~1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" dependencies: wrappy "1" open@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" options@>=0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" orchestrator@^0.3.0: version "0.3.8" resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" dependencies: end-of-stream "~0.1.5" sequencify "~0.0.7" stream-consume "~0.1.0" ordered-read-streams@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" parse-filepath@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" dependencies: is-absolute "^0.2.3" map-cache "^0.2.0" path-root "^0.1.1" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" dependencies: error-ex "^1.2.0" parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" parsejson@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" dependencies: better-assert "~1.0.0" parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" dependencies: better-assert "~1.0.0" parseuri@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" dependencies: better-assert "~1.0.0" parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: pinkie-promise "^2.0.0" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" path-root@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" dependencies: path-root-regex "^0.1.0" path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" dependencies: graceful-fs "^4.1.2" pify "^2.0.0" pinkie-promise "^2.0.0" pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" dependencies: through "~2.3" pause@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" phantomjs@^2.1.7: version "2.1.7" resolved "https://registry.yarnpkg.com/phantomjs/-/phantomjs-2.1.7.tgz#c6910f67935c37285b6114329fc2f27d5f3e3134" dependencies: extract-zip "~1.5.0" fs-extra "~0.26.4" hasha "^2.2.0" kew "~0.7.0" progress "~1.1.8" request "~2.67.0" request-progress "~2.0.1" which "~1.2.2" pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" dependencies: ansi-cyan "^0.1.1" ansi-red "^0.1.1" arr-diff "^1.0.1" arr-union "^2.0.1" extend-shallow "^1.1.2" plugin-log@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/plugin-log/-/plugin-log-0.1.0.tgz#86049cf6ab10833398a931f3689cbaee7b5e1333" dependencies: chalk "^1.1.1" dateformat "^1.0.11" pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" qs@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" qs@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be" qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" qs@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9" qs@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc" qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: is-number "^3.0.0" kind-of "^4.0.0" range-parser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" range-parser@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" dependencies: bytes "3.0.0" http-errors "1.6.2" iconv-lite "0.4.19" unpipe "1.0.0" raw-body@~2.1.2, raw-body@~2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" dependencies: bytes "2.4.0" iconv-lite "0.4.13" unpipe "1.0.0" rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" dependencies: find-up "^1.0.0" read-pkg "^1.0.0" read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" path-type "^1.0.0" "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.2, readable-stream@~1.0.33: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" safe-buffer "~5.1.1" string_decoder "~1.0.3" util-deprecate "~1.0.1" readable-stream@~1.1.8, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@~2.0.0, readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~0.10.x" util-deprecate "~1.0.1" readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" dependencies: graceful-fs "^4.1.2" minimatch "^3.0.2" readable-stream "^2.0.2" set-immediate-shim "^1.0.1" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" dependencies: resolve "^1.1.6" redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" repeat-string@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" request-progress@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" dependencies: throttleit "^1.0.0" request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.1.1" har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" performance-now "^0.2.0" qs "~6.4.0" safe-buffer "^5.0.1" stringstream "~0.0.4" tough-cookie "~2.3.0" tunnel-agent "^0.6.0" uuid "^3.0.0" request@^2.72.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.1" forever-agent "~0.6.1" form-data "~2.3.1" har-validator "~5.0.3" hawk "~6.0.2" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.17" oauth-sign "~0.8.2" performance-now "^2.1.0" qs "~6.5.1" safe-buffer "^5.1.1" stringstream "~0.0.5" tough-cookie "~2.3.3" tunnel-agent "^0.6.0" uuid "^3.1.0" request@~2.67.0: version "2.67.0" resolved "https://registry.yarnpkg.com/request/-/request-2.67.0.tgz#8af74780e2bf11ea0ae9aa965c11f11afd272742" dependencies: aws-sign2 "~0.6.0" bl "~1.0.0" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~1.0.0-rc3" har-validator "~2.0.2" hawk "~3.1.0" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" node-uuid "~1.4.7" oauth-sign "~0.8.0" qs "~5.2.0" stringstream "~0.0.4" tough-cookie "~2.2.0" tunnel-agent "~0.4.1" requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" dependencies: expand-tilde "^1.2.2" global-modules "^0.2.3" resolve@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" response-time@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" dependencies: depd "~1.1.0" on-headers "~1.0.1" right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" rndm@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" semver@^4.1.0, semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" send@0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" dependencies: debug "~2.2.0" depd "~1.1.0" destroy "~1.0.4" escape-html "~1.0.3" etag "~1.7.0" fresh "0.3.0" http-errors "~1.3.1" mime "1.3.4" ms "0.7.1" on-finished "~2.3.0" range-parser "~1.0.3" statuses "~1.2.1" sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" serve-favicon@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" dependencies: etag "~1.7.0" fresh "0.3.0" ms "0.7.2" parseurl "~1.3.1" serve-index@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" dependencies: accepts "~1.2.13" batch "0.5.3" debug "~2.2.0" escape-html "~1.0.3" http-errors "~1.3.1" mime-types "~2.1.9" parseurl "~1.3.1" serve-static@~1.10.0: version "1.10.3" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" dependencies: escape-html "~1.0.3" parseurl "~1.3.1" send "0.13.2" set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" sigmund@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" sntp@2.x.x: version "2.0.2" resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" dependencies: hoek "4.x.x" socket.io-adapter@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" dependencies: debug "2.3.3" socket.io-parser "2.3.1" socket.io-client@1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" dependencies: backo2 "1.0.2" component-bind "1.0.0" component-emitter "1.2.1" debug "2.3.3" engine.io-client "1.8.3" has-binary "0.1.7" indexof "0.0.1" object-component "0.0.3" parseuri "0.0.5" socket.io-parser "2.3.1" to-array "0.1.4" socket.io-parser@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" dependencies: component-emitter "1.1.2" debug "2.2.0" isarray "0.0.1" json3 "3.3.2" socket.io@1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" dependencies: debug "2.3.3" engine.io "1.8.3" has-binary "0.1.7" object-assign "4.1.0" socket.io-adapter "0.5.0" socket.io-client "1.7.3" socket.io-parser "2.3.1" source-map@^0.5.1, source-map@^0.5.3, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: spdx-license-ids "^1.0.2" spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" dependencies: through "2" sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" jsbn "~0.1.0" tweetnacl "~0.14.0" statuses@1, "statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" statuses@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" dependencies: duplexer "~0.1.1" stream-consume@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" stream-counter@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" dependencies: readable-stream "~1.1.8" streamqueue@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/streamqueue/-/streamqueue-1.1.1.tgz#d3ad76686be924bbf9ca2c74a814a2182475d6d7" dependencies: isstream "^0.1.2" readable-stream "~1.0.33" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" dependencies: ansi-regex "^0.2.1" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-bom@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" dependencies: first-chunk-stream "^1.0.0" is-utf8 "^0.2.0" strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" dependencies: get-stdin "^4.0.1" strip-json-comments@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" supports-color@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" dependencies: debug "^2.2.0" fstream "^1.0.10" fstream-ignore "^1.0.5" once "^1.3.3" readable-stream "^2.1.4" rimraf "^2.5.1" tar "^2.2.1" uid-number "^0.0.6" tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: block-stream "*" fstream "^1.0.2" inherits "2" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" through2@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" dependencies: readable-stream "~1.0.17" xtend "~2.1.1" through2@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" dependencies: readable-stream "~1.0.17" xtend "~3.0.0" through2@^0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^2.0.0, through2@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" tildify@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" dependencies: os-homedir "^1.0.0" time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" tiny-lr@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-0.2.1.tgz#b3fdba802e5d56a33c2f6f10794b32e477ac729d" dependencies: body-parser "~1.14.0" debug "~2.2.0" faye-websocket "~0.10.0" livereload-js "^2.2.0" parseurl "~1.3.0" qs "~5.1.0" tmp@0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" dependencies: os-tmpdir "~1.0.1" tmp@0.0.x: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" tough-cookie@~2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" tsscmp@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: safe-buffer "^5.0.1" tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" type-is@~1.6.10, type-is@~1.6.15, type-is@~1.6.6: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" dependencies: media-typer "0.3.0" mime-types "~2.1.15" typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" uglify-js@^2.8.22: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" optionalDependencies: uglify-to-browserify "~1.0.0" uglify-js@^3.0.5: version "3.1.2" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.2.tgz#b50bcf15a5fd9e9ed40afbcdef3b59d6891b291f" dependencies: commander "~2.11.0" source-map "~0.5.1" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" uid-safe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" dependencies: random-bytes "~1.0.0" uid-safe@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" dependencies: base64-url "1.2.1" ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" unique-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" useragent@^2.1.12: version "2.2.1" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e" dependencies: lru-cache "2.2.x" tmp "0.0.x" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" v8flags@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" dependencies: user-home "^1.1.1" validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" vary@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" vhost@~3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" vinyl-fs@^0.3.0: version "0.3.14" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" dependencies: defaults "^1.0.0" glob-stream "^3.1.5" glob-watcher "^0.0.6" graceful-fs "^3.0.0" mkdirp "^0.5.0" strip-bom "^1.0.0" through2 "^0.6.1" vinyl "^0.4.0" vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" dependencies: source-map "^0.5.1" vinyl@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252" dependencies: clone-stats "~0.0.1" vinyl@^0.4.0: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" dependencies: clone "^0.2.0" clone-stats "^0.0.1" vinyl@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" dependencies: clone "^1.0.0" clone-stats "^0.0.1" replace-ext "0.0.1" vinyl@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" dependencies: clone "^2.1.1" clone-buffer "^1.0.0" clone-stats "^1.0.0" cloneable-readable "^1.0.0" remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" dependencies: http-parser-js ">=0.4.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d" when@^3.7.8: version "3.7.8" resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" which@^1.2.1, which@^1.2.12: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" which@~1.2.2: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: string-width "^1.0.2" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" ws@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" wtf-8@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" xmlhttprequest-ssl@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" dependencies: object-keys "~0.4.0" xtend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" dependencies: camelcase "^1.0.2" cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" yauzl@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" dependencies: fd-slicer "~1.0.1" yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"