bootstrap_it 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.rubocop.yml +5 -0
- data/Gemfile +9 -0
- data/README.md +582 -0
- data/Rakefile +6 -0
- data/bootstrap_it.gemspec +33 -0
- data/config.ru +7 -0
- data/lib/bootstrap_it.rb +9 -0
- data/lib/bootstrap_it/assets.rb +67 -0
- data/lib/bootstrap_it/config.rb +50 -0
- data/lib/bootstrap_it/engine.rb +25 -0
- data/lib/bootstrap_it/locales/en.yml +4 -0
- data/lib/bootstrap_it/locales/ru.yml +4 -0
- data/lib/bootstrap_it/version.rb +6 -0
- data/lib/bootstrap_it/view_helpers.rb +55 -0
- data/lib/bootstrap_it/view_helpers/breadcrumb.rb +19 -0
- data/lib/bootstrap_it/view_helpers/button.rb +116 -0
- data/lib/bootstrap_it/view_helpers/button_group.rb +32 -0
- data/lib/bootstrap_it/view_helpers/button_toolbar.rb +21 -0
- data/lib/bootstrap_it/view_helpers/dropdown_menu.rb +30 -0
- data/lib/bootstrap_it/view_helpers/form.rb +127 -0
- data/lib/bootstrap_it/view_helpers/grid.rb +75 -0
- data/lib/bootstrap_it/view_helpers/icon.rb +24 -0
- data/lib/bootstrap_it/view_helpers/list.rb +47 -0
- data/lib/bootstrap_it/view_helpers/misc.rb +144 -0
- data/lib/bootstrap_it/view_helpers/mixin.rb +279 -0
- data/lib/bootstrap_it/view_helpers/nav.rb +96 -0
- data/lib/bootstrap_it/view_helpers/pagination.rb +34 -0
- data/lib/bootstrap_it/view_helpers/table.rb +72 -0
- data/lib/bootstrap_it/view_helpers/text.rb +46 -0
- data/spec/assets/assets_spec.rb +51 -0
- data/spec/internal/app/assets/javascript/application.js +7 -0
- data/spec/internal/app/assets/javascript/user.js +1 -0
- data/spec/internal/app/assets/javascript/userfont.eot +0 -0
- data/spec/internal/app/assets/stylesheets/application.css +6 -0
- data/spec/internal/app/assets/stylesheets/user.css +1 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +3 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/lib/config_spec.rb +10 -0
- data/spec/lib/view_helpers_spec.rb +12 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/support/example_groups/assets_example_group.rb +84 -0
- data/spec/support/example_groups/view_helpers_example_group.rb +124 -0
- data/spec/view_helpers/breadcrumb_spec.rb +12 -0
- data/spec/view_helpers/button_group_spec.rb +40 -0
- data/spec/view_helpers/button_spec.rb +169 -0
- data/spec/view_helpers/button_toolbar_spec.rb +14 -0
- data/spec/view_helpers/dropdown_menu_spec.rb +41 -0
- data/spec/view_helpers/form_spec.rb +27 -0
- data/spec/view_helpers/grid_spec.rb +47 -0
- data/spec/view_helpers/icon_spec.rb +6 -0
- data/spec/view_helpers/list_spec.rb +50 -0
- data/spec/view_helpers/misc_spec.rb +117 -0
- data/spec/view_helpers/mixin_spec.rb +177 -0
- data/spec/view_helpers/nav_spec.rb +63 -0
- data/spec/view_helpers/pagination_spec.rb +36 -0
- data/spec/view_helpers/table_spec.rb +59 -0
- data/spec/view_helpers/text_spec.rb +13 -0
- data/spec/views/examples_spec.rb +250 -0
- data/upstream/bootstrap-3.0.3-dist.zip +0 -0
- data/upstream/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.eot +0 -0
- data/upstream/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.svg +229 -0
- data/upstream/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/upstream/bootstrap/3.0.3/fonts/glyphicons-halflings-regular.woff +0 -0
- data/upstream/bootstrap/3.0.3/javascript/bootstrap.js +2006 -0
- data/upstream/bootstrap/3.0.3/javascript/bootstrap.min.js +7 -0
- data/upstream/bootstrap/3.0.3/src/.editorconfig +11 -0
- data/upstream/bootstrap/3.0.3/src/.gitattributes +8 -0
- data/upstream/bootstrap/3.0.3/src/.gitignore +42 -0
- data/upstream/bootstrap/3.0.3/src/.travis.yml +10 -0
- data/upstream/bootstrap/3.0.3/src/CNAME +1 -0
- data/upstream/bootstrap/3.0.3/src/CONTRIBUTING.md +79 -0
- data/upstream/bootstrap/3.0.3/src/DOCS-LICENSE +319 -0
- data/upstream/bootstrap/3.0.3/src/Gruntfile.js +337 -0
- data/upstream/bootstrap/3.0.3/src/LICENSE +176 -0
- data/upstream/bootstrap/3.0.3/src/LICENSE-MIT +21 -0
- data/upstream/bootstrap/3.0.3/src/README.md +166 -0
- data/upstream/bootstrap/3.0.3/src/_config.yml +25 -0
- data/upstream/bootstrap/3.0.3/src/_includes/ads.html +1 -0
- data/upstream/bootstrap/3.0.3/src/_includes/footer.html +48 -0
- data/upstream/bootstrap/3.0.3/src/_includes/header.html +42 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-about.html +12 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-components.html +137 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-css.html +99 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-customize.html +40 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-getting-started.html +48 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-javascript.html +88 -0
- data/upstream/bootstrap/3.0.3/src/_includes/nav-main.html +37 -0
- data/upstream/bootstrap/3.0.3/src/_includes/old-bs-docs.html +8 -0
- data/upstream/bootstrap/3.0.3/src/_includes/social-buttons.html +16 -0
- data/upstream/bootstrap/3.0.3/src/_layouts/default.html +79 -0
- data/upstream/bootstrap/3.0.3/src/_layouts/home.html +47 -0
- data/upstream/bootstrap/3.0.3/src/about.html +94 -0
- data/upstream/bootstrap/3.0.3/src/bower.json +30 -0
- data/upstream/bootstrap/3.0.3/src/components.html +3714 -0
- data/upstream/bootstrap/3.0.3/src/composer.json +25 -0
- data/upstream/bootstrap/3.0.3/src/css.html +2673 -0
- data/upstream/bootstrap/3.0.3/src/customize.html +1715 -0
- data/upstream/bootstrap/3.0.3/src/dist/css/bootstrap-theme.css +397 -0
- data/upstream/bootstrap/3.0.3/src/dist/css/bootstrap-theme.min.css +7 -0
- data/upstream/bootstrap/3.0.3/src/dist/css/bootstrap.css +7118 -0
- data/upstream/bootstrap/3.0.3/src/dist/css/bootstrap.min.css +7 -0
- data/upstream/bootstrap/3.0.3/src/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/upstream/bootstrap/3.0.3/src/dist/fonts/glyphicons-halflings-regular.svg +229 -0
- data/upstream/bootstrap/3.0.3/src/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/upstream/bootstrap/3.0.3/src/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/upstream/bootstrap/3.0.3/src/dist/js/bootstrap.js +2006 -0
- data/upstream/bootstrap/3.0.3/src/dist/js/bootstrap.min.js +7 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/css/docs.css +1196 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/css/pygments-manni.css +66 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/ico/apple-touch-icon-144-precomposed.png +0 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/ico/favicon.png +0 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/application.js +103 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/customizer.js +332 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/filesaver.js +399 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/holder.js +500 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/ie8-responsive-file-warning.js +12 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/jszip.js +1474 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/less.js +9 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/raw-files.js +3 -0
- data/upstream/bootstrap/3.0.3/src/docs-assets/js/uglify.js +14 -0
- data/upstream/bootstrap/3.0.3/src/examples/carousel/carousel.css +148 -0
- data/upstream/bootstrap/3.0.3/src/examples/carousel/index.html +206 -0
- data/upstream/bootstrap/3.0.3/src/examples/grid/grid.css +28 -0
- data/upstream/bootstrap/3.0.3/src/examples/grid/index.html +148 -0
- data/upstream/bootstrap/3.0.3/src/examples/jumbotron-narrow/index.html +82 -0
- data/upstream/bootstrap/3.0.3/src/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
- data/upstream/bootstrap/3.0.3/src/examples/jumbotron/index.html +99 -0
- data/upstream/bootstrap/3.0.3/src/examples/jumbotron/jumbotron.css +5 -0
- data/upstream/bootstrap/3.0.3/src/examples/justified-nav/index.html +84 -0
- data/upstream/bootstrap/3.0.3/src/examples/justified-nav/justified-nav.css +88 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar-fixed-top/index.html +91 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar-static-top/index.html +92 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar-static-top/navbar-static-top.css +7 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar/index.html +88 -0
- data/upstream/bootstrap/3.0.3/src/examples/navbar/navbar.css +8 -0
- data/upstream/bootstrap/3.0.3/src/examples/non-responsive/index.html +101 -0
- data/upstream/bootstrap/3.0.3/src/examples/non-responsive/non-responsive.css +120 -0
- data/upstream/bootstrap/3.0.3/src/examples/offcanvas/index.html +130 -0
- data/upstream/bootstrap/3.0.3/src/examples/offcanvas/offcanvas.css +51 -0
- data/upstream/bootstrap/3.0.3/src/examples/offcanvas/offcanvas.js +5 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/carousel.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/grid.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/jumbotron-narrow.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/jumbotron.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/justified-nav.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/navbar-fixed.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/navbar-static.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/navbar.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/non-responsive.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/offcanvas.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/sign-in.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/starter-template.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/sticky-footer-navbar.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/sticky-footer.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/screenshots/theme.jpg +0 -0
- data/upstream/bootstrap/3.0.3/src/examples/signin/index.html +50 -0
- data/upstream/bootstrap/3.0.3/src/examples/signin/signin.css +40 -0
- data/upstream/bootstrap/3.0.3/src/examples/starter-template/index.html +68 -0
- data/upstream/bootstrap/3.0.3/src/examples/starter-template/starter-template.css +7 -0
- data/upstream/bootstrap/3.0.3/src/examples/sticky-footer-navbar/index.html +91 -0
- data/upstream/bootstrap/3.0.3/src/examples/sticky-footer-navbar/sticky-footer-navbar.css +45 -0
- data/upstream/bootstrap/3.0.3/src/examples/sticky-footer/index.html +55 -0
- data/upstream/bootstrap/3.0.3/src/examples/sticky-footer/sticky-footer.css +38 -0
- data/upstream/bootstrap/3.0.3/src/examples/theme/index.html +384 -0
- data/upstream/bootstrap/3.0.3/src/examples/theme/theme.css +14 -0
- data/upstream/bootstrap/3.0.3/src/fonts/glyphicons-halflings-regular.eot +0 -0
- data/upstream/bootstrap/3.0.3/src/fonts/glyphicons-halflings-regular.svg +229 -0
- data/upstream/bootstrap/3.0.3/src/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/upstream/bootstrap/3.0.3/src/fonts/glyphicons-halflings-regular.woff +0 -0
- data/upstream/bootstrap/3.0.3/src/getting-started.html +1057 -0
- data/upstream/bootstrap/3.0.3/src/index.html +16 -0
- data/upstream/bootstrap/3.0.3/src/javascript.html +1995 -0
- data/upstream/bootstrap/3.0.3/src/js/.jshintrc +14 -0
- data/upstream/bootstrap/3.0.3/src/js/affix.js +126 -0
- data/upstream/bootstrap/3.0.3/src/js/alert.js +98 -0
- data/upstream/bootstrap/3.0.3/src/js/button.js +115 -0
- data/upstream/bootstrap/3.0.3/src/js/carousel.js +217 -0
- data/upstream/bootstrap/3.0.3/src/js/collapse.js +179 -0
- data/upstream/bootstrap/3.0.3/src/js/dropdown.js +154 -0
- data/upstream/bootstrap/3.0.3/src/js/modal.js +246 -0
- data/upstream/bootstrap/3.0.3/src/js/popover.js +117 -0
- data/upstream/bootstrap/3.0.3/src/js/scrollspy.js +158 -0
- data/upstream/bootstrap/3.0.3/src/js/tab.js +135 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/index.html +52 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/affix.js +25 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/alert.js +62 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/button.js +122 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/carousel.js +87 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/collapse.js +164 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/dropdown.js +219 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/modal.js +196 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/phantom.js +69 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/popover.js +133 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/scrollspy.js +37 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/tab.js +86 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/tooltip.js +437 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/unit/transition.js +13 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/vendor/jquery.js +6 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/vendor/qunit.css +232 -0
- data/upstream/bootstrap/3.0.3/src/js/tests/vendor/qunit.js +1510 -0
- data/upstream/bootstrap/3.0.3/src/js/tooltip.js +386 -0
- data/upstream/bootstrap/3.0.3/src/js/transition.js +56 -0
- data/upstream/bootstrap/3.0.3/src/less/alerts.less +67 -0
- data/upstream/bootstrap/3.0.3/src/less/badges.less +51 -0
- data/upstream/bootstrap/3.0.3/src/less/bootstrap.less +49 -0
- data/upstream/bootstrap/3.0.3/src/less/breadcrumbs.less +23 -0
- data/upstream/bootstrap/3.0.3/src/less/button-groups.less +227 -0
- data/upstream/bootstrap/3.0.3/src/less/buttons.less +155 -0
- data/upstream/bootstrap/3.0.3/src/less/carousel.less +232 -0
- data/upstream/bootstrap/3.0.3/src/less/close.less +33 -0
- data/upstream/bootstrap/3.0.3/src/less/code.less +53 -0
- data/upstream/bootstrap/3.0.3/src/less/component-animations.less +29 -0
- data/upstream/bootstrap/3.0.3/src/less/dropdowns.less +187 -0
- data/upstream/bootstrap/3.0.3/src/less/forms.less +375 -0
- data/upstream/bootstrap/3.0.3/src/less/glyphicons.less +237 -0
- data/upstream/bootstrap/3.0.3/src/less/grid.less +79 -0
- data/upstream/bootstrap/3.0.3/src/less/input-groups.less +136 -0
- data/upstream/bootstrap/3.0.3/src/less/jumbotron.less +46 -0
- data/upstream/bootstrap/3.0.3/src/less/labels.less +64 -0
- data/upstream/bootstrap/3.0.3/src/less/list-group.less +88 -0
- data/upstream/bootstrap/3.0.3/src/less/media.less +56 -0
- data/upstream/bootstrap/3.0.3/src/less/mixins.less +845 -0
- data/upstream/bootstrap/3.0.3/src/less/modals.less +129 -0
- data/upstream/bootstrap/3.0.3/src/less/navbar.less +612 -0
- data/upstream/bootstrap/3.0.3/src/less/navs.less +242 -0
- data/upstream/bootstrap/3.0.3/src/less/normalize.less +406 -0
- data/upstream/bootstrap/3.0.3/src/less/pager.less +55 -0
- data/upstream/bootstrap/3.0.3/src/less/pagination.less +85 -0
- data/upstream/bootstrap/3.0.3/src/less/panels.less +182 -0
- data/upstream/bootstrap/3.0.3/src/less/popovers.less +133 -0
- data/upstream/bootstrap/3.0.3/src/less/print.less +105 -0
- data/upstream/bootstrap/3.0.3/src/less/progress-bars.less +80 -0
- data/upstream/bootstrap/3.0.3/src/less/responsive-utilities.less +209 -0
- data/upstream/bootstrap/3.0.3/src/less/scaffolding.less +119 -0
- data/upstream/bootstrap/3.0.3/src/less/tables.less +231 -0
- data/upstream/bootstrap/3.0.3/src/less/theme.less +247 -0
- data/upstream/bootstrap/3.0.3/src/less/thumbnails.less +36 -0
- data/upstream/bootstrap/3.0.3/src/less/tooltip.less +95 -0
- data/upstream/bootstrap/3.0.3/src/less/type.less +281 -0
- data/upstream/bootstrap/3.0.3/src/less/utilities.less +56 -0
- data/upstream/bootstrap/3.0.3/src/less/variables.less +642 -0
- data/upstream/bootstrap/3.0.3/src/less/wells.less +29 -0
- data/upstream/bootstrap/3.0.3/src/package.json +51 -0
- data/upstream/bootstrap/3.0.3/stylesheets/bootstrap-theme.css +397 -0
- data/upstream/bootstrap/3.0.3/stylesheets/bootstrap-theme.min.css +7 -0
- data/upstream/bootstrap/3.0.3/stylesheets/bootstrap.css +7118 -0
- data/upstream/bootstrap/3.0.3/stylesheets/bootstrap.min.css +7 -0
- data/upstream/font-awesome-4.0.3.zip +0 -0
- data/upstream/font-awesome/4.0.3/fonts/FontAwesome.otf +0 -0
- data/upstream/font-awesome/4.0.3/fonts/fontawesome-webfont.eot +0 -0
- data/upstream/font-awesome/4.0.3/fonts/fontawesome-webfont.svg +414 -0
- data/upstream/font-awesome/4.0.3/fonts/fontawesome-webfont.ttf +0 -0
- data/upstream/font-awesome/4.0.3/fonts/fontawesome-webfont.woff +0 -0
- data/upstream/font-awesome/4.0.3/stylesheets/font-awesome.css +1338 -0
- data/upstream/font-awesome/4.0.3/stylesheets/font-awesome.min.css +4 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/bordered-pulled.less +16 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/core.less +12 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/fixed-width.less +6 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/font-awesome.less +17 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/icons.less +412 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/larger.less +13 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/list.less +19 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/mixins.less +20 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/path.less +14 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/rotated-flipped.less +9 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/spinning.less +30 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/stacked.less +20 -0
- data/upstream/font-awesome/4.0.3/stylesheets/less/variables.less +381 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_bordered-pulled.scss +16 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_core.scss +12 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_fixed-width.scss +6 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_icons.scss +412 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_larger.scss +13 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_list.scss +19 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_mixins.scss +20 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_path.scss +14 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_rotated-flipped.scss +9 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_spinning.scss +30 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_stacked.scss +20 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/_variables.scss +381 -0
- data/upstream/font-awesome/4.0.3/stylesheets/scss/font-awesome.scss +17 -0
- metadata +505 -0
@@ -0,0 +1,399 @@
|
|
1
|
+
/* Blob.js
|
2
|
+
* A Blob implementation.
|
3
|
+
* 2013-06-20
|
4
|
+
*
|
5
|
+
* By Eli Grey, http://eligrey.com
|
6
|
+
* By Devin Samarin, https://github.com/eboyjr
|
7
|
+
* License: X11/MIT
|
8
|
+
* See LICENSE.md
|
9
|
+
*/
|
10
|
+
|
11
|
+
/*global self, unescape */
|
12
|
+
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
|
13
|
+
plusplus: true */
|
14
|
+
|
15
|
+
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
|
16
|
+
|
17
|
+
if (!(typeof Blob === "function" || typeof Blob === "object") || typeof URL === "undefined")
|
18
|
+
if ((typeof Blob === "function" || typeof Blob === "object") && typeof webkitURL !== "undefined") self.URL = webkitURL;
|
19
|
+
else var Blob = (function (view) {
|
20
|
+
"use strict";
|
21
|
+
|
22
|
+
var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) {
|
23
|
+
var
|
24
|
+
get_class = function(object) {
|
25
|
+
return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
|
26
|
+
}
|
27
|
+
, FakeBlobBuilder = function BlobBuilder() {
|
28
|
+
this.data = [];
|
29
|
+
}
|
30
|
+
, FakeBlob = function Blob(data, type, encoding) {
|
31
|
+
this.data = data;
|
32
|
+
this.size = data.length;
|
33
|
+
this.type = type;
|
34
|
+
this.encoding = encoding;
|
35
|
+
}
|
36
|
+
, FBB_proto = FakeBlobBuilder.prototype
|
37
|
+
, FB_proto = FakeBlob.prototype
|
38
|
+
, FileReaderSync = view.FileReaderSync
|
39
|
+
, FileException = function(type) {
|
40
|
+
this.code = this[this.name = type];
|
41
|
+
}
|
42
|
+
, file_ex_codes = (
|
43
|
+
"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
|
44
|
+
+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
|
45
|
+
).split(" ")
|
46
|
+
, file_ex_code = file_ex_codes.length
|
47
|
+
, real_URL = view.URL || view.webkitURL || view
|
48
|
+
, real_create_object_URL = real_URL.createObjectURL
|
49
|
+
, real_revoke_object_URL = real_URL.revokeObjectURL
|
50
|
+
, URL = real_URL
|
51
|
+
, btoa = view.btoa
|
52
|
+
, atob = view.atob
|
53
|
+
|
54
|
+
, ArrayBuffer = view.ArrayBuffer
|
55
|
+
, Uint8Array = view.Uint8Array
|
56
|
+
;
|
57
|
+
FakeBlob.fake = FB_proto.fake = true;
|
58
|
+
while (file_ex_code--) {
|
59
|
+
FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
|
60
|
+
}
|
61
|
+
if (!real_URL.createObjectURL) {
|
62
|
+
URL = view.URL = {};
|
63
|
+
}
|
64
|
+
URL.createObjectURL = function(blob) {
|
65
|
+
var
|
66
|
+
type = blob.type
|
67
|
+
, data_URI_header
|
68
|
+
;
|
69
|
+
if (type === null) {
|
70
|
+
type = "application/octet-stream";
|
71
|
+
}
|
72
|
+
if (blob instanceof FakeBlob) {
|
73
|
+
data_URI_header = "data:" + type;
|
74
|
+
if (blob.encoding === "base64") {
|
75
|
+
return data_URI_header + ";base64," + blob.data;
|
76
|
+
} else if (blob.encoding === "URI") {
|
77
|
+
return data_URI_header + "," + decodeURIComponent(blob.data);
|
78
|
+
} if (btoa) {
|
79
|
+
return data_URI_header + ";base64," + btoa(blob.data);
|
80
|
+
} else {
|
81
|
+
return data_URI_header + "," + encodeURIComponent(blob.data);
|
82
|
+
}
|
83
|
+
} else if (real_create_object_URL) {
|
84
|
+
return real_create_object_URL.call(real_URL, blob);
|
85
|
+
}
|
86
|
+
};
|
87
|
+
URL.revokeObjectURL = function(object_URL) {
|
88
|
+
if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
|
89
|
+
real_revoke_object_URL.call(real_URL, object_URL);
|
90
|
+
}
|
91
|
+
};
|
92
|
+
FBB_proto.append = function(data/*, endings*/) {
|
93
|
+
var bb = this.data;
|
94
|
+
// decode data to a binary string
|
95
|
+
if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
|
96
|
+
var
|
97
|
+
str = ""
|
98
|
+
, buf = new Uint8Array(data)
|
99
|
+
, i = 0
|
100
|
+
, buf_len = buf.length
|
101
|
+
;
|
102
|
+
for (; i < buf_len; i++) {
|
103
|
+
str += String.fromCharCode(buf[i]);
|
104
|
+
}
|
105
|
+
bb.push(str);
|
106
|
+
} else if (get_class(data) === "Blob" || get_class(data) === "File") {
|
107
|
+
if (FileReaderSync) {
|
108
|
+
var fr = new FileReaderSync;
|
109
|
+
bb.push(fr.readAsBinaryString(data));
|
110
|
+
} else {
|
111
|
+
// async FileReader won't work as BlobBuilder is sync
|
112
|
+
throw new FileException("NOT_READABLE_ERR");
|
113
|
+
}
|
114
|
+
} else if (data instanceof FakeBlob) {
|
115
|
+
if (data.encoding === "base64" && atob) {
|
116
|
+
bb.push(atob(data.data));
|
117
|
+
} else if (data.encoding === "URI") {
|
118
|
+
bb.push(decodeURIComponent(data.data));
|
119
|
+
} else if (data.encoding === "raw") {
|
120
|
+
bb.push(data.data);
|
121
|
+
}
|
122
|
+
} else {
|
123
|
+
if (typeof data !== "string") {
|
124
|
+
data += ""; // convert unsupported types to strings
|
125
|
+
}
|
126
|
+
// decode UTF-16 to binary string
|
127
|
+
bb.push(unescape(encodeURIComponent(data)));
|
128
|
+
}
|
129
|
+
};
|
130
|
+
FBB_proto.getBlob = function(type) {
|
131
|
+
if (!arguments.length) {
|
132
|
+
type = null;
|
133
|
+
}
|
134
|
+
return new FakeBlob(this.data.join(""), type, "raw");
|
135
|
+
};
|
136
|
+
FBB_proto.toString = function() {
|
137
|
+
return "[object BlobBuilder]";
|
138
|
+
};
|
139
|
+
FB_proto.slice = function(start, end, type) {
|
140
|
+
var args = arguments.length;
|
141
|
+
if (args < 3) {
|
142
|
+
type = null;
|
143
|
+
}
|
144
|
+
return new FakeBlob(
|
145
|
+
this.data.slice(start, args > 1 ? end : this.data.length)
|
146
|
+
, type
|
147
|
+
, this.encoding
|
148
|
+
);
|
149
|
+
};
|
150
|
+
FB_proto.toString = function() {
|
151
|
+
return "[object Blob]";
|
152
|
+
};
|
153
|
+
return FakeBlobBuilder;
|
154
|
+
}(view));
|
155
|
+
|
156
|
+
return function Blob(blobParts, options) {
|
157
|
+
var type = options ? (options.type || "") : "";
|
158
|
+
var builder = new BlobBuilder();
|
159
|
+
if (blobParts) {
|
160
|
+
for (var i = 0, len = blobParts.length; i < len; i++) {
|
161
|
+
builder.append(blobParts[i]);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
return builder.getBlob(type);
|
165
|
+
};
|
166
|
+
}(self));
|
167
|
+
|
168
|
+
/* FileSaver.js
|
169
|
+
* A saveAs() FileSaver implementation.
|
170
|
+
* 2013-10-21
|
171
|
+
*
|
172
|
+
* By Eli Grey, http://eligrey.com
|
173
|
+
* License: X11/MIT
|
174
|
+
* See LICENSE.md
|
175
|
+
*/
|
176
|
+
|
177
|
+
/*global self */
|
178
|
+
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
|
179
|
+
plusplus: true */
|
180
|
+
|
181
|
+
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
|
182
|
+
|
183
|
+
var saveAs = saveAs
|
184
|
+
|| (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
|
185
|
+
|| (function(view) {
|
186
|
+
"use strict";
|
187
|
+
var
|
188
|
+
doc = view.document
|
189
|
+
// only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
|
190
|
+
, get_URL = function() {
|
191
|
+
return view.URL || view.webkitURL || view;
|
192
|
+
}
|
193
|
+
, URL = view.URL || view.webkitURL || view
|
194
|
+
, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
|
195
|
+
, can_use_save_link = !view.externalHost && "download" in save_link
|
196
|
+
, click = function(node) {
|
197
|
+
var event = doc.createEvent("MouseEvents");
|
198
|
+
event.initMouseEvent(
|
199
|
+
"click", true, false, view, 0, 0, 0, 0, 0
|
200
|
+
, false, false, false, false, 0, null
|
201
|
+
);
|
202
|
+
node.dispatchEvent(event);
|
203
|
+
}
|
204
|
+
, webkit_req_fs = view.webkitRequestFileSystem
|
205
|
+
, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
|
206
|
+
, throw_outside = function (ex) {
|
207
|
+
(view.setImmediate || view.setTimeout)(function() {
|
208
|
+
throw ex;
|
209
|
+
}, 0);
|
210
|
+
}
|
211
|
+
, force_saveable_type = "application/octet-stream"
|
212
|
+
, fs_min_size = 0
|
213
|
+
, deletion_queue = []
|
214
|
+
, process_deletion_queue = function() {
|
215
|
+
var i = deletion_queue.length;
|
216
|
+
while (i--) {
|
217
|
+
var file = deletion_queue[i];
|
218
|
+
if (typeof file === "string") { // file is an object URL
|
219
|
+
URL.revokeObjectURL(file);
|
220
|
+
} else { // file is a File
|
221
|
+
file.remove();
|
222
|
+
}
|
223
|
+
}
|
224
|
+
deletion_queue.length = 0; // clear queue
|
225
|
+
}
|
226
|
+
, dispatch = function(filesaver, event_types, event) {
|
227
|
+
event_types = [].concat(event_types);
|
228
|
+
var i = event_types.length;
|
229
|
+
while (i--) {
|
230
|
+
var listener = filesaver["on" + event_types[i]];
|
231
|
+
if (typeof listener === "function") {
|
232
|
+
try {
|
233
|
+
listener.call(filesaver, event || filesaver);
|
234
|
+
} catch (ex) {
|
235
|
+
throw_outside(ex);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
}
|
240
|
+
, FileSaver = function(blob, name) {
|
241
|
+
// First try a.download, then web filesystem, then object URLs
|
242
|
+
var
|
243
|
+
filesaver = this
|
244
|
+
, type = blob.type
|
245
|
+
, blob_changed = false
|
246
|
+
, object_url
|
247
|
+
, target_view
|
248
|
+
, get_object_url = function() {
|
249
|
+
var object_url = get_URL().createObjectURL(blob);
|
250
|
+
deletion_queue.push(object_url);
|
251
|
+
return object_url;
|
252
|
+
}
|
253
|
+
, dispatch_all = function() {
|
254
|
+
dispatch(filesaver, "writestart progress write writeend".split(" "));
|
255
|
+
}
|
256
|
+
// on any filesys errors revert to saving with object URLs
|
257
|
+
, fs_error = function() {
|
258
|
+
// don't create more object URLs than needed
|
259
|
+
if (blob_changed || !object_url) {
|
260
|
+
object_url = get_object_url(blob);
|
261
|
+
}
|
262
|
+
if (target_view) {
|
263
|
+
target_view.location.href = object_url;
|
264
|
+
} else {
|
265
|
+
window.open(object_url, "_blank");
|
266
|
+
}
|
267
|
+
filesaver.readyState = filesaver.DONE;
|
268
|
+
dispatch_all();
|
269
|
+
}
|
270
|
+
, abortable = function(func) {
|
271
|
+
return function() {
|
272
|
+
if (filesaver.readyState !== filesaver.DONE) {
|
273
|
+
return func.apply(this, arguments);
|
274
|
+
}
|
275
|
+
};
|
276
|
+
}
|
277
|
+
, create_if_not_found = {create: true, exclusive: false}
|
278
|
+
, slice
|
279
|
+
;
|
280
|
+
filesaver.readyState = filesaver.INIT;
|
281
|
+
if (!name) {
|
282
|
+
name = "download";
|
283
|
+
}
|
284
|
+
if (can_use_save_link) {
|
285
|
+
object_url = get_object_url(blob);
|
286
|
+
// FF for Android has a nasty garbage collection mechanism
|
287
|
+
// that turns all objects that are not pure javascript into 'deadObject'
|
288
|
+
// this means `doc` and `save_link` are unusable and need to be recreated
|
289
|
+
// `view` is usable though:
|
290
|
+
doc = view.document;
|
291
|
+
save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
|
292
|
+
save_link.href = object_url;
|
293
|
+
save_link.download = name;
|
294
|
+
var event = doc.createEvent("MouseEvents");
|
295
|
+
event.initMouseEvent(
|
296
|
+
"click", true, false, view, 0, 0, 0, 0, 0
|
297
|
+
, false, false, false, false, 0, null
|
298
|
+
);
|
299
|
+
save_link.dispatchEvent(event);
|
300
|
+
filesaver.readyState = filesaver.DONE;
|
301
|
+
dispatch_all();
|
302
|
+
return;
|
303
|
+
}
|
304
|
+
// Object and web filesystem URLs have a problem saving in Google Chrome when
|
305
|
+
// viewed in a tab, so I force save with application/octet-stream
|
306
|
+
// http://code.google.com/p/chromium/issues/detail?id=91158
|
307
|
+
if (view.chrome && type && type !== force_saveable_type) {
|
308
|
+
slice = blob.slice || blob.webkitSlice;
|
309
|
+
blob = slice.call(blob, 0, blob.size, force_saveable_type);
|
310
|
+
blob_changed = true;
|
311
|
+
}
|
312
|
+
// Since I can't be sure that the guessed media type will trigger a download
|
313
|
+
// in WebKit, I append .download to the filename.
|
314
|
+
// https://bugs.webkit.org/show_bug.cgi?id=65440
|
315
|
+
if (webkit_req_fs && name !== "download") {
|
316
|
+
name += ".download";
|
317
|
+
}
|
318
|
+
if (type === force_saveable_type || webkit_req_fs) {
|
319
|
+
target_view = view;
|
320
|
+
}
|
321
|
+
if (!req_fs) {
|
322
|
+
fs_error();
|
323
|
+
return;
|
324
|
+
}
|
325
|
+
fs_min_size += blob.size;
|
326
|
+
req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
|
327
|
+
fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
|
328
|
+
var save = function() {
|
329
|
+
dir.getFile(name, create_if_not_found, abortable(function(file) {
|
330
|
+
file.createWriter(abortable(function(writer) {
|
331
|
+
writer.onwriteend = function(event) {
|
332
|
+
target_view.location.href = file.toURL();
|
333
|
+
deletion_queue.push(file);
|
334
|
+
filesaver.readyState = filesaver.DONE;
|
335
|
+
dispatch(filesaver, "writeend", event);
|
336
|
+
};
|
337
|
+
writer.onerror = function() {
|
338
|
+
var error = writer.error;
|
339
|
+
if (error.code !== error.ABORT_ERR) {
|
340
|
+
fs_error();
|
341
|
+
}
|
342
|
+
};
|
343
|
+
"writestart progress write abort".split(" ").forEach(function(event) {
|
344
|
+
writer["on" + event] = filesaver["on" + event];
|
345
|
+
});
|
346
|
+
writer.write(blob);
|
347
|
+
filesaver.abort = function() {
|
348
|
+
writer.abort();
|
349
|
+
filesaver.readyState = filesaver.DONE;
|
350
|
+
};
|
351
|
+
filesaver.readyState = filesaver.WRITING;
|
352
|
+
}), fs_error);
|
353
|
+
}), fs_error);
|
354
|
+
};
|
355
|
+
dir.getFile(name, {create: false}, abortable(function(file) {
|
356
|
+
// delete file if it already exists
|
357
|
+
file.remove();
|
358
|
+
save();
|
359
|
+
}), abortable(function(ex) {
|
360
|
+
if (ex.code === ex.NOT_FOUND_ERR) {
|
361
|
+
save();
|
362
|
+
} else {
|
363
|
+
fs_error();
|
364
|
+
}
|
365
|
+
}));
|
366
|
+
}), fs_error);
|
367
|
+
}), fs_error);
|
368
|
+
}
|
369
|
+
, FS_proto = FileSaver.prototype
|
370
|
+
, saveAs = function(blob, name) {
|
371
|
+
return new FileSaver(blob, name);
|
372
|
+
}
|
373
|
+
;
|
374
|
+
FS_proto.abort = function() {
|
375
|
+
var filesaver = this;
|
376
|
+
filesaver.readyState = filesaver.DONE;
|
377
|
+
dispatch(filesaver, "abort");
|
378
|
+
};
|
379
|
+
FS_proto.readyState = FS_proto.INIT = 0;
|
380
|
+
FS_proto.WRITING = 1;
|
381
|
+
FS_proto.DONE = 2;
|
382
|
+
|
383
|
+
FS_proto.error =
|
384
|
+
FS_proto.onwritestart =
|
385
|
+
FS_proto.onprogress =
|
386
|
+
FS_proto.onwrite =
|
387
|
+
FS_proto.onabort =
|
388
|
+
FS_proto.onerror =
|
389
|
+
FS_proto.onwriteend =
|
390
|
+
null;
|
391
|
+
|
392
|
+
view.addEventListener("unload", process_deletion_queue, false);
|
393
|
+
return saveAs;
|
394
|
+
}(this.self || this.window || this.content));
|
395
|
+
// `self` is undefined in Firefox for Android content script context
|
396
|
+
// while `this` is nsIContentFrameMessageManager
|
397
|
+
// with an attribute `content` that corresponds to the window
|
398
|
+
|
399
|
+
if (typeof module !== 'undefined') module.exports = saveAs;
|
@@ -0,0 +1,500 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
Holder - 2.2 - client side image placeholders
|
4
|
+
(c) 2012-2013 Ivan Malopinsky / http://imsky.co
|
5
|
+
|
6
|
+
Provided under the MIT License.
|
7
|
+
Commercial use requires attribution.
|
8
|
+
|
9
|
+
*/
|
10
|
+
|
11
|
+
var Holder = Holder || {};
|
12
|
+
(function (app, win) {
|
13
|
+
|
14
|
+
var preempted = false,
|
15
|
+
fallback = false,
|
16
|
+
canvas = document.createElement('canvas');
|
17
|
+
var dpr = 1, bsr = 1;
|
18
|
+
var resizable_images = [];
|
19
|
+
|
20
|
+
if (!canvas.getContext) {
|
21
|
+
fallback = true;
|
22
|
+
} else {
|
23
|
+
if (canvas.toDataURL("image/png")
|
24
|
+
.indexOf("data:image/png") < 0) {
|
25
|
+
//Android doesn't support data URI
|
26
|
+
fallback = true;
|
27
|
+
} else {
|
28
|
+
var ctx = canvas.getContext("2d");
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
if(!fallback){
|
33
|
+
dpr = window.devicePixelRatio || 1,
|
34
|
+
bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
|
35
|
+
}
|
36
|
+
|
37
|
+
var ratio = dpr / bsr;
|
38
|
+
|
39
|
+
var settings = {
|
40
|
+
domain: "holder.js",
|
41
|
+
images: "img",
|
42
|
+
bgnodes: ".holderjs",
|
43
|
+
themes: {
|
44
|
+
"gray": {
|
45
|
+
background: "#eee",
|
46
|
+
foreground: "#aaa",
|
47
|
+
size: 12
|
48
|
+
},
|
49
|
+
"social": {
|
50
|
+
background: "#3a5a97",
|
51
|
+
foreground: "#fff",
|
52
|
+
size: 12
|
53
|
+
},
|
54
|
+
"industrial": {
|
55
|
+
background: "#434A52",
|
56
|
+
foreground: "#C2F200",
|
57
|
+
size: 12
|
58
|
+
},
|
59
|
+
"sky": {
|
60
|
+
background: "#0D8FDB",
|
61
|
+
foreground: "#fff",
|
62
|
+
size: 12
|
63
|
+
},
|
64
|
+
"vine": {
|
65
|
+
background: "#39DBAC",
|
66
|
+
foreground: "#1E292C",
|
67
|
+
size: 12
|
68
|
+
},
|
69
|
+
"lava": {
|
70
|
+
background: "#F8591A",
|
71
|
+
foreground: "#1C2846",
|
72
|
+
size: 12
|
73
|
+
}
|
74
|
+
},
|
75
|
+
stylesheet: ""
|
76
|
+
};
|
77
|
+
app.flags = {
|
78
|
+
dimensions: {
|
79
|
+
regex: /^(\d+)x(\d+)$/,
|
80
|
+
output: function (val) {
|
81
|
+
var exec = this.regex.exec(val);
|
82
|
+
return {
|
83
|
+
width: +exec[1],
|
84
|
+
height: +exec[2]
|
85
|
+
}
|
86
|
+
}
|
87
|
+
},
|
88
|
+
fluid: {
|
89
|
+
regex: /^([0-9%]+)x([0-9%]+)$/,
|
90
|
+
output: function (val) {
|
91
|
+
var exec = this.regex.exec(val);
|
92
|
+
return {
|
93
|
+
width: exec[1],
|
94
|
+
height: exec[2]
|
95
|
+
}
|
96
|
+
}
|
97
|
+
},
|
98
|
+
colors: {
|
99
|
+
regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i,
|
100
|
+
output: function (val) {
|
101
|
+
var exec = this.regex.exec(val);
|
102
|
+
return {
|
103
|
+
size: settings.themes.gray.size,
|
104
|
+
foreground: "#" + exec[2],
|
105
|
+
background: "#" + exec[1]
|
106
|
+
}
|
107
|
+
}
|
108
|
+
},
|
109
|
+
text: {
|
110
|
+
regex: /text\:(.*)/,
|
111
|
+
output: function (val) {
|
112
|
+
return this.regex.exec(val)[1];
|
113
|
+
}
|
114
|
+
},
|
115
|
+
font: {
|
116
|
+
regex: /font\:(.*)/,
|
117
|
+
output: function (val) {
|
118
|
+
return this.regex.exec(val)[1];
|
119
|
+
}
|
120
|
+
},
|
121
|
+
auto: {
|
122
|
+
regex: /^auto$/
|
123
|
+
},
|
124
|
+
textmode: {
|
125
|
+
regex: /textmode\:(.*)/,
|
126
|
+
output: function(val){
|
127
|
+
return this.regex.exec(val)[1];
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
//getElementsByClassName polyfill
|
133
|
+
document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})
|
134
|
+
|
135
|
+
//getComputedStyle polyfill
|
136
|
+
window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})
|
137
|
+
|
138
|
+
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
|
139
|
+
function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}
|
140
|
+
|
141
|
+
//https://gist.github.com/991057 by Jed Schmidt with modifications
|
142
|
+
function selector(a){
|
143
|
+
a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]);
|
144
|
+
var ret=[]; b!==null&&(b.length?ret=b:b.length===0?ret=b:ret=[b]); return ret;
|
145
|
+
}
|
146
|
+
|
147
|
+
//shallow object property extend
|
148
|
+
function extend(a,b){
|
149
|
+
var c={};
|
150
|
+
for(var i in a){
|
151
|
+
if(a.hasOwnProperty(i)){
|
152
|
+
c[i]=a[i];
|
153
|
+
}
|
154
|
+
}
|
155
|
+
for(var i in b){
|
156
|
+
if(b.hasOwnProperty(i)){
|
157
|
+
c[i]=b[i];
|
158
|
+
}
|
159
|
+
}
|
160
|
+
return c
|
161
|
+
}
|
162
|
+
|
163
|
+
//hasOwnProperty polyfill
|
164
|
+
if (!Object.prototype.hasOwnProperty)
|
165
|
+
/*jshint -W001, -W103 */
|
166
|
+
Object.prototype.hasOwnProperty = function(prop) {
|
167
|
+
var proto = this.__proto__ || this.constructor.prototype;
|
168
|
+
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
|
169
|
+
}
|
170
|
+
/*jshint +W001, +W103 */
|
171
|
+
|
172
|
+
function text_size(width, height, template) {
|
173
|
+
height = parseInt(height, 10);
|
174
|
+
width = parseInt(width, 10);
|
175
|
+
var bigSide = Math.max(height, width)
|
176
|
+
var smallSide = Math.min(height, width)
|
177
|
+
var scale = 1 / 12;
|
178
|
+
var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale);
|
179
|
+
return {
|
180
|
+
height: Math.round(Math.max(template.size, newHeight))
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
function draw(args) {
|
185
|
+
var ctx = args.ctx;
|
186
|
+
var dimensions = args.dimensions;
|
187
|
+
var template = args.template;
|
188
|
+
var ratio = args.ratio;
|
189
|
+
var holder = args.holder;
|
190
|
+
var literal = holder.textmode == "literal";
|
191
|
+
var exact = holder.textmode == "exact";
|
192
|
+
|
193
|
+
var ts = text_size(dimensions.width, dimensions.height, template);
|
194
|
+
var text_height = ts.height;
|
195
|
+
var width = dimensions.width * ratio,
|
196
|
+
height = dimensions.height * ratio;
|
197
|
+
var font = template.font ? template.font : "sans-serif";
|
198
|
+
canvas.width = width;
|
199
|
+
canvas.height = height;
|
200
|
+
ctx.textAlign = "center";
|
201
|
+
ctx.textBaseline = "middle";
|
202
|
+
ctx.fillStyle = template.background;
|
203
|
+
ctx.fillRect(0, 0, width, height);
|
204
|
+
ctx.fillStyle = template.foreground;
|
205
|
+
ctx.font = "bold " + text_height + "px " + font;
|
206
|
+
var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
|
207
|
+
if (literal) {
|
208
|
+
var dimensions = holder.dimensions;
|
209
|
+
text = dimensions.width + "x" + dimensions.height;
|
210
|
+
}
|
211
|
+
else if(exact && holder.exact_dimensions){
|
212
|
+
var dimensions = holder.exact_dimensions;
|
213
|
+
text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
|
214
|
+
}
|
215
|
+
var text_width = ctx.measureText(text).width;
|
216
|
+
if (text_width / width >= 0.75) {
|
217
|
+
text_height = Math.floor(text_height * 0.75 * (width / text_width));
|
218
|
+
}
|
219
|
+
//Resetting font size if necessary
|
220
|
+
ctx.font = "bold " + (text_height * ratio) + "px " + font;
|
221
|
+
ctx.fillText(text, (width / 2), (height / 2), width);
|
222
|
+
return canvas.toDataURL("image/png");
|
223
|
+
}
|
224
|
+
|
225
|
+
function render(mode, el, holder, src) {
|
226
|
+
|
227
|
+
var dimensions = holder.dimensions,
|
228
|
+
theme = holder.theme,
|
229
|
+
text = holder.text ? decodeURIComponent(holder.text) : holder.text;
|
230
|
+
var dimensions_caption = dimensions.width + "x" + dimensions.height;
|
231
|
+
theme = (text ? extend(theme, {
|
232
|
+
text: text
|
233
|
+
}) : theme);
|
234
|
+
theme = (holder.font ? extend(theme, {
|
235
|
+
font: holder.font
|
236
|
+
}) : theme);
|
237
|
+
el.setAttribute("data-src", src);
|
238
|
+
holder.theme = theme;
|
239
|
+
el.holder_data = holder;
|
240
|
+
|
241
|
+
if (mode == "image") {
|
242
|
+
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
243
|
+
if (fallback || !holder.auto) {
|
244
|
+
el.style.width = dimensions.width + "px";
|
245
|
+
el.style.height = dimensions.height + "px";
|
246
|
+
}
|
247
|
+
if (fallback) {
|
248
|
+
el.style.backgroundColor = theme.background;
|
249
|
+
} else {
|
250
|
+
el.setAttribute("src", draw({ctx: ctx, dimensions: dimensions, template: theme, ratio:ratio, holder: holder}));
|
251
|
+
|
252
|
+
if(holder.textmode && holder.textmode == "exact"){
|
253
|
+
resizable_images.push(el);
|
254
|
+
resizable_update(el);
|
255
|
+
}
|
256
|
+
|
257
|
+
}
|
258
|
+
} else if (mode == "background") {
|
259
|
+
if (!fallback) {
|
260
|
+
el.style.backgroundImage = "url(" + draw({ctx:ctx, dimensions: dimensions, template: theme, ratio: ratio, holder: holder}) + ")";
|
261
|
+
el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px";
|
262
|
+
}
|
263
|
+
} else if (mode == "fluid") {
|
264
|
+
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
265
|
+
if (dimensions.height.slice(-1) == "%") {
|
266
|
+
el.style.height = dimensions.height
|
267
|
+
} else {
|
268
|
+
el.style.height = dimensions.height + "px"
|
269
|
+
}
|
270
|
+
if (dimensions.width.slice(-1) == "%") {
|
271
|
+
el.style.width = dimensions.width
|
272
|
+
} else {
|
273
|
+
el.style.width = dimensions.width + "px"
|
274
|
+
}
|
275
|
+
if (el.style.display == "inline" || el.style.display === "" || el.style.display == "none") {
|
276
|
+
el.style.display = "block";
|
277
|
+
}
|
278
|
+
if (fallback) {
|
279
|
+
el.style.backgroundColor = theme.background;
|
280
|
+
} else {
|
281
|
+
resizable_images.push(el);
|
282
|
+
resizable_update(el);
|
283
|
+
}
|
284
|
+
}
|
285
|
+
}
|
286
|
+
|
287
|
+
function dimension_check(el, callback) {
|
288
|
+
var dimensions = {
|
289
|
+
height: el.clientHeight,
|
290
|
+
width: el.clientWidth
|
291
|
+
};
|
292
|
+
if (!dimensions.height && !dimensions.width) {
|
293
|
+
if (el.hasAttribute("data-holder-invisible")) {
|
294
|
+
throw new Error("Holder: placeholder is not visible");
|
295
|
+
} else {
|
296
|
+
el.setAttribute("data-holder-invisible", true)
|
297
|
+
setTimeout(function () {
|
298
|
+
callback.call(this, el)
|
299
|
+
}, 1)
|
300
|
+
return null;
|
301
|
+
}
|
302
|
+
} else {
|
303
|
+
el.removeAttribute("data-holder-invisible")
|
304
|
+
}
|
305
|
+
return dimensions;
|
306
|
+
}
|
307
|
+
|
308
|
+
function resizable_update(element) {
|
309
|
+
var images;
|
310
|
+
if (element.nodeType == null) {
|
311
|
+
images = resizable_images;
|
312
|
+
} else {
|
313
|
+
images = [element]
|
314
|
+
}
|
315
|
+
for (var i in images) {
|
316
|
+
if (!images.hasOwnProperty(i)) {
|
317
|
+
continue;
|
318
|
+
}
|
319
|
+
var el = images[i]
|
320
|
+
if (el.holder_data) {
|
321
|
+
var holder = el.holder_data;
|
322
|
+
var dimensions = dimension_check(el, resizable_update)
|
323
|
+
if(dimensions){
|
324
|
+
if(holder.fluid){
|
325
|
+
el.setAttribute("src", draw({
|
326
|
+
ctx: ctx,
|
327
|
+
dimensions: dimensions,
|
328
|
+
template: holder.theme,
|
329
|
+
ratio: ratio,
|
330
|
+
holder: holder
|
331
|
+
}))
|
332
|
+
}
|
333
|
+
if(holder.textmode && holder.textmode == "exact"){
|
334
|
+
holder.exact_dimensions = dimensions;
|
335
|
+
el.setAttribute("src", draw({
|
336
|
+
ctx: ctx,
|
337
|
+
dimensions: holder.dimensions,
|
338
|
+
template: holder.theme,
|
339
|
+
ratio: ratio,
|
340
|
+
holder: holder
|
341
|
+
}))
|
342
|
+
}
|
343
|
+
}
|
344
|
+
}
|
345
|
+
}
|
346
|
+
}
|
347
|
+
|
348
|
+
function parse_flags(flags, options) {
|
349
|
+
var ret = {
|
350
|
+
theme: extend(settings.themes.gray, {})
|
351
|
+
};
|
352
|
+
var render = false;
|
353
|
+
for (sl = flags.length, j = 0; j < sl; j++) {
|
354
|
+
var flag = flags[j];
|
355
|
+
if (app.flags.dimensions.match(flag)) {
|
356
|
+
render = true;
|
357
|
+
ret.dimensions = app.flags.dimensions.output(flag);
|
358
|
+
} else if (app.flags.fluid.match(flag)) {
|
359
|
+
render = true;
|
360
|
+
ret.dimensions = app.flags.fluid.output(flag);
|
361
|
+
ret.fluid = true;
|
362
|
+
} else if (app.flags.textmode.match(flag)) {
|
363
|
+
ret.textmode = app.flags.textmode.output(flag)
|
364
|
+
} else if (app.flags.colors.match(flag)) {
|
365
|
+
ret.theme = app.flags.colors.output(flag);
|
366
|
+
} else if (options.themes[flag]) {
|
367
|
+
//If a theme is specified, it will override custom colors
|
368
|
+
if(options.themes.hasOwnProperty(flag)){
|
369
|
+
ret.theme = extend(options.themes[flag], {});
|
370
|
+
}
|
371
|
+
} else if (app.flags.font.match(flag)) {
|
372
|
+
ret.font = app.flags.font.output(flag);
|
373
|
+
} else if (app.flags.auto.match(flag)) {
|
374
|
+
ret.auto = true;
|
375
|
+
} else if (app.flags.text.match(flag)) {
|
376
|
+
ret.text = app.flags.text.output(flag);
|
377
|
+
}
|
378
|
+
}
|
379
|
+
return render ? ret : false;
|
380
|
+
}
|
381
|
+
|
382
|
+
for (var flag in app.flags) {
|
383
|
+
if (!app.flags.hasOwnProperty(flag)) continue;
|
384
|
+
app.flags[flag].match = function (val) {
|
385
|
+
return val.match(this.regex)
|
386
|
+
}
|
387
|
+
}
|
388
|
+
app.add_theme = function (name, theme) {
|
389
|
+
name != null && theme != null && (settings.themes[name] = theme);
|
390
|
+
return app;
|
391
|
+
};
|
392
|
+
app.add_image = function (src, el) {
|
393
|
+
var node = selector(el);
|
394
|
+
if (node.length) {
|
395
|
+
for (var i = 0, l = node.length; i < l; i++) {
|
396
|
+
var img = document.createElement("img")
|
397
|
+
img.setAttribute("data-src", src);
|
398
|
+
node[i].appendChild(img);
|
399
|
+
}
|
400
|
+
}
|
401
|
+
return app;
|
402
|
+
};
|
403
|
+
app.run = function (o) {
|
404
|
+
preempted = true;
|
405
|
+
|
406
|
+
var options = extend(settings, o),
|
407
|
+
images = [],
|
408
|
+
imageNodes = [],
|
409
|
+
bgnodes = [];
|
410
|
+
if (typeof (options.images) == "string") {
|
411
|
+
imageNodes = selector(options.images);
|
412
|
+
} else if (window.NodeList && options.images instanceof window.NodeList) {
|
413
|
+
imageNodes = options.images;
|
414
|
+
} else if (window.Node && options.images instanceof window.Node) {
|
415
|
+
imageNodes = [options.images];
|
416
|
+
}
|
417
|
+
|
418
|
+
if (typeof (options.bgnodes) == "string") {
|
419
|
+
bgnodes = selector(options.bgnodes);
|
420
|
+
} else if (window.NodeList && options.elements instanceof window.NodeList) {
|
421
|
+
bgnodes = options.bgnodes;
|
422
|
+
} else if (window.Node && options.bgnodes instanceof window.Node) {
|
423
|
+
bgnodes = [options.bgnodes];
|
424
|
+
}
|
425
|
+
for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]);
|
426
|
+
var holdercss = document.getElementById("holderjs-style");
|
427
|
+
if (!holdercss) {
|
428
|
+
holdercss = document.createElement("style");
|
429
|
+
holdercss.setAttribute("id", "holderjs-style");
|
430
|
+
holdercss.type = "text/css";
|
431
|
+
document.getElementsByTagName("head")[0].appendChild(holdercss);
|
432
|
+
}
|
433
|
+
if (!options.nocss) {
|
434
|
+
if (holdercss.styleSheet) {
|
435
|
+
holdercss.styleSheet.cssText += options.stylesheet;
|
436
|
+
} else {
|
437
|
+
holdercss.appendChild(document.createTextNode(options.stylesheet));
|
438
|
+
}
|
439
|
+
}
|
440
|
+
var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)");
|
441
|
+
for (var l = bgnodes.length, i = 0; i < l; i++) {
|
442
|
+
var src = window.getComputedStyle(bgnodes[i], null)
|
443
|
+
.getPropertyValue("background-image");
|
444
|
+
var flags = src.match(cssregex);
|
445
|
+
var bgsrc = bgnodes[i].getAttribute("data-background-src");
|
446
|
+
if (flags) {
|
447
|
+
var holder = parse_flags(flags[1].split("/"), options);
|
448
|
+
if (holder) {
|
449
|
+
render("background", bgnodes[i], holder, src);
|
450
|
+
}
|
451
|
+
} else if (bgsrc != null) {
|
452
|
+
var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1)
|
453
|
+
.split("/"), options);
|
454
|
+
if (holder) {
|
455
|
+
render("background", bgnodes[i], holder, src);
|
456
|
+
}
|
457
|
+
}
|
458
|
+
}
|
459
|
+
for (l = images.length, i = 0; i < l; i++) {
|
460
|
+
var attr_data_src, attr_src;
|
461
|
+
attr_src = attr_data_src = src = null;
|
462
|
+
try {
|
463
|
+
attr_src = images[i].getAttribute("src");
|
464
|
+
attr_datasrc = images[i].getAttribute("data-src");
|
465
|
+
} catch (e) {}
|
466
|
+
if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) {
|
467
|
+
src = attr_src;
|
468
|
+
} else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) {
|
469
|
+
src = attr_datasrc;
|
470
|
+
}
|
471
|
+
if (src) {
|
472
|
+
var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1)
|
473
|
+
.split("/"), options);
|
474
|
+
if (holder) {
|
475
|
+
if (holder.fluid) {
|
476
|
+
render("fluid", images[i], holder, src)
|
477
|
+
} else {
|
478
|
+
render("image", images[i], holder, src);
|
479
|
+
}
|
480
|
+
}
|
481
|
+
}
|
482
|
+
}
|
483
|
+
return app;
|
484
|
+
};
|
485
|
+
contentLoaded(win, function () {
|
486
|
+
if (window.addEventListener) {
|
487
|
+
window.addEventListener("resize", resizable_update, false);
|
488
|
+
window.addEventListener("orientationchange", resizable_update, false);
|
489
|
+
} else {
|
490
|
+
window.attachEvent("onresize", resizable_update)
|
491
|
+
}
|
492
|
+
preempted || app.run();
|
493
|
+
});
|
494
|
+
if (typeof define === "function" && define.amd) {
|
495
|
+
define([], function () {
|
496
|
+
return app;
|
497
|
+
});
|
498
|
+
}
|
499
|
+
|
500
|
+
})(Holder, window);
|