From 27d4a43e1220b898618664274adadb2bb207a442 Mon Sep 17 00:00:00 2001 From: Tomislav R Date: Sat, 23 Apr 2016 23:38:09 +0200 Subject: [PATCH] change remove files loading --- digitalglarus/static/blog.tar.gz | Bin 210458 -> 0 bytes .../bower_components/bootstrap/.bower.json | 45 + .../bower_components/bootstrap/CHANGELOG.md | 5 + .../bower_components/bootstrap/Gruntfile.js | 533 +++++++++++ .../bower_components/bootstrap/LICENSE | 21 + .../bower_components/bootstrap/README.md | 139 +++ .../bower_components/bootstrap/bower.json | 34 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 ++++++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../bootstrap/grunt/.jshintrc | 7 + .../bootstrap/grunt/bs-commonjs-generator.js | 30 + .../grunt/bs-glyphicons-data-generator.js | 42 + .../bootstrap/grunt/bs-lessdoc-parser.js | 237 +++++ .../bootstrap/grunt/bs-raw-files-generator.js | 44 + .../bootstrap/grunt/configBridge.json | 46 + .../bootstrap/grunt/sauce_browsers.yml | 82 ++ .../bower_components/bootstrap/js/.jscsrc | 42 + .../bower_components/bootstrap/js/.jshintrc | 15 + .../bower_components/bootstrap/js/affix.js | 162 ++++ .../bower_components/bootstrap/js/alert.js | 94 ++ .../bower_components/bootstrap/js/button.js | 120 +++ .../bower_components/bootstrap/js/carousel.js | 237 +++++ .../bower_components/bootstrap/js/collapse.js | 211 +++++ .../bower_components/bootstrap/js/dropdown.js | 165 ++++ .../bower_components/bootstrap/js/modal.js | 337 +++++++ .../bower_components/bootstrap/js/popover.js | 108 +++ .../bootstrap/js/scrollspy.js | 172 ++++ .../bower_components/bootstrap/js/tab.js | 155 ++++ .../bower_components/bootstrap/js/tooltip.js | 514 +++++++++++ .../bootstrap/js/transition.js | 59 ++ .../bootstrap/less/.csscomb.json | 304 ++++++ .../bootstrap/less/.csslintrc | 19 + .../bootstrap/less/alerts.less | 73 ++ .../bootstrap/less/badges.less | 66 ++ .../bootstrap/less/bootstrap.less | 56 ++ .../bootstrap/less/breadcrumbs.less | 26 + .../bootstrap/less/button-groups.less | 244 +++++ .../bootstrap/less/buttons.less | 166 ++++ .../bootstrap/less/carousel.less | 270 ++++++ .../bootstrap/less/close.less | 34 + .../bower_components/bootstrap/less/code.less | 69 ++ .../bootstrap/less/component-animations.less | 33 + .../bootstrap/less/dropdowns.less | 216 +++++ .../bootstrap/less/forms.less | 613 ++++++++++++ .../bootstrap/less/glyphicons.less | 305 ++++++ .../bower_components/bootstrap/less/grid.less | 84 ++ .../bootstrap/less/input-groups.less | 171 ++++ .../bootstrap/less/jumbotron.less | 54 ++ .../bootstrap/less/labels.less | 64 ++ .../bootstrap/less/list-group.less | 130 +++ .../bootstrap/less/media.less | 66 ++ .../bootstrap/less/mixins.less | 40 + .../bootstrap/less/mixins/alerts.less | 14 + .../less/mixins/background-variant.less | 9 + .../bootstrap/less/mixins/border-radius.less | 18 + .../bootstrap/less/mixins/buttons.less | 65 ++ .../bootstrap/less/mixins/center-block.less | 7 + .../bootstrap/less/mixins/clearfix.less | 22 + .../bootstrap/less/mixins/forms.less | 85 ++ .../bootstrap/less/mixins/gradients.less | 59 ++ .../bootstrap/less/mixins/grid-framework.less | 91 ++ .../bootstrap/less/mixins/grid.less | 122 +++ .../bootstrap/less/mixins/hide-text.less | 21 + .../bootstrap/less/mixins/image.less | 33 + .../bootstrap/less/mixins/labels.less | 12 + .../bootstrap/less/mixins/list-group.less | 30 + .../bootstrap/less/mixins/nav-divider.less | 10 + .../less/mixins/nav-vertical-align.less | 9 + .../bootstrap/less/mixins/opacity.less | 8 + .../bootstrap/less/mixins/pagination.less | 24 + .../bootstrap/less/mixins/panels.less | 24 + .../bootstrap/less/mixins/progress-bar.less | 10 + .../bootstrap/less/mixins/reset-filter.less | 8 + .../bootstrap/less/mixins/reset-text.less | 18 + .../bootstrap/less/mixins/resize.less | 6 + .../less/mixins/responsive-visibility.less | 15 + .../bootstrap/less/mixins/size.less | 10 + .../bootstrap/less/mixins/tab-focus.less | 9 + .../bootstrap/less/mixins/table-row.less | 28 + .../bootstrap/less/mixins/text-emphasis.less | 9 + .../bootstrap/less/mixins/text-overflow.less | 8 + .../less/mixins/vendor-prefixes.less | 227 +++++ .../bootstrap/less/modals.less | 150 +++ .../bootstrap/less/navbar.less | 660 +++++++++++++ .../bower_components/bootstrap/less/navs.less | 242 +++++ .../bootstrap/less/normalize.less | 424 +++++++++ .../bootstrap/less/pager.less | 54 ++ .../bootstrap/less/pagination.less | 89 ++ .../bootstrap/less/panels.less | 271 ++++++ .../bootstrap/less/popovers.less | 131 +++ .../bootstrap/less/print.less | 101 ++ .../bootstrap/less/progress-bars.less | 87 ++ .../bootstrap/less/responsive-embed.less | 35 + .../bootstrap/less/responsive-utilities.less | 194 ++++ .../bootstrap/less/scaffolding.less | 161 ++++ .../bootstrap/less/tables.less | 234 +++++ .../bootstrap/less/theme.less | 291 ++++++ .../bootstrap/less/thumbnails.less | 36 + .../bootstrap/less/tooltip.less | 101 ++ .../bower_components/bootstrap/less/type.less | 302 ++++++ .../bootstrap/less/utilities.less | 55 ++ .../bootstrap/less/variables.less | 869 ++++++++++++++++++ .../bootstrap/less/wells.less | 29 + .../bootstrap/nuget/MyGet.ps1 | 8 + .../bootstrap/nuget/bootstrap.less.nuspec | 28 + .../bootstrap/nuget/bootstrap.nuspec | 28 + .../bower_components/bootstrap/package.js | 32 + .../bower_components/bootstrap/package.json | 87 ++ .../bower_components/jquery/.bower.json | 25 + .../bower_components/jquery/AUTHORS.txt | 278 ++++++ .../bower_components/jquery/LICENSE.txt | 36 + .../bower_components/jquery/README.md | 65 ++ .../bower_components/jquery/bower.json | 14 + .../jquery/sizzle/LICENSE.txt | 36 + .../bower_components/jquery/src/.jshintrc | 29 + .../bower_components/jquery/src/ajax.js | 845 +++++++++++++++++ .../bower_components/jquery/src/ajax/jsonp.js | 100 ++ .../bower_components/jquery/src/ajax/load.js | 83 ++ .../jquery/src/ajax/parseJSON.js | 13 + .../jquery/src/ajax/parseXML.js | 27 + .../jquery/src/ajax/script.js | 68 ++ .../jquery/src/ajax/var/location.js | 3 + .../jquery/src/ajax/var/nonce.js | 5 + .../jquery/src/ajax/var/rquery.js | 3 + .../bower_components/jquery/src/ajax/xhr.js | 167 ++++ .../bower_components/jquery/src/attributes.js | 11 + .../jquery/src/attributes/attr.js | 142 +++ .../jquery/src/attributes/classes.js | 177 ++++ .../jquery/src/attributes/prop.js | 125 +++ .../jquery/src/attributes/support.js | 36 + .../jquery/src/attributes/val.js | 177 ++++ .../bower_components/jquery/src/callbacks.js | 232 +++++ .../bower_components/jquery/src/core.js | 494 ++++++++++ .../jquery/src/core/DOMEval.js | 14 + .../jquery/src/core/access.js | 65 ++ .../bower_components/jquery/src/core/init.js | 134 +++ .../jquery/src/core/parseHTML.js | 41 + .../bower_components/jquery/src/core/ready.js | 103 +++ .../jquery/src/core/support.js | 18 + .../jquery/src/core/var/rsingleTag.js | 5 + .../bower_components/jquery/src/css.js | 515 +++++++++++ .../jquery/src/css/addGetHookIf.js | 24 + .../jquery/src/css/adjustCSS.js | 65 ++ .../bower_components/jquery/src/css/curCSS.js | 60 ++ .../jquery/src/css/defaultDisplay.js | 72 ++ .../jquery/src/css/hiddenVisibleSelectors.js | 18 + .../jquery/src/css/showHide.js | 48 + .../jquery/src/css/support.js | 121 +++ .../jquery/src/css/var/cssExpand.js | 3 + .../jquery/src/css/var/getStyles.js | 15 + .../jquery/src/css/var/isHidden.js | 16 + .../jquery/src/css/var/rmargin.js | 3 + .../jquery/src/css/var/rnumnonpx.js | 5 + .../jquery/src/css/var/swap.js | 24 + .../bower_components/jquery/src/data.js | 187 ++++ .../bower_components/jquery/src/data/Data.js | 200 ++++ .../jquery/src/data/accepts.js | 20 + .../jquery/src/data/support.js | 23 + .../jquery/src/data/var/acceptData.js | 18 + .../jquery/src/data/var/dataPriv.js | 5 + .../jquery/src/data/var/dataUser.js | 5 + .../bower_components/jquery/src/deferred.js | 158 ++++ .../jquery/src/deferred/exceptionHook.js | 19 + .../bower_components/jquery/src/deprecated.js | 32 + .../bower_components/jquery/src/dimensions.js | 54 ++ .../bower_components/jquery/src/effects.js | 629 +++++++++++++ .../jquery/src/effects/Tween.js | 121 +++ .../jquery/src/effects/animatedSelector.js | 13 + .../jquery/src/effects/support.js | 58 ++ .../bower_components/jquery/src/event.js | 710 ++++++++++++++ .../bower_components/jquery/src/event/ajax.js | 20 + .../jquery/src/event/alias.js | 27 + .../jquery/src/event/focusin.js | 53 ++ .../jquery/src/event/support.js | 9 + .../jquery/src/event/trigger.js | 199 ++++ .../jquery/src/exports/amd.js | 24 + .../jquery/src/exports/global.js | 26 + .../bower_components/jquery/src/intro.js | 44 + .../bower_components/jquery/src/jquery.js | 37 + .../jquery/src/manipulation.js | 481 ++++++++++ .../jquery/src/manipulation/_evalUrl.js | 20 + .../jquery/src/manipulation/buildFragment.js | 102 ++ .../src/manipulation/createSafeFragment.js | 20 + .../jquery/src/manipulation/getAll.js | 21 + .../jquery/src/manipulation/setGlobalEval.js | 20 + .../jquery/src/manipulation/support.js | 33 + .../jquery/src/manipulation/var/nodeNames.js | 5 + .../src/manipulation/var/rcheckableType.js | 3 + .../manipulation/var/rleadingWhitespace.js | 3 + .../src/manipulation/var/rscriptType.js | 3 + .../jquery/src/manipulation/var/rtagName.js | 3 + .../jquery/src/manipulation/wrapMap.js | 27 + .../bower_components/jquery/src/offset.js | 218 +++++ .../bower_components/jquery/src/outro.js | 2 + .../bower_components/jquery/src/queue.js | 143 +++ .../jquery/src/queue/delay.js | 22 + .../jquery/src/selector-native.js | 211 +++++ .../jquery/src/selector-sizzle.js | 14 + .../bower_components/jquery/src/selector.js | 1 + .../bower_components/jquery/src/serialize.js | 125 +++ .../bower_components/jquery/src/support.js | 63 ++ .../bower_components/jquery/src/traversing.js | 175 ++++ .../jquery/src/traversing/findFilter.js | 100 ++ .../jquery/src/traversing/var/dir.js | 20 + .../src/traversing/var/rneedsContext.js | 6 + .../jquery/src/traversing/var/siblings.js | 15 + .../bower_components/jquery/src/var/arr.js | 3 + .../jquery/src/var/class2type.js | 5 + .../bower_components/jquery/src/var/concat.js | 5 + .../jquery/src/var/deletedIds.js | 3 + .../jquery/src/var/document.js | 3 + .../jquery/src/var/documentElement.js | 5 + .../bower_components/jquery/src/var/hasOwn.js | 5 + .../jquery/src/var/indexOf.js | 5 + .../bower_components/jquery/src/var/pnum.js | 3 + .../bower_components/jquery/src/var/push.js | 5 + .../jquery/src/var/rcssNum.js | 7 + .../jquery/src/var/rnotwhite.js | 3 + .../bower_components/jquery/src/var/slice.js | 5 + .../jquery/src/var/support.js | 5 + .../jquery/src/var/toString.js | 5 + .../bower_components/jquery/src/wrap.js | 79 ++ membership/templates/confirm.html | 96 +- membership/templates/creditcard.html | 12 +- membership/templates/error.html | 12 +- membership/templates/login.html | 8 +- membership/templates/membership.html | 10 +- membership/templates/success.html | 8 +- membership/templates/validated.html | 9 +- membership/templates/validated_email.html | 11 +- 233 files changed, 22097 insertions(+), 79 deletions(-) delete mode 100644 digitalglarus/static/blog.tar.gz create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/.bower.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/CHANGELOG.md create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/Gruntfile.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/LICENSE create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/README.md create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/bower.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/.jshintrc create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-commonjs-generator.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-lessdoc-parser.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-raw-files-generator.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/configBridge.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/sauce_browsers.yml create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jscsrc create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jshintrc create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/affix.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/alert.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/button.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/carousel.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/collapse.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/dropdown.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/modal.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/popover.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/scrollspy.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tab.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tooltip.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/js/transition.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csscomb.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csslintrc create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/alerts.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/badges.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/bootstrap.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/breadcrumbs.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/button-groups.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/buttons.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/carousel.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/close.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/code.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/component-animations.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/dropdowns.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/forms.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/glyphicons.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/grid.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/input-groups.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/jumbotron.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/labels.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/list-group.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/media.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/alerts.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/background-variant.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/border-radius.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/buttons.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/center-block.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/clearfix.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/forms.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/gradients.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid-framework.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/hide-text.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/image.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/labels.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/list-group.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-divider.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-vertical-align.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/opacity.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/pagination.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/panels.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/progress-bar.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-filter.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-text.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/resize.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/responsive-visibility.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/size.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/tab-focus.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/table-row.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-emphasis.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-overflow.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/vendor-prefixes.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/modals.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navbar.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navs.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/normalize.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pager.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pagination.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/panels.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/popovers.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/print.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/progress-bars.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-embed.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-utilities.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/scaffolding.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tables.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/theme.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/thumbnails.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tooltip.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/type.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/utilities.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/variables.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/less/wells.less create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/MyGet.ps1 create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.less.nuspec create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.nuspec create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/package.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/bootstrap/package.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/.bower.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/AUTHORS.txt create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/LICENSE.txt create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/README.md create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/bower.json create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/sizzle/LICENSE.txt create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/.jshintrc create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/jsonp.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/load.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseJSON.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseXML.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/script.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/var/location.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/var/nonce.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/var/rquery.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/xhr.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes/attr.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes/classes.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes/prop.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/attributes/val.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/callbacks.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/DOMEval.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/access.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/init.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/parseHTML.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/ready.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/core/var/rsingleTag.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/addGetHookIf.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/adjustCSS.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/curCSS.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/defaultDisplay.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/hiddenVisibleSelectors.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/showHide.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/cssExpand.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/getStyles.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/isHidden.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/rmargin.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/rnumnonpx.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/css/var/swap.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/Data.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/accepts.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/var/acceptData.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/var/dataPriv.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/data/var/dataUser.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/deferred.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/deferred/exceptionHook.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/deprecated.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/dimensions.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/effects.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/effects/Tween.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/effects/animatedSelector.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/effects/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event/ajax.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event/alias.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event/focusin.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/event/trigger.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/exports/amd.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/exports/global.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/intro.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/jquery.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/_evalUrl.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/buildFragment.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/createSafeFragment.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/getAll.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/setGlobalEval.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/var/nodeNames.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/var/rcheckableType.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/var/rleadingWhitespace.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/var/rscriptType.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/var/rtagName.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/manipulation/wrapMap.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/offset.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/outro.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/queue.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/queue/delay.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/selector-native.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/selector-sizzle.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/selector.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/serialize.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/traversing.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/traversing/findFilter.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/traversing/var/dir.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/traversing/var/rneedsContext.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/traversing/var/siblings.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/arr.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/class2type.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/concat.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/deletedIds.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/document.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/documentElement.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/hasOwn.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/indexOf.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/pnum.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/push.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/rcssNum.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/rnotwhite.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/slice.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/support.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/var/toString.js create mode 100644 digitalglarus/static/digitalglarus/bower_components/jquery/src/wrap.js diff --git a/digitalglarus/static/blog.tar.gz b/digitalglarus/static/blog.tar.gz deleted file mode 100644 index e2a99f02315d43b96e30950d8056a0da69ef6dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210458 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

=ON6CIfr*4be8gxBJ{38tX-y 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 z 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%0D)+6s452+v3wA{v=#wEz%*hhPgO8I)g4i<7(iKB{ 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 diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/.bower.json b/digitalglarus/static/digitalglarus/bower_components/bootstrap/.bower.json new file mode 100644 index 00000000..d35965fd --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/.bower.json @@ -0,0 +1,45 @@ +{ + "name": "bootstrap", + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "keywords": [ + "css", + "js", + "less", + "mobile-first", + "responsive", + "front-end", + "framework", + "web" + ], + "homepage": "http://getbootstrap.com", + "license": "MIT", + "moduleType": "globals", + "main": [ + "less/bootstrap.less", + "dist/js/bootstrap.js" + ], + "ignore": [ + "/.*", + "_config.yml", + "CNAME", + "composer.json", + "CONTRIBUTING.md", + "docs", + "js/tests", + "test-infra" + ], + "dependencies": { + "jquery": "1.9.1 - 2" + }, + "version": "3.3.6", + "_release": "3.3.6", + "_resolution": { + "type": "version", + "tag": "v3.3.6", + "commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a" + }, + "_source": "https://github.com/twbs/bootstrap.git", + "_target": "^3.3.6", + "_originalSource": "bootstrap", + "_direct": true +} \ No newline at end of file diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/CHANGELOG.md b/digitalglarus/static/digitalglarus/bower_components/bootstrap/CHANGELOG.md new file mode 100644 index 00000000..b25f8384 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/CHANGELOG.md @@ -0,0 +1,5 @@ +Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs. + +See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. + +Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/Gruntfile.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/Gruntfile.js new file mode 100644 index 00000000..4b3e1228 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/Gruntfile.js @@ -0,0 +1,533 @@ +/*! + * Bootstrap's Gruntfile + * http://getbootstrap.com + * Copyright 2013-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +module.exports = function (grunt) { + 'use strict'; + + // Force use of Unix newlines + grunt.util.linefeed = '\n'; + + RegExp.quote = function (string) { + return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); + }; + + var fs = require('fs'); + var path = require('path'); + var npmShrinkwrap = require('npm-shrinkwrap'); + var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); + var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); + var getLessVarsData = function () { + var filePath = path.join(__dirname, 'less/variables.less'); + var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); + var parser = new BsLessdocParser(fileContent); + return { sections: parser.parseFile() }; + }; + var generateRawFiles = require('./grunt/bs-raw-files-generator.js'); + var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js'); + var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' }); + + Object.keys(configBridge.paths).forEach(function (key) { + configBridge.paths[key].forEach(function (val, i, arr) { + arr[i] = path.join('./docs/assets', val); + }); + }); + + // Project configuration. + grunt.initConfig({ + + // Metadata. + pkg: grunt.file.readJSON('package.json'), + banner: '/*!\n' + + ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + + ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + + ' * Licensed under the <%= pkg.license %> license\n' + + ' */\n', + jqueryCheck: configBridge.config.jqueryCheck.join('\n'), + jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'), + + // Task configuration. + clean: { + dist: 'dist', + docs: 'docs/dist' + }, + + jshint: { + options: { + jshintrc: 'js/.jshintrc' + }, + grunt: { + options: { + jshintrc: 'grunt/.jshintrc' + }, + src: ['Gruntfile.js', 'package.js', 'grunt/*.js'] + }, + core: { + src: 'js/*.js' + }, + test: { + options: { + jshintrc: 'js/tests/unit/.jshintrc' + }, + src: 'js/tests/unit/*.js' + }, + assets: { + src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js'] + } + }, + + jscs: { + options: { + config: 'js/.jscsrc' + }, + grunt: { + src: '<%= jshint.grunt.src %>' + }, + core: { + src: '<%= jshint.core.src %>' + }, + test: { + src: '<%= jshint.test.src %>' + }, + assets: { + options: { + requireCamelCaseOrUpperCaseIdentifiers: null + }, + src: '<%= jshint.assets.src %>' + } + }, + + concat: { + options: { + banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>', + stripBanners: false + }, + bootstrap: { + src: [ + 'js/transition.js', + 'js/alert.js', + 'js/button.js', + 'js/carousel.js', + 'js/collapse.js', + 'js/dropdown.js', + 'js/modal.js', + 'js/tooltip.js', + 'js/popover.js', + 'js/scrollspy.js', + 'js/tab.js', + 'js/affix.js' + ], + dest: 'dist/js/<%= pkg.name %>.js' + } + }, + + uglify: { + options: { + compress: { + warnings: false + }, + mangle: true, + preserveComments: 'some' + }, + core: { + src: '<%= concat.bootstrap.dest %>', + dest: 'dist/js/<%= pkg.name %>.min.js' + }, + customize: { + src: configBridge.paths.customizerJs, + dest: 'docs/assets/js/customize.min.js' + }, + docsJs: { + src: configBridge.paths.docsJs, + dest: 'docs/assets/js/docs.min.js' + } + }, + + qunit: { + options: { + inject: 'js/tests/unit/phantom.js' + }, + files: 'js/tests/index.html' + }, + + less: { + compileCore: { + options: { + strictMath: true, + sourceMap: true, + outputSourceFiles: true, + sourceMapURL: '<%= pkg.name %>.css.map', + sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' + }, + src: 'less/bootstrap.less', + dest: 'dist/css/<%= pkg.name %>.css' + }, + compileTheme: { + options: { + strictMath: true, + sourceMap: true, + outputSourceFiles: true, + sourceMapURL: '<%= pkg.name %>-theme.css.map', + sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' + }, + src: 'less/theme.less', + dest: 'dist/css/<%= pkg.name %>-theme.css' + } + }, + + autoprefixer: { + options: { + browsers: configBridge.config.autoprefixerBrowsers + }, + core: { + options: { + map: true + }, + src: 'dist/css/<%= pkg.name %>.css' + }, + theme: { + options: { + map: true + }, + src: 'dist/css/<%= pkg.name %>-theme.css' + }, + docs: { + src: ['docs/assets/css/src/docs.css'] + }, + examples: { + expand: true, + cwd: 'docs/examples/', + src: ['**/*.css'], + dest: 'docs/examples/' + } + }, + + csslint: { + options: { + csslintrc: 'less/.csslintrc' + }, + dist: [ + 'dist/css/bootstrap.css', + 'dist/css/bootstrap-theme.css' + ], + examples: [ + 'docs/examples/**/*.css' + ], + docs: { + options: { + ids: false, + 'overqualified-elements': false + }, + src: 'docs/assets/css/src/docs.css' + } + }, + + cssmin: { + options: { + // TODO: disable `zeroUnits` optimization once clean-css 3.2 is released + // and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly + compatibility: 'ie8', + keepSpecialComments: '*', + sourceMap: true, + advanced: false + }, + minifyCore: { + src: 'dist/css/<%= pkg.name %>.css', + dest: 'dist/css/<%= pkg.name %>.min.css' + }, + minifyTheme: { + src: 'dist/css/<%= pkg.name %>-theme.css', + dest: 'dist/css/<%= pkg.name %>-theme.min.css' + }, + docs: { + src: [ + 'docs/assets/css/ie10-viewport-bug-workaround.css', + 'docs/assets/css/src/pygments-manni.css', + 'docs/assets/css/src/docs.css' + ], + dest: 'docs/assets/css/docs.min.css' + } + }, + + csscomb: { + options: { + config: 'less/.csscomb.json' + }, + dist: { + expand: true, + cwd: 'dist/css/', + src: ['*.css', '!*.min.css'], + dest: 'dist/css/' + }, + examples: { + expand: true, + cwd: 'docs/examples/', + src: '**/*.css', + dest: 'docs/examples/' + }, + docs: { + src: 'docs/assets/css/src/docs.css', + dest: 'docs/assets/css/src/docs.css' + } + }, + + copy: { + fonts: { + expand: true, + src: 'fonts/*', + dest: 'dist/' + }, + docs: { + expand: true, + cwd: 'dist/', + src: [ + '**/*' + ], + dest: 'docs/dist/' + } + }, + + connect: { + server: { + options: { + port: 3000, + base: '.' + } + } + }, + + jekyll: { + options: { + config: '_config.yml' + }, + docs: {}, + github: { + options: { + raw: 'github: true' + } + } + }, + + htmlmin: { + dist: { + options: { + collapseWhitespace: true, + conservativeCollapse: true, + minifyCSS: true, + minifyJS: true, + removeAttributeQuotes: true, + removeComments: true + }, + expand: true, + cwd: '_gh_pages', + dest: '_gh_pages', + src: [ + '**/*.html', + '!examples/**/*.html' + ] + } + }, + + jade: { + options: { + pretty: true, + data: getLessVarsData + }, + customizerVars: { + src: 'docs/_jade/customizer-variables.jade', + dest: 'docs/_includes/customizer-variables.html' + }, + customizerNav: { + src: 'docs/_jade/customizer-nav.jade', + dest: 'docs/_includes/nav/customize.html' + } + }, + + htmllint: { + options: { + ignore: [ + 'Attribute "autocomplete" not allowed on element "button" at this point.', + 'Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".', + 'Element "img" is missing required attribute "src".' + ] + }, + src: '_gh_pages/**/*.html' + }, + + watch: { + src: { + files: '<%= jshint.core.src %>', + tasks: ['jshint:core', 'qunit', 'concat'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'qunit'] + }, + less: { + files: 'less/**/*.less', + tasks: 'less' + } + }, + + sed: { + versionNumber: { + pattern: (function () { + var old = grunt.option('oldver'); + return old ? RegExp.quote(old) : old; + })(), + replacement: grunt.option('newver'), + exclude: [ + 'dist/fonts', + 'docs/assets', + 'fonts', + 'js/tests/vendor', + 'node_modules', + 'test-infra' + ], + recursive: true + } + }, + + 'saucelabs-qunit': { + all: { + options: { + build: process.env.TRAVIS_JOB_ID, + throttled: 10, + maxRetries: 3, + maxPollRetries: 4, + urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'], + browsers: grunt.file.readYAML('grunt/sauce_browsers.yml') + } + } + }, + + exec: { + npmUpdate: { + command: 'npm update' + } + }, + + compress: { + main: { + options: { + archive: 'bootstrap-<%= pkg.version %>-dist.zip', + mode: 'zip', + level: 9, + pretty: true + }, + files: [ + { + expand: true, + cwd: 'dist/', + src: ['**'], + dest: 'bootstrap-<%= pkg.version %>-dist' + } + ] + } + } + + }); + + + // These plugins provide necessary tasks. + require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); + require('time-grunt')(grunt); + + // Docs HTML validation task + grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']); + + var runSubset = function (subset) { + return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; + }; + var isUndefOrNonZero = function (val) { + return val === undefined || val !== '0'; + }; + + // Test task. + var testSubtasks = []; + // Skip core tests if running a different subset of the test suite + if (runSubset('core') && + // Skip core tests if this is a Savage build + process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') { + testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']); + } + // Skip HTML validation if running a different subset of the test suite + if (runSubset('validate-html') && + // Skip HTML5 validator on Travis when [skip validator] is in the commit message + isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) { + testSubtasks.push('validate-html'); + } + // Only run Sauce Labs tests if there's a Sauce access key + if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' && + // Skip Sauce if running a different subset of the test suite + runSubset('sauce-js-unit') && + // Skip Sauce on Travis when [skip sauce] is in the commit message + isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) { + testSubtasks.push('connect'); + testSubtasks.push('saucelabs-qunit'); + } + grunt.registerTask('test', testSubtasks); + grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']); + + // JS distribution task. + grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']); + + // CSS distribution task. + grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']); + grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']); + + // Full distribution task. + grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']); + + // Default task. + grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']); + + // Version numbering task. + // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z + // This can be overzealous, so its changes should always be manually reviewed! + grunt.registerTask('change-version-number', 'sed'); + + grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); }); + + // task for building customizer + grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']); + grunt.registerTask('build-customizer-html', 'jade'); + grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { + var banner = grunt.template.process('<%= banner %>'); + generateRawFiles(grunt, banner); + }); + + grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () { + var srcFiles = grunt.config.get('concat.bootstrap.src'); + var destFilepath = 'dist/js/npm.js'; + generateCommonJSModule(grunt, srcFiles, destFilepath); + }); + + // Docs task. + grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']); + grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']); + grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']); + grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']); + grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']); + + grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github', 'htmlmin', 'compress']); + + // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json). + // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change. + grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']); + grunt.registerTask('_update-shrinkwrap', function () { + var done = this.async(); + npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) { + if (err) { + grunt.fail.warn(err); + } + var dest = 'test-infra/npm-shrinkwrap.json'; + fs.renameSync('npm-shrinkwrap.json', dest); + grunt.log.writeln('File ' + dest.cyan + ' updated.'); + done(); + }); + }); +}; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/LICENSE b/digitalglarus/static/digitalglarus/bower_components/bootstrap/LICENSE new file mode 100644 index 00000000..f4c52d6a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2015 Twitter, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/README.md b/digitalglarus/static/digitalglarus/bower_components/bootstrap/README.md new file mode 100644 index 00000000..c2a887b7 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/README.md @@ -0,0 +1,139 @@ +# [Bootstrap](http://getbootstrap.com) + +[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com) +![Bower version](https://img.shields.io/bower/v/bootstrap.svg) +[![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap) +[![Build Status](https://img.shields.io/travis/twbs/bootstrap/master.svg)](https://travis-ci.org/twbs/bootstrap) +[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) +[![NuGet](https://img.shields.io/nuget/v/bootstrap.svg)](https://www.nuget.org/packages/Bootstrap) +[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) + +Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community. + +To get started, check out ! + + +## Table of contents + +* [Quick start](#quick-start) +* [Bugs and feature requests](#bugs-and-feature-requests) +* [Documentation](#documentation) +* [Contributing](#contributing) +* [Community](#community) +* [Versioning](#versioning) +* [Creators](#creators) +* [Copyright and license](#copyright-and-license) + + +## Quick start + +Several quick start options are available: + +* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.6.zip). +* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. +* Install with [Bower](http://bower.io): `bower install bootstrap`. +* Install with [npm](https://www.npmjs.com): `npm install bootstrap`. +* Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`. +* Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`. + +Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. + +### What's included + +Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: + +``` +bootstrap/ +├── css/ +│ ├── bootstrap.css +│ ├── bootstrap.css.map +│ ├── bootstrap.min.css +│ ├── bootstrap.min.css.map +│ ├── bootstrap-theme.css +│ ├── bootstrap-theme.css.map +│ ├── bootstrap-theme.min.css +│ └── bootstrap-theme.min.css.map +├── js/ +│ ├── bootstrap.js +│ └── bootstrap.min.js +└── fonts/ + ├── glyphicons-halflings-regular.eot + ├── glyphicons-halflings-regular.svg + ├── glyphicons-halflings-regular.ttf + ├── glyphicons-halflings-regular.woff + └── glyphicons-halflings-regular.woff2 +``` + +We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme. + + +## Bugs and feature requests + +Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). + + +## Documentation + +Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at . The docs may also be run locally. + +### Running documentation locally + +1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v3.0.x). + **Note for Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems. +2. Install the Ruby-based syntax highlighter, [Rouge](https://github.com/jneen/rouge), with `gem install rouge`. +3. From the root `/bootstrap` directory, run `jekyll serve` in the command line. +4. Open `http://localhost:9001` in your browser, and voilà. + +Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). + +### Documentation for previous releases + +Documentation for v2.3.2 has been made available for the time being at while folks transition to Bootstrap 3. + +[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. + + +## Contributing + +Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. + +Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo). + +Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . + + +## Community + +Get updates on Bootstrap's development and chat with the project maintainers and community members. + +* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap). +* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). +* Join [the official Slack room](https://bootstrap-slack.herokuapp.com). +* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel. +* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). +* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability. + + +## Versioning + +For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. + +See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. + + +## Creators + +**Mark Otto** + +* +* + +**Jacob Thornton** + +* +* + + +## Copyright and license + +Code and documentation copyright 2011-2015 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE). diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/bower.json b/digitalglarus/static/digitalglarus/bower_components/bootstrap/bower.json new file mode 100644 index 00000000..58ae0935 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/bower.json @@ -0,0 +1,34 @@ +{ + "name": "bootstrap", + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "keywords": [ + "css", + "js", + "less", + "mobile-first", + "responsive", + "front-end", + "framework", + "web" + ], + "homepage": "http://getbootstrap.com", + "license": "MIT", + "moduleType": "globals", + "main": [ + "less/bootstrap.less", + "dist/js/bootstrap.js" + ], + "ignore": [ + "/.*", + "_config.yml", + "CNAME", + "composer.json", + "CONTRIBUTING.md", + "docs", + "js/tests", + "test-infra" + ], + "dependencies": { + "jquery": "1.9.1 - 2" + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot b/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf b/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/digitalglarus/static/digitalglarus/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/.jshintrc b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/.jshintrc new file mode 100644 index 00000000..0ea0495e --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/.jshintrc @@ -0,0 +1,7 @@ +{ + "extends" : "../js/.jshintrc", + "asi" : false, + "browser" : false, + "es3" : false, + "node" : true +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-commonjs-generator.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-commonjs-generator.js new file mode 100644 index 00000000..0b4ebbfc --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-commonjs-generator.js @@ -0,0 +1,30 @@ +/*! + * Bootstrap Grunt task for the CommonJS module generation + * http://getbootstrap.com + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict'; + +var fs = require('fs'); +var path = require('path'); + +var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n'; + +module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) { + var destDir = path.dirname(destFilepath); + + function srcPathToDestRequire(srcFilepath) { + var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/'); + return 'require(\'' + requirePath + '\')'; + } + + var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n'); + try { + fs.writeFileSync(destFilepath, moduleOutputJs); + } catch (err) { + grunt.fail.warn(err); + } + grunt.log.writeln('File ' + destFilepath.cyan + ' created.'); +}; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js new file mode 100644 index 00000000..af2a82e2 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js @@ -0,0 +1,42 @@ +/*! + * Bootstrap Grunt task for Glyphicons data generation + * http://getbootstrap.com + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict'; + +var fs = require('fs'); + +module.exports = function generateGlyphiconsData(grunt) { + // Pass encoding, utf8, so `readFileSync` will return a string instead of a + // buffer + var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); + var glyphiconsLines = glyphiconsFile.split('\n'); + + // Use any line that starts with ".glyphicon-" and capture the class name + var iconClassName = /^\.(glyphicon-[a-zA-Z0-9-]+)/; + var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + + '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; + var glyphiconsYml = 'docs/_data/glyphicons.yml'; + for (var i = 0, len = glyphiconsLines.length; i < len; i++) { + var match = glyphiconsLines[i].match(iconClassName); + + if (match !== null) { + glyphiconsData += '- ' + match[1] + '\n'; + } + } + + // Create the `_data` directory if it doesn't already exist + if (!fs.existsSync('docs/_data')) { + fs.mkdirSync('docs/_data'); + } + + try { + fs.writeFileSync(glyphiconsYml, glyphiconsData); + } catch (err) { + grunt.fail.warn(err); + } + grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); +}; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-lessdoc-parser.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-lessdoc-parser.js new file mode 100644 index 00000000..5a9ed2b3 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-lessdoc-parser.js @@ -0,0 +1,237 @@ +/*! + * Bootstrap Grunt task for parsing Less docstrings + * http://getbootstrap.com + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict'; + +var Markdown = require('markdown-it'); + +function markdown2html(markdownString) { + var md = new Markdown(); + + // the slice removes the

...

wrapper output by Markdown processor + return md.render(markdownString.trim()).slice(3, -5); +} + + +/* +Mini-language: + //== This is a normal heading, which starts a section. Sections group variables together. + //## Optional description for the heading + + //=== This is a subheading. + + //** Optional description for the following variable. You **can** use Markdown in descriptions to discuss `` stuff. + @foo: #fff; + + //-- This is a heading for a section whose variables shouldn't be customizable + + All other lines are ignored completely. +*/ + + +var CUSTOMIZABLE_HEADING = /^[/]{2}={2}(.*)$/; +var UNCUSTOMIZABLE_HEADING = /^[/]{2}-{2}(.*)$/; +var SUBSECTION_HEADING = /^[/]{2}={3}(.*)$/; +var SECTION_DOCSTRING = /^[/]{2}#{2}(.+)$/; +var VAR_ASSIGNMENT = /^(@[a-zA-Z0-9_-]+):[ ]*([^ ;][^;]*);[ ]*$/; +var VAR_DOCSTRING = /^[/]{2}[*]{2}(.+)$/; + +function Section(heading, customizable) { + this.heading = heading.trim(); + this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); + this.customizable = customizable; + this.docstring = null; + this.subsections = []; +} + +Section.prototype.addSubSection = function (subsection) { + this.subsections.push(subsection); +}; + +function SubSection(heading) { + this.heading = heading.trim(); + this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); + this.variables = []; +} + +SubSection.prototype.addVar = function (variable) { + this.variables.push(variable); +}; + +function VarDocstring(markdownString) { + this.html = markdown2html(markdownString); +} + +function SectionDocstring(markdownString) { + this.html = markdown2html(markdownString); +} + +function Variable(name, defaultValue) { + this.name = name; + this.defaultValue = defaultValue; + this.docstring = null; +} + +function Tokenizer(fileContent) { + this._lines = fileContent.split('\n'); + this._next = undefined; +} + +Tokenizer.prototype.unshift = function (token) { + if (this._next !== undefined) { + throw new Error('Attempted to unshift twice!'); + } + this._next = token; +}; + +Tokenizer.prototype._shift = function () { + // returning null signals EOF + // returning undefined means the line was ignored + if (this._next !== undefined) { + var result = this._next; + this._next = undefined; + return result; + } + if (this._lines.length <= 0) { + return null; + } + var line = this._lines.shift(); + var match = null; + match = SUBSECTION_HEADING.exec(line); + if (match !== null) { + return new SubSection(match[1]); + } + match = CUSTOMIZABLE_HEADING.exec(line); + if (match !== null) { + return new Section(match[1], true); + } + match = UNCUSTOMIZABLE_HEADING.exec(line); + if (match !== null) { + return new Section(match[1], false); + } + match = SECTION_DOCSTRING.exec(line); + if (match !== null) { + return new SectionDocstring(match[1]); + } + match = VAR_DOCSTRING.exec(line); + if (match !== null) { + return new VarDocstring(match[1]); + } + var commentStart = line.lastIndexOf('//'); + var varLine = commentStart === -1 ? line : line.slice(0, commentStart); + match = VAR_ASSIGNMENT.exec(varLine); + if (match !== null) { + return new Variable(match[1], match[2]); + } + return undefined; +}; + +Tokenizer.prototype.shift = function () { + while (true) { + var result = this._shift(); + if (result === undefined) { + continue; + } + return result; + } +}; + +function Parser(fileContent) { + this._tokenizer = new Tokenizer(fileContent); +} + +Parser.prototype.parseFile = function () { + var sections = []; + while (true) { + var section = this.parseSection(); + if (section === null) { + if (this._tokenizer.shift() !== null) { + throw new Error('Unexpected unparsed section of file remains!'); + } + return sections; + } + sections.push(section); + } +}; + +Parser.prototype.parseSection = function () { + var section = this._tokenizer.shift(); + if (section === null) { + return null; + } + if (!(section instanceof Section)) { + throw new Error('Expected section heading; got: ' + JSON.stringify(section)); + } + var docstring = this._tokenizer.shift(); + if (docstring instanceof SectionDocstring) { + section.docstring = docstring; + } else { + this._tokenizer.unshift(docstring); + } + this.parseSubSections(section); + + return section; +}; + +Parser.prototype.parseSubSections = function (section) { + while (true) { + var subsection = this.parseSubSection(); + if (subsection === null) { + if (section.subsections.length === 0) { + // Presume an implicit initial subsection + subsection = new SubSection(''); + this.parseVars(subsection); + } else { + break; + } + } + section.addSubSection(subsection); + } + + if (section.subsections.length === 1 && !section.subsections[0].heading && section.subsections[0].variables.length === 0) { + // Ignore lone empty implicit subsection + section.subsections = []; + } +}; + +Parser.prototype.parseSubSection = function () { + var subsection = this._tokenizer.shift(); + if (subsection instanceof SubSection) { + this.parseVars(subsection); + return subsection; + } + this._tokenizer.unshift(subsection); + return null; +}; + +Parser.prototype.parseVars = function (subsection) { + while (true) { + var variable = this.parseVar(); + if (variable === null) { + return; + } + subsection.addVar(variable); + } +}; + +Parser.prototype.parseVar = function () { + var docstring = this._tokenizer.shift(); + if (!(docstring instanceof VarDocstring)) { + this._tokenizer.unshift(docstring); + docstring = null; + } + var variable = this._tokenizer.shift(); + if (variable instanceof Variable) { + variable.docstring = docstring; + return variable; + } + this._tokenizer.unshift(variable); + return null; +}; + + +module.exports = Parser; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-raw-files-generator.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-raw-files-generator.js new file mode 100644 index 00000000..39224e4e --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/bs-raw-files-generator.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap Grunt task for generating raw-files.min.js for the Customizer + * http://getbootstrap.com + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +'use strict'; + +var fs = require('fs'); +var btoa = require('btoa'); +var glob = require('glob'); + +function getFiles(type) { + var files = {}; + var recursive = type === 'less'; + var globExpr = recursive ? '/**/*' : '/*'; + glob.sync(type + globExpr) + .filter(function (path) { + return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); + }) + .forEach(function (fullPath) { + var relativePath = fullPath.replace(/^[^/]+\//, ''); + files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'); + }); + return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; +} + +module.exports = function generateRawFilesJs(grunt, banner) { + if (!banner) { + banner = ''; + } + var dirs = ['js', 'less', 'fonts']; + var files = banner + dirs.map(getFiles).reduce(function (combined, file) { + return combined + file; + }, ''); + var rawFilesJs = 'docs/assets/js/raw-files.min.js'; + try { + fs.writeFileSync(rawFilesJs, files); + } catch (err) { + grunt.fail.warn(err); + } + grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); +}; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/configBridge.json b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/configBridge.json new file mode 100644 index 00000000..94a8cbaf --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/configBridge.json @@ -0,0 +1,46 @@ +{ + "paths": { + "customizerJs": [ + "../assets/js/vendor/autoprefixer.js", + "../assets/js/vendor/less.min.js", + "../assets/js/vendor/jszip.min.js", + "../assets/js/vendor/uglify.min.js", + "../assets/js/vendor/Blob.js", + "../assets/js/vendor/FileSaver.js", + "../assets/js/raw-files.min.js", + "../assets/js/src/customizer.js" + ], + "docsJs": [ + "../assets/js/vendor/holder.min.js", + "../assets/js/vendor/ZeroClipboard.min.js", + "../assets/js/vendor/anchor.js", + "../assets/js/src/application.js" + ] + }, + "config": { + "autoprefixerBrowsers": [ + "Android 2.3", + "Android >= 4", + "Chrome >= 20", + "Firefox >= 24", + "Explorer >= 8", + "iOS >= 6", + "Opera >= 12", + "Safari >= 6" + ], + "jqueryCheck": [ + "if (typeof jQuery === 'undefined') {", + " throw new Error('Bootstrap\\'s JavaScript requires jQuery')", + "}\n" + ], + "jqueryVersionCheck": [ + "+function ($) {", + " 'use strict';", + " var version = $.fn.jquery.split(' ')[0].split('.')", + " if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {", + " throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')", + " }", + "}(jQuery);\n\n" + ] + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/sauce_browsers.yml b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/sauce_browsers.yml new file mode 100644 index 00000000..6267f35a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/grunt/sauce_browsers.yml @@ -0,0 +1,82 @@ +[ + # Docs: https://saucelabs.com/docs/platforms/webdriver + + { + browserName: "safari", + platform: "OS X 10.10" + }, + { + browserName: "chrome", + platform: "OS X 10.10" + }, + { + browserName: "firefox", + platform: "OS X 10.10" + }, + + # Mac Opera not currently supported by Sauce Labs + + { + browserName: "internet explorer", + version: "11", + platform: "Windows 8.1" + }, + { + browserName: "internet explorer", + version: "10", + platform: "Windows 8" + }, + { + browserName: "internet explorer", + version: "9", + platform: "Windows 7" + }, + { + browserName: "internet explorer", + version: "8", + platform: "Windows 7" + }, + + # { # Unofficial + # browserName: "internet explorer", + # version: "7", + # platform: "Windows XP" + # }, + + { + browserName: "chrome", + platform: "Windows 8.1" + }, + { + browserName: "firefox", + platform: "Windows 8.1" + }, + + # Win Opera 15+ not currently supported by Sauce Labs + + { + browserName: "iphone", + platform: "OS X 10.10", + version: "8.2" + }, + + # iOS Chrome not currently supported by Sauce Labs + + # Linux (unofficial) + { + browserName: "chrome", + platform: "Linux" + }, + { + browserName: "firefox", + platform: "Linux" + } + + # Android Chrome not currently supported by Sauce Labs + + # { # Android Browser (super-unofficial) + # browserName: "android", + # version: "4.0", + # platform: "Linux" + # } +] diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jscsrc b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jscsrc new file mode 100644 index 00000000..9544d2d2 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jscsrc @@ -0,0 +1,42 @@ +{ + "disallowEmptyBlocks": true, + "disallowKeywords": ["with"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineStrings": true, + "disallowMultipleVarDecl": true, + "disallowQuotedKeysInObjects": "allButReserved", + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforeBinaryOperators": [","], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, + "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpacesInsideParentheses": true, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "requireCamelCaseOrUpperCaseIdentifiers": true, + "requireCapitalizedConstructors": true, + "requireCommaBeforeLineBreak": true, + "requireDollarBeforejQueryAssignment": true, + "requireDotNotation": true, + "requireLineFeedAtFileEnd": true, + "requirePaddingNewLinesAfterUseStrict": true, + "requirePaddingNewLinesBeforeExport": true, + "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="], + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireSpaceAfterLineComment": true, + "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="], + "requireSpaceBetweenArguments": true, + "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true }, + "requireSpacesInConditionalExpression": true, + "requireSpacesInForStatement": true, + "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, + "requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true }, + "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, + "requireSpacesInsideObjectBrackets": "allButNested", + "validateAlignedFunctionParameters": true, + "validateIndentation": 2, + "validateLineBreaks": "LF", + "validateNewlineAfterArrayElements": true, + "validateQuoteMarks": "'" +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jshintrc b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jshintrc new file mode 100644 index 00000000..a59e1d00 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/.jshintrc @@ -0,0 +1,15 @@ +{ + "asi" : true, + "browser" : true, + "eqeqeq" : false, + "eqnull" : true, + "es3" : true, + "expr" : true, + "jquery" : true, + "latedef" : true, + "laxbreak" : true, + "nonbsp" : true, + "strict" : true, + "undef" : true, + "unused" : true +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/affix.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/affix.js new file mode 100644 index 00000000..2c5d5d64 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/affix.js @@ -0,0 +1,162 @@ +/* ======================================================================== + * Bootstrap: affix.js v3.3.6 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.6' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/alert.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/alert.js new file mode 100644 index 00000000..5536755d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/alert.js @@ -0,0 +1,94 @@ +/* ======================================================================== + * Bootstrap: alert.js v3.3.6 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.6' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/button.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/button.js new file mode 100644 index 00000000..0f36e41e --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/button.js @@ -0,0 +1,120 @@ +/* ======================================================================== + * Bootstrap: button.js v3.3.6 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.6' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/carousel.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/carousel.js new file mode 100644 index 00000000..6cdbc79c --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/carousel.js @@ -0,0 +1,237 @@ +/* ======================================================================== + * Bootstrap: carousel.js v3.3.6 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.6' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/collapse.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/collapse.js new file mode 100644 index 00000000..9e26465d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/collapse.js @@ -0,0 +1,211 @@ +/* ======================================================================== + * Bootstrap: collapse.js v3.3.6 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.6' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/dropdown.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/dropdown.js new file mode 100644 index 00000000..df6be869 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/dropdown.js @@ -0,0 +1,165 @@ +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.6 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.6' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/modal.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/modal.js new file mode 100644 index 00000000..5049cccf --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/modal.js @@ -0,0 +1,337 @@ +/* ======================================================================== + * Bootstrap: modal.js v3.3.6 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.6' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/popover.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/popover.js new file mode 100644 index 00000000..f2362e01 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/popover.js @@ -0,0 +1,108 @@ +/* ======================================================================== + * Bootstrap: popover.js v3.3.6 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.6' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/scrollspy.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/scrollspy.js new file mode 100644 index 00000000..5970b06f --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/scrollspy.js @@ -0,0 +1,172 @@ +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.6 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.6' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tab.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tab.js new file mode 100644 index 00000000..7d533e8d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tab.js @@ -0,0 +1,155 @@ +/* ======================================================================== + * Bootstrap: tab.js v3.3.6 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.6' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tooltip.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tooltip.js new file mode 100644 index 00000000..7094b34d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/tooltip.js @@ -0,0 +1,514 @@ +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.6 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.6' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/transition.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/transition.js new file mode 100644 index 00000000..fae36ed9 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/js/transition.js @@ -0,0 +1,59 @@ +/* ======================================================================== + * Bootstrap: transition.js v3.3.6 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csscomb.json b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csscomb.json new file mode 100644 index 00000000..40695a47 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csscomb.json @@ -0,0 +1,304 @@ +{ + "always-semicolon": true, + "block-indent": 2, + "color-case": "lower", + "color-shorthand": true, + "element-case": "lower", + "eof-newline": true, + "leading-zero": false, + "remove-empty-rulesets": true, + "space-after-colon": 1, + "space-after-combinator": 1, + "space-before-selector-delimiter": 0, + "space-between-declarations": "\n", + "space-after-opening-brace": "\n", + "space-before-closing-brace": "\n", + "space-before-colon": 0, + "space-before-combinator": 1, + "space-before-opening-brace": 1, + "strip-spaces": true, + "unitless-zero": true, + "vendor-prefix-align": true, + "sort-order": [ + [ + "position", + "top", + "right", + "bottom", + "left", + "z-index", + "display", + "float", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "-webkit-box-sizing", + "-moz-box-sizing", + "box-sizing", + "-webkit-appearance", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "overflow", + "overflow-x", + "overflow-y", + "-webkit-overflow-scrolling", + "-ms-overflow-x", + "-ms-overflow-y", + "-ms-overflow-style", + "clip", + "clear", + "font", + "font-family", + "font-size", + "font-style", + "font-weight", + "font-variant", + "font-size-adjust", + "font-stretch", + "font-effect", + "font-emphasize", + "font-emphasize-position", + "font-emphasize-style", + "font-smooth", + "-webkit-hyphens", + "-moz-hyphens", + "hyphens", + "line-height", + "color", + "text-align", + "-webkit-text-align-last", + "-moz-text-align-last", + "-ms-text-align-last", + "text-align-last", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-style", + "text-emphasis-position", + "text-decoration", + "text-indent", + "text-justify", + "text-outline", + "-ms-text-overflow", + "text-overflow", + "text-overflow-ellipsis", + "text-overflow-mode", + "text-shadow", + "text-transform", + "text-wrap", + "-webkit-text-size-adjust", + "-ms-text-size-adjust", + "letter-spacing", + "-ms-word-break", + "word-break", + "word-spacing", + "-ms-word-wrap", + "word-wrap", + "-moz-tab-size", + "-o-tab-size", + "tab-size", + "white-space", + "vertical-align", + "list-style", + "list-style-position", + "list-style-type", + "list-style-image", + "pointer-events", + "-ms-touch-action", + "touch-action", + "cursor", + "visibility", + "zoom", + "flex-direction", + "flex-order", + "flex-pack", + "flex-align", + "table-layout", + "empty-cells", + "caption-side", + "border-spacing", + "border-collapse", + "content", + "quotes", + "counter-reset", + "counter-increment", + "resize", + "-webkit-user-select", + "-moz-user-select", + "-ms-user-select", + "-o-user-select", + "user-select", + "nav-index", + "nav-up", + "nav-right", + "nav-down", + "nav-left", + "background", + "background-color", + "background-image", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader", + "filter", + "background-repeat", + "background-attachment", + "background-position", + "background-position-x", + "background-position-y", + "-webkit-background-clip", + "-moz-background-clip", + "background-clip", + "background-origin", + "-webkit-background-size", + "-moz-background-size", + "-o-background-size", + "background-size", + "border", + "border-color", + "border-style", + "border-width", + "border-top", + "border-top-color", + "border-top-style", + "border-top-width", + "border-right", + "border-right-color", + "border-right-style", + "border-right-width", + "border-bottom", + "border-bottom-color", + "border-bottom-style", + "border-bottom-width", + "border-left", + "border-left-color", + "border-left-style", + "border-left-width", + "border-radius", + "border-top-left-radius", + "border-top-right-radius", + "border-bottom-right-radius", + "border-bottom-left-radius", + "-webkit-border-image", + "-moz-border-image", + "-o-border-image", + "border-image", + "-webkit-border-image-source", + "-moz-border-image-source", + "-o-border-image-source", + "border-image-source", + "-webkit-border-image-slice", + "-moz-border-image-slice", + "-o-border-image-slice", + "border-image-slice", + "-webkit-border-image-width", + "-moz-border-image-width", + "-o-border-image-width", + "border-image-width", + "-webkit-border-image-outset", + "-moz-border-image-outset", + "-o-border-image-outset", + "border-image-outset", + "-webkit-border-image-repeat", + "-moz-border-image-repeat", + "-o-border-image-repeat", + "border-image-repeat", + "outline", + "outline-width", + "outline-style", + "outline-color", + "outline-offset", + "-webkit-box-shadow", + "-moz-box-shadow", + "box-shadow", + "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha", + "opacity", + "-ms-interpolation-mode", + "-webkit-transition", + "-moz-transition", + "-ms-transition", + "-o-transition", + "transition", + "-webkit-transition-delay", + "-moz-transition-delay", + "-ms-transition-delay", + "-o-transition-delay", + "transition-delay", + "-webkit-transition-timing-function", + "-moz-transition-timing-function", + "-ms-transition-timing-function", + "-o-transition-timing-function", + "transition-timing-function", + "-webkit-transition-duration", + "-moz-transition-duration", + "-ms-transition-duration", + "-o-transition-duration", + "transition-duration", + "-webkit-transition-property", + "-moz-transition-property", + "-ms-transition-property", + "-o-transition-property", + "transition-property", + "-webkit-transform", + "-moz-transform", + "-ms-transform", + "-o-transform", + "transform", + "-webkit-transform-origin", + "-moz-transform-origin", + "-ms-transform-origin", + "-o-transform-origin", + "transform-origin", + "-webkit-animation", + "-moz-animation", + "-ms-animation", + "-o-animation", + "animation", + "-webkit-animation-name", + "-moz-animation-name", + "-ms-animation-name", + "-o-animation-name", + "animation-name", + "-webkit-animation-duration", + "-moz-animation-duration", + "-ms-animation-duration", + "-o-animation-duration", + "animation-duration", + "-webkit-animation-play-state", + "-moz-animation-play-state", + "-ms-animation-play-state", + "-o-animation-play-state", + "animation-play-state", + "-webkit-animation-timing-function", + "-moz-animation-timing-function", + "-ms-animation-timing-function", + "-o-animation-timing-function", + "animation-timing-function", + "-webkit-animation-delay", + "-moz-animation-delay", + "-ms-animation-delay", + "-o-animation-delay", + "animation-delay", + "-webkit-animation-iteration-count", + "-moz-animation-iteration-count", + "-ms-animation-iteration-count", + "-o-animation-iteration-count", + "animation-iteration-count", + "-webkit-animation-direction", + "-moz-animation-direction", + "-ms-animation-direction", + "-o-animation-direction", + "animation-direction" + ] + ] +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csslintrc b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csslintrc new file mode 100644 index 00000000..005b8623 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/.csslintrc @@ -0,0 +1,19 @@ +{ + "adjoining-classes": false, + "box-sizing": false, + "box-model": false, + "compatible-vendor-prefixes": false, + "floats": false, + "font-sizes": false, + "gradients": false, + "important": false, + "known-properties": false, + "outline-none": false, + "qualified-headings": false, + "regex-selectors": false, + "shorthand": false, + "text-indent": false, + "unique-headings": false, + "universal-selector": false, + "unqualified-attributes": false +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/alerts.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/alerts.less new file mode 100644 index 00000000..c4199db9 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/alerts.less @@ -0,0 +1,73 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: @alert-padding; + margin-bottom: @line-height-computed; + border: 1px solid transparent; + border-radius: @alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing @headings-color + color: inherit; + } + + // Provide class for links that match alerts + .alert-link { + font-weight: @alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: (@alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); +} + +.alert-info { + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); +} + +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} + +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/badges.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/badges.less new file mode 100644 index 00000000..6ee16dca --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/badges.less @@ -0,0 +1,66 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: @badge-font-weight; + color: @badge-color; + line-height: @badge-line-height; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: @badge-bg; + border-radius: @badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + + .btn-xs &, + .btn-group-xs > .btn & { + top: 0; + padding: 1px 5px; + } + + // Hover state, but only for links + a& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + .list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + + .list-group-item > & { + float: right; + } + + .list-group-item > & + & { + margin-right: 5px; + } + + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/bootstrap.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/bootstrap.less new file mode 100644 index 00000000..1c047780 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/bootstrap.less @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/breadcrumbs.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/breadcrumbs.less new file mode 100644 index 00000000..cb01d503 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/breadcrumbs.less @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; + margin-bottom: @line-height-computed; + list-style: none; + background-color: @breadcrumb-bg; + border-radius: @border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: @breadcrumb-color; + } + } + + > .active { + color: @breadcrumb-active-color; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/button-groups.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/button-groups.less new file mode 100644 index 00000000..293245a6 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/button-groups.less @@ -0,0 +1,244 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + &:extend(.clearfix all); + + .btn, + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + .border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + .border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-right-radius(0); + } +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + .box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: @caret-width-large @caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 @caret-width-large @caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + &:extend(.clearfix all); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + .border-top-radius(@btn-border-radius-base); + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + .border-top-radius(0); + .border-bottom-radius(@btn-border-radius-base); + } +} +.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, + > .dropdown-toggle { + .border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-top-radius(0); +} + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. + +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none; + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/buttons.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/buttons.less new file mode 100644 index 00000000..9cbb8f41 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/buttons.less @@ -0,0 +1,166 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: @btn-font-weight; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base); + .user-select(none); + + &, + &:active, + &.active { + &:focus, + &.focus { + .tab-focus(); + } + } + + &:hover, + &:focus, + &.focus { + color: @btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: @cursor-disabled; + .opacity(.65); + .box-shadow(none); + } + + a& { + &.disabled, + fieldset[disabled] & { + pointer-events: none; // Future-proof disabling of clicks on `` elements + } + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); +} +.btn-primary { + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); +} +// Success appears as green +.btn-success { + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); +} +// Info appears as blue-green +.btn-info { + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: @link-color; + font-weight: normal; + border-radius: 0; + + &, + &:active, + &.active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + .box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: @link-hover-decoration; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} +.btn-xs { + .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/carousel.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/carousel.less new file mode 100644 index 00000000..252011e9 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/carousel.less @@ -0,0 +1,270 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + .transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + &:extend(.img-responsive); + line-height: 1; + } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + .transition-transform(~'0.6s ease-in-out'); + .backface-visibility(~'hidden'); + .perspective(1000px); + + &.next, + &.active.right { + .translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + .translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + .translate3d(0, 0, 0); + left: 0; + } + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: @carousel-control-width; + .opacity(@carousel-control-opacity); + font-size: @carousel-control-font-size; + color: @carousel-control-color; + text-align: center; + text-shadow: @carousel-text-shadow; + background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: @carousel-control-color; + text-decoration: none; + .opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid @carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: @carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: @carousel-caption-color; + text-align: center; + text-shadow: @carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: @screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: (@carousel-control-font-size * 1.5); + height: (@carousel-control-font-size * 1.5); + margin-top: (@carousel-control-font-size / -2); + font-size: (@carousel-control-font-size * 1.5); + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: (@carousel-control-font-size / -2); + } + .glyphicon-chevron-right, + .icon-next { + margin-right: (@carousel-control-font-size / -2); + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/close.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/close.less new file mode 100644 index 00000000..6d5bfe08 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/close.less @@ -0,0 +1,34 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: (@font-size-base * 1.5); + font-weight: @close-font-weight; + line-height: 1; + color: @close-color; + text-shadow: @close-text-shadow; + .opacity(.2); + + &:hover, + &:focus { + color: @close-color; + text-decoration: none; + cursor: pointer; + .opacity(.5); + } + + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/code.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/code.less new file mode 100644 index 00000000..a08b4d48 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/code.less @@ -0,0 +1,69 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: @font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: @code-color; + background-color: @code-bg; + border-radius: @border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: @kbd-color; + background-color: @kbd-bg; + border-radius: @border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + + kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: ((@line-height-computed - 1) / 2); + margin: 0 0 (@line-height-computed / 2); + font-size: (@font-size-base - 1); // 14px to 13px + line-height: @line-height-base; + word-break: break-all; + word-wrap: break-word; + color: @pre-color; + background-color: @pre-bg; + border: 1px solid @pre-border-color; + border-radius: @border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: @pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/component-animations.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/component-animations.less new file mode 100644 index 00000000..0bcee910 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/component-animations.less @@ -0,0 +1,33 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + .transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + .transition-property(~"height, visibility"); + .transition-duration(.35s); + .transition-timing-function(ease); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/dropdowns.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/dropdowns.less new file mode 100644 index 00000000..f6876c1a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/dropdowns.less @@ -0,0 +1,216 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: @caret-width-base dashed; + border-top: @caret-width-base solid ~"\9"; // IE8 + border-right: @caret-width-base solid transparent; + border-left: @caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropup, +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: @zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: @font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: @dropdown-bg; + border: 1px solid @dropdown-fallback-border; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + .nav-divider(@dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: @line-height-base; + color: @dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: @dropdown-link-hover-color; + background-color: @dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: @dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: @dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: @dropdown-link-disabled-color; + } + + // Nuke hover/focus effects + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + cursor: @cursor-disabled; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: @font-size-small; + line-height: @line-height-base; + color: @dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: (@zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: @caret-width-base dashed; + border-bottom: @caret-width-base solid ~"\9"; // IE8 + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: @grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/forms.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/forms.less new file mode 100644 index 00000000..e8b071a1 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/forms.less @@ -0,0 +1,613 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @legend-color; + border: 0; + border-bottom: 1px solid @legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + .tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: (@padding-base-vertical + 1); + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; + background-color: @input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid @input-border; + border-radius: @input-border-radius; // Note: This has no effect on s in CSS. + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .placeholder(); + + // Unstyle the caret on `` +// element gets special love because it's special, and that's a fact! +.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + height: @input-height; + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + border-radius: @border-radius; + + select& { + height: @input-height; + line-height: @input-height; + } + + textarea&, + select[multiple]& { + height: auto; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/gradients.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/gradients.less new file mode 100644 index 00000000..0b88a89c --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/gradients.less @@ -0,0 +1,59 @@ +// Gradients + +#gradient { + + // Horizontal gradient, from left to right + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12 + background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + // Vertical gradient, from top to bottom + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12 + background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { + background-repeat: repeat-x; + background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12 + background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + } + .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .radial(@inner-color: #555; @outer-color: #333) { + background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); + background-image: radial-gradient(circle, @inner-color, @outer-color); + background-repeat: no-repeat; + } + .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { + background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid-framework.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid-framework.less new file mode 100644 index 00000000..8c23eed2 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid-framework.less @@ -0,0 +1,91 @@ +// Framework grid generation +// +// Used only by Bootstrap to generate the correct number of grid classes given +// any value of `@grid-columns`. + +.make-grid-columns() { + // Common styles for all sizes of grid columns, widths 1-12 + .col(@index) { // initial + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: ceil((@grid-gutter-width / 2)); + padding-right: floor((@grid-gutter-width / 2)); + } + } + .col(1); // kickstart it +} + +.float-grid-columns(@class) { + .col(@index) { // initial + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + float: left; + } + } + .col(1); // kickstart it +} + +.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { + .col-@{class}-@{index} { + width: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { + .col-@{class}-push-@{index} { + left: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { + .col-@{class}-push-0 { + left: auto; + } +} +.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { + .col-@{class}-pull-@{index} { + right: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { + .col-@{class}-pull-0 { + right: auto; + } +} +.calc-grid-column(@index, @class, @type) when (@type = offset) { + .col-@{class}-offset-@{index} { + margin-left: percentage((@index / @grid-columns)); + } +} + +// Basic looping in LESS +.loop-grid-columns(@index, @class, @type) when (@index >= 0) { + .calc-grid-column(@index, @class, @type); + // next iteration + .loop-grid-columns((@index - 1), @class, @type); +} + +// Create grid for specific class +.make-grid(@class) { + .float-grid-columns(@class); + .loop-grid-columns(@grid-columns, @class, width); + .loop-grid-columns(@grid-columns, @class, pull); + .loop-grid-columns(@grid-columns, @class, push); + .loop-grid-columns(@grid-columns, @class, offset); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid.less new file mode 100644 index 00000000..df496d0b --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/grid.less @@ -0,0 +1,122 @@ +// Grid system +// +// Generate semantic grid columns with these mixins. + +// Centered container element +.container-fixed(@gutter: @grid-gutter-width) { + margin-right: auto; + margin-left: auto; + padding-left: floor((@gutter / 2)); + padding-right: ceil((@gutter / 2)); + &:extend(.clearfix all); +} + +// Creates a wrapper for a series of columns +.make-row(@gutter: @grid-gutter-width) { + margin-left: ceil((@gutter / -2)); + margin-right: floor((@gutter / -2)); + &:extend(.clearfix all); +} + +// Generate the extra small columns +.make-xs-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + float: left; + width: percentage((@columns / @grid-columns)); + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); +} +.make-xs-column-offset(@columns) { + margin-left: percentage((@columns / @grid-columns)); +} +.make-xs-column-push(@columns) { + left: percentage((@columns / @grid-columns)); +} +.make-xs-column-pull(@columns) { + right: percentage((@columns / @grid-columns)); +} + +// Generate the small columns +.make-sm-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-sm-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-offset(@columns) { + @media (min-width: @screen-sm-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-push(@columns) { + @media (min-width: @screen-sm-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-pull(@columns) { + @media (min-width: @screen-sm-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium columns +.make-md-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-md-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-md-column-offset(@columns) { + @media (min-width: @screen-md-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-push(@columns) { + @media (min-width: @screen-md-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-pull(@columns) { + @media (min-width: @screen-md-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the large columns +.make-lg-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-lg-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-offset(@columns) { + @media (min-width: @screen-lg-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-push(@columns) { + @media (min-width: @screen-lg-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-pull(@columns) { + @media (min-width: @screen-lg-min) { + right: percentage((@columns / @grid-columns)); + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/hide-text.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/hide-text.less new file mode 100644 index 00000000..2bb84a3b --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/hide-text.less @@ -0,0 +1,21 @@ +// CSS image replacement +// +// Heads up! v3 launched with only `.hide-text()`, but per our pattern for +// mixins being reused as classes with the same name, this doesn't hold up. As +// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. +// +// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 + +// Deprecated as of v3.0.1 (has been removed in v4) +.hide-text() { + font: ~"0/0" a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +// New mixin to use as of v3.0.1 +.text-hide() { + .hide-text(); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/image.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/image.less new file mode 100644 index 00000000..f233cb3e --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/image.less @@ -0,0 +1,33 @@ +// Image Mixins +// - Responsive image +// - Retina image + + +// Responsive image +// +// Keep images from scaling beyond the width of their parents. +.img-responsive(@display: block) { + display: @display; + max-width: 100%; // Part 1: Set a maximum relative to the parent + height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching +} + + +// Retina image +// +// Short retina mixin for setting background-image and -size. Note that the +// spelling of `min--moz-device-pixel-ratio` is intentional. +.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { + background-image: url("@{file-1x}"); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url("@{file-2x}"); + background-size: @width-1x @height-1x; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/labels.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/labels.less new file mode 100644 index 00000000..9f7a67ee --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/labels.less @@ -0,0 +1,12 @@ +// Labels + +.label-variant(@color) { + background-color: @color; + + &[href] { + &:hover, + &:focus { + background-color: darken(@color, 10%); + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/list-group.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/list-group.less new file mode 100644 index 00000000..03aa1906 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/list-group.less @@ -0,0 +1,30 @@ +// List Groups + +.list-group-item-variant(@state; @background; @color) { + .list-group-item-@{state} { + color: @color; + background-color: @background; + + a&, + button& { + color: @color; + + .list-group-item-heading { + color: inherit; + } + + &:hover, + &:focus { + color: @color; + background-color: darken(@background, 5%); + } + &.active, + &.active:hover, + &.active:focus { + color: #fff; + background-color: @color; + border-color: @color; + } + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-divider.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-divider.less new file mode 100644 index 00000000..feb1e9ed --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-divider.less @@ -0,0 +1,10 @@ +// Horizontal dividers +// +// Dividers (basically an hr) within dropdowns and nav lists + +.nav-divider(@color: #e5e5e5) { + height: 1px; + margin: ((@line-height-computed / 2) - 1) 0; + overflow: hidden; + background-color: @color; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-vertical-align.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-vertical-align.less new file mode 100644 index 00000000..d458c786 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/nav-vertical-align.less @@ -0,0 +1,9 @@ +// Navbar vertical align +// +// Vertically center elements in the navbar. +// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. + +.navbar-vertical-align(@element-height) { + margin-top: ((@navbar-height - @element-height) / 2); + margin-bottom: ((@navbar-height - @element-height) / 2); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/opacity.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/opacity.less new file mode 100644 index 00000000..33ed25ce --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/opacity.less @@ -0,0 +1,8 @@ +// Opacity + +.opacity(@opacity) { + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/pagination.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/pagination.less new file mode 100644 index 00000000..618804f2 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/pagination.less @@ -0,0 +1,24 @@ +// Pagination + +.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + > li { + > a, + > span { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + } + &:first-child { + > a, + > span { + .border-left-radius(@border-radius); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius); + } + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/panels.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/panels.less new file mode 100644 index 00000000..49ee10d4 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/panels.less @@ -0,0 +1,24 @@ +// Panels + +.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { + border-color: @border; + + & > .panel-heading { + color: @heading-text-color; + background-color: @heading-bg-color; + border-color: @heading-border; + + + .panel-collapse > .panel-body { + border-top-color: @border; + } + .badge { + color: @heading-bg-color; + background-color: @heading-text-color; + } + } + & > .panel-footer { + + .panel-collapse > .panel-body { + border-bottom-color: @border; + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/progress-bar.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/progress-bar.less new file mode 100644 index 00000000..f07996a3 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/progress-bar.less @@ -0,0 +1,10 @@ +// Progress bars + +.progress-bar-variant(@color) { + background-color: @color; + + // Deprecated parent class requirement as of v3.2.0 + .progress-striped & { + #gradient > .striped(); + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-filter.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-filter.less new file mode 100644 index 00000000..68cdb5e1 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-filter.less @@ -0,0 +1,8 @@ +// Reset filters for IE +// +// When you need to remove a gradient background, do not forget to use this to reset +// the IE filter for IE9 and below. + +.reset-filter() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-text.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-text.less new file mode 100644 index 00000000..58dd4d19 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/reset-text.less @@ -0,0 +1,18 @@ +.reset-text() { + font-family: @font-family-base; + // We deliberately do NOT reset font-size. + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: @line-height-base; + text-align: left; // Fallback for where `start` is not supported + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/resize.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/resize.less new file mode 100644 index 00000000..3acd3afd --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/resize.less @@ -0,0 +1,6 @@ +// Resize anything + +.resizable(@direction) { + resize: @direction; // Options: horizontal, vertical, both + overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/responsive-visibility.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/responsive-visibility.less new file mode 100644 index 00000000..ecf1e979 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/responsive-visibility.less @@ -0,0 +1,15 @@ +// Responsive utilities + +// +// More easily include all the states for responsive-utilities.less. +.responsive-visibility() { + display: block !important; + table& { display: table !important; } + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} + +.responsive-invisibility() { + display: none !important; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/size.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/size.less new file mode 100644 index 00000000..a8be6508 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/size.less @@ -0,0 +1,10 @@ +// Sizing shortcuts + +.size(@width; @height) { + width: @width; + height: @height; +} + +.square(@size) { + .size(@size; @size); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/tab-focus.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/tab-focus.less new file mode 100644 index 00000000..1f1f05ab --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/tab-focus.less @@ -0,0 +1,9 @@ +// WebKit-style focus + +.tab-focus() { + // Default + outline: thin dotted; + // WebKit + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/table-row.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/table-row.less new file mode 100644 index 00000000..0f287f1a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/table-row.less @@ -0,0 +1,28 @@ +// Tables + +.table-row-variant(@state; @background) { + // Exact selectors below required to override `.table-striped` and prevent + // inheritance to nested tables. + .table > thead > tr, + .table > tbody > tr, + .table > tfoot > tr { + > td.@{state}, + > th.@{state}, + &.@{state} > td, + &.@{state} > th { + background-color: @background; + } + } + + // Hover states for `.table-hover` + // Note: this is not available for cells or rows within `thead` or `tfoot`. + .table-hover > tbody > tr { + > td.@{state}:hover, + > th.@{state}:hover, + &.@{state}:hover > td, + &:hover > .@{state}, + &.@{state}:hover > th { + background-color: darken(@background, 5%); + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-emphasis.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-emphasis.less new file mode 100644 index 00000000..9e8a77a6 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-emphasis.less @@ -0,0 +1,9 @@ +// Typography + +.text-emphasis-variant(@color) { + color: @color; + a&:hover, + a&:focus { + color: darken(@color, 10%); + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-overflow.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-overflow.less new file mode 100644 index 00000000..c11ad2fb --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/text-overflow.less @@ -0,0 +1,8 @@ +// Text overflow +// Requires inline-block or block for proper styling + +.text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/vendor-prefixes.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/vendor-prefixes.less new file mode 100644 index 00000000..2b5e74b9 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/mixins/vendor-prefixes.less @@ -0,0 +1,227 @@ +// Vendor Prefixes +// +// All vendor mixins are deprecated as of v3.2.0 due to the introduction of +// Autoprefixer in our Gruntfile. They have been removed in v4. + +// - Animations +// - Backface visibility +// - Box shadow +// - Box sizing +// - Content columns +// - Hyphens +// - Placeholder text +// - Transformations +// - Transitions +// - User Select + + +// Animations +.animation(@animation) { + -webkit-animation: @animation; + -o-animation: @animation; + animation: @animation; +} +.animation-name(@name) { + -webkit-animation-name: @name; + animation-name: @name; +} +.animation-duration(@duration) { + -webkit-animation-duration: @duration; + animation-duration: @duration; +} +.animation-timing-function(@timing-function) { + -webkit-animation-timing-function: @timing-function; + animation-timing-function: @timing-function; +} +.animation-delay(@delay) { + -webkit-animation-delay: @delay; + animation-delay: @delay; +} +.animation-iteration-count(@iteration-count) { + -webkit-animation-iteration-count: @iteration-count; + animation-iteration-count: @iteration-count; +} +.animation-direction(@direction) { + -webkit-animation-direction: @direction; + animation-direction: @direction; +} +.animation-fill-mode(@fill-mode) { + -webkit-animation-fill-mode: @fill-mode; + animation-fill-mode: @fill-mode; +} + +// Backface visibility +// Prevent browsers from flickering when using CSS 3D transforms. +// Default value is `visible`, but can be changed to `hidden` + +.backface-visibility(@visibility) { + -webkit-backface-visibility: @visibility; + -moz-backface-visibility: @visibility; + backface-visibility: @visibility; +} + +// Drop shadows +// +// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's +// supported browsers that have box shadow capabilities now support it. + +.box-shadow(@shadow) { + -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 + box-shadow: @shadow; +} + +// Box sizing +.box-sizing(@boxmodel) { + -webkit-box-sizing: @boxmodel; + -moz-box-sizing: @boxmodel; + box-sizing: @boxmodel; +} + +// CSS3 Content Columns +.content-columns(@column-count; @column-gap: @grid-gutter-width) { + -webkit-column-count: @column-count; + -moz-column-count: @column-count; + column-count: @column-count; + -webkit-column-gap: @column-gap; + -moz-column-gap: @column-gap; + column-gap: @column-gap; +} + +// Optional hyphenation +.hyphens(@mode: auto) { + word-wrap: break-word; + -webkit-hyphens: @mode; + -moz-hyphens: @mode; + -ms-hyphens: @mode; // IE10+ + -o-hyphens: @mode; + hyphens: @mode; +} + +// Placeholder text +.placeholder(@color: @input-color-placeholder) { + // Firefox + &::-moz-placeholder { + color: @color; + opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526 + } + &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: @color; } // Safari and Chrome +} + +// Transformations +.scale(@ratio) { + -webkit-transform: scale(@ratio); + -ms-transform: scale(@ratio); // IE9 only + -o-transform: scale(@ratio); + transform: scale(@ratio); +} +.scale(@ratioX; @ratioY) { + -webkit-transform: scale(@ratioX, @ratioY); + -ms-transform: scale(@ratioX, @ratioY); // IE9 only + -o-transform: scale(@ratioX, @ratioY); + transform: scale(@ratioX, @ratioY); +} +.scaleX(@ratio) { + -webkit-transform: scaleX(@ratio); + -ms-transform: scaleX(@ratio); // IE9 only + -o-transform: scaleX(@ratio); + transform: scaleX(@ratio); +} +.scaleY(@ratio) { + -webkit-transform: scaleY(@ratio); + -ms-transform: scaleY(@ratio); // IE9 only + -o-transform: scaleY(@ratio); + transform: scaleY(@ratio); +} +.skew(@x; @y) { + -webkit-transform: skewX(@x) skewY(@y); + -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ + -o-transform: skewX(@x) skewY(@y); + transform: skewX(@x) skewY(@y); +} +.translate(@x; @y) { + -webkit-transform: translate(@x, @y); + -ms-transform: translate(@x, @y); // IE9 only + -o-transform: translate(@x, @y); + transform: translate(@x, @y); +} +.translate3d(@x; @y; @z) { + -webkit-transform: translate3d(@x, @y, @z); + transform: translate3d(@x, @y, @z); +} +.rotate(@degrees) { + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); // IE9 only + -o-transform: rotate(@degrees); + transform: rotate(@degrees); +} +.rotateX(@degrees) { + -webkit-transform: rotateX(@degrees); + -ms-transform: rotateX(@degrees); // IE9 only + -o-transform: rotateX(@degrees); + transform: rotateX(@degrees); +} +.rotateY(@degrees) { + -webkit-transform: rotateY(@degrees); + -ms-transform: rotateY(@degrees); // IE9 only + -o-transform: rotateY(@degrees); + transform: rotateY(@degrees); +} +.perspective(@perspective) { + -webkit-perspective: @perspective; + -moz-perspective: @perspective; + perspective: @perspective; +} +.perspective-origin(@perspective) { + -webkit-perspective-origin: @perspective; + -moz-perspective-origin: @perspective; + perspective-origin: @perspective; +} +.transform-origin(@origin) { + -webkit-transform-origin: @origin; + -moz-transform-origin: @origin; + -ms-transform-origin: @origin; // IE9 only + transform-origin: @origin; +} + + +// Transitions + +.transition(@transition) { + -webkit-transition: @transition; + -o-transition: @transition; + transition: @transition; +} +.transition-property(@transition-property) { + -webkit-transition-property: @transition-property; + transition-property: @transition-property; +} +.transition-delay(@transition-delay) { + -webkit-transition-delay: @transition-delay; + transition-delay: @transition-delay; +} +.transition-duration(@transition-duration) { + -webkit-transition-duration: @transition-duration; + transition-duration: @transition-duration; +} +.transition-timing-function(@timing-function) { + -webkit-transition-timing-function: @timing-function; + transition-timing-function: @timing-function; +} +.transition-transform(@transition) { + -webkit-transition: -webkit-transform @transition; + -moz-transition: -moz-transform @transition; + -o-transition: -o-transform @transition; + transition: transform @transition; +} + + +// User select +// For selecting text on the page + +.user-select(@select) { + -webkit-user-select: @select; + -moz-user-select: @select; + -ms-user-select: @select; // IE10+ + user-select: @select; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/modals.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/modals.less new file mode 100644 index 00000000..767ce36b --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/modals.less @@ -0,0 +1,150 @@ +// +// Modals +// -------------------------------------------------- + +// .modal-open - body class for killing the scroll +// .modal - container to scroll within +// .modal-dialog - positioning shell for the actual modal +// .modal-content - actual modal w/ bg and corners and shit + +// Kill the scroll on the body +.modal-open { + overflow: hidden; +} + +// Container that the modal scrolls within +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: @zindex-modal; + -webkit-overflow-scrolling: touch; + + // Prevent Chrome on Windows from adding a focus outline. For details, see + // https://github.com/twbs/bootstrap/pull/10951. + outline: 0; + + // When fading in the modal, animate it to slide down + &.fade .modal-dialog { + .translate(0, -25%); + .transition-transform(~"0.3s ease-out"); + } + &.in .modal-dialog { .translate(0, 0) } +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +// Shell div to position the modal with bottom padding +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +// Actual modal +.modal-content { + position: relative; + background-color: @modal-content-bg; + border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) + border: 1px solid @modal-content-border-color; + border-radius: @border-radius-large; + .box-shadow(0 3px 9px rgba(0,0,0,.5)); + background-clip: padding-box; + // Remove focus outline from opened modal + outline: 0; +} + +// Modal background +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: @zindex-modal-background; + background-color: @modal-backdrop-bg; + // Fade for backdrop + &.fade { .opacity(0); } + &.in { .opacity(@modal-backdrop-opacity); } +} + +// Modal header +// Top section of the modal w/ title and dismiss +.modal-header { + padding: @modal-title-padding; + border-bottom: 1px solid @modal-header-border-color; + &:extend(.clearfix all); +} +// Close icon +.modal-header .close { + margin-top: -2px; +} + +// Title text within header +.modal-title { + margin: 0; + line-height: @modal-title-line-height; +} + +// Modal body +// Where all modal content resides (sibling of .modal-header and .modal-footer) +.modal-body { + position: relative; + padding: @modal-inner-padding; +} + +// Footer (for actions) +.modal-footer { + padding: @modal-inner-padding; + text-align: right; // right align buttons + border-top: 1px solid @modal-footer-border-color; + &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons + + // Properly space out buttons + .btn + .btn { + margin-left: 5px; + margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs + } + // but override that for button groups + .btn-group .btn + .btn { + margin-left: -1px; + } + // and override it for block buttons as well + .btn-block + .btn-block { + margin-left: 0; + } +} + +// Measure scrollbar width for padding body during modal show/hide +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +// Scale up the modal +@media (min-width: @screen-sm-min) { + // Automatically set modal's width for larger viewports + .modal-dialog { + width: @modal-md; + margin: 30px auto; + } + .modal-content { + .box-shadow(0 5px 15px rgba(0,0,0,.5)); + } + + // Modal sizes + .modal-sm { width: @modal-sm; } +} + +@media (min-width: @screen-md-min) { + .modal-lg { width: @modal-lg; } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navbar.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navbar.less new file mode 100644 index 00000000..6d751bb9 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navbar.less @@ -0,0 +1,660 @@ +// +// Navbars +// -------------------------------------------------- + + +// Wrapper and base class +// +// Provide a static navbar from which we expand to create full-width, fixed, and +// other navbar variations. + +.navbar { + position: relative; + min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) + margin-bottom: @navbar-margin-bottom; + border: 1px solid transparent; + + // Prevent floats from breaking the navbar + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + border-radius: @navbar-border-radius; + } +} + + +// Navbar heading +// +// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy +// styling of responsive aspects. + +.navbar-header { + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + float: left; + } +} + + +// Navbar collapse (body) +// +// Group your navbar content into this for easy collapsing and expanding across +// various device sizes. By default, this content is collapsed when <768px, but +// will expand past that for a horizontal display. +// +// To start (on mobile devices) the navbar links, forms, and buttons are stacked +// vertically and include a `max-height` to overflow in case you have too much +// content for the user's viewport. + +.navbar-collapse { + overflow-x: visible; + padding-right: @navbar-padding-horizontal; + padding-left: @navbar-padding-horizontal; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255,255,255,.1); + &:extend(.clearfix all); + -webkit-overflow-scrolling: touch; + + &.in { + overflow-y: auto; + } + + @media (min-width: @grid-float-breakpoint) { + width: auto; + border-top: 0; + box-shadow: none; + + &.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; // Override default setting + overflow: visible !important; + } + + &.in { + overflow-y: visible; + } + + // Undo the collapse side padding for navbars with containers to ensure + // alignment of right-aligned contents. + .navbar-fixed-top &, + .navbar-static-top &, + .navbar-fixed-bottom & { + padding-left: 0; + padding-right: 0; + } + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + .navbar-collapse { + max-height: @navbar-collapse-max-height; + + @media (max-device-width: @screen-xs-min) and (orientation: landscape) { + max-height: 200px; + } + } +} + + +// Both navbar header and collapse +// +// When a container is present, change the behavior of the header and collapse. + +.container, +.container-fluid { + > .navbar-header, + > .navbar-collapse { + margin-right: -@navbar-padding-horizontal; + margin-left: -@navbar-padding-horizontal; + + @media (min-width: @grid-float-breakpoint) { + margin-right: 0; + margin-left: 0; + } + } +} + + +// +// Navbar alignment options +// +// Display the navbar across the entirety of the page or fixed it to the top or +// bottom of the page. + +// Static top (unfixed, but 100% wide) navbar +.navbar-static-top { + z-index: @zindex-navbar; + border-width: 0 0 1px; + + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} + +// Fix the top/bottom navbars when screen real estate supports it +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: @zindex-navbar-fixed; + + // Undo the rounded corners + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; // override .navbar defaults + border-width: 1px 0 0; +} + + +// Brand/project name + +.navbar-brand { + float: left; + padding: @navbar-padding-vertical @navbar-padding-horizontal; + font-size: @font-size-large; + line-height: @line-height-computed; + height: @navbar-height; + + &:hover, + &:focus { + text-decoration: none; + } + + > img { + display: block; + } + + @media (min-width: @grid-float-breakpoint) { + .navbar > .container &, + .navbar > .container-fluid & { + margin-left: -@navbar-padding-horizontal; + } + } +} + + +// Navbar toggle +// +// Custom button for toggling the `.navbar-collapse`, powered by the collapse +// JavaScript plugin. + +.navbar-toggle { + position: relative; + float: right; + margin-right: @navbar-padding-horizontal; + padding: 9px 10px; + .navbar-vertical-align(34px); + background-color: transparent; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + border-radius: @border-radius-base; + + // We remove the `outline` here, but later compensate by attaching `:hover` + // styles to `:focus`. + &:focus { + outline: 0; + } + + // Bars + .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; + } + .icon-bar + .icon-bar { + margin-top: 4px; + } + + @media (min-width: @grid-float-breakpoint) { + display: none; + } +} + + +// Navbar nav links +// +// Builds on top of the `.nav` components with its own modifier class to make +// the nav the full height of the horizontal nav (above 768px). + +.navbar-nav { + margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal; + + > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: @line-height-computed; + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + > li > a, + .dropdown-header { + padding: 5px 15px 5px 25px; + } + > li > a { + line-height: @line-height-computed; + &:hover, + &:focus { + background-image: none; + } + } + } + } + + // Uncollapse the nav + @media (min-width: @grid-float-breakpoint) { + float: left; + margin: 0; + + > li { + float: left; + > a { + padding-top: @navbar-padding-vertical; + padding-bottom: @navbar-padding-vertical; + } + } + } +} + + +// Navbar form +// +// Extension of the `.form-inline` with some extra flavor for optimum display in +// our navbars. + +.navbar-form { + margin-left: -@navbar-padding-horizontal; + margin-right: -@navbar-padding-horizontal; + padding: 10px @navbar-padding-horizontal; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); + + // Mixin behavior for optimum display + .form-inline(); + + .form-group { + @media (max-width: @grid-float-breakpoint-max) { + margin-bottom: 5px; + + &:last-child { + margin-bottom: 0; + } + } + } + + // Vertically center in expanded, horizontal navbar + .navbar-vertical-align(@input-height-base); + + // Undo 100% width for pull classes + @media (min-width: @grid-float-breakpoint) { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + .box-shadow(none); + } +} + + +// Dropdown menus + +// Menu position and menu carets +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + .border-top-radius(0); +} +// Menu position and menu caret support for dropups via extra dropup class +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + .border-top-radius(@navbar-border-radius); + .border-bottom-radius(0); +} + + +// Buttons in navbars +// +// Vertically center a button within a navbar (when *not* in a form). + +.navbar-btn { + .navbar-vertical-align(@input-height-base); + + &.btn-sm { + .navbar-vertical-align(@input-height-small); + } + &.btn-xs { + .navbar-vertical-align(22); + } +} + + +// Text in navbars +// +// Add a class to make any element properly align itself vertically within the navbars. + +.navbar-text { + .navbar-vertical-align(@line-height-computed); + + @media (min-width: @grid-float-breakpoint) { + float: left; + margin-left: @navbar-padding-horizontal; + margin-right: @navbar-padding-horizontal; + } +} + + +// Component alignment +// +// Repurpose the pull utilities as their own navbar utilities to avoid specificity +// issues with parents and chaining. Only do this when the navbar is uncollapsed +// though so that navbar contents properly stack and align in mobile. +// +// Declared after the navbar components to ensure more specificity on the margins. + +@media (min-width: @grid-float-breakpoint) { + .navbar-left { .pull-left(); } + .navbar-right { + .pull-right(); + margin-right: -@navbar-padding-horizontal; + + ~ .navbar-right { + margin-right: 0; + } + } +} + + +// Alternate navbars +// -------------------------------------------------- + +// Default navbar +.navbar-default { + background-color: @navbar-default-bg; + border-color: @navbar-default-border; + + .navbar-brand { + color: @navbar-default-brand-color; + &:hover, + &:focus { + color: @navbar-default-brand-hover-color; + background-color: @navbar-default-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-default-color; + } + + .navbar-nav { + > li > a { + color: @navbar-default-link-color; + + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + + .navbar-toggle { + border-color: @navbar-default-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-default-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-default-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: @navbar-default-border; + } + + // Dropdown menu items + .navbar-nav { + // Remove background color from open dropdown + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-default-link-active-bg; + color: @navbar-default-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + > li > a { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + } + } + + + // Links in navbars + // + // Add a class to ensure links outside the navbar nav are colored correctly. + + .navbar-link { + color: @navbar-default-link-color; + &:hover { + color: @navbar-default-link-hover-color; + } + } + + .btn-link { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + } + } + } +} + +// Inverse navbar + +.navbar-inverse { + background-color: @navbar-inverse-bg; + border-color: @navbar-inverse-border; + + .navbar-brand { + color: @navbar-inverse-brand-color; + &:hover, + &:focus { + color: @navbar-inverse-brand-hover-color; + background-color: @navbar-inverse-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-inverse-color; + } + + .navbar-nav { + > li > a { + color: @navbar-inverse-link-color; + + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + + // Darken the responsive nav toggle + .navbar-toggle { + border-color: @navbar-inverse-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-inverse-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-inverse-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: darken(@navbar-inverse-bg, 7%); + } + + // Dropdowns + .navbar-nav { + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-inverse-link-active-bg; + color: @navbar-inverse-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display + .open .dropdown-menu { + > .dropdown-header { + border-color: @navbar-inverse-border; + } + .divider { + background-color: @navbar-inverse-border; + } + > li > a { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + } + } + + .navbar-link { + color: @navbar-inverse-link-color; + &:hover { + color: @navbar-inverse-link-hover-color; + } + } + + .btn-link { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + } + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navs.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navs.less new file mode 100644 index 00000000..a3d11b13 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/navs.less @@ -0,0 +1,242 @@ +// +// Navs +// -------------------------------------------------- + + +// Base class +// -------------------------------------------------- + +.nav { + margin-bottom: 0; + padding-left: 0; // Override default ul/ol + list-style: none; + &:extend(.clearfix all); + + > li { + position: relative; + display: block; + + > a { + position: relative; + display: block; + padding: @nav-link-padding; + &:hover, + &:focus { + text-decoration: none; + background-color: @nav-link-hover-bg; + } + } + + // Disabled state sets text to gray and nukes hover/tab effects + &.disabled > a { + color: @nav-disabled-link-color; + + &:hover, + &:focus { + color: @nav-disabled-link-hover-color; + text-decoration: none; + background-color: transparent; + cursor: @cursor-disabled; + } + } + } + + // Open dropdowns + .open > a { + &, + &:hover, + &:focus { + background-color: @nav-link-hover-bg; + border-color: @link-color; + } + } + + // Nav dividers (deprecated with v3.0.1) + // + // This should have been removed in v3 with the dropping of `.nav-list`, but + // we missed it. We don't currently support this anywhere, but in the interest + // of maintaining backward compatibility in case you use it, it's deprecated. + .nav-divider { + .nav-divider(); + } + + // Prevent IE8 from misplacing imgs + // + // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 + > li > a > img { + max-width: none; + } +} + + +// Tabs +// ------------------------- + +// Give the tabs something to sit on +.nav-tabs { + border-bottom: 1px solid @nav-tabs-border-color; + > li { + float: left; + // Make the list-items overlay the bottom border + margin-bottom: -1px; + + // Actual tabs (as links) + > a { + margin-right: 2px; + line-height: @line-height-base; + border: 1px solid transparent; + border-radius: @border-radius-base @border-radius-base 0 0; + &:hover { + border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color; + } + } + + // Active state, and its :hover to override normal :hover + &.active > a { + &, + &:hover, + &:focus { + color: @nav-tabs-active-link-hover-color; + background-color: @nav-tabs-active-link-hover-bg; + border: 1px solid @nav-tabs-active-link-hover-border-color; + border-bottom-color: transparent; + cursor: default; + } + } + } + // pulling this in mainly for less shorthand + &.nav-justified { + .nav-justified(); + .nav-tabs-justified(); + } +} + + +// Pills +// ------------------------- +.nav-pills { + > li { + float: left; + + // Links rendered as pills + > a { + border-radius: @nav-pills-border-radius; + } + + li { + margin-left: 2px; + } + + // Active state + &.active > a { + &, + &:hover, + &:focus { + color: @nav-pills-active-link-hover-color; + background-color: @nav-pills-active-link-hover-bg; + } + } + } +} + + +// Stacked pills +.nav-stacked { + > li { + float: none; + + li { + margin-top: 2px; + margin-left: 0; // no need for this gap between nav items + } + } +} + + +// Nav variations +// -------------------------------------------------- + +// Justified nav links +// ------------------------- + +.nav-justified { + width: 100%; + + > li { + float: none; + > a { + text-align: center; + margin-bottom: 5px; + } + } + + > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + + @media (min-width: @screen-sm-min) { + > li { + display: table-cell; + width: 1%; + > a { + margin-bottom: 0; + } + } + } +} + +// Move borders to anchors instead of bottom of list +// +// Mixin for adding on top the shared `.nav-justified` styles for our tabs +.nav-tabs-justified { + border-bottom: 0; + + > li > a { + // Override margin from .nav-tabs + margin-right: 0; + border-radius: @border-radius-base; + } + + > .active > a, + > .active > a:hover, + > .active > a:focus { + border: 1px solid @nav-tabs-justified-link-border-color; + } + + @media (min-width: @screen-sm-min) { + > li > a { + border-bottom: 1px solid @nav-tabs-justified-link-border-color; + border-radius: @border-radius-base @border-radius-base 0 0; + } + > .active > a, + > .active > a:hover, + > .active > a:focus { + border-bottom-color: @nav-tabs-justified-active-link-border-color; + } + } +} + + +// Tabbable tabs +// ------------------------- + +// Hide tabbable panes to start, show them when `.active` +.tab-content { + > .tab-pane { + display: none; + } + > .active { + display: block; + } +} + + +// Dropdowns +// ------------------------- + +// Specific dropdowns +.nav-tabs .dropdown-menu { + // make dropdown border overlap tab border + margin-top: -1px; + // Remove the top rounded corners here since there is a hard edge above the menu + .border-top-radius(0); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/normalize.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/normalize.less new file mode 100644 index 00000000..9dddf73a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/normalize.less @@ -0,0 +1,424 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +// +// 1. Set default font family to sans-serif. +// 2. Prevent iOS and IE text size adjust after device orientation change, +// without disabling user zoom. +// + +html { + font-family: sans-serif; // 1 + -ms-text-size-adjust: 100%; // 2 + -webkit-text-size-adjust: 100%; // 2 +} + +// +// Remove default margin. +// + +body { + margin: 0; +} + +// HTML5 display definitions +// ========================================================================== + +// +// Correct `block` display not defined for any HTML5 element in IE 8/9. +// Correct `block` display not defined for `details` or `summary` in IE 10/11 +// and Firefox. +// Correct `block` display not defined for `main` in IE 11. +// + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +// +// 1. Correct `inline-block` display not defined in IE 8/9. +// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. +// + +audio, +canvas, +progress, +video { + display: inline-block; // 1 + vertical-align: baseline; // 2 +} + +// +// Prevent modern browsers from displaying `audio` without controls. +// Remove excess height in iOS 5 devices. +// + +audio:not([controls]) { + display: none; + height: 0; +} + +// +// Address `[hidden]` styling not present in IE 8/9/10. +// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. +// + +[hidden], +template { + display: none; +} + +// Links +// ========================================================================== + +// +// Remove the gray background color from active links in IE 10. +// + +a { + background-color: transparent; +} + +// +// Improve readability of focused elements when they are also in an +// active/hover state. +// + +a:active, +a:hover { + outline: 0; +} + +// Text-level semantics +// ========================================================================== + +// +// Address styling not present in IE 8/9/10/11, Safari, and Chrome. +// + +abbr[title] { + border-bottom: 1px dotted; +} + +// +// Address style set to `bolder` in Firefox 4+, Safari, and Chrome. +// + +b, +strong { + font-weight: bold; +} + +// +// Address styling not present in Safari and Chrome. +// + +dfn { + font-style: italic; +} + +// +// Address variable `h1` font-size and margin within `section` and `article` +// contexts in Firefox 4+, Safari, and Chrome. +// + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +// +// Address styling not present in IE 8/9. +// + +mark { + background: #ff0; + color: #000; +} + +// +// Address inconsistent and variable font size in all browsers. +// + +small { + font-size: 80%; +} + +// +// Prevent `sub` and `sup` affecting `line-height` in all browsers. +// + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +// Embedded content +// ========================================================================== + +// +// Remove border when inside `a` element in IE 8/9/10. +// + +img { + border: 0; +} + +// +// Correct overflow not hidden in IE 9/10/11. +// + +svg:not(:root) { + overflow: hidden; +} + +// Grouping content +// ========================================================================== + +// +// Address margin not present in IE 8/9 and Safari. +// + +figure { + margin: 1em 40px; +} + +// +// Address differences between Firefox and other browsers. +// + +hr { + box-sizing: content-box; + height: 0; +} + +// +// Contain overflow in all browsers. +// + +pre { + overflow: auto; +} + +// +// Address odd `em`-unit font size rendering in all browsers. +// + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +// Forms +// ========================================================================== + +// +// Known limitation: by default, Chrome and Safari on OS X allow very limited +// styling of `select`, unless a `border` property is set. +// + +// +// 1. Correct color not being inherited. +// Known issue: affects color of disabled elements. +// 2. Correct font properties not being inherited. +// 3. Address margins set differently in Firefox 4+, Safari, and Chrome. +// + +button, +input, +optgroup, +select, +textarea { + color: inherit; // 1 + font: inherit; // 2 + margin: 0; // 3 +} + +// +// Address `overflow` set to `hidden` in IE 8/9/10/11. +// + +button { + overflow: visible; +} + +// +// Address inconsistent `text-transform` inheritance for `button` and `select`. +// All other form control elements do not inherit `text-transform` values. +// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. +// Correct `select` style inheritance in Firefox. +// + +button, +select { + text-transform: none; +} + +// +// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` +// and `video` controls. +// 2. Correct inability to style clickable `input` types in iOS. +// 3. Improve usability and consistency of cursor style between image-type +// `input` and others. +// + +button, +html input[type="button"], // 1 +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; // 2 + cursor: pointer; // 3 +} + +// +// Re-set default cursor for disabled elements. +// + +button[disabled], +html input[disabled] { + cursor: default; +} + +// +// Remove inner padding and border in Firefox 4+. +// + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +// +// Address Firefox 4+ setting `line-height` on `input` using `!important` in +// the UA stylesheet. +// + +input { + line-height: normal; +} + +// +// It's recommended that you don't attempt to style these elements. +// Firefox's implementation doesn't respect box-sizing, padding, or width. +// +// 1. Address box sizing set to `content-box` in IE 8/9/10. +// 2. Remove excess padding in IE 8/9/10. +// + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; // 1 + padding: 0; // 2 +} + +// +// Fix the cursor style for Chrome's increment/decrement buttons. For certain +// `font-size` values of the `input`, it causes the cursor style of the +// decrement button to change from `default` to `text`. +// + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +// +// 1. Address `appearance` set to `searchfield` in Safari and Chrome. +// 2. Address `box-sizing` set to `border-box` in Safari and Chrome. +// + +input[type="search"] { + -webkit-appearance: textfield; // 1 + box-sizing: content-box; //2 +} + +// +// Remove inner padding and search cancel button in Safari and Chrome on OS X. +// Safari (but not Chrome) clips the cancel button when the search input has +// padding (and `textfield` appearance). +// + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +// +// Define consistent border, margin, and padding. +// + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +// +// 1. Correct `color` not being inherited in IE 8/9/10/11. +// 2. Remove padding so people aren't caught out if they zero out fieldsets. +// + +legend { + border: 0; // 1 + padding: 0; // 2 +} + +// +// Remove default vertical scrollbar in IE 8/9/10/11. +// + +textarea { + overflow: auto; +} + +// +// Don't inherit the `font-weight` (applied by a rule above). +// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. +// + +optgroup { + font-weight: bold; +} + +// Tables +// ========================================================================== + +// +// Remove most spacing between table cells. +// + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pager.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pager.less new file mode 100644 index 00000000..41abaaad --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pager.less @@ -0,0 +1,54 @@ +// +// Pager pagination +// -------------------------------------------------- + + +.pager { + padding-left: 0; + margin: @line-height-computed 0; + list-style: none; + text-align: center; + &:extend(.clearfix all); + li { + display: inline; + > a, + > span { + display: inline-block; + padding: 5px 14px; + background-color: @pager-bg; + border: 1px solid @pager-border; + border-radius: @pager-border-radius; + } + + > a:hover, + > a:focus { + text-decoration: none; + background-color: @pager-hover-bg; + } + } + + .next { + > a, + > span { + float: right; + } + } + + .previous { + > a, + > span { + float: left; + } + } + + .disabled { + > a, + > a:hover, + > a:focus, + > span { + color: @pager-disabled-color; + background-color: @pager-bg; + cursor: @cursor-disabled; + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pagination.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pagination.less new file mode 100644 index 00000000..31f77aae --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/pagination.less @@ -0,0 +1,89 @@ +// +// Pagination (multiple pages) +// -------------------------------------------------- +.pagination { + display: inline-block; + padding-left: 0; + margin: @line-height-computed 0; + border-radius: @border-radius-base; + + > li { + display: inline; // Remove list-style and block-level defaults + > a, + > span { + position: relative; + float: left; // Collapse white-space + padding: @padding-base-vertical @padding-base-horizontal; + line-height: @line-height-base; + text-decoration: none; + color: @pagination-color; + background-color: @pagination-bg; + border: 1px solid @pagination-border; + margin-left: -1px; + } + &:first-child { + > a, + > span { + margin-left: 0; + .border-left-radius(@border-radius-base); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-base); + } + } + } + + > li > a, + > li > span { + &:hover, + &:focus { + z-index: 2; + color: @pagination-hover-color; + background-color: @pagination-hover-bg; + border-color: @pagination-hover-border; + } + } + + > .active > a, + > .active > span { + &, + &:hover, + &:focus { + z-index: 3; + color: @pagination-active-color; + background-color: @pagination-active-bg; + border-color: @pagination-active-border; + cursor: default; + } + } + + > .disabled { + > span, + > span:hover, + > span:focus, + > a, + > a:hover, + > a:focus { + color: @pagination-disabled-color; + background-color: @pagination-disabled-bg; + border-color: @pagination-disabled-border; + cursor: @cursor-disabled; + } + } +} + +// Sizing +// -------------------------------------------------- + +// Large +.pagination-lg { + .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} + +// Small +.pagination-sm { + .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/panels.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/panels.less new file mode 100644 index 00000000..425eb5e6 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/panels.less @@ -0,0 +1,271 @@ +// +// Panels +// -------------------------------------------------- + + +// Base class +.panel { + margin-bottom: @line-height-computed; + background-color: @panel-bg; + border: 1px solid transparent; + border-radius: @panel-border-radius; + .box-shadow(0 1px 1px rgba(0,0,0,.05)); +} + +// Panel contents +.panel-body { + padding: @panel-body-padding; + &:extend(.clearfix all); +} + +// Optional heading +.panel-heading { + padding: @panel-heading-padding; + border-bottom: 1px solid transparent; + .border-top-radius((@panel-border-radius - 1)); + + > .dropdown .dropdown-toggle { + color: inherit; + } +} + +// Within heading, strip any `h*` tag of its default margins for spacing. +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: ceil((@font-size-base * 1.125)); + color: inherit; + + > a, + > small, + > .small, + > small > a, + > .small > a { + color: inherit; + } +} + +// Optional footer (stays gray in every modifier class) +.panel-footer { + padding: @panel-footer-padding; + background-color: @panel-footer-bg; + border-top: 1px solid @panel-inner-border; + .border-bottom-radius((@panel-border-radius - 1)); +} + + +// List groups in panels +// +// By default, space out list group content from panel headings to account for +// any kind of custom content between the two. + +.panel { + > .list-group, + > .panel-collapse > .list-group { + margin-bottom: 0; + + .list-group-item { + border-width: 1px 0; + border-radius: 0; + } + + // Add border top radius for first one + &:first-child { + .list-group-item:first-child { + border-top: 0; + .border-top-radius((@panel-border-radius - 1)); + } + } + + // Add border bottom radius for last one + &:last-child { + .list-group-item:last-child { + border-bottom: 0; + .border-bottom-radius((@panel-border-radius - 1)); + } + } + } + > .panel-heading + .panel-collapse > .list-group { + .list-group-item:first-child { + .border-top-radius(0); + } + } +} +// Collapse space between when there's no additional content. +.panel-heading + .list-group { + .list-group-item:first-child { + border-top-width: 0; + } +} +.list-group + .panel-footer { + border-top-width: 0; +} + +// Tables in panels +// +// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and +// watch it go full width. + +.panel { + > .table, + > .table-responsive > .table, + > .panel-collapse > .table { + margin-bottom: 0; + + caption { + padding-left: @panel-body-padding; + padding-right: @panel-body-padding; + } + } + // Add border top radius for first one + > .table:first-child, + > .table-responsive:first-child > .table:first-child { + .border-top-radius((@panel-border-radius - 1)); + + > thead:first-child, + > tbody:first-child { + > tr:first-child { + border-top-left-radius: (@panel-border-radius - 1); + border-top-right-radius: (@panel-border-radius - 1); + + td:first-child, + th:first-child { + border-top-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-top-right-radius: (@panel-border-radius - 1); + } + } + } + } + // Add border bottom radius for last one + > .table:last-child, + > .table-responsive:last-child > .table:last-child { + .border-bottom-radius((@panel-border-radius - 1)); + + > tbody:last-child, + > tfoot:last-child { + > tr:last-child { + border-bottom-left-radius: (@panel-border-radius - 1); + border-bottom-right-radius: (@panel-border-radius - 1); + + td:first-child, + th:first-child { + border-bottom-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-bottom-right-radius: (@panel-border-radius - 1); + } + } + } + } + > .panel-body + .table, + > .panel-body + .table-responsive, + > .table + .panel-body, + > .table-responsive + .panel-body { + border-top: 1px solid @table-border-color; + } + > .table > tbody:first-child > tr:first-child th, + > .table > tbody:first-child > tr:first-child td { + border-top: 0; + } + > .table-bordered, + > .table-responsive > .table-bordered { + border: 0; + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + > thead, + > tbody { + > tr:first-child { + > td, + > th { + border-bottom: 0; + } + } + } + > tbody, + > tfoot { + > tr:last-child { + > td, + > th { + border-bottom: 0; + } + } + } + } + > .table-responsive { + border: 0; + margin-bottom: 0; + } +} + + +// Collapsable panels (aka, accordion) +// +// Wrap a series of panels in `.panel-group` to turn them into an accordion with +// the help of our collapse JavaScript plugin. + +.panel-group { + margin-bottom: @line-height-computed; + + // Tighten up margin so it's only between panels + .panel { + margin-bottom: 0; + border-radius: @panel-border-radius; + + + .panel { + margin-top: 5px; + } + } + + .panel-heading { + border-bottom: 0; + + + .panel-collapse > .panel-body, + + .panel-collapse > .list-group { + border-top: 1px solid @panel-inner-border; + } + } + + .panel-footer { + border-top: 0; + + .panel-collapse .panel-body { + border-bottom: 1px solid @panel-inner-border; + } + } +} + + +// Contextual variations +.panel-default { + .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border); +} +.panel-primary { + .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border); +} +.panel-success { + .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border); +} +.panel-info { + .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border); +} +.panel-warning { + .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border); +} +.panel-danger { + .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/popovers.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/popovers.less new file mode 100644 index 00000000..3a62a645 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/popovers.less @@ -0,0 +1,131 @@ +// +// Popovers +// -------------------------------------------------- + + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: @zindex-popover; + display: none; + max-width: @popover-max-width; + padding: 1px; + // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element. + // So reset our font and text properties to avoid inheriting weird values. + .reset-text(); + font-size: @font-size-base; + + background-color: @popover-bg; + background-clip: padding-box; + border: 1px solid @popover-fallback-border-color; + border: 1px solid @popover-border-color; + border-radius: @border-radius-large; + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + + // Offset the popover to account for the popover arrow + &.top { margin-top: -@popover-arrow-width; } + &.right { margin-left: @popover-arrow-width; } + &.bottom { margin-top: @popover-arrow-width; } + &.left { margin-left: -@popover-arrow-width; } +} + +.popover-title { + margin: 0; // reset heading margin + padding: 8px 14px; + font-size: @font-size-base; + background-color: @popover-title-bg; + border-bottom: 1px solid darken(@popover-title-bg, 5%); + border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +// Arrows +// +// .arrow is outer, .arrow:after is inner + +.popover > .arrow { + &, + &:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } +} +.popover > .arrow { + border-width: @popover-arrow-outer-width; +} +.popover > .arrow:after { + border-width: @popover-arrow-width; + content: ""; +} + +.popover { + &.top > .arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-bottom-width: 0; + border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-top-color: @popover-arrow-outer-color; + bottom: -@popover-arrow-outer-width; + &:after { + content: " "; + bottom: 1px; + margin-left: -@popover-arrow-width; + border-bottom-width: 0; + border-top-color: @popover-arrow-color; + } + } + &.right > .arrow { + top: 50%; + left: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; + border-left-width: 0; + border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-right-color: @popover-arrow-outer-color; + &:after { + content: " "; + left: 1px; + bottom: -@popover-arrow-width; + border-left-width: 0; + border-right-color: @popover-arrow-color; + } + } + &.bottom > .arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-top-width: 0; + border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-bottom-color: @popover-arrow-outer-color; + top: -@popover-arrow-outer-width; + &:after { + content: " "; + top: 1px; + margin-left: -@popover-arrow-width; + border-top-width: 0; + border-bottom-color: @popover-arrow-color; + } + } + + &.left > .arrow { + top: 50%; + right: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; + border-right-width: 0; + border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-left-color: @popover-arrow-outer-color; + &:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: @popover-arrow-color; + bottom: -@popover-arrow-width; + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/print.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/print.less new file mode 100644 index 00000000..66e54ab4 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/print.less @@ -0,0 +1,101 @@ +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ + +// ========================================================================== +// Print styles. +// Inlined to avoid the additional HTTP request: h5bp.com/r +// ========================================================================== + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; // Black prints faster: h5bp.com/s + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + // Don't show links that are fragment identifiers, + // or use the `javascript:` pseudo protocol + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; // h5bp.com/t + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + // Bootstrap specific changes start + + // Bootstrap components + .navbar { + display: none; + } + .btn, + .dropup > .btn { + > .caret { + border-top-color: #000 !important; + } + } + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + + td, + th { + background-color: #fff !important; + } + } + .table-bordered { + th, + td { + border: 1px solid #ddd !important; + } + } + + // Bootstrap specific changes end +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/progress-bars.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/progress-bars.less new file mode 100644 index 00000000..8868a1fe --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/progress-bars.less @@ -0,0 +1,87 @@ +// +// Progress bars +// -------------------------------------------------- + + +// Bar animations +// ------------------------- + +// WebKit +@-webkit-keyframes progress-bar-stripes { + from { background-position: 40px 0; } + to { background-position: 0 0; } +} + +// Spec and IE10+ +@keyframes progress-bar-stripes { + from { background-position: 40px 0; } + to { background-position: 0 0; } +} + + +// Bar itself +// ------------------------- + +// Outer container +.progress { + overflow: hidden; + height: @line-height-computed; + margin-bottom: @line-height-computed; + background-color: @progress-bg; + border-radius: @progress-border-radius; + .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); +} + +// Bar of progress +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: @font-size-small; + line-height: @line-height-computed; + color: @progress-bar-color; + text-align: center; + background-color: @progress-bar-bg; + .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); + .transition(width .6s ease); +} + +// Striped bars +// +// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the +// `.progress-bar-striped` class, which you just add to an existing +// `.progress-bar`. +.progress-striped .progress-bar, +.progress-bar-striped { + #gradient > .striped(); + background-size: 40px 40px; +} + +// Call animation for the active one +// +// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the +// `.progress-bar.active` approach. +.progress.active .progress-bar, +.progress-bar.active { + .animation(progress-bar-stripes 2s linear infinite); +} + + +// Variations +// ------------------------- + +.progress-bar-success { + .progress-bar-variant(@progress-bar-success-bg); +} + +.progress-bar-info { + .progress-bar-variant(@progress-bar-info-bg); +} + +.progress-bar-warning { + .progress-bar-variant(@progress-bar-warning-bg); +} + +.progress-bar-danger { + .progress-bar-variant(@progress-bar-danger-bg); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-embed.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-embed.less new file mode 100644 index 00000000..080a5118 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-embed.less @@ -0,0 +1,35 @@ +// Embeds responsive +// +// Credit: Nicolas Gallagher and SUIT CSS. + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; + + .embed-responsive-item, + iframe, + embed, + object, + video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; + } +} + +// Modifier class for 16:9 aspect ratio +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +// Modifier class for 4:3 aspect ratio +.embed-responsive-4by3 { + padding-bottom: 75%; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-utilities.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-utilities.less new file mode 100644 index 00000000..b1db31d7 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/responsive-utilities.less @@ -0,0 +1,194 @@ +// +// Responsive: Utility classes +// -------------------------------------------------- + + +// IE10 in Windows (Phone) 8 +// +// Support for responsive views via media queries is kind of borked in IE10, for +// Surface/desktop in split view and for Windows Phone 8. This particular fix +// must be accompanied by a snippet of JavaScript to sniff the user agent and +// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at +// our Getting Started page for more information on this bug. +// +// For more information, see the following: +// +// Issue: https://github.com/twbs/bootstrap/issues/10497 +// Docs: http://getbootstrap.com/getting-started/#support-ie10-width +// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ +// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ + +@-ms-viewport { + width: device-width; +} + + +// Visibility utilities +// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + .responsive-invisibility(); +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +.visible-xs { + @media (max-width: @screen-xs-max) { + .responsive-visibility(); + } +} +.visible-xs-block { + @media (max-width: @screen-xs-max) { + display: block !important; + } +} +.visible-xs-inline { + @media (max-width: @screen-xs-max) { + display: inline !important; + } +} +.visible-xs-inline-block { + @media (max-width: @screen-xs-max) { + display: inline-block !important; + } +} + +.visible-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-visibility(); + } +} +.visible-sm-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: block !important; + } +} +.visible-sm-inline { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline !important; + } +} +.visible-sm-inline-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline-block !important; + } +} + +.visible-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-visibility(); + } +} +.visible-md-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: block !important; + } +} +.visible-md-inline { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline !important; + } +} +.visible-md-inline-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline-block !important; + } +} + +.visible-lg { + @media (min-width: @screen-lg-min) { + .responsive-visibility(); + } +} +.visible-lg-block { + @media (min-width: @screen-lg-min) { + display: block !important; + } +} +.visible-lg-inline { + @media (min-width: @screen-lg-min) { + display: inline !important; + } +} +.visible-lg-inline-block { + @media (min-width: @screen-lg-min) { + display: inline-block !important; + } +} + +.hidden-xs { + @media (max-width: @screen-xs-max) { + .responsive-invisibility(); + } +} +.hidden-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-invisibility(); + } +} +.hidden-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-invisibility(); + } +} +.hidden-lg { + @media (min-width: @screen-lg-min) { + .responsive-invisibility(); + } +} + + +// Print utilities +// +// Media queries are placed on the inside to be mixin-friendly. + +// Note: Deprecated .visible-print as of v3.2.0 +.visible-print { + .responsive-invisibility(); + + @media print { + .responsive-visibility(); + } +} +.visible-print-block { + display: none !important; + + @media print { + display: block !important; + } +} +.visible-print-inline { + display: none !important; + + @media print { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; + + @media print { + display: inline-block !important; + } +} + +.hidden-print { + @media print { + .responsive-invisibility(); + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/scaffolding.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/scaffolding.less new file mode 100644 index 00000000..1929bfc5 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/scaffolding.less @@ -0,0 +1,161 @@ +// +// Scaffolding +// -------------------------------------------------- + + +// Reset the box-sizing +// +// Heads up! This reset may cause conflicts with some third-party widgets. +// For recommendations on resolving such conflicts, see +// http://getbootstrap.com/getting-started/#third-box-sizing +* { + .box-sizing(border-box); +} +*:before, +*:after { + .box-sizing(border-box); +} + + +// Body reset + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +body { + font-family: @font-family-base; + font-size: @font-size-base; + line-height: @line-height-base; + color: @text-color; + background-color: @body-bg; +} + +// Reset fonts for relevant elements +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + + +// Links + +a { + color: @link-color; + text-decoration: none; + + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: @link-hover-decoration; + } + + &:focus { + .tab-focus(); + } +} + + +// Figures +// +// We reset this here because previously Normalize had no `figure` margins. This +// ensures we don't break anyone's use of the element. + +figure { + margin: 0; +} + + +// Images + +img { + vertical-align: middle; +} + +// Responsive images (ensure images don't scale beyond their parents) +.img-responsive { + .img-responsive(); +} + +// Rounded corners +.img-rounded { + border-radius: @border-radius-large; +} + +// Image thumbnails +// +// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. +.img-thumbnail { + padding: @thumbnail-padding; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(all .2s ease-in-out); + + // Keep them at most 100% wide + .img-responsive(inline-block); +} + +// Perfect circle +.img-circle { + border-radius: 50%; // set radius in percents +} + + +// Horizontal rules + +hr { + margin-top: @line-height-computed; + margin-bottom: @line-height-computed; + border: 0; + border-top: 1px solid @hr-border; +} + + +// Only display content to screen readers +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// Credit: HTML5 Boilerplate + +.sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} + + +// iOS "clickable elements" fix for role="button" +// +// Fixes "clickability" issue (and more generally, the firing of events such as focus as well) +// for traditionally non-focusable elements with role="button" +// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + +[role="button"] { + cursor: pointer; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tables.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tables.less new file mode 100644 index 00000000..2242c036 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tables.less @@ -0,0 +1,234 @@ +// +// Tables +// -------------------------------------------------- + + +table { + background-color: @table-bg; +} +caption { + padding-top: @table-cell-padding; + padding-bottom: @table-cell-padding; + color: @text-muted; + text-align: left; +} +th { + text-align: left; +} + + +// Baseline styles + +.table { + width: 100%; + max-width: 100%; + margin-bottom: @line-height-computed; + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-cell-padding; + line-height: @line-height-base; + vertical-align: top; + border-top: 1px solid @table-border-color; + } + } + } + // Bottom align for column headings + > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid @table-border-color; + } + // Remove top border from thead by default + > caption + thead, + > colgroup + thead, + > thead:first-child { + > tr:first-child { + > th, + > td { + border-top: 0; + } + } + } + // Account for multiple tbody instances + > tbody + tbody { + border-top: 2px solid @table-border-color; + } + + // Nesting + .table { + background-color: @body-bg; + } +} + + +// Condensed table w/ half padding + +.table-condensed { + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-condensed-cell-padding; + } + } + } +} + + +// Bordered version +// +// Add borders all around the table and between all the columns. + +.table-bordered { + border: 1px solid @table-border-color; + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border: 1px solid @table-border-color; + } + } + } + > thead > tr { + > th, + > td { + border-bottom-width: 2px; + } + } +} + + +// Zebra-striping +// +// Default zebra-stripe styles (alternating gray and transparent backgrounds) + +.table-striped { + > tbody > tr:nth-of-type(odd) { + background-color: @table-bg-accent; + } +} + + +// Hover effect +// +// Placed here since it has to come after the potential zebra striping + +.table-hover { + > tbody > tr:hover { + background-color: @table-bg-hover; + } +} + + +// Table cell sizing +// +// Reset default table behavior + +table col[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-column; +} +table { + td, + th { + &[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-cell; + } + } +} + + +// Table backgrounds +// +// Exact selectors below required to override `.table-striped` and prevent +// inheritance to nested tables. + +// Generate the contextual variants +.table-row-variant(active; @table-bg-active); +.table-row-variant(success; @state-success-bg); +.table-row-variant(info; @state-info-bg); +.table-row-variant(warning; @state-warning-bg); +.table-row-variant(danger; @state-danger-bg); + + +// Responsive tables +// +// Wrap your tables in `.table-responsive` and we'll make them mobile friendly +// by enabling horizontal scrolling. Only applies <768px. Everything above that +// will display normally. + +.table-responsive { + overflow-x: auto; + min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837) + + @media screen and (max-width: @screen-xs-max) { + width: 100%; + margin-bottom: (@line-height-computed * 0.75); + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid @table-border-color; + + // Tighten up spacing + > .table { + margin-bottom: 0; + + // Ensure the content doesn't wrap + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + white-space: nowrap; + } + } + } + } + + // Special overrides for the bordered tables + > .table-bordered { + border: 0; + + // Nuke the appropriate borders so that the parent can handle them + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + + // Only nuke the last row's bottom-border in `tbody` and `tfoot` since + // chances are there will be only one `tr` in a `thead` and that would + // remove the border altogether. + > tbody, + > tfoot { + > tr:last-child { + > th, + > td { + border-bottom: 0; + } + } + } + + } + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/theme.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/theme.less new file mode 100644 index 00000000..8f51d913 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/theme.less @@ -0,0 +1,291 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// +// Load core variables and mixins +// -------------------------------------------------- + +@import "variables.less"; +@import "mixins.less"; + + +// +// Buttons +// -------------------------------------------------- + +// Common styles +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0,0,0,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); + .box-shadow(@shadow); + + // Reset the shadow + &:active, + &.active { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + .box-shadow(none); + } + + .badge { + text-shadow: none; + } +} + +// Mixin for generating new styles +.btn-styles(@btn-color: #555) { + #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); + .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620 + background-repeat: repeat-x; + border-color: darken(@btn-color, 14%); + + &:hover, + &:focus { + background-color: darken(@btn-color, 12%); + background-position: 0 -15px; + } + + &:active, + &.active { + background-color: darken(@btn-color, 12%); + border-color: darken(@btn-color, 14%); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + background-color: darken(@btn-color, 12%); + background-image: none; + } + } +} + +// Common styles +.btn { + // Remove the gradient for the pressed/active state + &:active, + &.active { + background-image: none; + } +} + +// Apply the mixin to the buttons +.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } +.btn-primary { .btn-styles(@btn-primary-bg); } +.btn-success { .btn-styles(@btn-success-bg); } +.btn-info { .btn-styles(@btn-info-bg); } +.btn-warning { .btn-styles(@btn-warning-bg); } +.btn-danger { .btn-styles(@btn-danger-bg); } + + +// +// Images +// -------------------------------------------------- + +.thumbnail, +.img-thumbnail { + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} + + +// +// Dropdowns +// -------------------------------------------------- + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); + background-color: darken(@dropdown-link-hover-bg, 5%); +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + background-color: darken(@dropdown-link-active-bg, 5%); +} + + +// +// Navbar +// -------------------------------------------------- + +// Default navbar +.navbar-default { + #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered + border-radius: @navbar-border-radius; + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); + .box-shadow(@shadow); + + .navbar-nav > .open > a, + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); + } +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255,255,255,.25); +} + +// Inverted navbar +.navbar-inverse { + #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257 + border-radius: @navbar-border-radius; + .navbar-nav > .open > a, + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); + } + + .navbar-brand, + .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } +} + +// Undo rounded corners in static and fixed navbars +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} + +// Fix active state of dropdown items in collapsed mode +@media (max-width: @grid-float-breakpoint-max) { + .navbar .navbar-nav .open .dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: #fff; + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + } + } +} + + +// +// Alerts +// -------------------------------------------------- + +// Common styles +.alert { + text-shadow: 0 1px 0 rgba(255,255,255,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); + .box-shadow(@shadow); +} + +// Mixin for generating new styles +.alert-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); + border-color: darken(@color, 15%); +} + +// Apply the mixin to the alerts +.alert-success { .alert-styles(@alert-success-bg); } +.alert-info { .alert-styles(@alert-info-bg); } +.alert-warning { .alert-styles(@alert-warning-bg); } +.alert-danger { .alert-styles(@alert-danger-bg); } + + +// +// Progress bars +// -------------------------------------------------- + +// Give the progress background some depth +.progress { + #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) +} + +// Mixin for generating new styles +.progress-bar-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); +} + +// Apply the mixin to the progress bars +.progress-bar { .progress-bar-styles(@progress-bar-bg); } +.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } +.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } +.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } +.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } + +// Reset the striped class because our mixins don't do multiple gradients and +// the above custom styles override the new `.progress-bar-striped` in v3.2.0. +.progress-bar-striped { + #gradient > .striped(); +} + + +// +// List groups +// -------------------------------------------------- + +.list-group { + border-radius: @border-radius-base; + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); + #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); + border-color: darken(@list-group-active-border, 7.5%); + + .badge { + text-shadow: none; + } +} + + +// +// Panels +// -------------------------------------------------- + +// Common styles +.panel { + .box-shadow(0 1px 2px rgba(0,0,0,.05)); +} + +// Mixin for generating new styles +.panel-heading-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); +} + +// Apply the mixin to the panel headings only +.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } +.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } +.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } +.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } +.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } +.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } + + +// +// Wells +// -------------------------------------------------- + +.well { + #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); + border-color: darken(@well-bg, 10%); + @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/thumbnails.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/thumbnails.less new file mode 100644 index 00000000..0713e67d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/thumbnails.less @@ -0,0 +1,36 @@ +// +// Thumbnails +// -------------------------------------------------- + + +// Mixin and adjust the regular image class +.thumbnail { + display: block; + padding: @thumbnail-padding; + margin-bottom: @line-height-computed; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(border .2s ease-in-out); + + > img, + a > img { + &:extend(.img-responsive); + margin-left: auto; + margin-right: auto; + } + + // Add a hover state for linked versions only + a&:hover, + a&:focus, + a&.active { + border-color: @link-color; + } + + // Image captions + .caption { + padding: @thumbnail-caption-padding; + color: @thumbnail-caption-color; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tooltip.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tooltip.less new file mode 100644 index 00000000..b48d63e0 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/tooltip.less @@ -0,0 +1,101 @@ +// +// Tooltips +// -------------------------------------------------- + + +// Base class +.tooltip { + position: absolute; + z-index: @zindex-tooltip; + display: block; + // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. + // So reset our font and text properties to avoid inheriting weird values. + .reset-text(); + font-size: @font-size-small; + + .opacity(0); + + &.in { .opacity(@tooltip-opacity); } + &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } + &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } + &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } + &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } +} + +// Wrapper for the tooltip content +.tooltip-inner { + max-width: @tooltip-max-width; + padding: 3px 8px; + color: @tooltip-color; + text-align: center; + background-color: @tooltip-bg; + border-radius: @border-radius-base; +} + +// Arrows +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1 +.tooltip { + &.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.top-left .tooltip-arrow { + bottom: 0; + right: @tooltip-arrow-width; + margin-bottom: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.top-right .tooltip-arrow { + bottom: 0; + left: @tooltip-arrow-width; + margin-bottom: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; + border-right-color: @tooltip-arrow-color; + } + &.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; + border-left-color: @tooltip-arrow-color; + } + &.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } + &.bottom-left .tooltip-arrow { + top: 0; + right: @tooltip-arrow-width; + margin-top: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } + &.bottom-right .tooltip-arrow { + top: 0; + left: @tooltip-arrow-width; + margin-top: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/type.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/type.less new file mode 100644 index 00000000..0d4fee48 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/type.less @@ -0,0 +1,302 @@ +// +// Typography +// -------------------------------------------------- + + +// Headings +// ------------------------- + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: @headings-font-family; + font-weight: @headings-font-weight; + line-height: @headings-line-height; + color: @headings-color; + + small, + .small { + font-weight: normal; + line-height: 1; + color: @headings-small-color; + } +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: @line-height-computed; + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 65%; + } +} +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: (@line-height-computed / 2); + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 75%; + } +} + +h1, .h1 { font-size: @font-size-h1; } +h2, .h2 { font-size: @font-size-h2; } +h3, .h3 { font-size: @font-size-h3; } +h4, .h4 { font-size: @font-size-h4; } +h5, .h5 { font-size: @font-size-h5; } +h6, .h6 { font-size: @font-size-h6; } + + +// Body text +// ------------------------- + +p { + margin: 0 0 (@line-height-computed / 2); +} + +.lead { + margin-bottom: @line-height-computed; + font-size: floor((@font-size-base * 1.15)); + font-weight: 300; + line-height: 1.4; + + @media (min-width: @screen-sm-min) { + font-size: (@font-size-base * 1.5); + } +} + + +// Emphasis & misc +// ------------------------- + +// Ex: (12px small font / 14px base font) * 100% = about 85% +small, +.small { + font-size: floor((100% * @font-size-small / @font-size-base)); +} + +mark, +.mark { + background-color: @state-warning-bg; + padding: .2em; +} + +// Alignment +.text-left { text-align: left; } +.text-right { text-align: right; } +.text-center { text-align: center; } +.text-justify { text-align: justify; } +.text-nowrap { white-space: nowrap; } + +// Transformation +.text-lowercase { text-transform: lowercase; } +.text-uppercase { text-transform: uppercase; } +.text-capitalize { text-transform: capitalize; } + +// Contextual colors +.text-muted { + color: @text-muted; +} +.text-primary { + .text-emphasis-variant(@brand-primary); +} +.text-success { + .text-emphasis-variant(@state-success-text); +} +.text-info { + .text-emphasis-variant(@state-info-text); +} +.text-warning { + .text-emphasis-variant(@state-warning-text); +} +.text-danger { + .text-emphasis-variant(@state-danger-text); +} + +// Contextual backgrounds +// For now we'll leave these alongside the text classes until v4 when we can +// safely shift things around (per SemVer rules). +.bg-primary { + // Given the contrast here, this is the only class to have its color inverted + // automatically. + color: #fff; + .bg-variant(@brand-primary); +} +.bg-success { + .bg-variant(@state-success-bg); +} +.bg-info { + .bg-variant(@state-info-bg); +} +.bg-warning { + .bg-variant(@state-warning-bg); +} +.bg-danger { + .bg-variant(@state-danger-bg); +} + + +// Page header +// ------------------------- + +.page-header { + padding-bottom: ((@line-height-computed / 2) - 1); + margin: (@line-height-computed * 2) 0 @line-height-computed; + border-bottom: 1px solid @page-header-border-color; +} + + +// Lists +// ------------------------- + +// Unordered and Ordered lists +ul, +ol { + margin-top: 0; + margin-bottom: (@line-height-computed / 2); + ul, + ol { + margin-bottom: 0; + } +} + +// List options + +// Unstyled keeps list items block level, just removes default browser padding and list-style +.list-unstyled { + padding-left: 0; + list-style: none; +} + +// Inline turns list items into inline-block +.list-inline { + .list-unstyled(); + margin-left: -5px; + + > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; + } +} + +// Description Lists +dl { + margin-top: 0; // Remove browser default + margin-bottom: @line-height-computed; +} +dt, +dd { + line-height: @line-height-base; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; // Undo browser default +} + +// Horizontal description lists +// +// Defaults to being stacked without any of the below styles applied, until the +// grid breakpoint is reached (default of ~768px). + +.dl-horizontal { + dd { + &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present + } + + @media (min-width: @dl-horizontal-breakpoint) { + dt { + float: left; + width: (@dl-horizontal-offset - 20); + clear: left; + text-align: right; + .text-overflow(); + } + dd { + margin-left: @dl-horizontal-offset; + } + } +} + + +// Misc +// ------------------------- + +// Abbreviations and acronyms +abbr[title], +// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted @abbr-border-color; +} +.initialism { + font-size: 90%; + .text-uppercase(); +} + +// Blockquotes +blockquote { + padding: (@line-height-computed / 2) @line-height-computed; + margin: 0 0 @line-height-computed; + font-size: @blockquote-font-size; + border-left: 5px solid @blockquote-border-color; + + p, + ul, + ol { + &:last-child { + margin-bottom: 0; + } + } + + // Note: Deprecated small and .small as of v3.1.0 + // Context: https://github.com/twbs/bootstrap/issues/11660 + footer, + small, + .small { + display: block; + font-size: 80%; // back to default font-size + line-height: @line-height-base; + color: @blockquote-small-color; + + &:before { + content: '\2014 \00A0'; // em dash, nbsp + } + } +} + +// Opposite alignment of blockquote +// +// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid @blockquote-border-color; + border-left: 0; + text-align: right; + + // Account for citation + footer, + small, + .small { + &:before { content: ''; } + &:after { + content: '\00A0 \2014'; // nbsp, em dash + } + } +} + +// Addresses +address { + margin-bottom: @line-height-computed; + font-style: normal; + line-height: @line-height-base; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/utilities.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/utilities.less new file mode 100644 index 00000000..7a8ca27a --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/utilities.less @@ -0,0 +1,55 @@ +// +// Utility classes +// -------------------------------------------------- + + +// Floats +// ------------------------- + +.clearfix { + .clearfix(); +} +.center-block { + .center-block(); +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} + + +// Toggling content +// ------------------------- + +// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + .text-hide(); +} + + +// Hide from screenreaders and browsers +// +// Credit: HTML5 Boilerplate + +.hidden { + display: none !important; +} + + +// For Affix plugin +// ------------------------- + +.affix { + position: fixed; +} diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/variables.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/variables.less new file mode 100644 index 00000000..b057ef5b --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/variables.less @@ -0,0 +1,869 @@ +// +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +@gray-base: #000; +@gray-darker: lighten(@gray-base, 13.5%); // #222 +@gray-dark: lighten(@gray-base, 20%); // #333 +@gray: lighten(@gray-base, 33.5%); // #555 +@gray-light: lighten(@gray-base, 46.7%); // #777 +@gray-lighter: lighten(@gray-base, 93.5%); // #eee + +@brand-primary: darken(#428bca, 6.5%); // #337ab7 +@brand-success: #5cb85c; +@brand-info: #5bc0de; +@brand-warning: #f0ad4e; +@brand-danger: #d9534f; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +@body-bg: #fff; +//** Global text color on ``. +@text-color: @gray-dark; + +//** Global textual link color. +@link-color: @brand-primary; +//** Link hover color set via `darken()` function. +@link-hover-color: darken(@link-color, 15%); +//** Link hover decoration. +@link-hover-decoration: underline; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-serif: Georgia, "Times New Roman", Times, serif; +//** Default monospace fonts for ``, ``, and `
`.
+@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base:        @font-family-sans-serif;
+
+@font-size-base:          14px;
+@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5:            @font-size-base;
+@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base:        1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family:    inherit;
+@headings-font-weight:    500;
+@headings-line-height:    1.1;
+@headings-color:          inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path:          "../fonts/";
+//** File name for all font files.
+@icon-font-name:          "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id:        "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical:     6px;
+@padding-base-horizontal:   12px;
+
+@padding-large-vertical:    10px;
+@padding-large-horizontal:  16px;
+
+@padding-small-vertical:    5px;
+@padding-small-horizontal:  10px;
+
+@padding-xs-vertical:       1px;
+@padding-xs-horizontal:     5px;
+
+@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
+@line-height-small:         1.5;
+
+@border-radius-base:        4px;
+@border-radius-large:       6px;
+@border-radius-small:       3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color:    #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg:       @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base:          4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large:         5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+@table-cell-padding:            8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding:  5px;
+
+//** Default background color used for all tables.
+@table-bg:                      transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent:               #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover:                #f5f5f5;
+@table-bg-active:               @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color:            #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight:                normal;
+
+@btn-default-color:              #333;
+@btn-default-bg:                 #fff;
+@btn-default-border:             #ccc;
+
+@btn-primary-color:              #fff;
+@btn-primary-bg:                 @brand-primary;
+@btn-primary-border:             darken(@btn-primary-bg, 5%);
+
+@btn-success-color:              #fff;
+@btn-success-bg:                 @brand-success;
+@btn-success-border:             darken(@btn-success-bg, 5%);
+
+@btn-info-color:                 #fff;
+@btn-info-bg:                    @brand-info;
+@btn-info-border:                darken(@btn-info-bg, 5%);
+
+@btn-warning-color:              #fff;
+@btn-warning-bg:                 @brand-warning;
+@btn-warning-border:             darken(@btn-warning-bg, 5%);
+
+@btn-danger-color:               #fff;
+@btn-danger-bg:                  @brand-danger;
+@btn-danger-border:              darken(@btn-danger-bg, 5%);
+
+@btn-link-disabled-color:        @gray-light;
+
+// Allows for customizing button radius independently from global border radius
+@btn-border-radius-base:         @border-radius-base;
+@btn-border-radius-large:        @border-radius-large;
+@btn-border-radius-small:        @border-radius-small;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+@input-bg:                       #fff;
+//** `` background color
+@input-bg-disabled:              @gray-lighter;
+
+//** Text color for ``s
+@input-color:                    @gray;
+//** `` border color
+@input-border:                   #ccc;
+
+// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
+//** Default `.form-control` border radius
+// This has no effect on ``s in CSS.
+@input-border-radius:            @border-radius-base;
+//** Large `.form-control` border radius
+@input-border-radius-large:      @border-radius-large;
+//** Small `.form-control` border radius
+@input-border-radius-small:      @border-radius-small;
+
+//** Border color for inputs on focus
+@input-border-focus:             #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder:        #999;
+
+//** Default `.form-control` height
+@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+//** `.form-group` margin
+@form-group-margin-bottom:       15px;
+
+@legend-color:                   @gray-dark;
+@legend-border-color:            #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg:           @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+//** Disabled cursor for form controls and buttons.
+@cursor-disabled:                not-allowed;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg:                    #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border:                rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border:       #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg:            #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color:            @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color:      darken(@gray-dark, 5%);
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg:         #f5f5f5;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color:     @component-active-color;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg:        @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color:   @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color:          @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color:           #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar:            1000;
+@zindex-dropdown:          1000;
+@zindex-popover:           1060;
+@zindex-tooltip:           1070;
+@zindex-navbar-fixed:      1030;
+@zindex-modal-background:  1040;
+@zindex-modal:             1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs:                  480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min:              @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone:               @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm:                  768px;
+@screen-sm-min:              @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet:              @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md:                  992px;
+@screen-md-min:              @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop:             @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg:                  1200px;
+@screen-lg-min:              @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop:          @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max:              (@screen-sm-min - 1);
+@screen-sm-max:              (@screen-md-min - 1);
+@screen-md-max:              (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns:              12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width:         30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint:     @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet:             (720px + @grid-gutter-width);
+//** For `@screen-sm-min` and up.
+@container-sm:                 @container-tablet;
+
+// Medium screen / desktop
+@container-desktop:            (940px + @grid-gutter-width);
+//** For `@screen-md-min` and up.
+@container-md:                 @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop:      (1140px + @grid-gutter-width);
+//** For `@screen-lg-min` and up.
+@container-lg:                 @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height:                    50px;
+@navbar-margin-bottom:             @line-height-computed;
+@navbar-border-radius:             @border-radius-base;
+@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
+@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height:       340px;
+
+@navbar-default-color:             #777;
+@navbar-default-bg:                #f8f8f8;
+@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color:                #777;
+@navbar-default-link-hover-color:          #333;
+@navbar-default-link-hover-bg:             transparent;
+@navbar-default-link-active-color:         #555;
+@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color:       #ccc;
+@navbar-default-link-disabled-bg:          transparent;
+
+// Navbar brand label
+@navbar-default-brand-color:               @navbar-default-link-color;
+@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-bg:            transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg:           #ddd;
+@navbar-default-toggle-icon-bar-bg:        #888;
+@navbar-default-toggle-border-color:       #ddd;
+
+
+//=== Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color:                      lighten(@gray-light, 15%);
+@navbar-inverse-bg:                         #222;
+@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
+@navbar-inverse-link-hover-color:           #fff;
+@navbar-inverse-link-hover-bg:              transparent;
+@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color:        #444;
+@navbar-inverse-link-disabled-bg:           transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color:                @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color:          #fff;
+@navbar-inverse-brand-hover-bg:             transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg:            #333;
+@navbar-inverse-toggle-icon-bar-bg:         #fff;
+@navbar-inverse-toggle-border-color:        #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding:                          10px 15px;
+@nav-link-hover-bg:                         @gray-lighter;
+
+@nav-disabled-link-color:                   @gray-light;
+@nav-disabled-link-hover-color:             @gray-light;
+
+//== Tabs
+@nav-tabs-border-color:                     #ddd;
+
+@nav-tabs-link-hover-border-color:          @gray-lighter;
+
+@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-color:          @gray;
+@nav-tabs-active-link-hover-border-color:   #ddd;
+
+@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-active-link-border-color:     @body-bg;
+
+//== Pills
+@nav-pills-border-radius:                   @border-radius-base;
+@nav-pills-active-link-hover-bg:            @component-active-bg;
+@nav-pills-active-link-hover-color:         @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color:                     @link-color;
+@pagination-bg:                        #fff;
+@pagination-border:                    #ddd;
+
+@pagination-hover-color:               @link-hover-color;
+@pagination-hover-bg:                  @gray-lighter;
+@pagination-hover-border:              #ddd;
+
+@pagination-active-color:              #fff;
+@pagination-active-bg:                 @brand-primary;
+@pagination-active-border:             @brand-primary;
+
+@pagination-disabled-color:            @gray-light;
+@pagination-disabled-bg:               #fff;
+@pagination-disabled-border:           #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg:                             @pagination-bg;
+@pager-border:                         @pagination-border;
+@pager-border-radius:                  15px;
+
+@pager-hover-bg:                       @pagination-hover-bg;
+
+@pager-active-bg:                      @pagination-active-bg;
+@pager-active-color:                   @pagination-active-color;
+
+@pager-disabled-color:                 @pagination-disabled-color;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding:              30px;
+@jumbotron-color:                inherit;
+@jumbotron-bg:                   @gray-lighter;
+@jumbotron-heading-color:        inherit;
+@jumbotron-font-size:            ceil((@font-size-base * 1.5));
+@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text:             #3c763d;
+@state-success-bg:               #dff0d8;
+@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text:                #31708f;
+@state-info-bg:                  #d9edf7;
+@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
+
+@state-warning-text:             #8a6d3b;
+@state-warning-bg:               #fcf8e3;
+@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
+
+@state-danger-text:              #a94442;
+@state-danger-bg:                #f2dede;
+@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width:           200px;
+//** Tooltip text color
+@tooltip-color:               #fff;
+//** Tooltip background color
+@tooltip-bg:                  #000;
+@tooltip-opacity:             .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width:         5px;
+//** Tooltip arrow color
+@tooltip-arrow-color:         @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg:                          #fff;
+//** Popover maximum width
+@popover-max-width:                   276px;
+//** Popover border color
+@popover-border-color:                rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color:       #ccc;
+
+//** Popover title background color
+@popover-title-bg:                    darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width:                 10px;
+//** Popover arrow color
+@popover-arrow-color:                 @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width:           (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg:            @gray-light;
+//** Primary label background color
+@label-primary-bg:            @brand-primary;
+//** Success label background color
+@label-success-bg:            @brand-success;
+//** Info label background color
+@label-info-bg:               @brand-info;
+//** Warning label background color
+@label-warning-bg:            @brand-warning;
+//** Danger label background color
+@label-danger-bg:             @brand-danger;
+
+//** Default label text color
+@label-color:                 #fff;
+//** Default text color of a linked label
+@label-link-hover-color:      #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding:         15px;
+
+//** Padding applied to the modal title
+@modal-title-padding:         15px;
+//** Modal title line-height
+@modal-title-line-height:     @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg:                             #fff;
+//** Modal content border color
+@modal-content-border-color:                   rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color:          #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg:           #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity:      .5;
+//** Modal header border color
+@modal-header-border-color:   #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color:   @modal-header-border-color;
+
+@modal-lg:                    900px;
+@modal-md:                    600px;
+@modal-sm:                    300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding:               15px;
+@alert-border-radius:         @border-radius-base;
+@alert-link-font-weight:      bold;
+
+@alert-success-bg:            @state-success-bg;
+@alert-success-text:          @state-success-text;
+@alert-success-border:        @state-success-border;
+
+@alert-info-bg:               @state-info-bg;
+@alert-info-text:             @state-info-text;
+@alert-info-border:           @state-info-border;
+
+@alert-warning-bg:            @state-warning-bg;
+@alert-warning-text:          @state-warning-text;
+@alert-warning-border:        @state-warning-border;
+
+@alert-danger-bg:             @state-danger-bg;
+@alert-danger-text:           @state-danger-text;
+@alert-danger-border:         @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg:                 #f5f5f5;
+//** Progress bar text color
+@progress-bar-color:          #fff;
+//** Variable for setting rounded corners on progress bar.
+@progress-border-radius:      @border-radius-base;
+
+//** Default progress bar color
+@progress-bar-bg:             @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg:     @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg:     @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg:      @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg:        @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg:                 #fff;
+//** `.list-group-item` border color
+@list-group-border:             #ddd;
+//** List group border radius
+@list-group-border-radius:      @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg:           #f5f5f5;
+//** Text color of active list items
+@list-group-active-color:       @component-active-color;
+//** Background color of active list items
+@list-group-active-bg:          @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border:      @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color:      @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg:         @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color:         #555;
+@list-group-link-hover-color:   @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg:                    #fff;
+@panel-body-padding:          15px;
+@panel-heading-padding:       10px 15px;
+@panel-footer-padding:        @panel-heading-padding;
+@panel-border-radius:         @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border:          #ddd;
+@panel-footer-bg:             #f5f5f5;
+
+@panel-default-text:          @gray-dark;
+@panel-default-border:        #ddd;
+@panel-default-heading-bg:    #f5f5f5;
+
+@panel-primary-text:          #fff;
+@panel-primary-border:        @brand-primary;
+@panel-primary-heading-bg:    @brand-primary;
+
+@panel-success-text:          @state-success-text;
+@panel-success-border:        @state-success-border;
+@panel-success-heading-bg:    @state-success-bg;
+
+@panel-info-text:             @state-info-text;
+@panel-info-border:           @state-info-border;
+@panel-info-heading-bg:       @state-info-bg;
+
+@panel-warning-text:          @state-warning-text;
+@panel-warning-border:        @state-warning-border;
+@panel-warning-heading-bg:    @state-warning-bg;
+
+@panel-danger-text:           @state-danger-text;
+@panel-danger-border:         @state-danger-border;
+@panel-danger-heading-bg:     @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding:           4px;
+//** Thumbnail background color
+@thumbnail-bg:                @body-bg;
+//** Thumbnail border color
+@thumbnail-border:            #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius:     @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color:     @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding:   9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg:                     #f5f5f5;
+@well-border:                 darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color:                 #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color:      #fff;
+@badge-bg:                    @gray-light;
+
+//** Badge text color in active nav link
+@badge-active-color:          @link-color;
+//** Badge background color in active nav link
+@badge-active-bg:             #fff;
+
+@badge-font-weight:           bold;
+@badge-line-height:           1;
+@badge-border-radius:         10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical:   8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg:                 #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color:              #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color:       @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator:          "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color:                      #fff;
+@carousel-control-width:                      15%;
+@carousel-control-opacity:                    .5;
+@carousel-control-font-size:                  20px;
+
+@carousel-indicator-active-bg:                #fff;
+@carousel-indicator-border-color:             #fff;
+
+@carousel-caption-color:                      #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight:           bold;
+@close-color:                 #000;
+@close-text-shadow:           0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color:                  #c7254e;
+@code-bg:                     #f9f2f4;
+
+@kbd-color:                   #fff;
+@kbd-bg:                      #333;
+
+@pre-bg:                      #f5f5f5;
+@pre-color:                   @gray-dark;
+@pre-border-color:            #ccc;
+@pre-scrollable-max-height:   340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted:                  @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color:           @gray-light;
+//** Headings small color
+@headings-small-color:        @gray-light;
+//** Blockquote small color
+@blockquote-small-color:      @gray-light;
+//** Blockquote font size
+@blockquote-font-size:        (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color:     @gray-lighter;
+//** Page header border color
+@page-header-border-color:    @gray-lighter;
+//** Width of horizontal description list titles
+@dl-horizontal-offset:        @component-offset-horizontal;
+//** Point at which .dl-horizontal becomes horizontal
+@dl-horizontal-breakpoint:    @grid-float-breakpoint;
+//** Horizontal line color.
+@hr-border:                   @gray-lighter;
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/wells.less b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/wells.less
new file mode 100644
index 00000000..15d072b0
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/less/wells.less
@@ -0,0 +1,29 @@
+//
+// Wells
+// --------------------------------------------------
+
+
+// Base class
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: @well-bg;
+  border: 1px solid @well-border;
+  border-radius: @border-radius-base;
+  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+  blockquote {
+    border-color: #ddd;
+    border-color: rgba(0,0,0,.15);
+  }
+}
+
+// Sizes
+.well-lg {
+  padding: 24px;
+  border-radius: @border-radius-large;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: @border-radius-small;
+}
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/MyGet.ps1 b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/MyGet.ps1
new file mode 100644
index 00000000..ad17dea9
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/MyGet.ps1
@@ -0,0 +1,8 @@
+$nuget = $env:NuGet
+
+#parse the version number out of package.json
+$bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version
+
+#create packages
+& $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
+& $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
\ No newline at end of file
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.less.nuspec b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.less.nuspec
new file mode 100644
index 00000000..ec302c0e
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.less.nuspec
@@ -0,0 +1,28 @@
+
+
+  
+    bootstrap.less
+    3.3
+    Bootstrap Less
+    Twitter, Inc.
+    bootstrap
+	The most popular front-end framework for developing responsive, mobile first projects on the web.
+    http://blog.getbootstrap.com
+	Bootstrap framework in Less. Includes fonts and JavaScript
+	en-us
+	http://getbootstrap.com
+    http://getbootstrap.com/apple-touch-icon.png
+	https://github.com/twbs/bootstrap/blob/master/LICENSE
+    Copyright 2015
+    false
+    
+      
+    
+	css js less mobile-first responsive front-end framework web
+  
+  
+    
+    
+    
+  
+
\ No newline at end of file
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.nuspec b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.nuspec
new file mode 100644
index 00000000..50557cc5
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/nuget/bootstrap.nuspec
@@ -0,0 +1,28 @@
+
+
+  
+    bootstrap
+    3.3
+    Bootstrap CSS
+    Twitter, Inc.
+    bootstrap
+	The most popular front-end framework for developing responsive, mobile first projects on the web.
+	http://blog.getbootstrap.com
+	Bootstrap framework in CSS. Includes fonts and JavaScript
+	en-us
+	http://getbootstrap.com
+    http://getbootstrap.com/apple-touch-icon.png
+	https://github.com/twbs/bootstrap/blob/master/LICENSE
+    Copyright 2015
+    false
+    
+      
+    
+	css js less mobile-first responsive front-end framework web
+  
+  
+    
+    
+    
+  
+
\ No newline at end of file
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.js b/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.js
new file mode 100644
index 00000000..0d8990bd
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.js
@@ -0,0 +1,32 @@
+// package metadata file for Meteor.js
+
+/* jshint strict:false */
+/* global Package:true */
+
+Package.describe({
+  name: 'twbs:bootstrap',  // http://atmospherejs.com/twbs/bootstrap
+  summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
+  version: '3.3.6',
+  git: 'https://github.com/twbs/bootstrap.git'
+});
+
+Package.onUse(function (api) {
+  api.versionsFrom('METEOR@1.0');
+  api.use('jquery', 'client');
+  var assets = [
+    'dist/fonts/glyphicons-halflings-regular.eot',
+    'dist/fonts/glyphicons-halflings-regular.svg',
+    'dist/fonts/glyphicons-halflings-regular.ttf',
+    'dist/fonts/glyphicons-halflings-regular.woff',
+    'dist/fonts/glyphicons-halflings-regular.woff2'
+  ];
+  if (api.addAssets) {
+    api.addAssets(assets, 'client');
+  } else {
+    api.addFiles(assets, 'client', { isAsset: true });
+  }
+  api.addFiles([
+    'dist/css/bootstrap.css',
+    'dist/js/bootstrap.js'
+  ], 'client');
+});
diff --git a/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.json b/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.json
new file mode 100644
index 00000000..998088bc
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/bootstrap/package.json
@@ -0,0 +1,87 @@
+{
+  "name": "bootstrap",
+  "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
+  "version": "3.3.6",
+  "keywords": [
+    "css",
+    "less",
+    "mobile-first",
+    "responsive",
+    "front-end",
+    "framework",
+    "web"
+  ],
+  "homepage": "http://getbootstrap.com",
+  "author": "Twitter, Inc.",
+  "scripts": {
+    "test": "grunt test"
+  },
+  "style": "dist/css/bootstrap.css",
+  "less": "less/bootstrap.less",
+  "main": "./dist/js/npm",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/twbs/bootstrap.git"
+  },
+  "bugs": {
+    "url": "https://github.com/twbs/bootstrap/issues"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "btoa": "~1.1.2",
+    "glob": "~6.0.1",
+    "grunt": "~0.4.5",
+    "grunt-autoprefixer": "~3.0.3",
+    "grunt-contrib-clean": "~0.6.0",
+    "grunt-contrib-compress": "~0.14.0",
+    "grunt-contrib-concat": "~0.5.1",
+    "grunt-contrib-connect": "~0.11.2",
+    "grunt-contrib-copy": "~0.8.0",
+    "grunt-contrib-csslint": "~0.5.0",
+    "grunt-contrib-cssmin": "~0.14.0",
+    "grunt-contrib-htmlmin": "~0.6.0",
+    "grunt-contrib-jade": "~0.15.0",
+    "grunt-contrib-jshint": "~0.11.2",
+    "grunt-contrib-less": "~1.1.0",
+    "grunt-contrib-qunit": "~0.7.0",
+    "grunt-contrib-uglify": "~0.9.2",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-csscomb": "~3.1.0",
+    "grunt-exec": "~0.4.6",
+    "grunt-html": "~5.0.1",
+    "grunt-jekyll": "~0.4.2",
+    "grunt-jscs": "~2.3.0",
+    "grunt-saucelabs": "~8.6.1",
+    "grunt-sed": "twbs/grunt-sed#v0.2.0",
+    "load-grunt-tasks": "~3.3.0",
+    "markdown-it": "^5.0.0",
+    "npm-shrinkwrap": "^200.4.0",
+    "time-grunt": "^1.2.1"
+  },
+  "engines": {
+    "node": ">=0.10.1"
+  },
+  "files": [
+    "dist",
+    "fonts",
+    "grunt",
+    "js/*.js",
+    "less/**/*.less",
+    "Gruntfile.js",
+    "LICENSE"
+  ],
+  "jspm": {
+    "main": "js/bootstrap",
+    "shim": {
+      "js/bootstrap": {
+        "deps": "jquery",
+        "exports": "$"
+      }
+    },
+    "files": [
+      "css",
+      "fonts",
+      "js"
+    ]
+  }
+}
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/.bower.json b/digitalglarus/static/digitalglarus/bower_components/jquery/.bower.json
new file mode 100644
index 00000000..a4b45f74
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/.bower.json
@@ -0,0 +1,25 @@
+{
+  "name": "jquery",
+  "main": "dist/jquery.js",
+  "license": "MIT",
+  "ignore": [
+    "package.json"
+  ],
+  "keywords": [
+    "jquery",
+    "javascript",
+    "browser",
+    "library"
+  ],
+  "homepage": "https://github.com/jquery/jquery-dist",
+  "version": "2.2.3",
+  "_release": "2.2.3",
+  "_resolution": {
+    "type": "version",
+    "tag": "2.2.3",
+    "commit": "af22a351b2ea5801ffb1695abb3bb34d5bed9198"
+  },
+  "_source": "https://github.com/jquery/jquery-dist.git",
+  "_target": "1.9.1 - 2",
+  "_originalSource": "jquery"
+}
\ No newline at end of file
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/AUTHORS.txt b/digitalglarus/static/digitalglarus/bower_components/jquery/AUTHORS.txt
new file mode 100644
index 00000000..dde64cac
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/AUTHORS.txt
@@ -0,0 +1,278 @@
+Authors ordered by first contribution.
+
+John Resig 
+Gilles van den Hoven 
+Michael Geary 
+Stefan Petre 
+Yehuda Katz 
+Corey Jewett 
+Klaus Hartl 
+Franck Marcia 
+Jörn Zaefferer 
+Paul Bakaus 
+Brandon Aaron 
+Mike Alsup 
+Dave Methvin 
+Ed Engelhardt 
+Sean Catchpole 
+Paul Mclanahan 
+David Serduke 
+Richard D. Worth 
+Scott González 
+Ariel Flesler 
+Jon Evans 
+TJ Holowaychuk 
+Michael Bensoussan 
+Robert Katić 
+Louis-Rémi Babé 
+Earle Castledine 
+Damian Janowski 
+Rich Dougherty 
+Kim Dalsgaard 
+Andrea Giammarchi 
+Mark Gibson 
+Karl Swedberg 
+Justin Meyer 
+Ben Alman 
+James Padolsey 
+David Petersen 
+Batiste Bieler 
+Alexander Farkas 
+Rick Waldron 
+Filipe Fortes 
+Neeraj Singh 
+Paul Irish 
+Iraê Carvalho 
+Matt Curry 
+Michael Monteleone 
+Noah Sloan 
+Tom Viner 
+Douglas Neiner 
+Adam J. Sontag 
+Dave Reed 
+Ralph Whitbeck 
+Carl Fürstenberg 
+Jacob Wright 
+J. Ryan Stinnett 
+unknown 
+temp01 
+Heungsub Lee 
+Colin Snover 
+Ryan W Tenney 
+Pinhook 
+Ron Otten 
+Jephte Clain 
+Anton Matzneller 
+Alex Sexton 
+Dan Heberden 
+Henri Wiechers 
+Russell Holbrook 
+Julian Aubourg 
+Gianni Alessandro Chiappetta 
+Scott Jehl 
+James Burke 
+Jonas Pfenniger 
+Xavi Ramirez 
+Jared Grippe 
+Sylvester Keil 
+Brandon Sterne 
+Mathias Bynens 
+Timmy Willison 
+Corey Frang 
+Digitalxero 
+Anton Kovalyov 
+David Murdoch 
+Josh Varner 
+Charles McNulty 
+Jordan Boesch 
+Jess Thrysoee 
+Michael Murray 
+Lee Carpenter 
+Alexis Abril 
+Rob Morgan 
+John Firebaugh 
+Sam Bisbee 
+Gilmore Davidson 
+Brian Brennan 
+Xavier Montillet 
+Daniel Pihlstrom 
+Sahab Yazdani 
+avaly 
+Scott Hughes 
+Mike Sherov 
+Greg Hazel 
+Schalk Neethling 
+Denis Knauf 
+Timo Tijhof 
+Steen Nielsen 
+Anton Ryzhov 
+Shi Chuan 
+Berker Peksag 
+Toby Brain 
+Matt Mueller 
+Justin 
+Daniel Herman 
+Oleg Gaidarenko 
+Richard Gibson 
+Rafaël Blais Masson 
+cmc3cn <59194618@qq.com>
+Joe Presbrey 
+Sindre Sorhus 
+Arne de Bree 
+Vladislav Zarakovsky 
+Andrew E Monat 
+Oskari 
+Joao Henrique de Andrade Bruni 
+tsinha 
+Matt Farmer 
+Trey Hunner 
+Jason Moon 
+Jeffery To 
+Kris Borchers 
+Vladimir Zhuravlev 
+Jacob Thornton 
+Chad Killingsworth 
+Nowres Rafid 
+David Benjamin 
+Uri Gilad 
+Chris Faulkner 
+Elijah Manor 
+Daniel Chatfield 
+Nikita Govorov 
+Wesley Walser 
+Mike Pennisi 
+Markus Staab 
+Dave Riddle 
+Callum Macrae 
+Benjamin Truyman 
+James Huston 
+Erick Ruiz de Chávez 
+David Bonner 
+Akintayo Akinwunmi 
+MORGAN 
+Ismail Khair 
+Carl Danley 
+Mike Petrovich 
+Greg Lavallee 
+Daniel Gálvez 
+Sai Lung Wong 
+Tom H Fuertes 
+Roland Eckl 
+Jay Merrifield 
+Allen J Schmidt Jr 
+Jonathan Sampson 
+Marcel Greter 
+Matthias Jäggli 
+David Fox 
+Yiming He 
+Devin Cooper 
+Paul Ramos 
+Rod Vagg 
+Bennett Sorbo 
+Sebastian Burkhard 
+Zachary Adam Kaplan 
+nanto_vi 
+nanto 
+Danil Somsikov 
+Ryunosuke SATO 
+Jean Boussier 
+Adam Coulombe 
+Andrew Plummer 
+Mark Raddatz 
+Isaac Z. Schlueter 
+Karl Sieburg 
+Pascal Borreli 
+Nguyen Phuc Lam 
+Dmitry Gusev 
+Michał Gołębiowski 
+Li Xudong 
+Steven Benner 
+Tom H Fuertes 
+Renato Oliveira dos Santos 
+ros3cin 
+Jason Bedard 
+Kyle Robinson Young 
+Chris Talkington 
+Eddie Monge 
+Terry Jones 
+Jason Merino 
+Jeremy Dunck 
+Chris Price 
+Guy Bedford 
+Amey Sakhadeo 
+Mike Sidorov 
+Anthony Ryan 
+Dominik D. Geyer 
+George Kats 
+Lihan Li 
+Ronny Springer 
+Chris Antaki 
+Marian Sollmann 
+njhamann 
+Ilya Kantor 
+David Hong 
+John Paul 
+Jakob Stoeck 
+Christopher Jones 
+Forbes Lindesay 
+S. Andrew Sheppard 
+Leonardo Balter 
+Roman Reiß 
+Benjy Cui 
+Rodrigo Rosenfeld Rosas 
+John Hoven 
+Philip Jägenstedt 
+Christian Kosmowski 
+Liang Peng 
+TJ VanToll 
+Senya Pugach 
+Aurelio De Rosa 
+Nazar Mokrynskyi 
+Amit Merchant 
+Jason Bedard 
+Arthur Verschaeve 
+Dan Hart 
+Bin Xin 
+David Corbacho 
+Veaceslav Grimalschi 
+Daniel Husar 
+Frederic Hemberger 
+Ben Toews 
+Aditya Raghavan 
+Victor Homyakov 
+Shivaji Varma 
+Nicolas HENRY 
+Anne-Gaelle Colom 
+George Mauer 
+Leonardo Braga 
+Stephen Edgar 
+Thomas Tortorini 
+Winston Howes 
+Jon Hester 
+Alexander O'Mara 
+Bastian Buchholz 
+Arthur Stolyar 
+Calvin Metcalf 
+Mu Haibao 
+Richard McDaniel 
+Chris Rebert 
+Gabriel Schulhof 
+Gilad Peleg 
+Martin Naumann 
+Marek Lewandowski 
+Bruno Pérel 
+Reed Loden 
+Daniel Nill 
+Yongwoo Jeon 
+Sean Henderson 
+Richard Kraaijenhagen 
+Connor Atherton 
+Gary Ye 
+Christian Grete 
+Liza Ramo 
+Julian Alexander Murillo 
+Joelle Fleurantin 
+Jun Sun 
+Devin Wilson 
+Todor Prikumov 
+Zack Hall 
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/LICENSE.txt b/digitalglarus/static/digitalglarus/bower_components/jquery/LICENSE.txt
new file mode 100644
index 00000000..5312a4c8
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/LICENSE.txt
@@ -0,0 +1,36 @@
+Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/README.md b/digitalglarus/static/digitalglarus/bower_components/jquery/README.md
new file mode 100644
index 00000000..ba3174a7
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/README.md
@@ -0,0 +1,65 @@
+# jQuery
+
+> jQuery is a fast, small, and feature-rich JavaScript library.
+
+For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).
+For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).
+
+## Including jQuery
+
+Below are some of the most common ways to include jQuery.
+
+### Browser
+
+#### Script tag
+
+```html
+
+```
+
+#### Babel
+
+[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.
+
+```js
+import $ from "jquery";
+```
+
+#### Browserify/Webpack
+
+There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...
+
+```js
+var $ = require("jquery");
+```
+
+#### AMD (Asynchronous Module Definition)
+
+AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).
+
+```js
+define(["jquery"], function($) {
+
+});
+```
+
+### Node
+
+To include jQuery in [Node](nodejs.org), first install with npm.
+
+```sh
+npm install jquery
+```
+
+For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.
+
+```js
+require("jsdom").env("", function(err, window) {
+	if (err) {
+		console.error(err);
+		return;
+	}
+
+	var $ = require("jquery")(window);
+});
+```
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/bower.json b/digitalglarus/static/digitalglarus/bower_components/jquery/bower.json
new file mode 100644
index 00000000..95798d5a
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/bower.json
@@ -0,0 +1,14 @@
+{
+  "name": "jquery",
+  "main": "dist/jquery.js",
+  "license": "MIT",
+  "ignore": [
+    "package.json"
+  ],
+  "keywords": [
+    "jquery",
+    "javascript",
+    "browser",
+    "library"
+  ]
+}
\ No newline at end of file
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/sizzle/LICENSE.txt b/digitalglarus/static/digitalglarus/bower_components/jquery/sizzle/LICENSE.txt
new file mode 100644
index 00000000..dd7ce940
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/sizzle/LICENSE.txt
@@ -0,0 +1,36 @@
+Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/sizzle
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/.jshintrc b/digitalglarus/static/digitalglarus/bower_components/jquery/src/.jshintrc
new file mode 100644
index 00000000..ea3549d5
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/.jshintrc
@@ -0,0 +1,29 @@
+{
+	"boss": true,
+	"curly": true,
+	"eqeqeq": true,
+	"eqnull": true,
+	"expr": true,
+	"immed": true,
+	"noarg": true,
+	"quotmark": "double",
+	"undef": true,
+	"unused": true,
+
+	"sub": true,
+
+	// Support: IE < 10, Android < 4.1
+	// The above browsers are failing a lot of tests in the ES5
+	// test suite at http://test262.ecmascript.org.
+	"es3": true,
+
+	"globals": {
+		"window": true,
+		"JSON": false,
+
+		"jQuery": true,
+		"define": true,
+		"module": true,
+		"noGlobal": true
+	}
+}
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax.js
new file mode 100644
index 00000000..ba322483
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax.js
@@ -0,0 +1,845 @@
+define( [
+	"./core",
+	"./var/document",
+	"./var/rnotwhite",
+	"./ajax/var/location",
+	"./ajax/var/nonce",
+	"./ajax/var/rquery",
+
+	"./core/init",
+	"./ajax/parseJSON",
+	"./ajax/parseXML",
+	"./event/trigger",
+	"./deferred"
+], function( jQuery, document, rnotwhite, location, nonce, rquery ) {
+
+var
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+		// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// The jqXHR state
+			state = 0,
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE8-11+
+			// IE throws exception if url is malformed, e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE8-11+
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( state === 2 ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+return jQuery;
+} );
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/jsonp.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/jsonp.js
new file mode 100644
index 00000000..666e5d1e
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/jsonp.js
@@ -0,0 +1,100 @@
+define( [
+	"../core",
+	"./var/nonce",
+	"./var/rquery",
+	"../ajax"
+], function( jQuery, nonce, rquery ) {
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+} );
diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/load.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/load.js
new file mode 100644
index 00000000..5ec3fa25
--- /dev/null
+++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/load.js
@@ -0,0 +1,83 @@
+define( [
+	"../core",
+	"../core/parseHTML",
+	"../ajax",
+	"../traversing",
+	"../manipulation",
+	"../selector",
+
+	// Optional event/alias dependency
+	"../event/alias"
+], function( jQuery ) {
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "
" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + +} ); diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseJSON.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseJSON.js new file mode 100644 index 00000000..11918b06 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseJSON.js @@ -0,0 +1,13 @@ +define( [ + "../core" +], function( jQuery ) { + +// Support: Android 2.3 +// Workaround failure to string-cast null input +jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); +}; + +return jQuery.parseJSON; + +} ); diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseXML.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseXML.js new file mode 100644 index 00000000..6599aaf5 --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/parseXML.js @@ -0,0 +1,27 @@ +define( [ + "../core" +], function( jQuery ) { + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + +return jQuery.parseXML; + +} ); diff --git a/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/script.js b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/script.js new file mode 100644 index 00000000..945bea9d --- /dev/null +++ b/digitalglarus/static/digitalglarus/bower_components/jquery/src/ajax/script.js @@ -0,0 +1,68 @@ +define( [ + "../core", + "../var/document", + "../ajax" +], function( jQuery, document ) { + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " - - + {% load static %} + + + - -
-
+ + +
+
- \ No newline at end of file + + + \ No newline at end of file diff --git a/membership/templates/creditcard.html b/membership/templates/creditcard.html index bb8801c3..11d4c4fc 100644 --- a/membership/templates/creditcard.html +++ b/membership/templates/creditcard.html @@ -1,11 +1,15 @@ + {% load static %} + src="{% static 'digitalglarus/bower_components/jquery/dist/jquery.min.js' %}"> + src="{% static 'digitalglarus/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"> + + + src="{% static 'digitalglarus/bower_components/jquery/dist/jquery.min.js' %}"> - - {% load static %} + src="{% static 'digitalglarus/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"> + + diff --git a/membership/templates/login.html b/membership/templates/login.html index 6d1c981c..0f067edf 100644 --- a/membership/templates/login.html +++ b/membership/templates/login.html @@ -1,12 +1,12 @@ + {% load static %} - - - + + - {% load static %} diff --git a/membership/templates/membership.html b/membership/templates/membership.html index a609f620..c831b6bc 100644 --- a/membership/templates/membership.html +++ b/membership/templates/membership.html @@ -1,13 +1,11 @@ +{% load static %} - - - + + + {% load static %} diff --git a/membership/templates/success.html b/membership/templates/success.html index 88cb2256..44e21ac3 100644 --- a/membership/templates/success.html +++ b/membership/templates/success.html @@ -1,10 +1,10 @@ - - - - + + + +
diff --git a/membership/templates/validated.html b/membership/templates/validated.html index bd1a3c90..47c1e52c 100644 --- a/membership/templates/validated.html +++ b/membership/templates/validated.html @@ -2,11 +2,10 @@ - - - - + + + {% if request.session.next == None %} - - - + {% load static %} + + + + type = "text/javascript" >