bootstrap-tour-0.10.2/ 0000775 0000000 0000000 00000000000 12465607437 0014614 5 ustar 00root root 0000000 0000000 bootstrap-tour-0.10.2/.editorconfig 0000664 0000000 0000000 00000000635 12465607437 0017275 0 ustar 00root root 0000000 0000000 EditorConfig 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.10.2/.gitignore 0000664 0000000 0000000 00000000235 12465607437 0016604 0 ustar 00root root 0000000 0000000 node_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.10.2/.travis.yml 0000664 0000000 0000000 00000000363 12465607437 0016727 0 ustar 00root root 0000000 0000000 language: node_js node_js: - "0.10" before_install: - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" before_script: - npm install -g gulp - npm install -g bower - bower install branches: only: - master - develop bootstrap-tour-0.10.2/CNAME 0000664 0000000 0000000 00000000022 12465607437 0015354 0 ustar 00root root 0000000 0000000 bootstraptour.com bootstrap-tour-0.10.2/LICENSE 0000664 0000000 0000000 00000023674 12465607437 0015635 0 ustar 00root root 0000000 0000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS bootstrap-tour-0.10.2/README.md 0000664 0000000 0000000 00000004720 12465607437 0016076 0 ustar 00root root 0000000 0000000 # Bootstrap Tour [](https://travis-ci.org/sorich87/bootstrap-tour) [](https://david-dm.org/sorich87/bootstrap-tour) [](https://david-dm.org/sorich87/bootstrap-tour#info=devDependencies) [](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://pivotal.github.io/jasmine/). 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, npm, and grunt's command line runner: ##### Linux ```bash $ sudo apt-get install ruby $ sudo apt-get install ruby-dev $ sudo apt-get install npm $ sudo apt-get install nodejs-legacy ``` ##### Mac OS X ```bash ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" \curl -L https://get.rvm.io | bash rvm install ruby-2.1.1 brew install node ``` ##### Development requirements ```bash $ npm install -g gulp $ npm install $ 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 [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0). Documentation licensed under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/). bootstrap-tour-0.10.2/_config.yml 0000664 0000000 0000000 00000000203 12465607437 0016736 0 ustar 00root root 0000000 0000000 markdown: rdiscount permalink: pretty source: ./src/docs destination: ./docs encoding: UTF-8 bootstrap-tour-0.10.2/bower.json 0000664 0000000 0000000 00000000703 12465607437 0016625 0 ustar 00root root 0000000 0000000 { "name": "bootstrap-tour", "version": "0.10.2", "main": [ "./build/js/bootstrap-tour.js", "./build/js/bootstrap-tour-standalone.js", "./build/css/bootstrap-tour.css", "./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.2.0", "blueimp-md5": "~1.1.0" } } bootstrap-tour-0.10.2/build/ 0000775 0000000 0000000 00000000000 12465607437 0015713 5 ustar 00root root 0000000 0000000 bootstrap-tour-0.10.2/build/css/ 0000775 0000000 0000000 00000000000 12465607437 0016503 5 ustar 00root root 0000000 0000000 bootstrap-tour-0.10.2/build/css/bootstrap-tour-standalone.css 0000664 0000000 0000000 00000041322 12465607437 0024351 0 ustar 00root root 0000000 0000000 /* ======================================================================== * bootstrap-tour - v0.10.1 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2013 Ulrich Sossou * * ======================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ /*! * 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; 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 { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus { color: #333333; 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; pointer-events: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; } .btn-default { color: #333333; background-color: #ffffff; border-color: #cccccc; } .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { color: #333333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .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:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { background-color: #ffffff; border-color: #cccccc; } .btn-default .badge { color: #ffffff; background-color: #333333; } .btn-primary { color: #ffffff; background-color: #428bca; border-color: #357ebd; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { color: #ffffff; background-color: #3071a9; border-color: #285e8e; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .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:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #428bca; border-color: #357ebd; } .btn-primary .badge { color: #428bca; background-color: #ffffff; } .btn-success { color: #ffffff; background-color: #5cb85c; border-color: #4cae4c; } .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { color: #ffffff; background-color: #449d44; border-color: #398439; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .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:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { background-color: #5cb85c; border-color: #4cae4c; } .btn-success .badge { color: #5cb85c; background-color: #ffffff; } .btn-info { color: #ffffff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { color: #ffffff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .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:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { background-color: #5bc0de; border-color: #46b8da; } .btn-info .badge { color: #5bc0de; background-color: #ffffff; } .btn-warning { color: #ffffff; background-color: #f0ad4e; border-color: #eea236; } .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { color: #ffffff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .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:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { background-color: #f0ad4e; border-color: #eea236; } .btn-warning .badge { color: #f0ad4e; background-color: #ffffff; } .btn-danger { color: #ffffff; background-color: #d9534f; border-color: #d43f3a; } .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { color: #ffffff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .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:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #d9534f; border-color: #d43f3a; } .btn-danger .badge { color: #d9534f; background-color: #ffffff; } .btn-link { color: #428bca; font-weight: normal; cursor: pointer; border-radius: 0; } .btn-link, .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: #2a6496; 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.33; 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:focus, .btn-group-vertical > .btn:focus { outline: 0; } .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-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 > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group > .btn-group:last-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-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { border-bottom-left-radius: 4px; border-top-right-radius: 0; border-top-left-radius: 0; } .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 > input[type="checkbox"] { position: absolute; z-index: -1; opacity: 0; filter: alpha(opacity=0); } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #ffffff; background-clip: padding-box; border: 1px solid #cccccc; 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); white-space: normal; } .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; font-weight: normal; line-height: 18px; 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: #ffffff; } .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: #ffffff; } .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: #ffffff; } .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: #ffffff; bottom: -10px; } .tour-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .tour-step-backdrop { position: relative; z-index: 1101; background: inherit; } .tour-step-backdrop > td { position: relative; z-index: 1101; } .tour-step-background { position: absolute !important; z-index: 1100; background: inherit; border-radius: 6px; } .popover[class*="tour-"] { z-index: 1100; } .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; } .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.10.2/build/css/bootstrap-tour.css 0000664 0000000 0000000 00000004234 12465607437 0022224 0 ustar 00root root 0000000 0000000 /* ======================================================================== * bootstrap-tour - v0.10.1 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2013 Ulrich Sossou * * ======================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ .tour-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1100; background-color: #000; opacity: 0.8; filter: alpha(opacity=80); } .tour-step-backdrop { position: relative; z-index: 1101; background: inherit; } .tour-step-backdrop > td { position: relative; z-index: 1101; } .tour-step-background { position: absolute !important; z-index: 1100; background: inherit; border-radius: 6px; } .popover[class*="tour-"] { z-index: 1100; } .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; } .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.10.2/build/js/ 0000775 0000000 0000000 00000000000 12465607437 0016327 5 ustar 00root root 0000000 0000000 bootstrap-tour-0.10.2/build/js/bootstrap-tour-standalone.js 0000664 0000000 0000000 00000131451 12465607437 0024024 0 ustar 00root root 0000000 0000000 /* ======================================================================== * bootstrap-tour - v0.10.1 * http://bootstraptour.com * ======================================================================== * Copyright 2012-2013 Ulrich Sossou * * ======================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ /* ======================================================================== * Bootstrap: tooltip.js v3.2.0 * http://getbootstrap.com/javascript/#tooltip * Inspired by the original jQuery.tipsy by Jason Frame * ======================================================================== * Copyright 2011-2014 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 = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null this.init('tooltip', element, options) } Tooltip.VERSION = '3.2.0' Tooltip.DEFAULTS = { animation: true, placement: 'top', selector: false, template: '
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' |
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 |
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 | 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:
| 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 %}
" |
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:
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) { } |
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! | '' |
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' .
|
'right' |
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 |
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 | 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|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 %}
" |
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) { } |
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). |
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.