From bee58922b23049dd4030cd5b925ac9af9d674ab5 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Wed, 26 Feb 2014 23:15:31 +0000 Subject: [PATCH] Rename client -> clientold issue #2271 - should allow development of new admin UI whilst still having access to the old ui --- .gitignore | 14 +- .npmignore | 2 +- Gruntfile.js | 140 +- core/client/README.md | 1 + core/clientold/assets/css/screen.css | 1 + .../assets/fonts/icons.dev.svg | 0 .../assets/fonts/icons.eot | Bin .../assets/fonts/icons.svg | 0 .../assets/fonts/icons.ttf | Bin .../assets/fonts/icons.woff | Bin .../assets/img/404-ghost.png | Bin .../assets/img/404-ghost@2x.png | Bin .../assets/img/large.png | Bin .../assets/img/loadingcat.gif | Bin .../assets/img/medium.png | Bin .../assets/img/small.png | Bin .../assets/img/touch-icon-ipad.png | Bin .../assets/img/touch-icon-iphone.png | Bin .../assets/lib/jquery-utils.js | 0 .../assets/lib/uploader.js | 0 .../{client => clientold}/assets/sass/ie.scss | 0 .../assets/sass/layouts/auth.scss | 0 .../assets/sass/layouts/editor.scss | 0 .../assets/sass/layouts/errors.scss | 0 .../assets/sass/layouts/manage.scss | 0 .../assets/sass/layouts/plugins.scss | 0 .../assets/sass/layouts/settings.scss | 0 .../assets/sass/layouts/users.scss | 0 .../assets/sass/modules/animations.scss | 0 .../bourbon/_bourbon-deprecated-upcoming.scss | 13 + .../assets/sass/modules/bourbon/_bourbon.scss | 59 + .../sass/modules/bourbon/addons/_button.scss | 273 +++ .../modules/bourbon/addons/_clearfix.scss | 29 + .../modules/bourbon/addons/_font-family.scss | 5 + .../modules/bourbon/addons/_hide-text.scss | 5 + .../bourbon/addons/_html5-input-types.scss | 56 + .../modules/bourbon/addons/_position.scss | 42 + .../modules/bourbon/addons/_prefixer.scss | 49 + .../modules/bourbon/addons/_retina-image.scss | 32 + .../sass/modules/bourbon/addons/_size.scss | 44 + .../bourbon/addons/_timing-functions.scss | 32 + .../modules/bourbon/addons/_triangle.scss | 45 + .../sass/modules/bourbon/css3/_animation.scss | 52 + .../modules/bourbon/css3/_appearance.scss | 3 + .../bourbon/css3/_backface-visibility.scss | 6 + .../bourbon/css3/_background-image.scss | 48 + .../modules/bourbon/css3/_background.scss | 103 ++ .../modules/bourbon/css3/_border-image.scss | 55 + .../modules/bourbon/css3/_border-radius.scss | 22 + .../modules/bourbon/css3/_box-sizing.scss | 4 + .../sass/modules/bourbon/css3/_columns.scss | 47 + .../sass/modules/bourbon/css3/_flex-box.scss | 52 + .../sass/modules/bourbon/css3/_font-face.scss | 23 + .../bourbon/css3/_hidpi-media-query.scss | 10 + .../bourbon/css3/_image-rendering.scss | 13 + .../modules/bourbon/css3/_inline-block.scss | 8 + .../sass/modules/bourbon/css3/_keyframes.scss | 43 + .../bourbon/css3/_linear-gradient.scss | 41 + .../modules/bourbon/css3/_perspective.scss | 8 + .../modules/bourbon/css3/_placeholder.scss | 29 + .../bourbon/css3/_radial-gradient.scss | 44 + .../sass/modules/bourbon/css3/_transform.scss | 15 + .../modules/bourbon/css3/_transition.scss | 34 + .../modules/bourbon/css3/_user-select.scss | 3 + .../modules/bourbon/functions/_compact.scss | 11 + .../modules/bourbon/functions/_flex-grid.scss | 39 + .../bourbon/functions/_grid-width.scss | 13 + .../bourbon/functions/_linear-gradient.scss | 13 + .../bourbon/functions/_modular-scale.scss | 40 + .../modules/bourbon/functions/_px-to-em.scss | 8 + .../bourbon/functions/_radial-gradient.scss | 23 + .../bourbon/functions/_tint-shade.scss | 9 + .../functions/_transition-property-name.scss | 22 + .../helpers/_deprecated-webkit-gradient.scss | 39 + .../helpers/_gradient-positions-parser.scss | 13 + .../helpers/_linear-positions-parser.scss | 61 + .../bourbon/helpers/_radial-arg-parser.scss | 69 + .../helpers/_radial-positions-parser.scss | 18 + .../bourbon/helpers/_render-gradients.scss | 26 + .../bourbon/helpers/_shape-size-stripper.scss | 10 + .../assets/sass/modules/breakpoint.scss | 0 .../sass/modules/breakpoint/_context.scss | 0 .../sass/modules/breakpoint/_helpers.scss | 0 .../sass/modules/breakpoint/_no-query.scss | 0 .../sass/modules/breakpoint/_parsers.scss | 0 .../sass/modules/breakpoint/_respond-to.scss | 0 .../modules/breakpoint/parsers/_double.scss | 0 .../modules/breakpoint/parsers/_query.scss | 0 .../breakpoint/parsers/_resolution.scss | 0 .../modules/breakpoint/parsers/_single.scss | 0 .../modules/breakpoint/parsers/_triple.scss | 0 .../parsers/double/_default-pair.scss | 0 .../breakpoint/parsers/double/_default.scss | 0 .../parsers/double/_double-string.scss | 0 .../parsers/resolution/_resolution.scss | 0 .../breakpoint/parsers/single/_default.scss | 0 .../breakpoint/parsers/triple/_default.scss | 0 .../assets/sass/modules/forms.scss | 0 .../assets/sass/modules/global.scss | 0 .../assets/sass/modules/icons.scss | 0 .../assets/sass/modules/mixins.scss | 0 .../assets/sass/modules/normalize.scss | 0 .../assets/sass/screen.scss | 0 .../assets/vendor/chart.min.js | 0 .../vendor/codemirror/addon/mode/overlay.js | 0 .../assets/vendor/codemirror/codemirror.js | 0 .../assets/vendor/codemirror/mode/gfm/gfm.js | 0 .../vendor/codemirror/mode/gfm/index.html | 0 .../assets/vendor/codemirror/mode/gfm/test.js | 0 .../codemirror/mode/markdown/index.html | 0 .../codemirror/mode/markdown/markdown.js | 0 .../vendor/codemirror/mode/markdown/test.js | 0 .../assets/vendor/countable.js | 0 .../assets/vendor/fastclick.js | 1520 ++++++++--------- .../assets/vendor/icheck/jquery.icheck.min.js | 0 .../assets/vendor/jquery.hammer.min.js | 0 .../assets/vendor/nprogress.js | 0 .../assets/vendor/packery.pkgd.min.js | 0 .../assets/vendor/shortcuts.js | 0 .../vendor/showdown/extensions/ghostdown.js | 0 .../assets/vendor/showdown/showdown.js | 0 .../assets/vendor/to-title-case.js | 0 .../assets/vendor/validator-client.js | 0 core/{client => clientold}/helpers/index.js | 0 core/{client => clientold}/init.js | 0 .../{client => clientold}/markdown-actions.js | 0 .../mobile-interactions.js | 0 core/{client => clientold}/models/base.js | 0 core/{client => clientold}/models/post.js | 0 core/{client => clientold}/models/settings.js | 0 core/{client => clientold}/models/tag.js | 0 core/{client => clientold}/models/themes.js | 0 .../models/uploadModal.js | 0 core/{client => clientold}/models/user.js | 0 core/{client => clientold}/models/widget.js | 0 core/{client => clientold}/router.js | 14 +- core/{client => clientold}/toggle.js | 0 core/{client => clientold}/tpl/forgotten.hbs | 0 core/clientold/tpl/hbs-tpl.js | 602 +++++++ core/{client => clientold}/tpl/list-item.hbs | 0 core/{client => clientold}/tpl/login.hbs | 0 core/{client => clientold}/tpl/modal.hbs | 0 .../tpl/modals/blank.hbs | 0 .../tpl/modals/copyToHTML.hbs | 0 .../tpl/modals/markdown.hbs | 0 .../tpl/modals/uploadImage.hbs | 0 .../tpl/notification.hbs | 0 core/{client => clientold}/tpl/preview.hbs | 0 core/{client => clientold}/tpl/reset.hbs | 0 .../tpl/settings/general.hbs | 0 .../tpl/settings/sidebar.hbs | 0 .../tpl/settings/user-profile.hbs | 0 core/{client => clientold}/tpl/signup.hbs | 0 core/{client => clientold}/views/base.js | 0 core/{client => clientold}/views/blog.js | 0 core/{client => clientold}/views/debug.js | 0 .../views/editor-tag-widget.js | 0 core/{client => clientold}/views/editor.js | 0 core/{client => clientold}/views/login.js | 0 .../views/post-settings.js | 0 core/{client => clientold}/views/settings.js | 0 core/server/controllers/admin.js | 7 +- core/server/middleware/index.js | 2 +- core/server/routes/admin.js | 2 +- core/test/blanket_coverage.js | 4 +- 165 files changed, 3220 insertions(+), 850 deletions(-) create mode 100644 core/client/README.md create mode 100644 core/clientold/assets/css/screen.css rename core/{client => clientold}/assets/fonts/icons.dev.svg (100%) rename core/{client => clientold}/assets/fonts/icons.eot (100%) rename core/{client => clientold}/assets/fonts/icons.svg (100%) rename core/{client => clientold}/assets/fonts/icons.ttf (100%) rename core/{client => clientold}/assets/fonts/icons.woff (100%) rename core/{client => clientold}/assets/img/404-ghost.png (100%) rename core/{client => clientold}/assets/img/404-ghost@2x.png (100%) rename core/{client => clientold}/assets/img/large.png (100%) rename core/{client => clientold}/assets/img/loadingcat.gif (100%) rename core/{client => clientold}/assets/img/medium.png (100%) rename core/{client => clientold}/assets/img/small.png (100%) rename core/{client => clientold}/assets/img/touch-icon-ipad.png (100%) rename core/{client => clientold}/assets/img/touch-icon-iphone.png (100%) rename core/{client => clientold}/assets/lib/jquery-utils.js (100%) rename core/{client => clientold}/assets/lib/uploader.js (100%) rename core/{client => clientold}/assets/sass/ie.scss (100%) rename core/{client => clientold}/assets/sass/layouts/auth.scss (100%) rename core/{client => clientold}/assets/sass/layouts/editor.scss (100%) rename core/{client => clientold}/assets/sass/layouts/errors.scss (100%) rename core/{client => clientold}/assets/sass/layouts/manage.scss (100%) rename core/{client => clientold}/assets/sass/layouts/plugins.scss (100%) rename core/{client => clientold}/assets/sass/layouts/settings.scss (100%) rename core/{client => clientold}/assets/sass/layouts/users.scss (100%) rename core/{client => clientold}/assets/sass/modules/animations.scss (100%) create mode 100644 core/clientold/assets/sass/modules/bourbon/_bourbon-deprecated-upcoming.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/_bourbon.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_button.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_clearfix.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_font-family.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_hide-text.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_html5-input-types.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_position.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_prefixer.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_retina-image.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_size.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_timing-functions.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/addons/_triangle.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_animation.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_appearance.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_backface-visibility.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_background-image.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_background.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_border-image.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_border-radius.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_box-sizing.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_columns.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_flex-box.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_font-face.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_hidpi-media-query.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_image-rendering.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_inline-block.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_keyframes.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_linear-gradient.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_perspective.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_placeholder.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_radial-gradient.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_transform.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_transition.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/css3/_user-select.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_compact.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_flex-grid.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_grid-width.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_linear-gradient.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_modular-scale.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_px-to-em.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_radial-gradient.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_tint-shade.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/functions/_transition-property-name.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_deprecated-webkit-gradient.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_gradient-positions-parser.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_linear-positions-parser.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_radial-arg-parser.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_radial-positions-parser.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_render-gradients.scss create mode 100644 core/clientold/assets/sass/modules/bourbon/helpers/_shape-size-stripper.scss rename core/{client => clientold}/assets/sass/modules/breakpoint.scss (100%) rename core/{client => clientold}/assets/sass/modules/breakpoint/_context.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/_helpers.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/_no-query.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/_parsers.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/_respond-to.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/_double.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/_query.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/_resolution.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/_single.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/_triple.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/double/_default-pair.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/double/_default.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/double/_double-string.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/resolution/_resolution.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/single/_default.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/breakpoint/parsers/triple/_default.scss (100%) mode change 100755 => 100644 rename core/{client => clientold}/assets/sass/modules/forms.scss (100%) rename core/{client => clientold}/assets/sass/modules/global.scss (100%) rename core/{client => clientold}/assets/sass/modules/icons.scss (100%) rename core/{client => clientold}/assets/sass/modules/mixins.scss (100%) rename core/{client => clientold}/assets/sass/modules/normalize.scss (100%) rename core/{client => clientold}/assets/sass/screen.scss (100%) rename core/{client => clientold}/assets/vendor/chart.min.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/addon/mode/overlay.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/codemirror.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/gfm/gfm.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/gfm/index.html (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/gfm/test.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/markdown/index.html (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/markdown/markdown.js (100%) rename core/{client => clientold}/assets/vendor/codemirror/mode/markdown/test.js (100%) rename core/{client => clientold}/assets/vendor/countable.js (100%) rename core/{client => clientold}/assets/vendor/fastclick.js (96%) rename core/{client => clientold}/assets/vendor/icheck/jquery.icheck.min.js (100%) rename core/{client => clientold}/assets/vendor/jquery.hammer.min.js (100%) rename core/{client => clientold}/assets/vendor/nprogress.js (100%) rename core/{client => clientold}/assets/vendor/packery.pkgd.min.js (100%) rename core/{client => clientold}/assets/vendor/shortcuts.js (100%) rename core/{client => clientold}/assets/vendor/showdown/extensions/ghostdown.js (100%) rename core/{client => clientold}/assets/vendor/showdown/showdown.js (100%) rename core/{client => clientold}/assets/vendor/to-title-case.js (100%) rename core/{client => clientold}/assets/vendor/validator-client.js (100%) rename core/{client => clientold}/helpers/index.js (100%) rename core/{client => clientold}/init.js (100%) rename core/{client => clientold}/markdown-actions.js (100%) rename core/{client => clientold}/mobile-interactions.js (100%) rename core/{client => clientold}/models/base.js (100%) rename core/{client => clientold}/models/post.js (100%) rename core/{client => clientold}/models/settings.js (100%) rename core/{client => clientold}/models/tag.js (100%) rename core/{client => clientold}/models/themes.js (100%) rename core/{client => clientold}/models/uploadModal.js (100%) rename core/{client => clientold}/models/user.js (100%) rename core/{client => clientold}/models/widget.js (100%) rename core/{client => clientold}/router.js (88%) rename core/{client => clientold}/toggle.js (100%) rename core/{client => clientold}/tpl/forgotten.hbs (100%) create mode 100644 core/clientold/tpl/hbs-tpl.js rename core/{client => clientold}/tpl/list-item.hbs (100%) rename core/{client => clientold}/tpl/login.hbs (100%) rename core/{client => clientold}/tpl/modal.hbs (100%) rename core/{client => clientold}/tpl/modals/blank.hbs (100%) rename core/{client => clientold}/tpl/modals/copyToHTML.hbs (100%) rename core/{client => clientold}/tpl/modals/markdown.hbs (100%) rename core/{client => clientold}/tpl/modals/uploadImage.hbs (100%) rename core/{client => clientold}/tpl/notification.hbs (100%) rename core/{client => clientold}/tpl/preview.hbs (100%) rename core/{client => clientold}/tpl/reset.hbs (100%) rename core/{client => clientold}/tpl/settings/general.hbs (100%) rename core/{client => clientold}/tpl/settings/sidebar.hbs (100%) rename core/{client => clientold}/tpl/settings/user-profile.hbs (100%) rename core/{client => clientold}/tpl/signup.hbs (100%) rename core/{client => clientold}/views/base.js (100%) rename core/{client => clientold}/views/blog.js (100%) rename core/{client => clientold}/views/debug.js (100%) rename core/{client => clientold}/views/editor-tag-widget.js (100%) rename core/{client => clientold}/views/editor.js (100%) rename core/{client => clientold}/views/login.js (100%) rename core/{client => clientold}/views/post-settings.js (100%) rename core/{client => clientold}/views/settings.js (100%) diff --git a/.gitignore b/.gitignore index e42137c3dd..9cdab09a61 100644 --- a/.gitignore +++ b/.gitignore @@ -30,14 +30,14 @@ projectFilesBackup .build .dist -/core/client/tpl/hbs-tpl.js -/core/client/assets/css +/core/clientold/tpl/hbs-tpl.js +/core/clientold/assets/css .sass-cache/ -/core/client/assets/sass/config.rb -/core/client/assets/sass/layouts/config.rb -/core/client/assets/sass/modules/config.rb -/core/client/assets/sass/modules/bourbon -/core/client/assets/sass/modules/bourbon/* +/core/clientold/assets/sass/config.rb +/core/clientold/assets/sass/layouts/config.rb +/core/clientold/assets/sass/modules/config.rb +/core/clientold/assets/sass/modules/bourbon +/core/clientold/assets/sass/modules/bourbon/* /core/server/data/export/exported* /docs /_site diff --git a/.npmignore b/.npmignore index 168048682e..14da2fe851 100644 --- a/.npmignore +++ b/.npmignore @@ -11,7 +11,7 @@ content/apps/** !content/apps/README.md node_modules/** core/test/** -core/client/assets/sass/** +core/clientold/assets/sass/** core/server/data/export/exported* **/*.db* *.db* diff --git a/Gruntfile.js b/Gruntfile.js index 64ef36da8f..d258abe1f3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -37,7 +37,8 @@ var path = require('path'), var cfg = { // Common paths to be used by tasks paths: { - adminAssets: './core/client/assets', + // adminAssets: './core/client/', ?? who knows... + adminOldAssets: './core/clientold/assets', build: buildDirectory, releaseBuild: path.join(buildDirectory, 'release'), dist: distDirectory, @@ -50,20 +51,20 @@ var path = require('path'), // Watch files and livereload in the browser during development watch: { handlebars: { - files: ['core/client/tpl/**/*.hbs'], + files: ['core/clientold/tpl/**/*.hbs'], tasks: ['handlebars'] }, sass: { - files: ['<%= paths.adminAssets %>/sass/**/*'], + files: ['<%= paths.adminOldAssets %>/sass/**/*'], tasks: ['sass:admin'] }, concat: { files: [ - 'core/client/*.js', - 'core/client/helpers/*.js', - 'core/client/models/*.js', - 'core/client/tpl/*.js', - 'core/client/views/*.js' + 'core/clientold/*.js', + 'core/clientold/helpers/*.js', + 'core/clientold/models/*.js', + 'core/clientold/tpl/*.js', + 'core/clientold/views/*.js' ], tasks: ['concat'] }, @@ -74,7 +75,7 @@ var path = require('path'), // Theme JS 'content/themes/casper/js/*.js', // Admin CSS - '<%= paths.adminAssets %>/css/*.css', + '<%= paths.adminOldAssets %>/css/*.css', // Admin JS 'core/built/scripts/*.js' ], @@ -83,7 +84,7 @@ var path = require('path'), } }, express: { - // Restart any time client or server js files change + // Restart any time clientold or server js files change files: ['core/server.js', 'core/server/**/*.js'], tasks: ['express:dev'], options: { @@ -152,8 +153,7 @@ var path = require('path'), src: 'core/client/**/*.js' }, exclude: [ - 'core/client/assets/vendor/**/*.js', - 'core/client/tpl/**/*.js' + 'core/client/templates/**/*.js' ] }, shared: { @@ -199,8 +199,8 @@ var path = require('path'), src: ['core/test/integration/**/model*_spec.js'] }, - client: { - src: ['core/test/unit/**/client*_spec.js'] + clientold: { + src: ['core/test/unit/**/clientold*_spec.js'] }, server: { @@ -244,7 +244,7 @@ var path = require('path'), sass: { admin: { files: { - '<%= paths.adminAssets %>/css/screen.css': '<%= paths.adminAssets %>/sass/screen.scss' + '<%= paths.adminOldAssets %>/css/screen.css': '<%= paths.adminOldAssets %>/sass/screen.scss' } }, compress: { @@ -252,7 +252,7 @@ var path = require('path'), style: 'compressed' }, files: { - '<%= paths.adminAssets %>/css/screen.css': '<%= paths.adminAssets %>/sass/screen.scss' + '<%= paths.adminOldAssets %>/css/screen.css': '<%= paths.adminOldAssets %>/sass/screen.scss' } } }, @@ -266,7 +266,7 @@ var path = require('path'), }, // install bourbon bourbon: { - command: 'bourbon install --path <%= paths.adminAssets %>/sass/modules/' + command: 'bourbon install --path <%= paths.adminOldAssets %>/sass/modules/' }, // generate coverage report coverage: { @@ -282,18 +282,18 @@ var path = require('path'), }, // ### Config for grunt-contrib-handlebars - // Compile templates for admin client + // Compile templates for admin clientold handlebars: { core: { options: { namespace: 'JST', processName: function (filename) { - filename = filename.replace('core/client/tpl/', ''); + filename = filename.replace('core/clientold/tpl/', ''); return filename.replace('.hbs', ''); } }, files: { - 'core/client/tpl/hbs-tpl.js': 'core/client/tpl/**/*.hbs' + 'core/clientold/tpl/hbs-tpl.js': 'core/clientold/tpl/**/*.hbs' } } }, @@ -311,11 +311,11 @@ var path = require('path'), 'core/*.js', 'core/server/**/*.js', 'core/shared/**/*.js', - 'core/client/**/*.js' + 'core/clientold/**/*.js' ], 'except': [ '!core/**/vendor/**/*.js', - '!core/client/tpl/**/*.js' + '!core/clientold/tpl/**/*.js' ] } } @@ -365,8 +365,8 @@ var path = require('path'), 'core/built/scripts/vendor.js': [ 'core/shared/vendor/jquery/jquery.js', 'core/shared/vendor/jquery/jquery-ui-1.10.3.custom.min.js', - 'core/client/assets/lib/jquery-utils.js', - 'core/client/assets/lib/uploader.js', + 'core/clientold/assets/lib/jquery-utils.js', + 'core/clientold/assets/lib/uploader.js', 'core/shared/vendor/lodash.underscore.js', 'core/shared/vendor/backbone/backbone.js', 'core/shared/vendor/handlebars/handlebars-runtime.js', @@ -376,42 +376,42 @@ var path = require('path'), 'core/shared/vendor/jquery/jquery.iframe-transport.js', 'core/shared/vendor/jquery/jquery.fileupload.js', - 'core/client/assets/vendor/codemirror/codemirror.js', - 'core/client/assets/vendor/codemirror/addon/mode/overlay.js', - 'core/client/assets/vendor/codemirror/mode/markdown/markdown.js', - 'core/client/assets/vendor/codemirror/mode/gfm/gfm.js', - 'core/client/assets/vendor/showdown/showdown.js', - 'core/client/assets/vendor/showdown/extensions/ghostdown.js', + 'core/clientold/assets/vendor/codemirror/codemirror.js', + 'core/clientold/assets/vendor/codemirror/addon/mode/overlay.js', + 'core/clientold/assets/vendor/codemirror/mode/markdown/markdown.js', + 'core/clientold/assets/vendor/codemirror/mode/gfm/gfm.js', + 'core/clientold/assets/vendor/showdown/showdown.js', + 'core/clientold/assets/vendor/showdown/extensions/ghostdown.js', 'core/shared/vendor/showdown/extensions/github.js', - 'core/client/assets/vendor/shortcuts.js', - 'core/client/assets/vendor/validator-client.js', - 'core/client/assets/vendor/countable.js', - 'core/client/assets/vendor/to-title-case.js', - 'core/client/assets/vendor/packery.pkgd.min.js', - 'core/client/assets/vendor/fastclick.js', - 'core/client/assets/vendor/nprogress.js' + 'core/clientold/assets/vendor/shortcuts.js', + 'core/clientold/assets/vendor/validator-client.js', + 'core/clientold/assets/vendor/countable.js', + 'core/clientold/assets/vendor/to-title-case.js', + 'core/clientold/assets/vendor/packery.pkgd.min.js', + 'core/clientold/assets/vendor/fastclick.js', + 'core/clientold/assets/vendor/nprogress.js' ], 'core/built/scripts/helpers.js': [ - 'core/client/init.js', + 'core/clientold/init.js', - 'core/client/mobile-interactions.js', - 'core/client/toggle.js', - 'core/client/markdown-actions.js', - 'core/client/helpers/index.js' + 'core/clientold/mobile-interactions.js', + 'core/clientold/toggle.js', + 'core/clientold/markdown-actions.js', + 'core/clientold/helpers/index.js' ], 'core/built/scripts/templates.js': [ - 'core/client/tpl/hbs-tpl.js' + 'core/clientold/tpl/hbs-tpl.js' ], 'core/built/scripts/models.js': [ - 'core/client/models/**/*.js' + 'core/clientold/models/**/*.js' ], 'core/built/scripts/views.js': [ - 'core/client/views/**/*.js', - 'core/client/router.js' + 'core/clientold/views/**/*.js', + 'core/clientold/router.js' ] } }, @@ -420,8 +420,8 @@ var path = require('path'), 'core/built/scripts/ghost.js': [ 'core/shared/vendor/jquery/jquery.js', 'core/shared/vendor/jquery/jquery-ui-1.10.3.custom.min.js', - 'core/client/assets/lib/jquery-utils.js', - 'core/client/assets/lib/uploader.js', + 'core/clientold/assets/lib/jquery-utils.js', + 'core/clientold/assets/lib/uploader.js', 'core/shared/vendor/lodash.underscore.js', 'core/shared/vendor/backbone/backbone.js', 'core/shared/vendor/handlebars/handlebars-runtime.js', @@ -431,35 +431,35 @@ var path = require('path'), 'core/shared/vendor/jquery/jquery.iframe-transport.js', 'core/shared/vendor/jquery/jquery.fileupload.js', - 'core/client/assets/vendor/codemirror/codemirror.js', - 'core/client/assets/vendor/codemirror/addon/mode/overlay.js', - 'core/client/assets/vendor/codemirror/mode/markdown/markdown.js', - 'core/client/assets/vendor/codemirror/mode/gfm/gfm.js', - 'core/client/assets/vendor/showdown/showdown.js', - 'core/client/assets/vendor/showdown/extensions/ghostdown.js', + 'core/clientold/assets/vendor/codemirror/codemirror.js', + 'core/clientold/assets/vendor/codemirror/addon/mode/overlay.js', + 'core/clientold/assets/vendor/codemirror/mode/markdown/markdown.js', + 'core/clientold/assets/vendor/codemirror/mode/gfm/gfm.js', + 'core/clientold/assets/vendor/showdown/showdown.js', + 'core/clientold/assets/vendor/showdown/extensions/ghostdown.js', 'core/shared/vendor/showdown/extensions/github.js', - 'core/client/assets/vendor/shortcuts.js', - 'core/client/assets/vendor/validator-client.js', - 'core/client/assets/vendor/countable.js', - 'core/client/assets/vendor/to-title-case.js', - 'core/client/assets/vendor/packery.pkgd.min.js', - 'core/client/assets/vendor/fastclick.js', - 'core/client/assets/vendor/nprogress.js', + 'core/clientold/assets/vendor/shortcuts.js', + 'core/clientold/assets/vendor/validator-client.js', + 'core/clientold/assets/vendor/countable.js', + 'core/clientold/assets/vendor/to-title-case.js', + 'core/clientold/assets/vendor/packery.pkgd.min.js', + 'core/clientold/assets/vendor/fastclick.js', + 'core/clientold/assets/vendor/nprogress.js', - 'core/client/init.js', + 'core/clientold/init.js', - 'core/client/mobile-interactions.js', - 'core/client/toggle.js', - 'core/client/markdown-actions.js', - 'core/client/helpers/index.js', + 'core/clientold/mobile-interactions.js', + 'core/clientold/toggle.js', + 'core/clientold/markdown-actions.js', + 'core/clientold/helpers/index.js', - 'core/client/tpl/hbs-tpl.js', + 'core/clientold/tpl/hbs-tpl.js', - 'core/client/models/**/*.js', + 'core/clientold/models/**/*.js', - 'core/client/views/**/*.js', + 'core/clientold/views/**/*.js', - 'core/client/router.js' + 'core/clientold/router.js' ] } } diff --git a/core/client/README.md b/core/client/README.md new file mode 100644 index 0000000000..d1a4aff4ab --- /dev/null +++ b/core/client/README.md @@ -0,0 +1 @@ +#Ember goes here \ No newline at end of file diff --git a/core/clientold/assets/css/screen.css b/core/clientold/assets/css/screen.css new file mode 100644 index 0000000000..643bb67c45 --- /dev/null +++ b/core/clientold/assets/css/screen.css @@ -0,0 +1 @@ +.editor .entry-title,.box{padding:15px;margin-bottom:15px;background:#fff;position:relative;box-shadow:rgba(0,0,0,0.05) 0 1px 5px}.editor .entry-title header,.box header{height:14px;border-bottom:1px solid #edece4;padding-bottom:15px;margin-bottom:15px;text-transform:uppercase;font-size:0.85em;color:#aaa9a2}.editor .entry-title footer,.box footer{height:14px;border-top:1px solid #edece4;padding-top:10px;margin-top:15px;text-transform:uppercase;font-size:0.85em;color:#aaa9a2}.editor .entry-title header a,.editor .entry-title footer a,.box header a,.box footer a{color:#aaa9a2}.editor .entry-title header a:hover,.editor .entry-title footer a:hover,.box header a:hover,.box footer a:hover{color:#242628;text-decoration:none}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@-moz-keyframes fade-out{from{opacity:1}to{opacity:0}}@-o-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace, serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@font-face{font-family:'Icons';src:url("../fonts/icons.eot");src:url("../fonts/icons.eot?#iefix") format("embedded-opentype"),url("../fonts/icons.woff") format("woff"),url("../fonts/icons.ttf") format("truetype"),url("../fonts/icons.svg#icons") format("svg");font-weight:normal;font-style:normal}@-webkit-keyframes off-canvas{0%{left:0}100%{left:300px}}@-moz-keyframes off-canvas{0%{opacity:0}100%{opacity:1}}@-o-keyframes off-canvas{0%{opacity:0}100%{opacity:1}}@keyframes off-canvas{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-o-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.hidden{text-indent:-9999px;visibility:hidden;display:none}.invisible{visibility:hidden}.right{float:right}.left{float:left}.markdown,pre,code{font-family:Inconsolata,monospace}.visuallyhidden,.screen-reader-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}html{font:normal 81.2%/1.65 "Open Sans", sans-serif}body{width:100%;color:#242628;font-weight:300;background:#edece4}@media (max-width: 400px){body{background:#fff}}::-moz-selection{color:#242628;background:#b3d5f3;text-shadow:none}::selection{color:#242628;background:#b3d5f3;text-shadow:none}article aside{width:30%;padding:0 2.2em;margin:0 2.2em 1.6em 2.2em;float:right;background:#edece4;border-radius:3px}h1,h2,h3,h4,h5,h6{color:#242628;text-rendering:optimizeLegibility;line-height:1;margin-top:0}h2{padding-top:0.8em;margin-top:0.8em;border-top:#edece4 1px solid}h1 a:hover{text-decoration:none;box-shadow:#5ba4e5 0 -5px 0 inset}h2 a:hover{text-decoration:none;box-shadow:#5ba4e5 0 -4px 0 inset}h3 a:hover{text-decoration:none;box-shadow:#5ba4e5 0 -3px 0 inset}h4 a:hover,h5 a:hover,h6 a:hover{text-decoration:none;box-shadow:#5ba4e5 0 -1px 0 inset}hgroup{margin:1.6em 0}hgroup h1,hgroup h2,hgroup h3,hgroup h4,hgroup h5,hgroup h6{padding:0;margin:0;border:none;margin-bottom:5px}hgroup h1 a,hgroup h2 a,hgroup h3 a,hgroup h4 a,hgroup h5 a,hgroup h6 a{color:#242628}hgroup h1 a:hover,hgroup h2 a:hover,hgroup h3 a:hover,hgroup h4 a:hover,hgroup h5 a:hover,hgroup h6 a:hover{box-shadow:#242628 0 -1px 0 inset}hgroup h1:nth-child(n+2),hgroup h2:nth-child(n+2),hgroup h3:nth-child(n+2),hgroup h4:nth-child(n+2),hgroup h5:nth-child(n+2),hgroup h6:nth-child(n+2){font-size:1.8em;font-weight:300;color:#aaa9a2}p,ul,ol{margin:1.6em 0}ol ol,ul ul,ul ol,ol ul{margin:0.4em 0}a{color:#5ba4e5;text-decoration:none;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}a:hover{text-decoration:underline}a.highlight{color:#f2a925;font-weight:bold}hr{display:block;height:1px;border:0;border-top:1px solid #edece4;margin:3.2em 0;padding:0}blockquote{margin:1.6em 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 1.6em 0 1.6em;border-left:#edece4 0.6em solid}blockquote p{margin:0.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:0.8em 0 0.8em 1.5em;font-size:0.9em;color:#aaa9a2}blockquote small:before{content:'\2014 \00A0'}blockquote cite{font-weight:bold}blockquote cite a{font-weight:normal}dl{margin:1.6em 0}dl dt{float:left;width:180px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap;font-weight:bold;margin-bottom:1em}dl dd{margin-left:200px;margin-bottom:1em}mark{background-color:#ffc336}code,tt{font-family:Inconsolata,monospace;font-size:0.85em;white-space:pre-wrap;background:#f1f0ea;border:1px solid #dddbcc;border-radius:2px;padding:1px 3px}pre{margin:1.6em 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#f1f0ea;border:1px solid #dddbcc;width:100%;padding:10px;font-family:Inconsolata,monospace;font-size:0.9em;white-space:pre;overflow:auto;border-radius:3px}pre code,pre tt{font-size:inherit;white-space:-moz-pre-wrap;white-space:pre-wrap;background:transparent;border:none;padding:0}kbd{display:inline-block;margin-bottom:0.4em;padding:1px 8px;border:#ccc 1px solid;color:#242628;text-shadow:#fff 0 1px 0;font-size:0.9em;font-weight:bold;background:#f4f4f4;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,0.2),0 1px 0 0 #fff inset}table{margin:1.6em 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:100%;background-color:transparent}table th,table td{padding:8px;line-height:20px;text-align:left;vertical-align:middle;border-top:1px solid #edece4}table th{color:#aaa9a2}table caption+thead tr:first-child th,table caption+thead tr:first-child td,table colgroup+thead tr:first-child th,table colgroup+thead tr:first-child td,table thead:first-child tr:first-child th,table thead:first-child tr:first-child td{border-top:0}table tbody+tbody{border-top:2px solid #edece4}table table table{background-color:#fff}table tbody>tr:nth-child(odd)>td,table tbody>tr:nth-child(odd)>th{background-color:#f7f7f3}table.plain tbody>tr:nth-child(odd)>td,table.plain tbody>tr:nth-child(odd)>th{background:transparent}nav ul{list-style:none;margin:0;padding:0;border-top:#edece4 1px solid}nav li a{display:block;padding:10px 15px;color:#aaa9a2;border-bottom:#edece4 1px solid}nav li a:hover{color:#242628;background:#edece4;text-decoration:none}nav li a:before{margin-right:1em}.ghost-logo{display:block;float:left;height:40px;padding:12px 15px;color:#4d5356;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ghost-logo:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e000";line-height:0}.ghost-logo:hover{text-decoration:none}.ghost-logo:hover{text-decoration:none}.ghost-logo:hover{color:#e2edf2;background:#1f2123}.navbar{height:40px;font-size:0.85em;background:#242628}@media (max-width: 1000px){.navbar{font-weight:normal}}.navbar nav ul{float:left;border-left:#35393b 1px solid;border-top:none}.navbar nav li{float:left;font-size:1em;position:relative;border-right:#35393b 1px solid}.navbar nav li a{display:block;height:40px;padding:11px 15px;border-bottom:none;color:#7d878a;text-transform:uppercase;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.navbar nav li a:hover,.navbar nav li.active a{color:#e2edf2;text-decoration:none;position:relative;background:#303436;box-shadow:0 -2px 2px rgba(0,0,0,0.2) inset}.navbar nav li.active a:after{content:"";position:absolute;bottom:0;left:50%;margin-left:-5px;border-width:0 5px 5px 5px;border-style:solid;border-color:#edece4 transparent;display:block;width:0}@media (max-width: 400px){.navbar nav li.active a:after{border-color:#fff transparent}}.navbar nav li ul{position:absolute;top:40px;right:0;min-width:200px;background:#242628}.navbar nav li li{width:100%;border-right:none}.navbar nav a:before{margin-right:5px}.navbar nav .dashboard a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e025";vertical-align:-10%}.navbar nav .dashboard a:hover{text-decoration:none}.navbar nav .content a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02d"}.navbar nav .content a:hover{text-decoration:none}.navbar nav .editor a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e032"}.navbar nav .editor a:hover{text-decoration:none}.navbar nav .settings a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e029"}.navbar nav .settings a:hover{text-decoration:none}.navbar .subnav{position:relative}.navbar .subnav>a:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";font-size:8px;margin-left:8px}.navbar .subnav>a:hover{text-decoration:none}.navbar .subnav>a.active{color:#e2edf2;background:#2e3133;-webkit-transition:none;-moz-transition:none;transition:none;box-shadow:none}.navbar .subnav ul{display:none;padding:7px 0;border-left:none;position:absolute;top:40px;left:-1px;z-index:800;background:#2e3133;box-shadow:rgba(0,0,0,0.2) 0 4px 6px}.navbar .subnav li a{color:#e2edf2}.navbar .subnav li a:hover{background:#0c0d0d;-webkit-transition:none;-moz-transition:none;transition:none;box-shadow:none}.navbar .subnav li a:before{margin-right:1em}.navbar .subnav .divider{height:1px;margin:7px 0;overflow:hidden;background:#35393b}.usermenu.subnav{position:absolute;top:0;right:0;border-right:none;border-left:#35393b 1px solid}.usermenu.subnav>a{padding-left:43px}.usermenu.subnav .avatar{height:18px;width:18px;border-radius:50px;position:absolute;top:11px;left:15px}.usermenu.subnav>ul{right:0;left:auto}.usermenu.subnav .usermenu-profile a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02e"}.usermenu.subnav .usermenu-profile a:hover{text-decoration:none}.usermenu.subnav .usermenu-help a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02f";font-size:1.1em}.usermenu.subnav .usermenu-help a:hover{text-decoration:none}.usermenu.subnav .usermenu-shortcuts a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e00d"}.usermenu.subnav .usermenu-shortcuts a:hover{text-decoration:none}.usermenu.subnav .usermenu-signout a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02b"}.usermenu.subnav .usermenu-signout a:hover{text-decoration:none}@media (max-width: 650px){#global-header .ghost-logo{height:40px;width:40px;text-align:center;padding:12px 0;-webkit-transition:margin-left 0.3s ease 0s;-moz-transition:margin-left 0.3s ease 0s;transition:margin-left 0.3s ease 0s}#global-header .ghost-logo:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e005";font-size:14px}#global-header .ghost-logo:hover{text-decoration:none}.off-canvas #global-header .ghost-logo{margin-left:280px;-webkit-transition:margin-left 0.3s ease 0.1s;-moz-transition:margin-left 0.3s ease 0.1s;transition:margin-left 0.3s ease 0.1s}#global-header ul{position:fixed;overflow:auto;top:0;right:auto;bottom:0;left:-280px;z-index:980;width:280px;padding-top:40px;font-weight:normal;background:#242628;border-left:none;-webkit-transition:left 0.3s ease 0.2s;-moz-transition:left 0.3s ease 0.2s;transition:left 0.3s ease 0.2s}.off-canvas #global-header ul{left:0;-webkit-transition:left 0.3s ease 0s;-moz-transition:left 0.3s ease 0s;transition:left 0.3s ease 0s}#global-header li{float:none;border-right:none;border-bottom:#35393b 1px solid}#global-header li a:hover,#global-header li.active a{box-shadow:none}#global-header li.active a:after{display:none}#global-header li a:before{margin-right:1em}#global-header li ul{position:static;min-width:0;background:#242628}#global-header li li{width:auto}#global-header .usermenu{position:fixed;top:0;right:auto;bottom:auto;left:-280px;height:40px;z-index:990;width:279px;border-left:none;border-right:#242728 1px solid;border-bottom:#292c2e 1px solid;background-color:#1d1e20;background-image:-webkit-linear-gradient(bottom, #111213, #1d1e20);background-image:-moz-linear-gradient(bottom, #111213, #1d1e20);background-image:-ms-linear-gradient(bottom, #111213, #1d1e20);background-image:linear,to top,#111213,#1d1e20;-webkit-transition:left 0.3s ease 0.2s;-moz-transition:left 0.3s ease 0.2s;transition:left 0.3s ease 0.2s}.off-canvas #global-header .usermenu{left:0;-webkit-transition:left 0.3s ease 0s;-moz-transition:left 0.3s ease 0s;transition:left 0.3s ease 0s}#global-header .usermenu>a:hover{background:inherit}#global-header .usermenu>a.active{background:#2e3133}#global-header .usermenu>ul{padding:0;box-shadow:none;width:100%;font-weight:300}#global-header .usermenu .open{box-shadow:rgba(0,0,0,0.4) 0 10px 20px}#global-header .usermenu li{border-bottom:#2e3133 1px solid}#global-header .usermenu li a{background:#2e3133}#global-header .usermenu li a:hover{background:#222426}#global-header .usermenu li a:before{margin-right:1em}#global-header .usermenu .divider{display:none}}.dropdown:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";font-size:8px;padding-left:6px;vertical-align:0}.dropdown:hover{text-decoration:none}.dropdown.active{color:#242628}.dropdown.active:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";font-size:8px}.dropdown.active:hover{text-decoration:none}.menu,.menu-left,.menu-right,.menu-drop,.menu-drop-left,.menu-drop-right,#publish-bar .splitbutton-save .editor-options,#publish-bar .splitbutton-delete .editor-options,.suggestions{display:inline-block;position:absolute;z-index:960;padding:6px 0;border:none;list-style:none;color:#e2edf2;background:#242628;border-radius:3px;box-shadow:rgba(0,0,0,0.5) 0 1px 15px}.menu:before,.menu-left:before,.menu-right:before,.menu-drop:before,.menu-drop-left:before,.menu-drop-right:before,#publish-bar .splitbutton-save .editor-options:before,#publish-bar .splitbutton-delete .editor-options:before,.suggestions:before{content:"";position:absolute;bottom:-10px;left:50%;margin-left:-10px;border-width:10px 10px 0 10px;border-style:solid;border-color:#242628 transparent;display:block;width:0}.menu li,.menu-left li,.menu-right li,.menu-drop li,.menu-drop-left li,.menu-drop-right li,#publish-bar .splitbutton-save .editor-options li,#publish-bar .splitbutton-delete .editor-options li,.suggestions li{overflow:hidden}.menu a,.menu-left a,.menu-right a,.menu-drop a,.menu-drop-left a,.menu-drop-right a,#publish-bar .splitbutton-save .editor-options a,#publish-bar .splitbutton-delete .editor-options a,.suggestions a,.menu p,.menu-left p,.menu-right p,.menu-drop p,.menu-drop-left p,.menu-drop-right p,#publish-bar .splitbutton-save .editor-options p,#publish-bar .splitbutton-delete .editor-options p,.suggestions p{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:relative;padding:10px 25px 10px 35px;border:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#e2edf2 !important;text-transform:none;text-decoration:none}.menu a:hover,.menu-left a:hover,.menu-right a:hover,.menu-drop a:hover,.menu-drop-left a:hover,.menu-drop-right a:hover,#publish-bar .splitbutton-save .editor-options a:hover,#publish-bar .splitbutton-delete .editor-options a:hover,.suggestions a:hover,.menu p:hover,.menu-left p:hover,.menu-right p:hover,.menu-drop p:hover,.menu-drop-left p:hover,.menu-drop-right p:hover,#publish-bar .splitbutton-save .editor-options p:hover,#publish-bar .splitbutton-delete .editor-options p:hover,.suggestions p:hover{background:#5ba4e5;box-shadow:rgba(255,255,255,0.2) 0 1px 0 inset,rgba(0,0,0,0.5) 0 1px 5px}.menu .active a:before,.menu-left .active a:before,.menu-right .active a:before,.menu-drop .active a:before,.menu-drop-left .active a:before,.menu-drop-right .active a:before,#publish-bar .splitbutton-save .editor-options .active a:before,#publish-bar .splitbutton-delete .editor-options .active a:before,.suggestions .active a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e033";position:absolute;top:14px;left:11px}.menu .active a:hover,.menu-left .active a:hover,.menu-right .active a:hover,.menu-drop .active a:hover,.menu-drop-left .active a:hover,.menu-drop-right .active a:hover,#publish-bar .splitbutton-save .editor-options .active a:hover,#publish-bar .splitbutton-delete .editor-options .active a:hover,.suggestions .active a:hover{text-decoration:none}.menu-drop:before,.menu-drop-left:before,.menu-drop-right:before{top:-10px;bottom:auto;border-width:0 10px 10px 10px}.menu-left:before,.menu-drop-left:before{left:10px;margin-left:0}.menu-right:before,.menu-drop-right:before,#publish-bar .splitbutton-save .editor-options:before,#publish-bar .splitbutton-delete .editor-options:before{left:auto;right:10px;margin-left:0}.post-settings{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding:0 10px;color:#7d878a;-webkit-transition:all 0.15s ease-out 0;-moz-transition:all 0.15s ease-out 0;transition:all 0.15s ease-out 0;position:relative;top:1px}.post-settings:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e006";font-size:14px}.post-settings:hover{text-decoration:none}.post-settings:hover,.post-settings.active{color:#242628}.post-settings-menu{padding-top:0;text-transform:none}.post-settings-menu table{margin:0}.post-settings-menu td{padding:0;border-top:none;border-bottom:#414648 1px solid}.post-settings-menu .post-setting-label{padding:8px 10px 8px 15px;border-right:#414648 1px solid;text-align:right}.post-settings-menu form label,form .post-settings-menu label,.post-settings-menu form .label,form .post-settings-menu .label{position:static;width:auto;font-weight:normal;color:#7d878a;white-space:nowrap}.post-settings-menu input{width:200px;margin:0}@media (max-width: 550px){.post-settings-menu input{width:200px}}.post-settings-menu input[type="text"]{border:none;padding:8px 0 8px 10px;color:#e2edf2;border-radius:0;background:transparent}.post-settings-menu input[type="text"]:focus{background:#35393b;border:none}.post-settings-menu .post-setting-item{padding:5px 0 0 10px}.post-settings-menu .checkbox{position:relative;margin-top:0;width:18px;border:#4d5356 1px solid;background:#35393b}.post-settings-menu .delete{display:block;padding:10px 15px}.post-settings-menu .delete:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e023";position:relative;top:-1px;margin-right:10px}.post-settings-menu .delete:hover{text-decoration:none}.post-settings-menu .delete:hover{background:#e25440}@media (min-width: 401px), (min-width: 401px){.notifications{position:absolute;bottom:0;left:0;z-index:980;width:300px}}@media (max-width: 400px){.notifications{position:fixed;top:0;left:0;right:0;z-index:9999}}.js-bb-notification{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.notification-success,.notification-error,.notification-warn,.notification-info,.notification{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;min-height:40px;padding:10px 43px 10px 57px;margin:0 0 15px 0;color:rgba(255,255,255,0.9);background:#5ba4e5;position:relative;box-shadow:rgba(0,0,0,0.05) 0 1px 5px;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.notification-success:before,.notification-error:before,.notification-warn:before,.notification-info:before,.notification:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e031";position:absolute;top:0;left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;width:44px;padding:14px 15px;text-align:center;color:rgba(255,255,255,0.8);background:rgba(0,0,0,0.1)}.notification-success:hover,.notification-error:hover,.notification-warn:hover,.notification-info:hover,.notification:hover{text-decoration:none}@media (max-width: 400px){.notification-success,.notification-error,.notification-warn,.notification-info,.notification{margin-bottom:1px}}.notification-success .close,.notification-error .close,.notification-warn .close,.notification-info .close,.notification .close{display:inline-block;color:rgba(255,255,255,0.6);cursor:pointer}.notification-success .close:after,.notification-error .close:after,.notification-warn .close:after,.notification-info .close:after,.notification .close:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e01c";padding:6px;position:absolute;top:8px;right:9px}.notification-success .close:hover,.notification-error .close:hover,.notification-warn .close:hover,.notification-info .close:hover,.notification .close:hover{text-decoration:none}.notification-success .close:hover,.notification-error .close:hover,.notification-warn .close:hover,.notification-info .close:hover,.notification .close:hover{color:#fff}.notification-success a,.notification-error a,.notification-warn a,.notification-info a,.notification a{color:inherit;text-decoration:underline}.notification-success{background:#9fbb58}.notification-success:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e030"}.notification-success:hover{text-decoration:none}.notification-success.notification-passive{-webkit-animation:fade-out 1s linear;-moz-animation:fade-out 1s linear;animation:fade-out 1s linear;-webkit-animation-delay:3s;-moz-animation-delay:3s;animation-delay:3s;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-fill-mode:forwards;-moz-animation-fill-mode:forwards;animation-fill-mode:forwards}.notification-error{background:#e25440}.notification-error:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e01a"}.notification-error:hover{text-decoration:none}.notification-warn{background:#f2a925}.notification-warn:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e014"}.notification-warn:hover{text-decoration:none}.notification-info{background:#5ba4e5}.notification-info:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e014"}.notification-info:hover{text-decoration:none}.update-available main{bottom:56px}#modal-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:none;position:fixed;top:0;bottom:0;left:0;right:0;overflow-x:auto;overflow-y:scroll;z-index:1040;pointer-events:none;-webkit-transition:all 0.15s linear 0s;-moz-transition:all 0.15s linear 0s;transition:all 0.15s linear 0s;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.fade{opacity:0;-webkit-transition:opacity 0.2s linear 0s;-moz-transition:opacity 0.2s linear 0s;transition:opacity 0.2s linear 0s;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.fade.in{opacity:1}.modal-background{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,0.4);z-index:1030}.modal-info,.modal-action,.modal{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;left:50%;right:auto;width:450px;margin-left:auto;margin-right:auto;padding-top:30px;padding-bottom:30px;z-index:1050;pointer-events:auto}@media (max-width: 800px){.modal-info,.modal-action,.modal{width:auto;padding:10px}}.modal-info button,.modal-action button,.modal button{min-width:100px}@media (max-width: 800px){.modal-info,.modal-action,.modal{width:100%;margin-left:0}}.modal-info .image-uploader,.modal-action .image-uploader,.modal-info .pre-image-uploader,.modal-action .pre-image-uploader,.modal .image-uploader,.modal .pre-image-uploader{margin:0}.modal-action{padding:60px 0 30px}@media (max-width: 800px){.modal-action{padding:30px 0}}.modal-content{-webkit-box-sizing:padding-box;-moz-box-sizing:padding-box;box-sizing:padding-box;position:relative;padding:20px;background-clip:padding-box;background-color:#FFFFFF;border-radius:2px;box-shadow:rgba(0,0,0,0.2) 0 0 0 6px}.modal-content .close{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;top:15px;right:15px;width:16px;min-height:16px;padding:0;margin:0;border:none;z-index:9999;-webkit-transition:opacity 0.3s linear;-moz-transition:opacity 0.3s linear;transition:opacity 0.3s linear}.modal-content .close:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e034";font-size:1em;color:#7d878a}.modal-content .close:hover{text-decoration:none}.modal-content .close:hover{color:#242628}.modal-header{position:relative;padding:20px;border-bottom:1px solid #edece4}.modal-header h1{display:inline-block;margin:0;font-size:1.5em;font-weight:bold}.modal-body{position:relative;min-height:100px;overflow-y:auto}.modal-footer{margin-top:20px}.modal-style-wide{width:550px}@media (max-width: 800px){.modal-style-wide{width:100%}}.modal-style-centered{text-align:center}main{position:absolute;top:55px;right:15px;bottom:0;left:15px;padding:0}@media (max-width: 400px){main{top:40px;left:0;right:0}}.floatingheader{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;top:0;left:0;right:0;z-index:400;height:40px;padding:10px 15px;text-transform:uppercase;color:#aaa9a2;background-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff),color-stop(25%, #fff),color-stop(100%, rgba(255,255,255,0.9)));background-image:-webkit-linear-gradient(top, #fff 0%,#fff 25%,rgba(255,255,255,0.9) 100%);background-image:linear-gradient(to bottom,#fff 0%,#fff 25%,rgba(255,255,255,0.9) 100%)}.floatingheader button,.floatingheader .button{display:inline-block;font-size:10px;min-height:20px;height:20px;padding:3px 4px;vertical-align:top}.floatingheader button.button-back,.floatingheader .button.button-back{position:relative;top:-2px;left:3px;display:none;padding:0 6px 0 3px}.floatingheader button.button-back:active,.floatingheader .button.button-back:active{box-shadow:none}.floatingheader button.button-back:before,.floatingheader .button.button-back:before{left:-8px;border-width:10px 8px 10px 0}@media (max-width: 800px){.floatingheader button.button-back,.floatingheader .button.button-back{display:inline-block}}.floatingheader small{font-size:0.85em}.floatingheader a{color:#aaa9a2}.floatingheader a:hover{color:#242628}.scrolling .floatingheader{box-shadow:rgba(0,0,0,0.02) 0 1px 2px,rgba(255,255,255,0.5) 0 -1px 0 inset}.scrolling .floatingheader::before{content:"";height:40px;width:80%;position:absolute;bottom:0;left:50%;margin-left:-40%;box-shadow:rgba(0,0,0,0.02) 0 2px 2px}.scrolling .floatingheader::after{content:"";height:40px;width:30%;position:absolute;bottom:0;left:50%;margin-left:-15%;box-shadow:rgba(0,0,0,0.02) 0 3px 3px}.image-uploader{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1.6em 0;position:relative;overflow:hidden;padding:55px 60px;border:#edece4 3px dashed;width:100%;height:auto;text-align:center;color:#aaa9a2;background:#F9F8F5}.image-uploader a{color:#aaa9a2;text-decoration:none}.image-uploader a:hover{color:#242628}.image-uploader .description{margin-top:10px}.image-uploader .media:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e011";font-size:60px;color:#e7e6db;display:inline-block;vertical-align:initial;-webkit-transition:transform 1s ease;-moz-transition:transform 1s ease;transition:transform 1s ease}.image-uploader .media:hover{text-decoration:none}.image-uploader .image-url,.image-uploader .image-upload{line-height:12px;padding:10px;display:block;position:absolute;bottom:0;left:0;color:#aaa9a2;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.image-uploader .image-url:hover,.image-uploader .image-upload:hover{cursor:pointer}.image-uploader .image-webcam:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e036";font-size:12px}.image-uploader .image-webcam:hover{text-decoration:none}.image-uploader .image-url:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e035";font-size:12px}.image-uploader .image-url:hover{text-decoration:none}.image-uploader .image-upload:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e011";font-size:12px}.image-uploader .image-upload:hover{text-decoration:none}.image-uploader .button-add{display:inline-block;position:relative;z-index:700;color:#fff;padding-left:5px}.image-uploader .button-save{margin:0 0 0 10px}.image-uploader input.main{position:absolute;right:0;margin:0;opacity:0;-webkit-transform-origin:right;-moz-transform-origin:right;-ms-transform-origin:right;-o-transform-origin:right;transform-origin:right;-webkit-transform:scale(14);-moz-transform:scale(14);-ms-transform:scale(14);-o-transform:scale(14);transform:scale(14);font-size:23px;direction:ltr;cursor:pointer}.image-uploader input.main.right{right:9999px;height:0}.image-uploader input.url{font:-webkit-small-control;box-sizing:border-box;width:276px;vertical-align:middle;padding:9px 7px;margin:10px 0;outline:0;font-size:1.1em;background:#fff;border:#e3e1d5 1px solid;border-radius:4px;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out}.image-uploader .progress{position:relative;margin:-19px 0 44px 0;display:block;overflow:hidden;background-color:#f5f5f5;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5),color-stop(100%, #f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 1px 2px inset}.image-uploader .fileupload-loading{display:block;top:50%;width:35px;height:28px;margin:-28px auto 0;background-size:contain}.image-uploader .failed{position:relative;top:-40px;font-size:16px}.image-uploader .bar{height:12px;background:#5ba4e5}.image-uploader .bar.fail{background:#e25440}.pre-image-uploader{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1.6em 0;position:relative;overflow:hidden;height:auto;color:#aaa9a2;background:rgba(0,0,0,0.1);border-radius:2px;min-height:46px}.pre-image-uploader input{position:absolute;left:9999px;opacity:0}.pre-image-uploader a{z-index:10000;color:#aaa9a2;text-decoration:none}.pre-image-uploader a:hover{color:#242628}.pre-image-uploader img{display:block;max-width:100%;margin:0 auto;line-height:0}.pre-image-uploader .image-cancel{position:absolute;top:10px;right:10px;padding:8px;z-index:300;color:#fff;text-decoration:none;line-height:0;border-radius:2px;background:rgba(0,0,0,0.6);box-shadow:rgba(255,255,255,0.2) 0 0 0 1px}.pre-image-uploader .image-cancel:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e023";font-size:11px}.pre-image-uploader .image-cancel:hover{text-decoration:none}.pre-image-uploader .image-cancel:hover{color:#fff;cursor:pointer;background:#e25440}#nprogress{pointer-events:none;-webkit-pointer-events:none}#nprogress .bar{background:#5ba4e5;position:fixed;z-index:100;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #5ba4e5,0 0 5px #5ba4e5;opacity:1.0;-webkit-transform:rotate(3deg) translate(0px, -4px);-moz-transform:rotate(3deg) translate(0px, -4px);-ms-transform:rotate(3deg) translate(0px, -4px);-o-transform:rotate(3deg) translate(0px, -4px);transform:rotate(3deg) translate(0px, -4px)}#nprogress .spinner{display:block;position:fixed;z-index:100;top:15px;right:15px}#nprogress .spinner-icon{width:14px;height:14px;border:solid 2px transparent;border-top-color:#5ba4e5;border-left-color:#5ba4e5;border-radius:10px;-webkit-animation:nprogress-spinner 400ms linear infinite;-moz-animation:nprogress-spinner 400ms linear infinite;-ms-animation:nprogress-spinner 400ms linear infinite;-o-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes nprogress-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes nprogress-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes nprogress-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg);transform:rotate(0deg)}100%{transform:rotate(360deg);transform:rotate(360deg)}}.wrapper{position:relative}.palette{margin-bottom:15px}.palette section{padding:5px 10px;width:90px;height:90px;float:left;color:rgba(0,0,0,0.5);position:relative;font-size:12px;font-weight:bold;font-family:Inconsolata,monospace;overflow:hidden;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.palette section:hover{box-shadow:rgba(0,0,0,0.05) 5px 0 0 inset,rgba(0,0,0,0.05) -5px 0 0 inset,rgba(0,0,0,0.05) 0 5px 0 inset,rgba(0,0,0,0.05) 0 -5px 0 inset;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.palette section small{position:absolute;top:20px;left:10px;font-size:11px;font-weight:normal;font-family:"Open Sans",sans-serif;display:block;width:100px;opacity:0.6;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.palette section:hover small{opacity:1;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.palette .brown{background:#aaa9a2}.palette .midbrown{background:#c0bfb6}.palette .lightbrown{background:#edece4}.palette .darkgrey{color:rgba(255,255,255,0.5);background:#242628}.palette .grey{color:rgba(255,255,255,0.5);background:#35393b}.palette .midgrey{background:#7d878a}.palette .lightgrey{background:#e2edf2}.palette .blue{color:#fff;background:#5ba4e5}.palette .red{color:#fff;background:#e25440}.palette .orange{color:#fff;background:#f2a925}form label,form .label{display:inline-block;position:absolute;top:0.5em;left:0;width:120px;font-weight:bold;color:#aaa9a2;text-align:right}@media (max-width: 550px){form label,form .label{display:block;position:relative;top:auto;left:auto;width:auto;margin-bottom:5px;text-align:left}}form p{max-width:400px;color:#9e9d95;font-size:1em;margin:0}fieldset{border:none;margin:0 0 3em 0;padding:0}legend{display:block;width:100%;margin:2em 0;border-bottom:#edece4 1px solid;font-size:1.2em;line-height:2.0em;color:#aaa9a2}input,textarea,select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:276px;padding:5px 7px;margin:0;outline:0;font-size:1.1em;line-height:1.4em;background:#fff;border:#e3e1d5 1px solid;border-radius:2px;-webkit-transition:all 0.15s ease-in-out;-moz-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}@media (max-width: 550px){input,textarea,select{width:100%}}textarea{width:100%;max-width:340px;min-width:250px;height:auto;min-height:6.5em}input,select,textarea{margin-bottom:5px}input[type="text"]:focus,input[type="email"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="url"]:focus,input[type="password"]:focus,input[type="number"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,textarea:focus{border:#aaa9a2 1px solid;background:#fff;outline:none;outline-width:0}select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:270px;height:30px;line-height:30px}@media (max-width: 550px){select{width:100%}}@-moz-document url-prefix(){select{height:auto}}.form-group{position:relative;margin:1.5em 0;padding-left:140px}@media (max-width: 550px){.form-group{padding-left:0}}input[type="checkbox"]{display:none}.checkbox{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;top:auto;margin-top:0.5em;display:inline-block;width:18px;height:18px;cursor:pointer;border-radius:2px;background:#f7f7f3;border:#e3e1d5 1px solid;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease}.checkbox:after{opacity:0;content:"";position:absolute;width:7px;height:3px;top:5px;left:4px;border:3px solid #fff;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease}input[type=checkbox]:checked+.checkbox{background:#9fbb58;border:#b4ca7c}input[type=checkbox]:checked+.checkbox:after{opacity:1}.button,button,input[type="button"],.button-save,button[type="submit"],input[type="submit"],.button-add,.button-delete,button[type="reset"],input[type="reset"],.button-alt,.button-link,.button-back{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;min-height:35px;width:auto;display:inline-block;padding:0.9em 1.37em;cursor:pointer;text-decoration:none;color:#fff;font-size:11px;line-height:13px;font-weight:300;text-align:center;letter-spacing:1px;text-transform:uppercase;text-shadow:none;border-radius:0.2em;border:rgba(0,0,0,0.05) 0.1em solid;-webkit-transition:background 0.3s ease,border-color 0.3s ease;-moz-transition:background 0.3s ease,border-color 0.3s ease;transition:background 0.3s ease,border-color 0.3s ease}.button:hover,button:hover,input[type="button"]:hover,.button-save:hover,input[type="submit"]:hover,.button-add:hover,.button-delete:hover,input[type="reset"]:hover,.button-alt:hover,.button-link:hover,.button-back:hover{border-color:transparent;background:#f8f8f8;text-decoration:none}.button:active,button:active,input[type="button"]:active,.button-save:active,input[type="submit"]:active,.button-add:active,.button-delete:active,input[type="reset"]:active,.button-alt:active,.button-link:active,.button-back:active{box-shadow:rgba(0,0,0,0.3) 0 1px 3px inset}.button:disabled,button:disabled,input[type="button"]:disabled,.button-save:disabled,input[type="submit"]:disabled,.button-add:disabled,.button-delete:disabled,input[type="reset"]:disabled,.button-alt:disabled,.button-link:disabled,.button-back:disabled{opacity:0.5;cursor:not-allowed}.large.button,button.large,input.large[type="button"],.large.button-save,input.large[type="submit"],.large.button-add,.large.button-delete,input.large[type="reset"],.large.button-alt,.large.button-link,.large.button-back{padding:1em 1.8em;font-size:14px;line-height:16px}.button,button,input[type="button"]{color:#777;font-weight:normal;background:#eee;box-shadow:none}.button:hover,button:hover,input[type="button"]:hover{border-color:rgba(0,0,0,0.1)}.button-save,button[type="submit"],input[type="submit"]{background:#5ba4e5;box-shadow:none}.button-save:hover,button[type="submit"]:hover,input[type="submit"]:hover{background:#2f8cde}.button-add{background:#9fbb58}.button-add:hover{background:#8ba644}.button-delete,button[type="reset"],input[type="reset"]{background:#e25440;box-shadow:none}.button-delete:hover,button[type="reset"]:hover,input[type="reset"]:hover{background:#cf3520}.button-alt{background:#3c4043}.button-alt:hover{background:#242628}.button-link{color:#5ba4e5;background:transparent;border:none}.button-link:hover{background:transparent;text-decoration:underline}.button-back{position:absolute;top:20px;left:20px;margin-right:30px;padding:0.5em 1.37em 0.5em 1.10em;display:none;color:#fff;background:#5ba4e5;border:none;border-top-left-radius:0;border-bottom-left-radius:0}.button-back:before{content:' ';position:absolute;top:0;left:-10px;width:0;height:0;border-width:18px 10px 18px 0;border-color:transparent #5ba4e5 transparent transparent;border-style:solid solid solid none;-webkit-transform:scale(0.9999);-moz-transform:scale(0.9999);-ms-transform:scale(0.9999);-o-transform:scale(0.9999);transform:scale(0.9999);-webkit-transition:border-color 0.3s ease;-moz-transition:border-color 0.3s ease;transition:border-color 0.3s ease}.button-back:hover{color:#fff;background:#2f8cde;border-color:#2f8cde}.button-back:hover:before{border-right-color:#2f8cde}@media (max-width: 800px){.button-back{display:inline-block}}.splitbutton,.splitbutton-save,.splitbutton-add,.splitbutton-delete,.splitbutton-alt{display:inline-block;position:relative;font-size:0;white-space:nowrap}.splitbutton button,.splitbutton-save button,.splitbutton-add button,.splitbutton-delete button,.splitbutton-alt button{font-size:11px;border-top-right-radius:0;border-bottom-right-radius:0}.splitbutton .options,.splitbutton-save .options,.splitbutton-add .options,.splitbutton-delete .options,.splitbutton-alt .options{display:inline-block;position:relative;width:35px;height:35px;margin-left:-1px;vertical-align:top;text-align:center;color:#fff;background:#e5e5e5;border-radius:0 2px 2px 0;box-shadow:rgba(0,0,0,0.02) 0 1px 0 inset,rgba(0,0,0,0.02) -1px 0 0 inset,rgba(0,0,0,0.02) 0 -1px 0 inset;-webkit-transition:background-color 0.3s linear;-moz-transition:background-color 0.3s linear;transition:background-color 0.3s linear}.splitbutton .options:before,.splitbutton-save .options:before,.splitbutton-add .options:before,.splitbutton-delete .options:before,.splitbutton-alt .options:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";font-size:9px;position:absolute;top:50%;right:50%;margin-top:-3px;margin-right:-5px;-webkit-transition:margin-top 0.3s ease;-moz-transition:margin-top 0.3s ease;transition:margin-top 0.3s ease;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform;-webkit-transition-duration:0.3;-moz-transition-duration:0.3;transition-duration:0.3;-webkit-transition-timing-function:ease;-moz-transition-timing-function:ease;transition-timing-function:ease}.splitbutton .options:hover,.splitbutton-save .options:hover,.splitbutton-add .options:hover,.splitbutton-delete .options:hover,.splitbutton-alt .options:hover{text-decoration:none}.splitbutton .options.active:before,.splitbutton-save .options.active:before,.splitbutton-add .options.active:before,.splitbutton-delete .options.active:before,.splitbutton-alt .options.active:before{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}.splitbutton .options.up.active:before,.splitbutton-save .options.up.active:before,.splitbutton-add .options.up.active:before,.splitbutton-delete .options.up.active:before,.splitbutton-alt .options.up.active:before{margin-top:-4px;-webkit-transform:rotate(540deg);-moz-transform:rotate(540deg);-ms-transform:rotate(540deg);-o-transform:rotate(540deg);transform:rotate(540deg)}.splitbutton .options:hover,.splitbutton-save .options:hover,.splitbutton-add .options:hover,.splitbutton-delete .options:hover,.splitbutton-alt .options:hover{box-shadow:none;background:#f8f8f8}.splitbutton .options:hover:before,.splitbutton-save .options:hover:before,.splitbutton-add .options:hover:before,.splitbutton-delete .options:hover:before,.splitbutton-alt .options:hover:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}.splitbutton .options:hover:hover,.splitbutton-save .options:hover:hover,.splitbutton-add .options:hover:hover,.splitbutton-delete .options:hover:hover,.splitbutton-alt .options:hover:hover{text-decoration:none}.splitbutton .options.up:hover:before,.splitbutton-save .options.up:hover:before,.splitbutton-add .options.up:hover:before,.splitbutton-delete .options.up:hover:before,.splitbutton-alt .options.up:hover:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e001";margin-top:-4px;-webkit-transform:rotate(540deg);-moz-transform:rotate(540deg);-ms-transform:rotate(540deg);-o-transform:rotate(540deg);transform:rotate(540deg);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform;-webkit-transition-duration:0.6;-moz-transition-duration:0.6;transition-duration:0.6;-webkit-transition-timing-function:ease;-moz-transition-timing-function:ease;transition-timing-function:ease}.splitbutton .options.up:hover:hover,.splitbutton-save .options.up:hover:hover,.splitbutton-add .options.up:hover:hover,.splitbutton-delete .options.up:hover:hover,.splitbutton-alt .options.up:hover:hover{text-decoration:none}.splitbutton .options{color:#777}.splitbutton .options:hover{box-shadow:rgba(0,0,0,0.07) 0 1px 0 inset,rgba(0,0,0,0.07) -1px 0 0 inset,rgba(0,0,0,0.07) 0 -1px 0 inset}.splitbutton-save .options{background:#4598e2}.splitbutton-save .options:hover,.splitbutton-save .options.active{background:#2f8cde}.splitbutton-add .options{background:#91ae47}.splitbutton-add .options:hover{background:#8ba644}.splitbutton-delete .options{background:#de3c25}.splitbutton-delete .options:hover{background:#cf3520}.splitbutton-alt .options{background:#2e3033}.splitbutton-alt .options:hover{background:#242628}.manage .content-view-container{position:relative;height:100%;width:100%}@media (max-width: 800px){.manage .content-view-container{overflow-x:hidden}}.manage .content-list{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:35%;padding:15px;position:absolute;bottom:0;top:0;left:0;border-right:#edece4 2px solid;background:#fff;box-shadow:rgba(0,0,0,0.05) 0 1px 5px}@media (max-width: 800px){.manage .content-list{width:auto;right:0;z-index:500;border:none}}.manage .content-list .content-filter{position:relative;z-index:300}.manage .content-list .content-filter>a{padding:5px;margin-left:-5px}.manage .content-list .content-filter .menu-drop{display:block}.manage .content-list .button-add{position:absolute;top:10px;right:15px;z-index:700;color:#fff;padding-left:5px}.manage .content-list .button-add:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e032"}.manage .content-list .button-add:hover{text-decoration:none}.manage .content-list .content-list-content{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;padding-top:40px}.manage .content-list .entry-title{font-size:1.4em;line-height:1.1em;margin-bottom:0.5em;font-weight:normal}.manage .content-list .views{float:right;text-align:right;margin-left:15px}.manage .content-list .views:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e025";font-size:10px;color:#aaa9a2}.manage .content-list .views:hover{text-decoration:none}@media (max-width: 800px){.manage .content-list .views{float:none}}.manage .content-list .featured .status:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e026";font-size:11px;margin-right:10px;vertical-align:7%}.manage .content-list .featured .status:hover{text-decoration:none}.manage .content-list .status .draft{color:#e25440}.manage .content-list .status .scheduled{color:#f2a925}.manage .content-list ol{list-style:none;padding:0;margin:0;border-top:#edece4 1px solid}.manage .content-list ol li{margin:0;padding:0;border-bottom:#edece4 1px solid;position:relative}.manage .content-list ol li a{display:block;padding:20px 15px;color:#aaa9a2}@media (max-width: 400px){.manage .content-list ol li a{padding:15px}}@media (max-width: 800px){.manage .content-list ol li a{padding-right:40px}}.manage .content-list ol li a:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e01d";position:absolute;top:50%;margin-top:-6px;right:15px}.manage .content-list ol li a:hover{text-decoration:none}@media (min-width: 800px), (min-width: 800px){.manage .content-list ol li a::after{display:none}}.manage .content-list ol li a:hover{text-decoration:none}@media (min-width: 800px), (min-width: 800px){.manage .content-list ol li.active{border-bottom:#e8eaeb 1px solid;background:#f6f6f7;box-shadow:#e8eaeb 0 -1px 0,rgba(0,0,0,0.06) 7px 0 0 inset,#e8eaeb 1px 0 0 inset}.manage .content-list ol li.active a:hover{box-shadow:rgba(0,0,0,0.1) 7px 0 0 inset;-webkit-transition:all 0.4s ease;-moz-transition:all 0.4s ease;transition:all 0.4s ease}.manage .content-list ol li.active .entry-title{font-weight:bold}.manage .content-list ol li.active .entry-meta{color:#242628}.manage .content-list ol li.active .views{color:#242628;font-weight:normal}.manage .content-list ol li.active .views:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e025";font-size:10px;color:#242628}.manage .content-list ol li.active .views:hover{text-decoration:none}}.manage .content-preview{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:65%;padding:15px;position:absolute;bottom:0;top:0;right:0;border-left:#edece4 2px solid;background:#fff;box-shadow:rgba(0,0,0,0.05) 0 1px 5px}@media (max-width: 800px){.manage .content-preview{width:auto;left:100%;right:-100%;margin-left:15px;border:none}}.manage .content-preview .unfeatured{vertical-align:-6%;margin:0 7px 0 -5px;padding:5px}.manage .content-preview .unfeatured:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e027";font-size:14px}.manage .content-preview .unfeatured:hover{text-decoration:none}.manage .content-preview .featured{vertical-align:-6%;margin:0 7px 0 -5px;padding:5px}.manage .content-preview .featured:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e026";font-size:14px}.manage .content-preview .featured:hover{text-decoration:none}.manage .content-preview .normal{text-transform:none;margin:0 3px}.manage .content-preview .content-preview-content{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;padding:80px 40px;word-break:break-word;hyphens:auto}.manage .content-preview .content-preview-content .wrapper{max-width:700px;margin:0 auto}.manage .content-preview .post-controls{float:right;position:relative}.manage .content-preview .post-settings-menu{position:absolute;top:35px;right:-3px}.manage .content-preview .post-edit{margin-right:7px;padding:5px}.manage .content-preview .post-edit:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e00f";font-size:14px}.manage .content-preview .post-edit:hover{text-decoration:none}.manage .content-preview img{width:100%;height:auto}.manage .no-posts-box{position:relative;height:90%;margin:0px auto;padding:0px;display:table;z-index:600}@media (max-width: 800px){.manage .no-posts-box{position:fixed;top:45%;left:50%}}.manage .no-posts-box .no-posts{vertical-align:middle;display:table-cell;text-align:center}@media (max-width: 800px){.manage .no-posts-box .no-posts{display:block;position:relative;left:-50%}}.manage .no-posts-box .no-posts h3{color:#aaa9a2;font-weight:200;font-size:2em}@media (min-width: 401px), (min-width: 401px){.editor .notifications{bottom:40px}}.editor .entry-title{height:53px;padding:2px 15px;margin-bottom:5px;position:relative}@media (max-width: 400px){.editor .entry-title{box-shadow:none}}.editor .entry-title input{border:0;margin:0;padding:0;font-size:3em;font-weight:bold;letter-spacing:-1px;width:100%;background:transparent}.editor .entry-title input:focus{outline:0}.editor .entry-container{position:relative;height:100%}.editor .entry-markdown{left:0;border-right:#edece4 2px solid}.editor .entry-preview{right:0;border-left:#edece4 2px solid}.editor .entry-markdown,.editor .entry-preview{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;padding:15px;position:absolute;bottom:40px;top:61px;background:#fff;box-shadow:rgba(0,0,0,0.05) 0 1px 5px}@media (max-width: 400px){.editor .entry-markdown,.editor .entry-preview{box-shadow:none}}@media (max-width: 1000px){.editor .entry-markdown,.editor .entry-preview{top:109px;left:0;right:0;width:100%;border:none;z-index:100;min-height:380px}.editor .entry-markdown .markdown,.editor .entry-markdown .entry-preview-content,.editor .entry-preview .markdown,.editor .entry-preview .entry-preview-content{height:50px;overflow:hidden}}@media (max-width: 1000px){.editor .entry-markdown .floatingheader,.editor .entry-preview .floatingheader{cursor:pointer;width:50%;border-right:#edece4 2px solid;color:#fff;font-weight:normal;background:#aaa9a2;position:absolute;top:-40px;left:0;box-shadow:rgba(0,0,0,0.1) 0 -2px 3px inset}.editor .entry-markdown .floatingheader a,.editor .entry-preview .floatingheader a{color:#fff}}.editor .entry-markdown .floatingheader a,.editor .entry-preview .floatingheader a{color:#aaa9a2}.editor .entry-markdown .floatingheader .markdown-help,.editor .entry-preview .floatingheader .markdown-help{position:relative;top:-5px;right:-5px;float:right;padding:5px}.editor .entry-markdown .floatingheader .markdown-help:before,.editor .entry-preview .floatingheader .markdown-help:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e018";color:#cfceca}.editor .entry-markdown .floatingheader .markdown-help:hover,.editor .entry-preview .floatingheader .markdown-help:hover{text-decoration:none}.editor .entry-markdown .floatingheader .markdown-help:hover:before,.editor .entry-preview .floatingheader .markdown-help:hover:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e018";color:#aaa9a2}.editor .entry-markdown .floatingheader .markdown-help:hover:hover,.editor .entry-preview .floatingheader .markdown-help:hover:hover{text-decoration:none}.editor .entry-markdown .floatingheader .entry-word-count,.editor .entry-preview .floatingheader .entry-word-count{float:right}.editor .entry-markdown.active,.editor .entry-preview.active{z-index:200}.editor .entry-markdown.active .markdown,.editor .entry-markdown.active .entry-preview-content,.editor .entry-preview.active .markdown,.editor .entry-preview.active .entry-preview-content{height:auto;overflow:auto}@media (max-width: 1000px){.editor .entry-markdown.active header,.editor .entry-preview.active header{cursor:auto;color:#aaa9a2;background:#fff;box-shadow:none}.editor .entry-markdown.active header a,.editor .entry-preview.active header a{color:#aaa9a2}}@media (max-width: 400px){.editor .entry-markdown .markdown-help,.editor .entry-markdown .entry-word-count,.editor .entry-preview .markdown-help,.editor .entry-preview .entry-word-count{display:none}}.editor .entry-markdown-content textarea{border:0;width:100%;height:100%;max-width:100%;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0}.editor .entry-markdown-content textarea:focus{outline:0}.editor .entry-markdown-content .CodeMirror{height:auto;position:absolute;top:0;left:0;right:0;bottom:0;font-family:Inconsolata,monospace;font-size:1.4em;line-height:1.3em;color:#3c4043}.editor .entry-markdown-content .CodeMirror .CodeMirror-focused,.editor .entry-markdown-content .CodeMirror .CodeMirror-selected{color:#242628;background:#b3d5f3;text-shadow:none}.editor .entry-markdown-content .CodeMirror ::selection{color:#242628;background:#b3d5f3;text-shadow:none}.editor .entry-markdown-content .CodeMirror-lines{padding:65px 0 40px 0}@media (max-width: 1000px){.editor .entry-markdown-content .CodeMirror-lines{padding-top:25px}}@media (max-width: 400px){.editor .entry-markdown-content .CodeMirror-lines{padding:15px 0}}.editor .entry-markdown-content .CodeMirror pre{padding:0 40px}@media (max-width: 400px){.editor .entry-markdown-content .CodeMirror pre{padding:0 15px}}.editor .entry-markdown-content .cm-header{color:#000;font-size:1.4em;line-height:1.4em;font-weight:bold}.editor .entry-markdown-content .cm-variable-2,.editor .entry-markdown-content .cm-variable-3,.editor .entry-markdown-content .cm-keyword{color:#3c4043}.editor .entry-markdown-content .cm-string,.editor .entry-markdown-content .cm-strong,.editor .entry-markdown-content .cm-link,.editor .entry-markdown-content .cm-comment,.editor .entry-markdown-content .cm-quote,.editor .entry-markdown-content .cm-number,.editor .entry-markdown-content .cm-atom,.editor .entry-markdown-content .cm-tag{color:#000;font-weight:bold}@media (max-width: 1000px){.editor .entry-preview .floatingheader{right:0;left:auto;border-right:none;border-left:#edece4 2px solid}}.editor .entry-preview .entry-preview-content{position:absolute;top:0;right:0;bottom:0;left:0;padding:60px 40px 40px 40px;overflow:auto;word-break:break-word;hyphens:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}@media (max-width: 1000px){.editor .entry-preview .entry-preview-content{padding-top:20px}}@media (max-width: 400px){.editor .entry-preview .entry-preview-content{padding:15px}}@media (max-width: 1000px){.editor .scrolling .floatingheader{box-shadow:none}}@media (max-width: 1000px){.editor .scrolling .floatingheader::before,.editor .scrolling .floatingheader::after{display:none}}@media (max-width: 1000px){.editor .scrolling .CodeMirror-scroll,.editor .scrolling .entry-preview-content{box-shadow:0 5px 5px rgba(0,0,0,0.05) inset}}.entry-preview-content,.content-preview-content{font-size:1.4em;line-height:1.5em}.entry-preview-content a,.content-preview-content a{color:#5ba4e5;text-decoration:underline}.entry-preview-content p,.content-preview-content p{margin:1.2em 0 1.6em}.entry-preview-content p:first-child,.content-preview-content p:first-child{margin-top:0}.entry-preview-content h1,.content-preview-content h1{font-size:3em}.entry-preview-content h2,.content-preview-content h2{font-size:2.2em}.entry-preview-content h3,.content-preview-content h3{font-size:1.8em}.entry-preview-content .btn,.content-preview-content .btn{text-decoration:none;color:#35393b}.entry-preview-content .img-placeholder,.content-preview-content .img-placeholder{border:5px dashed #35393b;height:100px;position:relative}.entry-preview-content .img-placeholder span,.content-preview-content .img-placeholder span{display:block;height:30px;position:absolute;margin-top:-15px;top:50%;width:100%;text-align:center}.entry-preview-content a.image-edit,.content-preview-content a.image-edit{width:16px;height:16px}.entry-preview-content img,.content-preview-content img{max-width:100%;height:auto;margin:0 auto}body.zen{background:#f3f2ed}body.zen .usermenu{display:none}body.zen #global-header,body.zen #publish-bar{opacity:0;height:0;overflow:hidden;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;transition:all 0.5s ease-out}body.zen main{top:15px;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;transition:all 0.5s ease-out}body.zen .entry-markdown,body.zen .entry-preview{bottom:0;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;transition:all 0.5s ease-out}#publish-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:40px;padding:0;color:#7d878a;background:#1a1c1d;position:fixed;bottom:0;left:0;right:0;z-index:900;box-shadow:0 -2px 8px rgba(0,0,0,0.2);-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}@media (max-width: 1000px){#publish-bar{font-weight:normal}}#publish-bar .post-settings:hover,#publish-bar .post-settings.active{color:#e2edf2}#publish-bar .post-settings-menu{position:absolute;bottom:44px;right:-3px}#publish-bar button{min-height:30px;height:30px;line-height:12px;padding:0 10px;margin-top:5px;border-top:rgba(255,255,255,0.4) 1px solid}#publish-bar .button-link{border-top:none}#publish-bar .options{width:30px;min-height:30px;height:30px;margin-top:5px;box-shadow:rgba(255,255,255,0.4) 0 1px 0 inset}#publish-bar .splitbutton-save .button-save,#publish-bar .splitbutton-save .button-delete,#publish-bar .splitbutton-delete .button-save,#publish-bar .splitbutton-delete .button-delete{-webkit-transition:width 0.25s ease,background-color 0.3s linear;-moz-transition:width 0.25s ease,background-color 0.3s linear;transition:width 0.25s ease,background-color 0.3s linear}#publish-bar .splitbutton-save .editor-options,#publish-bar .splitbutton-delete .editor-options{bottom:140%;right:-3%}#publish-bar .splitbutton-save .editor-options a,#publish-bar .splitbutton-delete .editor-options a{font-size:14px}.extended-tags{position:static;min-height:100%}.extended-tags #entry-tags:after{right:10px}.extended-tags .tags{width:281px}.extended-tags .tag-label,.extended-tags .tag-label.touch{color:#fff}.extended-tags .tag-input{width:100%;margin-top:5px;padding-top:5px;padding-left:10px;border-top:1px solid #242628}.extended-tags .right{display:none}#entry-tags{position:absolute;top:0;left:0;right:0;bottom:0;text-transform:none;padding:10px 0 0 0}#entry-tags:after{content:"";position:fixed;top:10px;right:270px;width:20px;height:26px;background-color:rgba(26,28,29,0);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(26,28,29,0)),color-stop(100%, #1a1c1d));background-image:-webkit-linear-gradient(left, rgba(26,28,29,0),#1a1c1d);background-image:linear-gradient(to right,rgba(26,28,29,0),#1a1c1d);z-index:9999;pointer-events:none}@media (max-width: 400px){#entry-tags:after{right:161px}}#entry-tags .tags{position:relative;display:inline-block;vertical-align:middle;width:auto;max-width:80%;max-width:calc(100% - 320px);height:26px;padding-left:5px;padding-bottom:20px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;white-space:nowrap;-webkit-transition:width 0.2s linear;-moz-transition:width 0.2s linear;transition:width 0.2s linear}@media (max-width: 400px){#entry-tags .tags{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:115px;max-width:inherit;padding-bottom:0}}#entry-tags .tag-label{display:block;float:left;padding:1px 8px 0 8px;-webkit-transition:all 0.15s ease-out 0;-moz-transition:all 0.15s ease-out 0;transition:all 0.15s ease-out 0}#entry-tags .tag-label:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e003"}#entry-tags .tag-label:hover{text-decoration:none}#entry-tags .tag-label:hover{cursor:pointer;color:#e2edf2}#entry-tags .tag-label.touch{color:inherit}#entry-tags input[type="text"].tag-input{display:inline-block;padding:0;vertical-align:top;color:#e2edf2;font-weight:300;background:transparent;border:none}#entry-tags input[type="text"].tag-input:focus{outline:none}#entry-tags .tag{display:inline;margin-right:5px;padding:0 5px;color:#e2edf2;white-space:nowrap;background:#596063;border-radius:2px;box-shadow:rgba(255,255,255,0.2) 0 1px 0 inset,#000 0 1px 3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#entry-tags .tag:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e034";font-size:8px;color:#242628;margin-left:4px;vertical-align:10%;text-shadow:rgba(255,255,255,0.15) 0 1px 0;-webkit-transition:all 0.15s ease-out 0;-moz-transition:all 0.15s ease-out 0;transition:all 0.15s ease-out 0}#entry-tags .tag:hover{text-decoration:none}#entry-tags .tag:hover{cursor:pointer}#entry-tags .tag:hover:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e034";font-size:8px;color:#e2edf2;margin-left:4px;vertical-align:10%;text-shadow:none}#entry-tags .tag:hover:hover{text-decoration:none}.suggestions{bottom:100%}.suggestions li.selected{background:#5ba4e5;box-shadow:rgba(255,255,255,0.2) 0 1px 0 inset,rgba(0,0,0,0.5) 0 1px 5px}.suggestions li a{padding-left:25px}.suggestions mark{background:none;color:white;font-weight:bold}#entry-controls{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;position:relative;padding:0;z-index:1}#entry-controls.unsaved .post-settings-menu{padding-bottom:0}#entry-controls.unsaved .post-settings-menu .post-setting:nth-child(3) td{border-bottom:none}#entry-controls.unsaved .post-settings-menu .delete{display:none}#entry-actions{margin-right:6px;position:relative}#entry-actions-menu{position:absolute;bottom:50px;right:-5px}.markdown-help-container{padding-bottom:20px}.modal-markdown-help-table{margin-top:0}.CodeMirror{font-family:monospace;height:300px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7}.CodeMirror div.CodeMirror-cursor{border-left:1px solid black;z-index:3}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-tab{display:inline-block}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable{color:black}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-property{color:black}.cm-s-default .cm-operator{color:black}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-error{color:#f00}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-invalidchar{color:#f00}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:white;color:black}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;padding-right:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0;z-index:6}.CodeMirror-gutters{position:absolute;left:0;top:0;height:100%;padding-bottom:30px;z-index:3}.CodeMirror-lines{cursor:text}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0px;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-right:none;width:0}.CodeMirror-focused div.CodeMirror-cursor{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror span{*vertical-align:text-bottom}@media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}}.ghost-login,.ghost-signup,.ghost-forgotten,.ghost-reset{color:#7d878a;background:#242628}@media (max-width: 400px){.ghost-login,.ghost-signup,.ghost-forgotten,.ghost-reset{background:#242628}}.ghost-login main,.ghost-signup main,.ghost-forgotten main,.ghost-reset main{top:15px}.ghost-login input:-webkit-autofill,.ghost-signup input:-webkit-autofill,.ghost-forgotten input:-webkit-autofill,.ghost-reset input:-webkit-autofill{-webkit-box-shadow:0 0 0px 1000px #e2edf2 inset !important}.login-box,.signup-box,.forgotten-box,.reset-box{max-width:530px;height:90%;margin:0 auto;padding:0;display:table}@media (max-width: 630px){.login-box,.signup-box,.forgotten-box,.reset-box{max-width:264px;text-align:center}}.login-form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:530px;color:#a5acae;display:table-cell;vertical-align:middle}@media (max-width: 630px){.login-form{max-width:264px}}.login-form div{position:relative;margin:0 0 5px 0;background:#3c4043;float:left}@media (max-width: 630px){.login-form div{margin-bottom:1em}}.login-form input{display:inline-block;clear:both;margin:0;padding:8px 0 8px 8px;width:216px;position:relative;border:none;color:#fff;font-size:1.1em;font-weight:200;background:transparent;box-shadow:none;-webkit-transition:background ease 0.25s;-moz-transition:background ease 0.25s;transition:background ease 0.25s}@media (max-width: 630px){.login-form input{width:264px;-webkit-transition:none;-moz-transition:none;transition:none}}.login-form input:focus{border:none;background:#484c50}.login-form .email-wrap{position:relative;margin-right:3px;border-radius:2px 0 0 2px}.login-form .email-wrap:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e012";font-size:12px;position:absolute;bottom:11px;left:8px;z-index:100}.login-form .email-wrap:hover{text-decoration:none}@media (max-width: 630px){.login-form .email-wrap{margin-right:0;border-radius:2px}}.login-form .email-wrap .email{padding-left:28px;border-radius:2px 0 0 2px}.login-form .password-wrap{position:relative;border-radius:0 2px 2px 0}.login-form .password-wrap:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02c";font-size:10px;position:absolute;bottom:12px;left:11px;z-index:100}.login-form .password-wrap:hover{text-decoration:none}@media (max-width: 630px){.login-form .password-wrap{border-radius:2px}}.login-form .password-wrap .password{padding-left:28px;border-radius:0 2px 2px 0}.login-form button{width:85px;height:36px;margin:0 0 0 10px;padding:0.5em 1.37em;min-height:30px;min-width:80px;box-shadow:rgba(255,255,255,0.15) 0 1px 0 inset}@media (max-width: 630px){.login-form button{margin:0;width:100%;margin-bottom:1em}}.login-form .meta{clear:both;color:#7d878a}.login-form a{color:#646d70;font-size:0.9em}.login-form a:hover{color:#8a9396;text-decoration:none}.signup-form,.reset-form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:280px;color:#a5acae;display:table-cell;vertical-align:middle}@media (max-width: 630px){.signup-form,.reset-form{width:264px}}.signup-form div,.reset-form div{position:relative;margin:0 0 1em 0;background:#3c4043;float:left;display:table}.signup-form input,.reset-form input{margin:0;width:280px;padding:8px 10px;position:relative;border:none;color:#fff;font-size:1.1em;font-weight:200;background:transparent;box-shadow:none;-webkit-transition:background ease 0.25s;-moz-transition:background ease 0.25s;transition:background ease 0.25s}@media (max-width: 630px){.signup-form input,.reset-form input{-webkit-transition:none;-moz-transition:none;transition:none;width:264px}}.signup-form input:focus,.reset-form input:focus{border:none;background:#484c50}.signup-form .name-wrap,.reset-form .name-wrap{position:relative;border-radius:2px}.signup-form .name-wrap .name,.reset-form .name-wrap .name{border-radius:2px}.signup-form .email-wrap,.reset-form .email-wrap{position:relative;border-radius:2px}.signup-form .email-wrap .email,.reset-form .email-wrap .email{border-radius:2px}.signup-form .password-wrap,.reset-form .password-wrap{position:relative;border-radius:2px}.signup-form .password-wrap .password,.reset-form .password-wrap .password{border-radius:2px}.signup-form button,.reset-form button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;height:36px;margin:0 0 1em 0;padding:0.5em 1.37em;min-height:30px;min-width:80px;box-shadow:rgba(255,255,255,0.15) 0 1px 0 inset}.forgotten-form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:280px;color:#a5acae;display:table-cell;vertical-align:middle}@media (max-width: 630px){.forgotten-form{max-width:264px}}.forgotten-form div{position:relative;margin:0 0 1em 0;background:#3c4043;float:left}.forgotten-form input{margin:0;padding:8px 10px;position:relative;border:none;color:#fff;font-size:1.1em;font-weight:200;background:transparent;box-shadow:none;-webkit-transition:background ease 0.25s;-moz-transition:background ease 0.25s;transition:background ease 0.25s}@media (max-width: 630px){.forgotten-form input{-webkit-transition:none;-moz-transition:none;transition:none;max-width:244px}}.forgotten-form input:focus{border:none;background:#484c50}.forgotten-form .email-wrap{position:relative;border-radius:2px}.forgotten-form .email-wrap .email{border-radius:2px}.forgotten-form button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;height:36px;margin:0 0 1em 0;padding:0.5em 1.37em;min-height:30px;min-width:80px;box-shadow:rgba(255,255,255,0.15) 0 1px 0 inset}.error-content{max-width:530px;margin:0 auto;padding:0;display:table;height:100%}@media (max-width: 630px){.error-content{max-width:264px;text-align:center}}.error-details{display:table-cell;vertical-align:middle}.error-image{display:inline-block;vertical-align:middle;width:96px;height:150px}@media (max-width: 630px){.error-image{width:72px;height:112px}}.error-image img{width:100%;height:100%}.error-message{position:relative;top:-5px;display:inline-block;vertical-align:middle;margin-left:10px}.error-code{margin:0;font-size:7.8em;line-height:0.9em;color:#979797}@media (max-width: 630px){.error-code{font-size:5.8em}}.error-description{margin:0;padding:0;font-weight:300;font-size:1.9em;color:#979797;border:none}@media (max-width: 630px){.error-description{font-size:1.4em}}.error-stack{margin:1em auto;padding:2em;max-width:800px;background-color:rgba(255,255,255,0.3)}.error-stack-list{list-style-type:none;padding:0;margin:0}.error-stack-list li{display:block}.error-stack-list li::before{color:#BBB;content:"\21AA";display:inline-block;font-size:1.2em;margin-right:0.5em}.error-stack-function{font-weight:bold}.settings .wrapper{background:#fff;box-shadow:rgba(0,0,0,0.05) 0 1px 5px;position:relative;width:100%;height:100%;margin:0;padding:0}@media (max-width: 800px){.settings .wrapper{overflow-x:hidden}}.settings .title{text-transform:uppercase;font-weight:normal;font-size:1.6em;line-height:0.8em;margin:0 0 18px 0;padding:0;border:none}.settings .settings-sidebar{width:20%;position:absolute;top:0;left:0;bottom:0;z-index:700;background:#fff;box-shadow:#edece4 1px 0 0}@media (max-width: 800px){.settings .settings-sidebar{width:100%;box-shadow:none}}.settings .settings-sidebar>header{position:relative;z-index:400;height:17px;padding:30px 15px 30px 40px;margin-bottom:0;border-bottom:none;box-shadow:#edece4 0 -1px 0 inset, #edece4 1px 0 0;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(25%, #fff), color-stop(100%, rgba(255,255,255,0.9)));background:-webkit-linear-gradient(top, #fff 0%, #fff 25%, rgba(255,255,255,0.9) 100%);background:linear,to bottom,#fff 0%,#fff 25%,rgba(255,255,255,0.9) 100%}@media (max-width: 1000px){.settings .settings-sidebar>header{padding-left:15px}}.settings .settings-menu{position:absolute;top:0;left:0;bottom:0;right:-1px;overflow:auto}@media (max-width: 800px){.settings .settings-menu{right:0}}.settings .settings-menu:before{display:block;content:"";height:77px}.settings .settings-menu ul{border-top:none}@media (max-width: 800px){.settings .settings-menu ul{border-bottom:#edece4 1px solid}}.settings .settings-menu li{margin-right:1px;border-top:#fff 1px solid}@media (max-width: 800px){.settings .settings-menu li{margin-right:0;border-top:#edece4 1px solid}}.settings .settings-menu li a{padding:15px 15px 15px 40px;border-bottom:none}@media (max-width: 1000px){.settings .settings-menu li a{padding-left:15px}}@media (max-width: 800px){.settings .settings-menu li a:after{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e01d";float:right;margin-top:5px}.settings .settings-menu li a:hover{text-decoration:none}}.settings .settings-menu li:first-child{border-top:none}.settings .settings-menu li:first-child.active{border-top:none}@media (min-width: 800px), (min-width: 800px){.settings .settings-menu li.active{margin-right:0;position:relative;z-index:300;border-top:#edece4 1px solid;box-shadow:#fff 1px 0 0, #edece4 0 1px 0;-webkit-transition:all 0.15s ease-out 0;-moz-transition:all 0.15s ease-out 0;transition:all 0.15s ease-out 0}.settings .settings-menu li.active a{color:#242628;font-weight:bold;background:#fff}}.settings .settings-menu li a:before{margin-right:20px}@media (max-width: 1000px){.settings .settings-menu li a:before{margin-right:15px}}.settings .settings-menu .general a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e006"}.settings .settings-menu .general a:hover{text-decoration:none}.settings .settings-menu .publishing a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e02d"}.settings .settings-menu .publishing a:hover{text-decoration:none}.settings .settings-menu .services a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e020"}.settings .settings-menu .services a:hover{text-decoration:none}.settings .settings-menu .users a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e002"}.settings .settings-menu .users a:hover{text-decoration:none}.settings .settings-menu .appearance a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e021"}.settings .settings-menu .appearance a:hover{text-decoration:none}.settings .settings-menu .plugins a:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e00b"}.settings .settings-menu .plugins a:hover{text-decoration:none}.settings .settings-content{padding:0;position:absolute;top:0;right:0;left:20%;bottom:0;background:#fff;display:none}@media (max-width: 800px){.settings .settings-content{display:none;width:100%;left:100%;right:-100%;margin-left:15px}}.settings .settings-content img{max-width:100%}.settings .settings-content.active{display:block}.settings .settings-content>header{position:relative;z-index:200;height:17px;padding:30px 220px 29px 40px;border-bottom:#edece4 1px solid;margin-bottom:40px;text-transform:none;font-weight:normal;line-height:inherit;color:inherit;background:-moz-linear-gradient(top, #fff 0%, #fff 25%, rgba(255,255,255,0.9) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(25%, #fff), color-stop(100%, rgba(255,255,255,0.9)));background:-webkit-linear-gradient(top, #fff 0%, #fff 25%, rgba(255,255,255,0.9) 100%);background:-o-linear-gradient(top, #fff 0%, #fff 25%, rgba(255,255,255,0.9) 100%);background:-ms-linear-gradient(top, #fff 0%, #fff 25%, rgba(255,255,255,0.9) 100%);background:linear,to bottom,#fff 0%,#fff 25%,rgba(255,255,255,0.9) 100%}@media (max-width: 1000px){.settings .settings-content>header{padding-left:15px}}@media (max-width: 800px){.settings .settings-content>header{padding-left:115px}}@media (max-height: 600px), (max-height: 600px){.settings .settings-content>header{height:auto;padding:5px;position:absolute;top:0;right:0;border:none;background:transparent}.settings .settings-content>header .title{display:none}}@media (max-width: 650px){.settings .settings-content>header{padding-left:15px}.settings .settings-content>header .button-back{position:fixed;top:5px;left:14px;min-height:0;height:30px}.settings .settings-content>header .button-back:before{left:-9px;border-width:15px 9px 15px 0}}.settings .settings-content .page-actions{position:absolute;top:20px;right:40px;z-index:700;font-size:1em}@media (max-width: 1000px){.settings .settings-content .page-actions{right:15px}}@media (max-width: 650px){.settings .settings-content .page-actions{position:fixed;top:5px;right:4px}.settings .settings-content .page-actions button{min-height:0;height:30px;padding:0.5em 1.37em}}.settings .settings-content .page-actions .button-add{position:relative;padding-left:50px}.settings .settings-content .page-actions .button-add:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e032";font-size:1.4em;color:rgba(255,255,255,0.6);position:absolute;top:0;padding:9px 8px 0 0;left:9px;bottom:0;width:20px;border-right:#8ba644 1px solid}.settings .settings-content .page-actions .button-add:hover{text-decoration:none}.settings .settings-content .content{position:absolute;top:0;right:0;left:0;bottom:0;padding:40px;overflow:auto;-webkit-overflow-scrolling:touch}.settings .settings-content .content:before{display:block;content:"";height:77px}@media (max-height: 600px), (max-height: 600px){.settings .settings-content .content:before{display:none}}.settings .settings-content .content.no-padding{padding:0}@media (max-width: 1000px){.settings .settings-content .content{padding-left:15px}}@media (max-width: 550px){.settings .settings-content .content{padding:0 15px 40px}}.settings .settings-content .description-container,.settings .settings-content .bio-container{max-width:370px}.settings .settings-content .word-count{margin-right:30px;float:right;font-weight:bold;color:#9e9d95}.settings .user-group-header{margin-bottom:0px;padding-bottom:20px;border:0 none;border-bottom:1px solid #d9d6c5}.settings .user-group-header h3{display:inline-block;margin:0;color:#c0bfb6;font-weight:normal;font-size:1.1em;line-height:1em}.settings .user-search{display:inline-block;float:right}.settings .user-search label{margin:0}.settings .user-search:hover .user-search-input,.settings .user-search .user-search-input:focus{width:260px;padding:0 10px}.settings .user-search .user-search-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:0px;padding:0;border:none;border-bottom:#f1f0ea 1px solid;-webkit-transition:width 0.2s ease-in-out;-moz-transition:width 0.2s ease-in-out;transition:width 0.2s ease-in-out;box-shadow:none}.settings .user-search .search-icon:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e007";font-size:1em;color:#c0bfb6}.settings .user-search .search-icon:hover{text-decoration:none}.settings .users{padding:0px;margin-top:0px;list-style:none}.settings .user{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:100%;padding:20px;border:0 none;border-top:1px solid #e2edf2}.settings .user:first-child{border:none}.settings .user .user-image{display:inline-block;width:40px;height:40px;margin-right:17px;vertical-align:middle;background-color:#edece4;border-radius:20px}.settings .user .user-image.invite{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding-top:8px;text-align:center}.settings .user .user-image.invite:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e012";font-size:1em;color:#aaa9a2}.settings .user .user-image.invite:hover{text-decoration:none}.settings .user .user-image img{width:40px;height:40px;border-radius:20px}.settings .user .user-meta{display:inline-block;vertical-align:middle}.settings .user .user-name{margin:0;margin-top:0.4em;font-weight:400;font-size:1.2em;line-height:1em}.settings .user .user-last-seen{line-height:1em}.settings .user-role{padding:2px 8px;float:right;font-size:0.8em;color:#fff;text-transform:uppercase}.settings .user-role.admin{background-color:#DE523A}.settings .user-role.editor{background-color:#4A8CBD}.settings .user-profile-header{position:relative}.settings .user-profile-header:after{content:"";position:absolute;left:0;right:0;bottom:0;height:110px;background-color:rgba(0,0,0,0);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)),color-stop(100%, rgba(0,0,0,0.3)));background-image:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.3));background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.3))}.settings .cover-image{display:block;line-height:0;width:100%;height:auto;min-height:180px}.settings .edit-cover-image{position:absolute;right:40px;bottom:38px;background:rgba(0,0,0,0.3);border-radius:0;color:rgba(255,255,255,0.8);z-index:2;border-radius:2px;-webkit-transition:color 0.3s ease,background 0.3s ease;-moz-transition:color 0.3s ease,background 0.3s ease;transition:color 0.3s ease,background 0.3s ease}@media (max-width: 1000px){.settings .edit-cover-image{right:15px}}.settings .edit-cover-image:hover{color:#fff;background:rgba(0,0,0,0.5)}.settings .user-profile{position:relative;top:-100px;z-index:1}.settings .user-profile fieldset{padding:0 40px}.settings fieldset.user-details-top{margin-bottom:0;padding:10px 0 0 0}.settings fieldset.user-details-top p{color:#fff}.settings .user-image{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:relative;width:120px;height:120px;float:left;margin-left:40px;margin-right:20px;text-align:center;border-radius:100%;overflow:hidden;border:5px solid #fff;background:#fff;z-index:2}.settings .user-image .img{display:block;width:110px;height:110px;background-size:cover;background-position:center center;border-radius:100%}.settings .user-image:hover .edit-user-image{opacity:1}.settings .edit-user-image{position:absolute;top:0px;right:0px;bottom:0px;left:0px;border-radius:100%;background:rgba(0,0,0,0.5);opacity:0;color:#fff;line-height:105px;text-transform:uppercase;text-decoration:none;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;transition:opacity 0.3s ease}.settings #user-name{border-color:#fff}.settings .user-details-bottom{padding:0 40px;margin:-30px 0 0 0}.settings .plugin-section{padding-bottom:20px}.settings .plugin-section-header h3{margin:15px 0;font-size:1.1em;font-weight:normal;color:#aaa9a2}.settings .plugin-section-footer{text-align:right}.settings .button-update-all:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e03d";font-size:1em;color:#ffc125;margin-right:5px}.settings .button-update-all:hover{text-decoration:none}.settings .button-cancel:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e034";font-size:1em;color:#fff;margin-right:5px}.settings .button-cancel:hover{text-decoration:none}.settings .plugin-section-table{margin-top:5px}.settings .plugin-section-table tbody>tr:nth-child(odd)>td{background:none}.settings .plugin-section-table .plugin-section-item.inactive .plugin-meta{opacity:0.4}.settings .plugin-section-table .plugin-section-item.inactive td:last-child .plugin-meta{opacity:1}.settings .plugin-section-table .plugin-section-item td{padding:20px 0;border-bottom:#edece4 1px solid}.settings .plugin-section-table .plugin-section-item td:first-child{padding-left:0px;border-top:#edece4 1px solid}.settings .plugin-section-table .plugin-section-item td:first-child .plugin-meta{padding:0px;width:75%;border-left:none;text-align:left}.settings .plugin-section-table .plugin-section-item td:last-child .plugin-meta{padding:0px;text-align:right}.settings .plugin-section-table .plugin-icon{display:inline-block;width:40px;height:40px;margin-right:15px;background:#FFC125;border-radius:5px;vertical-align:middle}.settings .plugin-section-table .plugin-icon img{width:100%}.settings .plugin-section-table .plugin-meta{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:100%;height:100%;padding:0 20px;vertical-align:middle;border-left:#edece4 1px solid;text-align:center}.settings .plugin-section-table .plugin-info{display:block;color:#414648;font-size:1.2em;font-weight:normal;vertical-align:top}.settings .plugin-section-table .plugin-title{color:#35393b}.settings .plugin-section-table .plugin-sub-info{display:block;color:#7d878a}.settings .plugin-section-table .plugin-download-progress{position:relative;display:block;height:6px;margin-top:10px;background:#edece4;border-radius:3px}.settings .plugin-section-table .plugin-download-progress>span{position:absolute;left:0;top:0;content:"";height:100%;background-color:#5ba4e5;border-radius:3px}.settings .plugin-section-table .rating{unicode-bidi:bidi-override;text-align:center}.settings .plugin-section-table .rating>span{display:inline-block;position:relative;width:1.1em;height:1.1em;font-size:0.8em}.settings .plugin-section-table .rating>span:before{content:"\2605";position:absolute;left:0;opacity:0.5}.settings .plugin-section-table .rating>span.active:before{content:"\2605";opacity:1}.settings .plugin-section-table .plugin-settings-icon{display:block;margin-top:9px;font-size:1.4em}.settings .plugin-section-table .plugin-settings-icon:before{font-family:"Icons";font-weight:normal;font-style:normal;vertical-align:-7%;text-transform:none;speak:none;line-height:1;-webkit-font-smoothing:antialiased;content:"\e006";font-size:1em;color:#35393b}.settings .plugin-section-table .plugin-settings-icon:hover{text-decoration:none} diff --git a/core/client/assets/fonts/icons.dev.svg b/core/clientold/assets/fonts/icons.dev.svg similarity index 100% rename from core/client/assets/fonts/icons.dev.svg rename to core/clientold/assets/fonts/icons.dev.svg diff --git a/core/client/assets/fonts/icons.eot b/core/clientold/assets/fonts/icons.eot similarity index 100% rename from core/client/assets/fonts/icons.eot rename to core/clientold/assets/fonts/icons.eot diff --git a/core/client/assets/fonts/icons.svg b/core/clientold/assets/fonts/icons.svg similarity index 100% rename from core/client/assets/fonts/icons.svg rename to core/clientold/assets/fonts/icons.svg diff --git a/core/client/assets/fonts/icons.ttf b/core/clientold/assets/fonts/icons.ttf similarity index 100% rename from core/client/assets/fonts/icons.ttf rename to core/clientold/assets/fonts/icons.ttf diff --git a/core/client/assets/fonts/icons.woff b/core/clientold/assets/fonts/icons.woff similarity index 100% rename from core/client/assets/fonts/icons.woff rename to core/clientold/assets/fonts/icons.woff diff --git a/core/client/assets/img/404-ghost.png b/core/clientold/assets/img/404-ghost.png similarity index 100% rename from core/client/assets/img/404-ghost.png rename to core/clientold/assets/img/404-ghost.png diff --git a/core/client/assets/img/404-ghost@2x.png b/core/clientold/assets/img/404-ghost@2x.png similarity index 100% rename from core/client/assets/img/404-ghost@2x.png rename to core/clientold/assets/img/404-ghost@2x.png diff --git a/core/client/assets/img/large.png b/core/clientold/assets/img/large.png similarity index 100% rename from core/client/assets/img/large.png rename to core/clientold/assets/img/large.png diff --git a/core/client/assets/img/loadingcat.gif b/core/clientold/assets/img/loadingcat.gif similarity index 100% rename from core/client/assets/img/loadingcat.gif rename to core/clientold/assets/img/loadingcat.gif diff --git a/core/client/assets/img/medium.png b/core/clientold/assets/img/medium.png similarity index 100% rename from core/client/assets/img/medium.png rename to core/clientold/assets/img/medium.png diff --git a/core/client/assets/img/small.png b/core/clientold/assets/img/small.png similarity index 100% rename from core/client/assets/img/small.png rename to core/clientold/assets/img/small.png diff --git a/core/client/assets/img/touch-icon-ipad.png b/core/clientold/assets/img/touch-icon-ipad.png similarity index 100% rename from core/client/assets/img/touch-icon-ipad.png rename to core/clientold/assets/img/touch-icon-ipad.png diff --git a/core/client/assets/img/touch-icon-iphone.png b/core/clientold/assets/img/touch-icon-iphone.png similarity index 100% rename from core/client/assets/img/touch-icon-iphone.png rename to core/clientold/assets/img/touch-icon-iphone.png diff --git a/core/client/assets/lib/jquery-utils.js b/core/clientold/assets/lib/jquery-utils.js similarity index 100% rename from core/client/assets/lib/jquery-utils.js rename to core/clientold/assets/lib/jquery-utils.js diff --git a/core/client/assets/lib/uploader.js b/core/clientold/assets/lib/uploader.js similarity index 100% rename from core/client/assets/lib/uploader.js rename to core/clientold/assets/lib/uploader.js diff --git a/core/client/assets/sass/ie.scss b/core/clientold/assets/sass/ie.scss similarity index 100% rename from core/client/assets/sass/ie.scss rename to core/clientold/assets/sass/ie.scss diff --git a/core/client/assets/sass/layouts/auth.scss b/core/clientold/assets/sass/layouts/auth.scss similarity index 100% rename from core/client/assets/sass/layouts/auth.scss rename to core/clientold/assets/sass/layouts/auth.scss diff --git a/core/client/assets/sass/layouts/editor.scss b/core/clientold/assets/sass/layouts/editor.scss similarity index 100% rename from core/client/assets/sass/layouts/editor.scss rename to core/clientold/assets/sass/layouts/editor.scss diff --git a/core/client/assets/sass/layouts/errors.scss b/core/clientold/assets/sass/layouts/errors.scss similarity index 100% rename from core/client/assets/sass/layouts/errors.scss rename to core/clientold/assets/sass/layouts/errors.scss diff --git a/core/client/assets/sass/layouts/manage.scss b/core/clientold/assets/sass/layouts/manage.scss similarity index 100% rename from core/client/assets/sass/layouts/manage.scss rename to core/clientold/assets/sass/layouts/manage.scss diff --git a/core/client/assets/sass/layouts/plugins.scss b/core/clientold/assets/sass/layouts/plugins.scss similarity index 100% rename from core/client/assets/sass/layouts/plugins.scss rename to core/clientold/assets/sass/layouts/plugins.scss diff --git a/core/client/assets/sass/layouts/settings.scss b/core/clientold/assets/sass/layouts/settings.scss similarity index 100% rename from core/client/assets/sass/layouts/settings.scss rename to core/clientold/assets/sass/layouts/settings.scss diff --git a/core/client/assets/sass/layouts/users.scss b/core/clientold/assets/sass/layouts/users.scss similarity index 100% rename from core/client/assets/sass/layouts/users.scss rename to core/clientold/assets/sass/layouts/users.scss diff --git a/core/client/assets/sass/modules/animations.scss b/core/clientold/assets/sass/modules/animations.scss similarity index 100% rename from core/client/assets/sass/modules/animations.scss rename to core/clientold/assets/sass/modules/animations.scss diff --git a/core/clientold/assets/sass/modules/bourbon/_bourbon-deprecated-upcoming.scss b/core/clientold/assets/sass/modules/bourbon/_bourbon-deprecated-upcoming.scss new file mode 100644 index 0000000000..5332496d82 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/_bourbon-deprecated-upcoming.scss @@ -0,0 +1,13 @@ +//************************************************************************// +// These mixins/functions are deprecated +// They will be removed in the next MAJOR version release +//************************************************************************// +@mixin box-shadow ($shadows...) { + @include prefixer(box-shadow, $shadows, spec); + @warn "box-shadow is deprecated and will be removed in the next major version release"; +} + +@mixin background-size ($lengths...) { + @include prefixer(background-size, $lengths, spec); + @warn "background-size is deprecated and will be removed in the next major version release"; +} diff --git a/core/clientold/assets/sass/modules/bourbon/_bourbon.scss b/core/clientold/assets/sass/modules/bourbon/_bourbon.scss new file mode 100644 index 0000000000..53fbca877f --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/_bourbon.scss @@ -0,0 +1,59 @@ +// Custom Helpers +@import "helpers/deprecated-webkit-gradient"; +@import "helpers/gradient-positions-parser"; +@import "helpers/linear-positions-parser"; +@import "helpers/radial-arg-parser"; +@import "helpers/radial-positions-parser"; +@import "helpers/render-gradients"; +@import "helpers/shape-size-stripper"; + +// Custom Functions +@import "functions/compact"; +@import "functions/flex-grid"; +@import "functions/grid-width"; +@import "functions/linear-gradient"; +@import "functions/modular-scale"; +@import "functions/px-to-em"; +@import "functions/radial-gradient"; +@import "functions/tint-shade"; +@import "functions/transition-property-name"; + +// CSS3 Mixins +@import "css3/animation"; +@import "css3/appearance"; +@import "css3/backface-visibility"; +@import "css3/background"; +@import "css3/background-image"; +@import "css3/border-image"; +@import "css3/border-radius"; +@import "css3/box-sizing"; +@import "css3/columns"; +@import "css3/flex-box"; +@import "css3/font-face"; +@import "css3/hidpi-media-query"; +@import "css3/image-rendering"; +@import "css3/inline-block"; +@import "css3/keyframes"; +@import "css3/linear-gradient"; +@import "css3/perspective"; +@import "css3/radial-gradient"; +@import "css3/transform"; +@import "css3/transition"; +@import "css3/user-select"; +@import "css3/placeholder"; + +// Addons & other mixins +@import "addons/button"; +@import "addons/clearfix"; +@import "addons/font-family"; +@import "addons/hide-text"; +@import "addons/html5-input-types"; +@import "addons/position"; +@import "addons/prefixer"; +@import "addons/retina-image"; +@import "addons/size"; +@import "addons/timing-functions"; +@import "addons/triangle"; + +// Soon to be deprecated Mixins +@import "bourbon-deprecated-upcoming"; diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_button.scss b/core/clientold/assets/sass/modules/bourbon/addons/_button.scss new file mode 100644 index 0000000000..3ae393c090 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_button.scss @@ -0,0 +1,273 @@ +@mixin button ($style: simple, $base-color: #4294f0) { + + @if type-of($style) == color { + $base-color: $style; + $style: simple; + } + + // Grayscale button + @if $base-color == grayscale($base-color) { + @if $style == simple { + @include simple($base-color, $grayscale: true); + } + + @else if $style == shiny { + @include shiny($base-color, $grayscale: true); + } + + @else if $style == pill { + @include pill($base-color, $grayscale: true); + } + } + + // Colored button + @else { + @if $style == simple { + @include simple($base-color); + } + + @else if $style == shiny { + @include shiny($base-color); + } + + @else if $style == pill { + @include pill($base-color); + } + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +} + + +// Simple Button +//************************************************************************// +@mixin simple($base-color, $grayscale: false) { + $color: hsl(0, 0, 100%); + $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%); + $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%); + $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%); + $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%); + + @if lightness($base-color) > 70% { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border: grayscale($border); + $inset-shadow: grayscale($inset-shadow); + $stop-gradient: grayscale($stop-gradient); + $text-shadow: grayscale($text-shadow); + } + + border: 1px solid $border; + border-radius: 3px; + box-shadow: inset 0 1px 0 0 $inset-shadow; + color: $color; + display: inline-block; + font-size: 11px; + font-weight: bold; + @include linear-gradient ($base-color, $stop-gradient); + padding: 7px 18px; + text-decoration: none; + text-shadow: 0 1px 0 $text-shadow; + background-clip: padding-box; + + &:hover:not(:disabled) { + $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%); + $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%); + $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + $inset-shadow-hover: grayscale($inset-shadow-hover); + $stop-gradient-hover: grayscale($stop-gradient-hover); + } + + box-shadow: inset 0 1px 0 0 $inset-shadow-hover; + cursor: pointer; + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + } + + &:active:not(:disabled) { + $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%); + $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%); + + @if $grayscale == true { + $border-active: grayscale($border-active); + $inset-shadow-active: grayscale($inset-shadow-active); + } + + border: 1px solid $border-active; + box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active, 0 1px 1px 0 #eee; + } +} + + +// Shiny Button +//************************************************************************// +@mixin shiny($base-color, $grayscale: false) { + $color: hsl(0, 0, 100%); + $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81); + $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122); + $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46); + $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12); + $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33); + $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114); + $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48); + + @if lightness($base-color) > 70% { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border: grayscale($border); + $border-bottom: grayscale($border-bottom); + $fourth-stop: grayscale($fourth-stop); + $inset-shadow: grayscale($inset-shadow); + $second-stop: grayscale($second-stop); + $text-shadow: grayscale($text-shadow); + $third-stop: grayscale($third-stop); + } + + border: 1px solid $border; + border-bottom: 1px solid $border-bottom; + border-radius: 5px; + box-shadow: inset 0 1px 0 0 $inset-shadow; + color: $color; + display: inline-block; + font-size: 14px; + font-weight: bold; + @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); + padding: 8px 20px; + text-align: center; + text-decoration: none; + text-shadow: 0 -1px 1px $text-shadow; + + &:hover:not(:disabled) { + $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18); + $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51); + $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66); + $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63); + + @if $grayscale == true { + $first-stop-hover: grayscale($first-stop-hover); + $second-stop-hover: grayscale($second-stop-hover); + $third-stop-hover: grayscale($third-stop-hover); + $fourth-stop-hover: grayscale($fourth-stop-hover); + } + + cursor: pointer; + @include linear-gradient(top, $first-stop-hover 0%, + $second-stop-hover 50%, + $third-stop-hover 50%, + $fourth-stop-hover 100%); + } + + &:active:not(:disabled) { + $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122); + + @if $grayscale == true { + $inset-shadow-active: grayscale($inset-shadow-active); + } + + box-shadow: inset 0 0 20px 0 $inset-shadow-active, 0 1px 0 #fff; + } +} + + +// Pill Button +//************************************************************************// +@mixin pill($base-color, $grayscale: false) { + $color: hsl(0, 0, 100%); + $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%); + $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%); + $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%); + $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%); + $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%); + $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%); + + @if lightness($base-color) > 70% { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border-bottom: grayscale($border-bottom); + $border-sides: grayscale($border-sides); + $border-top: grayscale($border-top); + $inset-shadow: grayscale($inset-shadow); + $stop-gradient: grayscale($stop-gradient); + $text-shadow: grayscale($text-shadow); + } + + border: 1px solid $border-top; + border-color: $border-top $border-sides $border-bottom; + border-radius: 16px; + box-shadow: inset 0 1px 0 0 $inset-shadow, 0 1px 2px 0 #b3b3b3; + color: $color; + display: inline-block; + font-size: 11px; + font-weight: normal; + line-height: 1; + @include linear-gradient ($base-color, $stop-gradient); + padding: 5px 16px; + text-align: center; + text-decoration: none; + text-shadow: 0 -1px 1px $text-shadow; + background-clip: padding-box; + + &:hover:not(:disabled) { + $base-color-hover: adjust-color($base-color, $lightness: -4.5%); + $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%); + $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%); + $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%); + $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%); + $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%); + $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + $border-bottom: grayscale($border-bottom); + $border-sides: grayscale($border-sides); + $border-top: grayscale($border-top); + $inset-shadow-hover: grayscale($inset-shadow-hover); + $stop-gradient-hover: grayscale($stop-gradient-hover); + $text-shadow-hover: grayscale($text-shadow-hover); + } + + border: 1px solid $border-top; + border-color: $border-top $border-sides $border-bottom; + box-shadow: inset 0 1px 0 0 $inset-shadow-hover; + cursor: pointer; + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + text-shadow: 0 -1px 1px $text-shadow-hover; + background-clip: padding-box; + } + + &:active:not(:disabled) { + $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%); + $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%); + $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%); + $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%); + $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%); + + @if $grayscale == true { + $active-color: grayscale($active-color); + $border-active: grayscale($border-active); + $border-bottom-active: grayscale($border-bottom-active); + $inset-shadow-active: grayscale($inset-shadow-active); + $text-shadow-active: grayscale($text-shadow-active); + } + + background: $active-color; + border: 1px solid $border-active; + border-bottom: 1px solid $border-bottom-active; + box-shadow: inset 0 0 6px 3px $inset-shadow-active, 0 1px 0 0 #fff; + text-shadow: 0 -1px 1px $text-shadow-active; + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_clearfix.scss b/core/clientold/assets/sass/modules/bourbon/addons/_clearfix.scss new file mode 100644 index 0000000000..ca9903cf02 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_clearfix.scss @@ -0,0 +1,29 @@ +// Micro clearfix provides an easy way to contain floats without adding additional markup +// +// Example usage: +// +// // Contain all floats within .wrapper +// .wrapper { +// @include clearfix; +// .content, +// .sidebar { +// float : left; +// } +// } + +@mixin clearfix { + *zoom: 1; + + &:before, + &:after { + content: " "; + display: table; + } + + &:after { + clear: both; + } +} + +// Acknowledgements +// Micro clearfix: [Nicolas Gallagher](http://nicolasgallagher.com/micro-clearfix-hack/) diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_font-family.scss b/core/clientold/assets/sass/modules/bourbon/addons/_font-family.scss new file mode 100644 index 0000000000..df8a80ddfc --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_font-family.scss @@ -0,0 +1,5 @@ +$georgia: Georgia, Cambria, "Times New Roman", Times, serif; +$helvetica: "Helvetica Neue", Helvetica, Arial, sans-serif; +$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; +$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; +$verdana: Verdana, Geneva, sans-serif; diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_hide-text.scss b/core/clientold/assets/sass/modules/bourbon/addons/_hide-text.scss new file mode 100644 index 0000000000..68d4bf86cb --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_hide-text.scss @@ -0,0 +1,5 @@ +@mixin hide-text { + color: transparent; + font: 0/0 a; + text-shadow: none; +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_html5-input-types.scss b/core/clientold/assets/sass/modules/bourbon/addons/_html5-input-types.scss new file mode 100644 index 0000000000..b184382d91 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_html5-input-types.scss @@ -0,0 +1,56 @@ +//************************************************************************// +// Generate a variable ($all-text-inputs) with a list of all html5 +// input types that have a text-based input, excluding textarea. +// http://diveintohtml5.org/forms.html +//************************************************************************// +$inputs-list: 'input[type="email"]', + 'input[type="number"]', + 'input[type="password"]', + 'input[type="search"]', + 'input[type="tel"]', + 'input[type="text"]', + 'input[type="url"]', + + // Webkit & Gecko may change the display of these in the future + 'input[type="color"]', + 'input[type="date"]', + 'input[type="datetime"]', + 'input[type="datetime-local"]', + 'input[type="month"]', + 'input[type="time"]', + 'input[type="week"]'; + +$unquoted-inputs-list: (); +@each $input-type in $inputs-list { + $unquoted-inputs-list: append($unquoted-inputs-list, unquote($input-type), comma); +} + +$all-text-inputs: $unquoted-inputs-list; + + +// Hover Pseudo-class +//************************************************************************// +$all-text-inputs-hover: (); +@each $input-type in $unquoted-inputs-list { + $input-type-hover: $input-type + ":hover"; + $all-text-inputs-hover: append($all-text-inputs-hover, $input-type-hover, comma); +} + +// Focus Pseudo-class +//************************************************************************// +$all-text-inputs-focus: (); +@each $input-type in $unquoted-inputs-list { + $input-type-focus: $input-type + ":focus"; + $all-text-inputs-focus: append($all-text-inputs-focus, $input-type-focus, comma); +} + +// You must use interpolation on the variable: +// #{$all-text-inputs} +// #{$all-text-inputs-hover} +// #{$all-text-inputs-focus} + +// Example +//************************************************************************// +// #{$all-text-inputs}, textarea { +// border: 1px solid red; +// } diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_position.scss b/core/clientold/assets/sass/modules/bourbon/addons/_position.scss new file mode 100644 index 0000000000..faad1cae50 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_position.scss @@ -0,0 +1,42 @@ +@mixin position ($position: relative, $coordinates: 0 0 0 0) { + + @if type-of($position) == list { + $coordinates: $position; + $position: relative; + } + + $top: nth($coordinates, 1); + $right: nth($coordinates, 2); + $bottom: nth($coordinates, 3); + $left: nth($coordinates, 4); + + position: $position; + + @if $top == auto { + top: $top; + } + @else if not(unitless($top)) { + top: $top; + } + + @if $right == auto { + right: $right; + } + @else if not(unitless($right)) { + right: $right; + } + + @if $bottom == auto { + bottom: $bottom; + } + @else if not(unitless($bottom)) { + bottom: $bottom; + } + + @if $left == auto { + left: $left; + } + @else if not(unitless($left)) { + left: $left; + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_prefixer.scss b/core/clientold/assets/sass/modules/bourbon/addons/_prefixer.scss new file mode 100644 index 0000000000..6bfd23a1dd --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_prefixer.scss @@ -0,0 +1,49 @@ +//************************************************************************// +// Example: @include prefixer(border-radius, $radii, webkit ms spec); +//************************************************************************// +$prefix-for-webkit: true !default; +$prefix-for-mozilla: true !default; +$prefix-for-microsoft: true !default; +$prefix-for-opera: true !default; +$prefix-for-spec: true !default; // required for keyframe mixin + +@mixin prefixer ($property, $value, $prefixes) { + @each $prefix in $prefixes { + @if $prefix == webkit { + @if $prefix-for-webkit { + -webkit-#{$property}: $value; + } + } + @else if $prefix == moz { + @if $prefix-for-mozilla { + -moz-#{$property}: $value; + } + } + @else if $prefix == ms { + @if $prefix-for-microsoft { + -ms-#{$property}: $value; + } + } + @else if $prefix == o { + @if $prefix-for-opera { + -o-#{$property}: $value; + } + } + @else if $prefix == spec { + @if $prefix-for-spec { + #{$property}: $value; + } + } + @else { + @warn "Unrecognized prefix: #{$prefix}"; + } + } +} + +@mixin disable-prefix-for-all() { + $prefix-for-webkit: false; + $prefix-for-mozilla: false; + $prefix-for-microsoft: false; + $prefix-for-opera: false; + $prefix-for-spec: false; +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_retina-image.scss b/core/clientold/assets/sass/modules/bourbon/addons/_retina-image.scss new file mode 100644 index 0000000000..ed300715e4 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_retina-image.scss @@ -0,0 +1,32 @@ +@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $asset-pipeline: false) { + @if $asset-pipeline { + background-image: image_url($filename + "." + $extension); + } + @else { + background-image: url($filename + "." + $extension); + } + + @include hidpi { + + @if $asset-pipeline { + @if $retina-filename { + background-image: image_url($retina-filename + "." + $extension); + } + @else { + background-image: image_url($filename + "@2x" + "." + $extension); + } + } + + @else { + @if $retina-filename { + background-image: url($retina-filename + "." + $extension); + } + @else { + background-image: url($filename + "@2x" + "." + $extension); + } + } + + background-size: $background-size; + + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_size.scss b/core/clientold/assets/sass/modules/bourbon/addons/_size.scss new file mode 100644 index 0000000000..342e41b79f --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_size.scss @@ -0,0 +1,44 @@ +@mixin size($size) { + @if length($size) == 1 { + @if $size == auto { + width: $size; + height: $size; + } + + @else if unitless($size) { + width: $size + px; + height: $size + px; + } + + @else if not(unitless($size)) { + width: $size; + height: $size; + } + } + + // Width x Height + @if length($size) == 2 { + $width: nth($size, 1); + $height: nth($size, 2); + + @if $width == auto { + width: $width; + } + @else if not(unitless($width)) { + width: $width; + } + @else if unitless($width) { + width: $width + px; + } + + @if $height == auto { + height: $height; + } + @else if not(unitless($height)) { + height: $height; + } + @else if unitless($height) { + height: $height + px; + } + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_timing-functions.scss b/core/clientold/assets/sass/modules/bourbon/addons/_timing-functions.scss new file mode 100644 index 0000000000..51b2410914 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_timing-functions.scss @@ -0,0 +1,32 @@ +// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) +// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html + +// EASE IN +$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); +$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); +$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); +$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); +$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); +$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); +$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); +$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); + +// EASE OUT +$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); +$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); +$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); +$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); +$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); +$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); +$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); +$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); + +// EASE IN OUT +$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); +$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); +$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); +$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); +$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); +$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); +$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); +$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); diff --git a/core/clientold/assets/sass/modules/bourbon/addons/_triangle.scss b/core/clientold/assets/sass/modules/bourbon/addons/_triangle.scss new file mode 100644 index 0000000000..0e02aca2ca --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/addons/_triangle.scss @@ -0,0 +1,45 @@ +@mixin triangle ($size, $color, $direction) { + height: 0; + width: 0; + + @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { + border-color: transparent; + border-style: solid; + border-width: $size / 2; + + @if $direction == up { + border-bottom-color: $color; + + } @else if $direction == right { + border-left-color: $color; + + } @else if $direction == down { + border-top-color: $color; + + } @else if $direction == left { + border-right-color: $color; + } + } + + @else if ($direction == up-right) or ($direction == up-left) { + border-top: $size solid $color; + + @if $direction == up-right { + border-left: $size solid transparent; + + } @else if $direction == up-left { + border-right: $size solid transparent; + } + } + + @else if ($direction == down-right) or ($direction == down-left) { + border-bottom: $size solid $color; + + @if $direction == down-right { + border-left: $size solid transparent; + + } @else if $direction == down-left { + border-right: $size solid transparent; + } + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_animation.scss b/core/clientold/assets/sass/modules/bourbon/css3/_animation.scss new file mode 100644 index 0000000000..08c3dbf157 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_animation.scss @@ -0,0 +1,52 @@ +// http://www.w3.org/TR/css3-animations/#the-animation-name-property- +// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. + +// Official animation shorthand property. +@mixin animation ($animations...) { + @include prefixer(animation, $animations, webkit moz spec); +} + +// Individual Animation Properties +@mixin animation-name ($names...) { + @include prefixer(animation-name, $names, webkit moz spec); +} + + +@mixin animation-duration ($times...) { + @include prefixer(animation-duration, $times, webkit moz spec); +} + + +@mixin animation-timing-function ($motions...) { +// ease | linear | ease-in | ease-out | ease-in-out + @include prefixer(animation-timing-function, $motions, webkit moz spec); +} + + +@mixin animation-iteration-count ($values...) { +// infinite | + @include prefixer(animation-iteration-count, $values, webkit moz spec); +} + + +@mixin animation-direction ($directions...) { +// normal | alternate + @include prefixer(animation-direction, $directions, webkit moz spec); +} + + +@mixin animation-play-state ($states...) { +// running | paused + @include prefixer(animation-play-state, $states, webkit moz spec); +} + + +@mixin animation-delay ($times...) { + @include prefixer(animation-delay, $times, webkit moz spec); +} + + +@mixin animation-fill-mode ($modes...) { +// none | forwards | backwards | both + @include prefixer(animation-fill-mode, $modes, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_appearance.scss b/core/clientold/assets/sass/modules/bourbon/css3/_appearance.scss new file mode 100644 index 0000000000..3eb16e45de --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_appearance.scss @@ -0,0 +1,3 @@ +@mixin appearance ($value) { + @include prefixer(appearance, $value, webkit moz ms o spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_backface-visibility.scss b/core/clientold/assets/sass/modules/bourbon/css3/_backface-visibility.scss new file mode 100644 index 0000000000..1161fe60dd --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_backface-visibility.scss @@ -0,0 +1,6 @@ +//************************************************************************// +// Backface-visibility mixin +//************************************************************************// +@mixin backface-visibility($visibility) { + @include prefixer(backface-visibility, $visibility, webkit spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_background-image.scss b/core/clientold/assets/sass/modules/bourbon/css3/_background-image.scss new file mode 100644 index 0000000000..17016b91b9 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_background-image.scss @@ -0,0 +1,48 @@ +//************************************************************************// +// Background-image property for adding multiple background images with +// gradients, or for stringing multiple gradients together. +//************************************************************************// + +@mixin background-image($images...) { + background-image: _add-prefix($images, webkit); + background-image: _add-prefix($images); +} + +@function _add-prefix($images, $vendor: false) { + $images-prefixed: (); + $gradient-positions: false; + @for $i from 1 through length($images) { + $type: type-of(nth($images, $i)); // Get type of variable - List or String + + // If variable is a list - Gradient + @if $type == list { + $gradient-type: nth(nth($images, $i), 1); // linear or radial + $gradient-pos: null; + $gradient-args: null; + + @if ($gradient-type == linear) or ($gradient-type == radial) { + $gradient-pos: nth(nth($images, $i), 2); // Get gradient position + $gradient-args: nth(nth($images, $i), 3); // Get actual gradient (red, blue) + } + @else { + $gradient-args: nth(nth($images, $i), 2); // Get actual gradient (red, blue) + } + + $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos); + $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor); + $images-prefixed: append($images-prefixed, $gradient, comma); + } + // If variable is a string - Image + @else if $type == string { + $images-prefixed: join($images-prefixed, nth($images, $i), comma); + } + } + @return $images-prefixed; +} + +//Examples: + //@include background-image(linear-gradient(top, orange, red)); + //@include background-image(radial-gradient(50% 50%, cover circle, orange, red)); + //@include background-image(url("/images/a.png"), linear-gradient(orange, red)); + //@include background-image(url("image.png"), linear-gradient(orange, red), url("image.png")); + //@include background-image(linear-gradient(hsla(0, 100%, 100%, 0.25) 0%, hsla(0, 100%, 100%, 0.08) 50%, transparent 50%), linear-gradient(orange, red)); diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_background.scss b/core/clientold/assets/sass/modules/bourbon/css3/_background.scss new file mode 100644 index 0000000000..766d5d3224 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_background.scss @@ -0,0 +1,103 @@ +//************************************************************************// +// Background property for adding multiple backgrounds using shorthand +// notation. +//************************************************************************// + +@mixin background( + $background-1 , $background-2: false, + $background-3: false, $background-4: false, + $background-5: false, $background-6: false, + $background-7: false, $background-8: false, + $background-9: false, $background-10: false, + $fallback: false +) { + $backgrounds: compact($background-1, $background-2, + $background-3, $background-4, + $background-5, $background-6, + $background-7, $background-8, + $background-9, $background-10); + + $fallback-color: false; + @if (type-of($fallback) == color) or ($fallback == "transparent") { + $fallback-color: $fallback; + } + @else { + $fallback-color: _extract-background-color($backgrounds); + } + + @if $fallback-color { + background-color: $fallback-color; + } + background: _background-add-prefix($backgrounds, webkit); + background: _background-add-prefix($backgrounds); +} + +@function _extract-background-color($backgrounds) { + $final-bg-layer: nth($backgrounds, length($backgrounds)); + @if type-of($final-bg-layer) == list { + @for $i from 1 through length($final-bg-layer) { + $value: nth($final-bg-layer, $i); + @if type-of($value) == color { + @return $value; + } + } + } + @return false; +} + +@function _background-add-prefix($backgrounds, $vendor: false) { + $backgrounds-prefixed: (); + + @for $i from 1 through length($backgrounds) { + $shorthand: nth($backgrounds, $i); // Get member for current index + $type: type-of($shorthand); // Get type of variable - List (gradient) or String (image) + + // If shorthand is a list (gradient) + @if $type == list { + $first-member: nth($shorthand, 1); // Get first member of shorthand + + // Linear Gradient + @if index(linear radial, nth($first-member, 1)) { + $gradient-type: nth($first-member, 1); // linear || radial + $gradient-args: false; + $gradient-positions: false; + $shorthand-start: false; + @if type-of($first-member) == list { // Linear gradient plus additional shorthand values - lg(red,orange)repeat,... + $gradient-positions: nth($first-member, 2); + $gradient-args: nth($first-member, 3); + $shorthand-start: 2; + } + @else { // Linear gradient only - lg(red,orange),... + $gradient-positions: nth($shorthand, 2); + $gradient-args: nth($shorthand, 3); // Get gradient (red, blue) + } + + $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-positions); + $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor); + + // Append any additional shorthand args to gradient + @if $shorthand-start { + @for $j from $shorthand-start through length($shorthand) { + $gradient: join($gradient, nth($shorthand, $j), space); + } + } + $backgrounds-prefixed: append($backgrounds-prefixed, $gradient, comma); + } + // Image with additional properties + @else { + $backgrounds-prefixed: append($backgrounds-prefixed, $shorthand, comma); + } + } + // If shorthand is a simple string (color or image) + @else if $type == string { + $backgrounds-prefixed: join($backgrounds-prefixed, $shorthand, comma); + } + } + @return $backgrounds-prefixed; +} + +//Examples: + //@include background(linear-gradient(top, orange, red)); + //@include background(radial-gradient(circle at 40% 40%, orange, red)); + //@include background(url("/images/a.png") no-repeat, linear-gradient(orange, red)); + //@include background(url("image.png") center center, linear-gradient(orange, red), url("image.png")); diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_border-image.scss b/core/clientold/assets/sass/modules/bourbon/css3/_border-image.scss new file mode 100644 index 0000000000..1fff212df8 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_border-image.scss @@ -0,0 +1,55 @@ +@mixin border-image($images) { + -webkit-border-image: _border-add-prefix($images, webkit); + -moz-border-image: _border-add-prefix($images, moz); + -o-border-image: _border-add-prefix($images, o); + border-image: _border-add-prefix($images); +} + +@function _border-add-prefix($images, $vendor: false) { + $border-image: null; + $images-type: type-of(nth($images, 1)); + $first-var: nth(nth($images, 1), 1); // Get type of Gradient (Linear || radial) + + // If input is a gradient + @if $images-type == string { + @if ($first-var == "linear") or ($first-var == "radial") { + $gradient-type: nth($images, 1); // Get type of gradient (linear || radial) + $gradient-pos: nth($images, 2); // Get gradient position + $gradient-args: nth($images, 3); // Get actual gradient (red, blue) + $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos); + $border-image: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor); + } + // If input is a URL + @else { + $border-image: $images; + } + } + // If input is gradient or url + additional args + @else if $images-type == list { + $type: type-of(nth($images, 1)); // Get type of variable - List or String + + // If variable is a list - Gradient + @if $type == list { + $gradient: nth($images, 1); + $gradient-type: nth($gradient, 1); // Get type of gradient (linear || radial) + $gradient-pos: nth($gradient, 2); // Get gradient position + $gradient-args: nth($gradient, 3); // Get actual gradient (red, blue) + $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos); + $border-image: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor); + + @for $i from 2 through length($images) { + $border-image: append($border-image, nth($images, $i)); + } + } + } + @return $border-image; +} + +//Examples: +// @include border-image(url("image.png")); +// @include border-image(url("image.png") 20 stretch); +// @include border-image(linear-gradient(45deg, orange, yellow)); +// @include border-image(linear-gradient(45deg, orange, yellow) stretch); +// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); +// @include border-image(radial-gradient(top, cover, orange, yellow, orange)); + diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_border-radius.scss b/core/clientold/assets/sass/modules/bourbon/css3/_border-radius.scss new file mode 100644 index 0000000000..7c17190109 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_border-radius.scss @@ -0,0 +1,22 @@ +//************************************************************************// +// Shorthand Border-radius mixins +//************************************************************************// +@mixin border-top-radius($radii) { + @include prefixer(border-top-left-radius, $radii, spec); + @include prefixer(border-top-right-radius, $radii, spec); +} + +@mixin border-bottom-radius($radii) { + @include prefixer(border-bottom-left-radius, $radii, spec); + @include prefixer(border-bottom-right-radius, $radii, spec); +} + +@mixin border-left-radius($radii) { + @include prefixer(border-top-left-radius, $radii, spec); + @include prefixer(border-bottom-left-radius, $radii, spec); +} + +@mixin border-right-radius($radii) { + @include prefixer(border-top-right-radius, $radii, spec); + @include prefixer(border-bottom-right-radius, $radii, spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_box-sizing.scss b/core/clientold/assets/sass/modules/bourbon/css3/_box-sizing.scss new file mode 100644 index 0000000000..f07e1d412e --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_box-sizing.scss @@ -0,0 +1,4 @@ +@mixin box-sizing ($box) { +// content-box | border-box | inherit + @include prefixer(box-sizing, $box, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_columns.scss b/core/clientold/assets/sass/modules/bourbon/css3/_columns.scss new file mode 100644 index 0000000000..42274a4eeb --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_columns.scss @@ -0,0 +1,47 @@ +@mixin columns($arg: auto) { +// || + @include prefixer(columns, $arg, webkit moz spec); +} + +@mixin column-count($int: auto) { +// auto || integer + @include prefixer(column-count, $int, webkit moz spec); +} + +@mixin column-gap($length: normal) { +// normal || length + @include prefixer(column-gap, $length, webkit moz spec); +} + +@mixin column-fill($arg: auto) { +// auto || length + @include prefixer(columns-fill, $arg, webkit moz spec); +} + +@mixin column-rule($arg) { +// || || + @include prefixer(column-rule, $arg, webkit moz spec); +} + +@mixin column-rule-color($color) { + @include prefixer(column-rule-color, $color, webkit moz spec); +} + +@mixin column-rule-style($style: none) { +// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid + @include prefixer(column-rule-style, $style, webkit moz spec); +} + +@mixin column-rule-width ($width: none) { + @include prefixer(column-rule-width, $width, webkit moz spec); +} + +@mixin column-span($arg: none) { +// none || all + @include prefixer(column-span, $arg, webkit moz spec); +} + +@mixin column-width($length: auto) { +// auto || length + @include prefixer(column-width, $length, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_flex-box.scss b/core/clientold/assets/sass/modules/bourbon/css3/_flex-box.scss new file mode 100644 index 0000000000..3e741e6696 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_flex-box.scss @@ -0,0 +1,52 @@ +// CSS3 Flexible Box Model and property defaults + +// Custom shorthand notation for flexbox +@mixin box($orient: inline-axis, $pack: start, $align: stretch) { + @include display-box; + @include box-orient($orient); + @include box-pack($pack); + @include box-align($align); +} + +@mixin display-box { + display: -webkit-box; + display: -moz-box; + display: box; +} + +@mixin box-orient($orient: inline-axis) { +// horizontal|vertical|inline-axis|block-axis|inherit + @include prefixer(box-orient, $orient, webkit moz spec); +} + +@mixin box-pack($pack: start) { +// start|end|center|justify + @include prefixer(box-pack, $pack, webkit moz spec); +} + +@mixin box-align($align: stretch) { +// start|end|center|baseline|stretch + @include prefixer(box-align, $align, webkit moz spec); +} + +@mixin box-direction($direction: normal) { +// normal|reverse|inherit + @include prefixer(box-direction, $direction, webkit moz spec); +} + +@mixin box-lines($lines: single) { +// single|multiple + @include prefixer(box-lines, $lines, webkit moz spec); +} + +@mixin box-ordinal-group($int: 1) { + @include prefixer(box-ordinal-group, $int, webkit moz spec); +} + +@mixin box-flex($value: 0.0) { + @include prefixer(box-flex, $value, webkit moz spec); +} + +@mixin box-flex-group($int: 1) { + @include prefixer(box-flex-group, $int, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_font-face.scss b/core/clientold/assets/sass/modules/bourbon/css3/_font-face.scss new file mode 100644 index 0000000000..029ee8fe88 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_font-face.scss @@ -0,0 +1,23 @@ +// Order of the includes matters, and it is: normal, bold, italic, bold+italic. + +@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: false ) { + @font-face { + font-family: $font-family; + font-weight: $weight; + font-style: $style; + + @if $asset-pipeline == true { + src: font-url('#{$file-path}.eot'); + src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'), + font-url('#{$file-path}.woff') format('woff'), + font-url('#{$file-path}.ttf') format('truetype'), + font-url('#{$file-path}.svg##{$font-family}') format('svg'); + } @else { + src: url('#{$file-path}.eot'); + src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'), + url('#{$file-path}.woff') format('woff'), + url('#{$file-path}.ttf') format('truetype'), + url('#{$file-path}.svg##{$font-family}') format('svg'); + } + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_hidpi-media-query.scss b/core/clientold/assets/sass/modules/bourbon/css3/_hidpi-media-query.scss new file mode 100644 index 0000000000..111e4009b5 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_hidpi-media-query.scss @@ -0,0 +1,10 @@ +// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/) +@mixin hidpi($ratio: 1.3) { + @media only screen and (-webkit-min-device-pixel-ratio: $ratio), + only screen and (min--moz-device-pixel-ratio: $ratio), + only screen and (-o-min-device-pixel-ratio: #{$ratio}/1), + only screen and (min-resolution: #{round($ratio*96)}dpi), + only screen and (min-resolution: #{$ratio}dppx) { + @content; + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_image-rendering.scss b/core/clientold/assets/sass/modules/bourbon/css3/_image-rendering.scss new file mode 100644 index 0000000000..abc7ee1aa4 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_image-rendering.scss @@ -0,0 +1,13 @@ +@mixin image-rendering ($mode:optimizeQuality) { + + @if ($mode == optimize-contrast) { + image-rendering: -moz-crisp-edges; + image-rendering: -o-crisp-edges; + image-rendering: -webkit-optimize-contrast; + image-rendering: optimize-contrast; + } + + @else { + image-rendering: $mode; + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_inline-block.scss b/core/clientold/assets/sass/modules/bourbon/css3/_inline-block.scss new file mode 100644 index 0000000000..3272a0010b --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_inline-block.scss @@ -0,0 +1,8 @@ +// Legacy support for inline-block in IE7 (maybe IE6) +@mixin inline-block { + display: inline-block; + vertical-align: baseline; + zoom: 1; + *display: inline; + *vertical-align: auto; +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_keyframes.scss b/core/clientold/assets/sass/modules/bourbon/css3/_keyframes.scss new file mode 100644 index 0000000000..dca61f2a07 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_keyframes.scss @@ -0,0 +1,43 @@ +// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content +@mixin keyframes($name) { + $original-prefix-for-webkit: $prefix-for-webkit; + $original-prefix-for-mozilla: $prefix-for-mozilla; + $original-prefix-for-microsoft: $prefix-for-microsoft; + $original-prefix-for-opera: $prefix-for-opera; + $original-prefix-for-spec: $prefix-for-spec; + + @if $original-prefix-for-webkit { + @include disable-prefix-for-all(); + $prefix-for-webkit: true; + @-webkit-keyframes #{$name} { + @content; + } + } + @if $original-prefix-for-mozilla { + @include disable-prefix-for-all(); + $prefix-for-mozilla: true; + @-moz-keyframes #{$name} { + @content; + } + } + @if $original-prefix-for-opera { + @include disable-prefix-for-all(); + $prefix-for-opera: true; + @-o-keyframes #{$name} { + @content; + } + } + @if $original-prefix-for-spec { + @include disable-prefix-for-all(); + $prefix-for-spec: true; + @keyframes #{$name} { + @content; + } + } + + $prefix-for-webkit: $original-prefix-for-webkit; + $prefix-for-mozilla: $original-prefix-for-mozilla; + $prefix-for-microsoft: $original-prefix-for-microsoft; + $prefix-for-opera: $original-prefix-for-opera; + $prefix-for-spec: $original-prefix-for-spec; +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_linear-gradient.scss b/core/clientold/assets/sass/modules/bourbon/css3/_linear-gradient.scss new file mode 100644 index 0000000000..d5b687b00c --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_linear-gradient.scss @@ -0,0 +1,41 @@ +@mixin linear-gradient($pos, $G1, $G2: false, + $G3: false, $G4: false, + $G5: false, $G6: false, + $G7: false, $G8: false, + $G9: false, $G10: false, + $deprecated-pos1: left top, + $deprecated-pos2: left bottom, + $fallback: false) { + // Detect what type of value exists in $pos + $pos-type: type-of(nth($pos, 1)); + $pos-spec: null; + $pos-degree: null; + + // If $pos is missing from mixin, reassign vars and add default position + @if ($pos-type == color) or (nth($pos, 1) == "transparent") { + $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5; + $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos; + $pos: null; + } + + @if $pos { + $positions: _linear-positions-parser($pos); + $pos-degree: nth($positions, 1); + $pos-spec: nth($positions, 2); + } + + $full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10); + + // Set $G1 as the default fallback color + $fallback-color: nth($G1, 1); + + // If $fallback is a color use that color as the fallback color + @if (type-of($fallback) == color) or ($fallback == "transparent") { + $fallback-color: $fallback; + } + + background-color: $fallback-color; + background-image: _deprecated-webkit-gradient(linear, $deprecated-pos1, $deprecated-pos2, $full); // Safari <= 5.0 + background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome + background-image: unquote("linear-gradient(#{$pos-spec}#{$full})"); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_perspective.scss b/core/clientold/assets/sass/modules/bourbon/css3/_perspective.scss new file mode 100644 index 0000000000..0e4deb80f3 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_perspective.scss @@ -0,0 +1,8 @@ +@mixin perspective($depth: none) { + // none | + @include prefixer(perspective, $depth, webkit moz spec); +} + +@mixin perspective-origin($value: 50% 50%) { + @include prefixer(perspective-origin, $value, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_placeholder.scss b/core/clientold/assets/sass/modules/bourbon/css3/_placeholder.scss new file mode 100644 index 0000000000..22fd92b4f2 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_placeholder.scss @@ -0,0 +1,29 @@ +$placeholders: '-webkit-input-placeholder', + '-moz-placeholder', + '-ms-input-placeholder'; + +@mixin placeholder { + @each $placeholder in $placeholders { + @if $placeholder == "-webkit-input-placeholder" { + &::#{$placeholder} { + @content; + } + } + @else if $placeholder == "-moz-placeholder" { + // FF 18- + &:#{$placeholder} { + @content; + } + + // FF 19+ + &::#{$placeholder} { + @content; + } + } + @else { + &:#{$placeholder} { + @content; + } + } + } +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_radial-gradient.scss b/core/clientold/assets/sass/modules/bourbon/css3/_radial-gradient.scss new file mode 100644 index 0000000000..e87b45a5a1 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_radial-gradient.scss @@ -0,0 +1,44 @@ +// Requires Sass 3.1+ +@mixin radial-gradient($G1, $G2, + $G3: false, $G4: false, + $G5: false, $G6: false, + $G7: false, $G8: false, + $G9: false, $G10: false, + $pos: null, + $shape-size: null, + $deprecated-pos1: center center, + $deprecated-pos2: center center, + $deprecated-radius1: 0, + $deprecated-radius2: 460, + $fallback: false) { + + $data: _radial-arg-parser($G1, $G2, $pos, $shape-size); + $G1: nth($data, 1); + $G2: nth($data, 2); + $pos: nth($data, 3); + $shape-size: nth($data, 4); + + $full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10); + + // Strip deprecated cover/contain for spec + $shape-size-spec: _shape-size-stripper($shape-size); + + // Set $G1 as the default fallback color + $first-color: nth($full, 1); + $fallback-color: nth($first-color, 1); + + @if (type-of($fallback) == color) or ($fallback == "transparent") { + $fallback-color: $fallback; + } + + // Add Commas and spaces + $shape-size: if($shape-size, '#{$shape-size}, ', null); + $pos: if($pos, '#{$pos}, ', null); + $pos-spec: if($pos, 'at #{$pos}', null); + $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} '); + + background-color: $fallback-color; + background-image: _deprecated-webkit-gradient(radial, $deprecated-pos1, $deprecated-pos2, $full, $deprecated-radius1, $deprecated-radius2); // Safari <= 5.0 && IOS 4 + background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); + background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_transform.scss b/core/clientold/assets/sass/modules/bourbon/css3/_transform.scss new file mode 100644 index 0000000000..8cc35963d5 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_transform.scss @@ -0,0 +1,15 @@ +@mixin transform($property: none) { +// none | + @include prefixer(transform, $property, webkit moz ms o spec); +} + +@mixin transform-origin($axes: 50%) { +// x-axis - left | center | right | length | % +// y-axis - top | center | bottom | length | % +// z-axis - length + @include prefixer(transform-origin, $axes, webkit moz ms o spec); +} + +@mixin transform-style ($style: flat) { + @include prefixer(transform-style, $style, webkit moz ms o spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_transition.scss b/core/clientold/assets/sass/modules/bourbon/css3/_transition.scss new file mode 100644 index 0000000000..180cde6c8a --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_transition.scss @@ -0,0 +1,34 @@ +// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. +// Example: @include transition (all, 2.0s, ease-in-out); +// @include transition ((opacity, width), (1.0s, 2.0s), ease-in, (0, 2s)); +// @include transition ($property:(opacity, width), $delay: (1.5s, 2.5s)); + +@mixin transition ($properties...) { + @if length($properties) >= 1 { + @include prefixer(transition, $properties, webkit moz spec); + } + + @else { + $properties: all 0.15s ease-out 0; + @include prefixer(transition, $properties, webkit moz spec); + } +} + +@mixin transition-property ($properties...) { + -webkit-transition-property: transition-property-names($properties, 'webkit'); + -moz-transition-property: transition-property-names($properties, 'moz'); + transition-property: transition-property-names($properties, false); +} + +@mixin transition-duration ($times...) { + @include prefixer(transition-duration, $times, webkit moz spec); +} + +@mixin transition-timing-function ($motions...) { +// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() + @include prefixer(transition-timing-function, $motions, webkit moz spec); +} + +@mixin transition-delay ($times...) { + @include prefixer(transition-delay, $times, webkit moz spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/css3/_user-select.scss b/core/clientold/assets/sass/modules/bourbon/css3/_user-select.scss new file mode 100644 index 0000000000..1380aa8baa --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/css3/_user-select.scss @@ -0,0 +1,3 @@ +@mixin user-select($arg: none) { + @include prefixer(user-select, $arg, webkit moz ms spec); +} diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_compact.scss b/core/clientold/assets/sass/modules/bourbon/functions/_compact.scss new file mode 100644 index 0000000000..871500e339 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_compact.scss @@ -0,0 +1,11 @@ +// Remove `false` values from a list + +@function compact($vars...) { + $list: (); + @each $var in $vars { + @if $var { + $list: append($list, $var, comma); + } + } + @return $list; +} diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_flex-grid.scss b/core/clientold/assets/sass/modules/bourbon/functions/_flex-grid.scss new file mode 100644 index 0000000000..3bbd866573 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_flex-grid.scss @@ -0,0 +1,39 @@ +// Flexible grid +@function flex-grid($columns, $container-columns: $fg-max-columns) { + $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; + $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; + @return percentage($width / $container-width); +} + +// Flexible gutter +@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { + $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; + @return percentage($gutter / $container-width); +} + +// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function. +// This function takes the fluid grid equation (target / context = result) and uses columns to help define each. +// +// The calculation presumes that your column structure will be missing the last gutter: +// +// -- column -- gutter -- column -- gutter -- column +// +// $fg-column: 60px; // Column Width +// $fg-gutter: 25px; // Gutter Width +// $fg-max-columns: 12; // Total Columns For Main Container +// +// div { +// width: flex-grid(4); // returns (315px / 995px) = 31.65829%; +// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%; +// +// p { +// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; +// float: left; +// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%; +// } +// +// blockquote { +// float: left; +// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; +// } +// } \ No newline at end of file diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_grid-width.scss b/core/clientold/assets/sass/modules/bourbon/functions/_grid-width.scss new file mode 100644 index 0000000000..8e63d83d60 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_grid-width.scss @@ -0,0 +1,13 @@ +@function grid-width($n) { + @return $n * $gw-column + ($n - 1) * $gw-gutter; +} + +// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function. +// +// $gw-column: 100px; // Column Width +// $gw-gutter: 40px; // Gutter Width +// +// div { +// width: grid-width(4); // returns 520px; +// margin-left: $gw-gutter; // returns 40px; +// } diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_linear-gradient.scss b/core/clientold/assets/sass/modules/bourbon/functions/_linear-gradient.scss new file mode 100644 index 0000000000..c8454d83f0 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_linear-gradient.scss @@ -0,0 +1,13 @@ +@function linear-gradient($pos, $gradients...) { + $type: linear; + $pos-type: type-of(nth($pos, 1)); + + // if $pos doesn't exist, fix $gradient + @if ($pos-type == color) or (nth($pos, 1) == "transparent") { + $gradients: zip($pos $gradients); + $pos: false; + } + + $type-gradient: $type, $pos, $gradients; + @return $type-gradient; +} diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_modular-scale.scss b/core/clientold/assets/sass/modules/bourbon/functions/_modular-scale.scss new file mode 100644 index 0000000000..dddccb5224 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_modular-scale.scss @@ -0,0 +1,40 @@ +@function modular-scale($value, $increment, $ratio) { + @if $increment > 0 { + @for $i from 1 through $increment { + $value: ($value * $ratio); + } + } + + @if $increment < 0 { + $increment: abs($increment); + @for $i from 1 through $increment { + $value: ($value / $ratio); + } + } + + @return $value; +} + +// div { +// Increment Up GR with positive value +// font-size: modular-scale(14px, 1, 1.618); // returns: 22.652px +// +// Increment Down GR with negative value +// font-size: modular-scale(14px, -1, 1.618); // returns: 8.653px +// +// Can be used with ceil(round up) or floor(round down) +// font-size: floor( modular-scale(14px, 1, 1.618) ); // returns: 22px +// font-size: ceil( modular-scale(14px, 1, 1.618) ); // returns: 23px +// } +// +// modularscale.com + +@function golden-ratio($value, $increment) { + @return modular-scale($value, $increment, 1.618) +} + +// div { +// font-size: golden-ratio(14px, 1); // returns: 22.652px +// } +// +// goldenratiocalculator.com diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_px-to-em.scss b/core/clientold/assets/sass/modules/bourbon/functions/_px-to-em.scss new file mode 100644 index 0000000000..2eb1031c60 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_px-to-em.scss @@ -0,0 +1,8 @@ +// Convert pixels to ems +// eg. for a relational value of 12px write em(12) when the parent is 16px +// if the parent is another value say 24px write em(12, 24) + +@function em($pxval, $base: 16) { + @return ($pxval / $base) * 1em; +} + diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_radial-gradient.scss b/core/clientold/assets/sass/modules/bourbon/functions/_radial-gradient.scss new file mode 100644 index 0000000000..75584060d2 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_radial-gradient.scss @@ -0,0 +1,23 @@ +// This function is required and used by the background-image mixin. +@function radial-gradient($G1, $G2, + $G3: false, $G4: false, + $G5: false, $G6: false, + $G7: false, $G8: false, + $G9: false, $G10: false, + $pos: null, + $shape-size: null) { + + $data: _radial-arg-parser($G1, $G2, $pos, $shape-size); + $G1: nth($data, 1); + $G2: nth($data, 2); + $pos: nth($data, 3); + $shape-size: nth($data, 4); + + $type: radial; + $gradient: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10); + + $type-gradient: $type, $shape-size $pos, $gradient; + @return $type-gradient; +} + + diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_tint-shade.scss b/core/clientold/assets/sass/modules/bourbon/functions/_tint-shade.scss new file mode 100644 index 0000000000..f7172004ac --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_tint-shade.scss @@ -0,0 +1,9 @@ +// Add percentage of white to a color +@function tint($color, $percent){ + @return mix(white, $color, $percent); +} + +// Add percentage of black to a color +@function shade($color, $percent){ + @return mix(black, $color, $percent); +} diff --git a/core/clientold/assets/sass/modules/bourbon/functions/_transition-property-name.scss b/core/clientold/assets/sass/modules/bourbon/functions/_transition-property-name.scss new file mode 100644 index 0000000000..54cd422811 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/functions/_transition-property-name.scss @@ -0,0 +1,22 @@ +// Return vendor-prefixed property names if appropriate +// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background +//************************************************************************// +@function transition-property-names($props, $vendor: false) { + $new-props: (); + + @each $prop in $props { + $new-props: append($new-props, transition-property-name($prop, $vendor), comma); + } + + @return $new-props; +} + +@function transition-property-name($prop, $vendor: false) { + // put other properties that need to be prefixed here aswell + @if $vendor and $prop == transform { + @return unquote('-'+$vendor+'-'+$prop); + } + @else { + @return $prop; + } +} \ No newline at end of file diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_deprecated-webkit-gradient.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_deprecated-webkit-gradient.scss new file mode 100644 index 0000000000..cd17e2832d --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_deprecated-webkit-gradient.scss @@ -0,0 +1,39 @@ +// Render Deprecated Webkit Gradient - Linear || Radial +//************************************************************************// +@function _deprecated-webkit-gradient($type, + $deprecated-pos1, $deprecated-pos2, + $full, + $deprecated-radius1: false, $deprecated-radius2: false) { + $gradient-list: (); + $gradient: false; + $full-length: length($full); + $percentage: false; + $gradient-type: $type; + + @for $i from 1 through $full-length { + $gradient: nth($full, $i); + + @if length($gradient) == 2 { + $color-stop: color-stop(nth($gradient, 2), nth($gradient, 1)); + $gradient-list: join($gradient-list, $color-stop, comma); + } + @else if $gradient != null { + @if $i == $full-length { + $percentage: 100%; + } + @else { + $percentage: ($i - 1) * (100 / ($full-length - 1)) + "%"; + } + $color-stop: color-stop(unquote($percentage), $gradient); + $gradient-list: join($gradient-list, $color-stop, comma); + } + } + + @if $type == radial { + $gradient: -webkit-gradient(radial, $deprecated-pos1, $deprecated-radius1, $deprecated-pos2, $deprecated-radius2, $gradient-list); + } + @else if $type == linear { + $gradient: -webkit-gradient(linear, $deprecated-pos1, $deprecated-pos2, $gradient-list); + } + @return $gradient; +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_gradient-positions-parser.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_gradient-positions-parser.scss new file mode 100644 index 0000000000..07d30b6cf9 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_gradient-positions-parser.scss @@ -0,0 +1,13 @@ +@function _gradient-positions-parser($gradient-type, $gradient-positions) { + @if $gradient-positions + and ($gradient-type == linear) + and (type-of($gradient-positions) != color) { + $gradient-positions: _linear-positions-parser($gradient-positions); + } + @else if $gradient-positions + and ($gradient-type == radial) + and (type-of($gradient-positions) != color) { + $gradient-positions: _radial-positions-parser($gradient-positions); + } + @return $gradient-positions; +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_linear-positions-parser.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_linear-positions-parser.scss new file mode 100644 index 0000000000..d26383edce --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_linear-positions-parser.scss @@ -0,0 +1,61 @@ +@function _linear-positions-parser($pos) { + $type: type-of(nth($pos, 1)); + $spec: null; + $degree: null; + $side: null; + $corner: null; + $length: length($pos); + // Parse Side and corner positions + @if ($length > 1) { + @if nth($pos, 1) == "to" { // Newer syntax + $side: nth($pos, 2); + + @if $length == 2 { // eg. to top + // Swap for backwards compatability + $degree: _position-flipper(nth($pos, 2)); + } + @else if $length == 3 { // eg. to top left + $corner: nth($pos, 3); + } + } + @else if $length == 2 { // Older syntax ("top left") + $side: _position-flipper(nth($pos, 1)); + $corner: _position-flipper(nth($pos, 2)); + } + + @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + $spec: to $side $corner; + } + @else if $length == 1 { + // Swap for backwards compatability + @if $type == string { + $degree: $pos; + $spec: to _position-flipper($pos); + } + @else { + $degree: -270 - $pos; //rotate the gradient opposite from spec + $spec: $pos; + } + } + $degree: unquote($degree + ","); + $spec: unquote($spec + ","); + @return $degree $spec; +} + +@function _position-flipper($pos) { + @return if($pos == left, right, null) + if($pos == right, left, null) + if($pos == top, bottom, null) + if($pos == bottom, top, null); +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_radial-arg-parser.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_radial-arg-parser.scss new file mode 100644 index 0000000000..3466695bdf --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_radial-arg-parser.scss @@ -0,0 +1,69 @@ +@function _radial-arg-parser($G1, $G2, $pos, $shape-size) { + @each $value in $G1, $G2 { + $first-val: nth($value, 1); + $pos-type: type-of($first-val); + $spec-at-index: null; + + // Determine if spec was passed to mixin + @if type-of($value) == list { + $spec-at-index: if(index($value, at), index($value, at), false); + } + @if $spec-at-index { + @if $spec-at-index > 1 { + @for $i from 1 through ($spec-at-index - 1) { + $shape-size: $shape-size nth($value, $i); + } + @for $i from ($spec-at-index + 1) through length($value) { + $pos: $pos nth($value, $i); + } + } + @else if $spec-at-index == 1 { + @for $i from ($spec-at-index + 1) through length($value) { + $pos: $pos nth($value, $i); + } + } + $G1: false; + } + + // If not spec calculate correct values + @else { + @if ($pos-type != color) or ($first-val != "transparent") { + @if ($pos-type == number) + or ($first-val == "center") + or ($first-val == "top") + or ($first-val == "right") + or ($first-val == "bottom") + or ($first-val == "left") { + + $pos: $value; + + @if $pos == $G1 { + $G1: false; + } + } + + @else if + ($first-val == "ellipse") + or ($first-val == "circle") + or ($first-val == "closest-side") + or ($first-val == "closest-corner") + or ($first-val == "farthest-side") + or ($first-val == "farthest-corner") + or ($first-val == "contain") + or ($first-val == "cover") { + + $shape-size: $value; + + @if $value == $G1 { + $G1: false; + } + + @else if $value == $G2 { + $G2: false; + } + } + } + } + } + @return $G1, $G2, $pos, $shape-size; +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_radial-positions-parser.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_radial-positions-parser.scss new file mode 100644 index 0000000000..6a5b477778 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_radial-positions-parser.scss @@ -0,0 +1,18 @@ +@function _radial-positions-parser($gradient-pos) { + $shape-size: nth($gradient-pos, 1); + $pos: nth($gradient-pos, 2); + $shape-size-spec: _shape-size-stripper($shape-size); + + $pre-spec: unquote(if($pos, "#{$pos}, ", null)) + unquote(if($shape-size, "#{$shape-size},", null)); + $pos-spec: if($pos, "at #{$pos}", null); + + $spec: "#{$shape-size-spec} #{$pos-spec}"; + + // Add comma + @if ($spec != ' ') { + $spec: "#{$spec}," + } + + @return $pre-spec $spec; +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_render-gradients.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_render-gradients.scss new file mode 100644 index 0000000000..5765676838 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_render-gradients.scss @@ -0,0 +1,26 @@ +// User for linear and radial gradients within background-image or border-image properties + +@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { + $pre-spec: null; + $spec: null; + $vendor-gradients: null; + @if $gradient-type == linear { + @if $gradient-positions { + $pre-spec: nth($gradient-positions, 1); + $spec: nth($gradient-positions, 2); + } + } + @else if $gradient-type == radial { + $pre-spec: nth($gradient-positions, 1); + $spec: nth($gradient-positions, 2); + } + + @if $vendor { + $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); + } + @else if $vendor == false { + $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; + $vendor-gradients: unquote($vendor-gradients); + } + @return $vendor-gradients; +} diff --git a/core/clientold/assets/sass/modules/bourbon/helpers/_shape-size-stripper.scss b/core/clientold/assets/sass/modules/bourbon/helpers/_shape-size-stripper.scss new file mode 100644 index 0000000000..ee5eda4220 --- /dev/null +++ b/core/clientold/assets/sass/modules/bourbon/helpers/_shape-size-stripper.scss @@ -0,0 +1,10 @@ +@function _shape-size-stripper($shape-size) { + $shape-size-spec: null; + @each $value in $shape-size { + @if ($value == "cover") or ($value == "contain") { + $value: null; + } + $shape-size-spec: "#{$shape-size-spec} #{$value}"; + } + @return $shape-size-spec; +} diff --git a/core/client/assets/sass/modules/breakpoint.scss b/core/clientold/assets/sass/modules/breakpoint.scss similarity index 100% rename from core/client/assets/sass/modules/breakpoint.scss rename to core/clientold/assets/sass/modules/breakpoint.scss diff --git a/core/client/assets/sass/modules/breakpoint/_context.scss b/core/clientold/assets/sass/modules/breakpoint/_context.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/_context.scss rename to core/clientold/assets/sass/modules/breakpoint/_context.scss diff --git a/core/client/assets/sass/modules/breakpoint/_helpers.scss b/core/clientold/assets/sass/modules/breakpoint/_helpers.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/_helpers.scss rename to core/clientold/assets/sass/modules/breakpoint/_helpers.scss diff --git a/core/client/assets/sass/modules/breakpoint/_no-query.scss b/core/clientold/assets/sass/modules/breakpoint/_no-query.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/_no-query.scss rename to core/clientold/assets/sass/modules/breakpoint/_no-query.scss diff --git a/core/client/assets/sass/modules/breakpoint/_parsers.scss b/core/clientold/assets/sass/modules/breakpoint/_parsers.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/_parsers.scss rename to core/clientold/assets/sass/modules/breakpoint/_parsers.scss diff --git a/core/client/assets/sass/modules/breakpoint/_respond-to.scss b/core/clientold/assets/sass/modules/breakpoint/_respond-to.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/_respond-to.scss rename to core/clientold/assets/sass/modules/breakpoint/_respond-to.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/_double.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/_double.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/_double.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/_double.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/_query.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/_query.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/_query.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/_query.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/_resolution.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/_resolution.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/_resolution.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/_resolution.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/_single.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/_single.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/_single.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/_single.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/_triple.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/_triple.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/_triple.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/_triple.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/double/_default-pair.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/double/_default-pair.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/double/_default-pair.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/double/_default-pair.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/double/_default.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/double/_default.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/double/_default.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/double/_default.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/double/_double-string.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/double/_double-string.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/double/_double-string.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/double/_double-string.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/resolution/_resolution.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/resolution/_resolution.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/resolution/_resolution.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/resolution/_resolution.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/single/_default.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/single/_default.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/single/_default.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/single/_default.scss diff --git a/core/client/assets/sass/modules/breakpoint/parsers/triple/_default.scss b/core/clientold/assets/sass/modules/breakpoint/parsers/triple/_default.scss old mode 100755 new mode 100644 similarity index 100% rename from core/client/assets/sass/modules/breakpoint/parsers/triple/_default.scss rename to core/clientold/assets/sass/modules/breakpoint/parsers/triple/_default.scss diff --git a/core/client/assets/sass/modules/forms.scss b/core/clientold/assets/sass/modules/forms.scss similarity index 100% rename from core/client/assets/sass/modules/forms.scss rename to core/clientold/assets/sass/modules/forms.scss diff --git a/core/client/assets/sass/modules/global.scss b/core/clientold/assets/sass/modules/global.scss similarity index 100% rename from core/client/assets/sass/modules/global.scss rename to core/clientold/assets/sass/modules/global.scss diff --git a/core/client/assets/sass/modules/icons.scss b/core/clientold/assets/sass/modules/icons.scss similarity index 100% rename from core/client/assets/sass/modules/icons.scss rename to core/clientold/assets/sass/modules/icons.scss diff --git a/core/client/assets/sass/modules/mixins.scss b/core/clientold/assets/sass/modules/mixins.scss similarity index 100% rename from core/client/assets/sass/modules/mixins.scss rename to core/clientold/assets/sass/modules/mixins.scss diff --git a/core/client/assets/sass/modules/normalize.scss b/core/clientold/assets/sass/modules/normalize.scss similarity index 100% rename from core/client/assets/sass/modules/normalize.scss rename to core/clientold/assets/sass/modules/normalize.scss diff --git a/core/client/assets/sass/screen.scss b/core/clientold/assets/sass/screen.scss similarity index 100% rename from core/client/assets/sass/screen.scss rename to core/clientold/assets/sass/screen.scss diff --git a/core/client/assets/vendor/chart.min.js b/core/clientold/assets/vendor/chart.min.js similarity index 100% rename from core/client/assets/vendor/chart.min.js rename to core/clientold/assets/vendor/chart.min.js diff --git a/core/client/assets/vendor/codemirror/addon/mode/overlay.js b/core/clientold/assets/vendor/codemirror/addon/mode/overlay.js similarity index 100% rename from core/client/assets/vendor/codemirror/addon/mode/overlay.js rename to core/clientold/assets/vendor/codemirror/addon/mode/overlay.js diff --git a/core/client/assets/vendor/codemirror/codemirror.js b/core/clientold/assets/vendor/codemirror/codemirror.js similarity index 100% rename from core/client/assets/vendor/codemirror/codemirror.js rename to core/clientold/assets/vendor/codemirror/codemirror.js diff --git a/core/client/assets/vendor/codemirror/mode/gfm/gfm.js b/core/clientold/assets/vendor/codemirror/mode/gfm/gfm.js similarity index 100% rename from core/client/assets/vendor/codemirror/mode/gfm/gfm.js rename to core/clientold/assets/vendor/codemirror/mode/gfm/gfm.js diff --git a/core/client/assets/vendor/codemirror/mode/gfm/index.html b/core/clientold/assets/vendor/codemirror/mode/gfm/index.html similarity index 100% rename from core/client/assets/vendor/codemirror/mode/gfm/index.html rename to core/clientold/assets/vendor/codemirror/mode/gfm/index.html diff --git a/core/client/assets/vendor/codemirror/mode/gfm/test.js b/core/clientold/assets/vendor/codemirror/mode/gfm/test.js similarity index 100% rename from core/client/assets/vendor/codemirror/mode/gfm/test.js rename to core/clientold/assets/vendor/codemirror/mode/gfm/test.js diff --git a/core/client/assets/vendor/codemirror/mode/markdown/index.html b/core/clientold/assets/vendor/codemirror/mode/markdown/index.html similarity index 100% rename from core/client/assets/vendor/codemirror/mode/markdown/index.html rename to core/clientold/assets/vendor/codemirror/mode/markdown/index.html diff --git a/core/client/assets/vendor/codemirror/mode/markdown/markdown.js b/core/clientold/assets/vendor/codemirror/mode/markdown/markdown.js similarity index 100% rename from core/client/assets/vendor/codemirror/mode/markdown/markdown.js rename to core/clientold/assets/vendor/codemirror/mode/markdown/markdown.js diff --git a/core/client/assets/vendor/codemirror/mode/markdown/test.js b/core/clientold/assets/vendor/codemirror/mode/markdown/test.js similarity index 100% rename from core/client/assets/vendor/codemirror/mode/markdown/test.js rename to core/clientold/assets/vendor/codemirror/mode/markdown/test.js diff --git a/core/client/assets/vendor/countable.js b/core/clientold/assets/vendor/countable.js similarity index 100% rename from core/client/assets/vendor/countable.js rename to core/clientold/assets/vendor/countable.js diff --git a/core/client/assets/vendor/fastclick.js b/core/clientold/assets/vendor/fastclick.js similarity index 96% rename from core/client/assets/vendor/fastclick.js rename to core/clientold/assets/vendor/fastclick.js index 8609852641..30d6895ccc 100644 --- a/core/client/assets/vendor/fastclick.js +++ b/core/clientold/assets/vendor/fastclick.js @@ -1,761 +1,761 @@ -/** - * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. - * - * @version 0.6.9 - * @codingstandard ftlabs-jsv2 - * @copyright The Financial Times Limited [All Rights Reserved] - * @license MIT License (see LICENSE.txt) - */ - -/*jslint browser:true, node:true*/ -/*global define, Event, Node*/ - - -/** - * Instantiate fast-clicking listeners on the specificed layer. - * - * @constructor - * @param {Element} layer The layer to listen on - */ -function FastClick(layer) { - 'use strict'; - var oldOnClick, self = this; - - - /** - * Whether a click is currently being tracked. - * - * @type boolean - */ - this.trackingClick = false; - - - /** - * Timestamp for when when click tracking started. - * - * @type number - */ - this.trackingClickStart = 0; - - - /** - * The element being tracked for a click. - * - * @type EventTarget - */ - this.targetElement = null; - - - /** - * X-coordinate of touch start event. - * - * @type number - */ - this.touchStartX = 0; - - - /** - * Y-coordinate of touch start event. - * - * @type number - */ - this.touchStartY = 0; - - - /** - * ID of the last touch, retrieved from Touch.identifier. - * - * @type number - */ - this.lastTouchIdentifier = 0; - - - /** - * Touchmove boundary, beyond which a click will be cancelled. - * - * @type number - */ - this.touchBoundary = 10; - - - /** - * The FastClick layer. - * - * @type Element - */ - this.layer = layer; - - if (!layer || !layer.nodeType) { - throw new TypeError('Layer must be a document node'); - } - - /** @type function() */ - this.onClick = function() { return FastClick.prototype.onClick.apply(self, arguments); }; - - /** @type function() */ - this.onMouse = function() { return FastClick.prototype.onMouse.apply(self, arguments); }; - - /** @type function() */ - this.onTouchStart = function() { return FastClick.prototype.onTouchStart.apply(self, arguments); }; - - /** @type function() */ - this.onTouchMove = function() { return FastClick.prototype.onTouchMove.apply(self, arguments); }; - - /** @type function() */ - this.onTouchEnd = function() { return FastClick.prototype.onTouchEnd.apply(self, arguments); }; - - /** @type function() */ - this.onTouchCancel = function() { return FastClick.prototype.onTouchCancel.apply(self, arguments); }; - - if (FastClick.notNeeded(layer)) { - return; - } - - // Set up event handlers as required - if (this.deviceIsAndroid) { - layer.addEventListener('mouseover', this.onMouse, true); - layer.addEventListener('mousedown', this.onMouse, true); - layer.addEventListener('mouseup', this.onMouse, true); - } - - layer.addEventListener('click', this.onClick, true); - layer.addEventListener('touchstart', this.onTouchStart, false); - layer.addEventListener('touchmove', this.onTouchMove, false); - layer.addEventListener('touchend', this.onTouchEnd, false); - layer.addEventListener('touchcancel', this.onTouchCancel, false); - - // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick - // layer when they are cancelled. - if (!Event.prototype.stopImmediatePropagation) { - layer.removeEventListener = function(type, callback, capture) { - var rmv = Node.prototype.removeEventListener; - if (type === 'click') { - rmv.call(layer, type, callback.hijacked || callback, capture); - } else { - rmv.call(layer, type, callback, capture); - } - }; - - layer.addEventListener = function(type, callback, capture) { - var adv = Node.prototype.addEventListener; - if (type === 'click') { - adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) { - if (!event.propagationStopped) { - callback(event); - } - }), capture); - } else { - adv.call(layer, type, callback, capture); - } - }; - } - - // If a handler is already declared in the element's onclick attribute, it will be fired before - // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and - // adding it as listener. - if (typeof layer.onclick === 'function') { - - // Android browser on at least 3.2 requires a new reference to the function in layer.onclick - // - the old one won't work if passed to addEventListener directly. - oldOnClick = layer.onclick; - layer.addEventListener('click', function(event) { - oldOnClick(event); - }, false); - layer.onclick = null; - } -} - - -/** - * Android requires exceptions. - * - * @type boolean - */ -FastClick.prototype.deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0; - - -/** - * iOS requires exceptions. - * - * @type boolean - */ -FastClick.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent); - - -/** - * iOS 4 requires an exception for select elements. - * - * @type boolean - */ -FastClick.prototype.deviceIsIOS4 = FastClick.prototype.deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent); - - -/** - * iOS 6.0(+?) requires the target element to be manually derived - * - * @type boolean - */ -FastClick.prototype.deviceIsIOSWithBadTarget = FastClick.prototype.deviceIsIOS && (/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent); - - -/** - * Determine whether a given element requires a native click. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element needs a native click - */ -FastClick.prototype.needsClick = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - - // Don't send a synthetic click to disabled inputs (issue #62) - case 'button': - case 'select': - case 'textarea': - if (target.disabled) { - return true; - } - - break; - case 'input': - - // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) - if ((this.deviceIsIOS && target.type === 'file') || target.disabled) { - return true; - } - - break; - case 'label': - case 'video': - return true; - } - - return (/\bneedsclick\b/).test(target.className); -}; - - -/** - * Determine whether a given element requires a call to focus to simulate click into element. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element requires a call to focus to simulate native click. - */ -FastClick.prototype.needsFocus = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - case 'textarea': - case 'select': - return true; - case 'input': - switch (target.type) { - case 'button': - case 'checkbox': - case 'file': - case 'image': - case 'radio': - case 'submit': - return false; - } - - // No point in attempting to focus disabled inputs - return !target.disabled && !target.readOnly; - default: - return (/\bneedsfocus\b/).test(target.className); - } -}; - - -/** - * Send a click event to the specified element. - * - * @param {EventTarget|Element} targetElement - * @param {Event} event - */ -FastClick.prototype.sendClick = function(targetElement, event) { - 'use strict'; - var clickEvent, touch; - - // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) - if (document.activeElement && document.activeElement !== targetElement) { - document.activeElement.blur(); - } - - touch = event.changedTouches[0]; - - // Synthesise a click event, with an extra attribute so it can be tracked - clickEvent = document.createEvent('MouseEvents'); - clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); - clickEvent.forwardedTouchEvent = true; - targetElement.dispatchEvent(clickEvent); -}; - - -/** - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.focus = function(targetElement) { - 'use strict'; - var length; - - if (this.deviceIsIOS && targetElement.setSelectionRange) { - length = targetElement.value.length; - targetElement.setSelectionRange(length, length); - } else { - targetElement.focus(); - } -}; - - -/** - * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it. - * - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.updateScrollParent = function(targetElement) { - 'use strict'; - var scrollParent, parentElement; - - scrollParent = targetElement.fastClickScrollParent; - - // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the - // target element was moved to another parent. - if (!scrollParent || !scrollParent.contains(targetElement)) { - parentElement = targetElement; - do { - if (parentElement.scrollHeight > parentElement.offsetHeight) { - scrollParent = parentElement; - targetElement.fastClickScrollParent = parentElement; - break; - } - - parentElement = parentElement.parentElement; - } while (parentElement); - } - - // Always update the scroll top tracker if possible. - if (scrollParent) { - scrollParent.fastClickLastScrollTop = scrollParent.scrollTop; - } -}; - - -/** - * @param {EventTarget} targetElement - * @returns {Element|EventTarget} - */ -FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) { - 'use strict'; - - // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node. - if (eventTarget.nodeType === Node.TEXT_NODE) { - return eventTarget.parentNode; - } - - return eventTarget; -}; - - -/** - * On touch start, record the position and scroll offset. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchStart = function(event) { - 'use strict'; - var targetElement, touch, selection; - - // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111). - if (event.targetTouches.length > 1) { - return true; - } - - targetElement = this.getTargetElementFromEventTarget(event.target); - touch = event.targetTouches[0]; - - if (this.deviceIsIOS) { - - // Only trusted events will deselect text on iOS (issue #49) - selection = window.getSelection(); - if (selection.rangeCount && !selection.isCollapsed) { - return true; - } - - if (!this.deviceIsIOS4) { - - // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23): - // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched - // with the same identifier as the touch event that previously triggered the click that triggered the alert. - // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an - // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform. - if (touch.identifier === this.lastTouchIdentifier) { - event.preventDefault(); - return false; - } - - this.lastTouchIdentifier = touch.identifier; - - // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and: - // 1) the user does a fling scroll on the scrollable layer - // 2) the user stops the fling scroll with another tap - // then the event.target of the last 'touchend' event will be the element that was under the user's finger - // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check - // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42). - this.updateScrollParent(targetElement); - } - } - - this.trackingClick = true; - this.trackingClickStart = event.timeStamp; - this.targetElement = targetElement; - - this.touchStartX = touch.pageX; - this.touchStartY = touch.pageY; - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < 200) { - event.preventDefault(); - } - - return true; -}; - - -/** - * Based on a touchmove event object, check whether the touch has moved past a boundary since it started. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.touchHasMoved = function(event) { - 'use strict'; - var touch = event.changedTouches[0], boundary = this.touchBoundary; - - if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) { - return true; - } - - return false; -}; - - -/** - * Update the last position. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchMove = function(event) { - 'use strict'; - if (!this.trackingClick) { - return true; - } - - // If the touch has moved, cancel the click tracking - if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) { - this.trackingClick = false; - this.targetElement = null; - } - - return true; -}; - - -/** - * Attempt to find the labelled control for the given label element. - * - * @param {EventTarget|HTMLLabelElement} labelElement - * @returns {Element|null} - */ -FastClick.prototype.findControl = function(labelElement) { - 'use strict'; - - // Fast path for newer browsers supporting the HTML5 control attribute - if (labelElement.control !== undefined) { - return labelElement.control; - } - - // All browsers under test that support touch events also support the HTML5 htmlFor attribute - if (labelElement.htmlFor) { - return document.getElementById(labelElement.htmlFor); - } - - // If no for attribute exists, attempt to retrieve the first labellable descendant element - // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label - return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'); -}; - - -/** - * On touch end, determine whether to send a click event at once. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchEnd = function(event) { - 'use strict'; - var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement; - - if (!this.trackingClick) { - return true; - } - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < 200) { - this.cancelNextClick = true; - return true; - } - - this.lastClickTime = event.timeStamp; - - trackingClickStart = this.trackingClickStart; - this.trackingClick = false; - this.trackingClickStart = 0; - - // On some iOS devices, the targetElement supplied with the event is invalid if the layer - // is performing a transition or scroll, and has to be re-detected manually. Note that - // for this to function correctly, it must be called *after* the event target is checked! - // See issue #57; also filed as rdar://13048589 . - if (this.deviceIsIOSWithBadTarget) { - touch = event.changedTouches[0]; - - // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null - targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement; - targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent; - } - - targetTagName = targetElement.tagName.toLowerCase(); - if (targetTagName === 'label') { - forElement = this.findControl(targetElement); - if (forElement) { - this.focus(targetElement); - if (this.deviceIsAndroid) { - return false; - } - - targetElement = forElement; - } - } else if (this.needsFocus(targetElement)) { - - // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through. - // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37). - if ((event.timeStamp - trackingClickStart) > 100 || (this.deviceIsIOS && window.top !== window && targetTagName === 'input')) { - this.targetElement = null; - return false; - } - - this.focus(targetElement); - - // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open. - if (!this.deviceIsIOS4 || targetTagName !== 'select') { - this.targetElement = null; - event.preventDefault(); - } - - return false; - } - - if (this.deviceIsIOS && !this.deviceIsIOS4) { - - // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled - // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42). - scrollParent = targetElement.fastClickScrollParent; - if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) { - return true; - } - } - - // Prevent the actual click from going though - unless the target node is marked as requiring - // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted. - if (!this.needsClick(targetElement)) { - event.preventDefault(); - this.sendClick(targetElement, event); - } - - return false; -}; - - -/** - * On touch cancel, stop tracking the click. - * - * @returns {void} - */ -FastClick.prototype.onTouchCancel = function() { - 'use strict'; - this.trackingClick = false; - this.targetElement = null; -}; - - -/** - * Determine mouse events which should be permitted. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onMouse = function(event) { - 'use strict'; - - // If a target element was never set (because a touch event was never fired) allow the event - if (!this.targetElement) { - return true; - } - - if (event.forwardedTouchEvent) { - return true; - } - - // Programmatically generated events targeting a specific element should be permitted - if (!event.cancelable) { - return true; - } - - // Derive and check the target element to see whether the mouse event needs to be permitted; - // unless explicitly enabled, prevent non-touch click events from triggering actions, - // to prevent ghost/doubleclicks. - if (!this.needsClick(this.targetElement) || this.cancelNextClick) { - - // Prevent any user-added listeners declared on FastClick element from being fired. - if (event.stopImmediatePropagation) { - event.stopImmediatePropagation(); - } else { - - // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - event.propagationStopped = true; - } - - // Cancel the event - event.stopPropagation(); - event.preventDefault(); - - return false; - } - - // If the mouse event is permitted, return true for the action to go through. - return true; -}; - - -/** - * On actual clicks, determine whether this is a touch-generated click, a click action occurring - * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or - * an actual click which should be permitted. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onClick = function(event) { - 'use strict'; - var permitted; - - // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early. - if (this.trackingClick) { - this.targetElement = null; - this.trackingClick = false; - return true; - } - - // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target. - if (event.target.type === 'submit' && event.detail === 0) { - return true; - } - - permitted = this.onMouse(event); - - // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through. - if (!permitted) { - this.targetElement = null; - } - - // If clicks are permitted, return true for the action to go through. - return permitted; -}; - - -/** - * Remove all FastClick's event listeners. - * - * @returns {void} - */ -FastClick.prototype.destroy = function() { - 'use strict'; - var layer = this.layer; - - if (this.deviceIsAndroid) { - layer.removeEventListener('mouseover', this.onMouse, true); - layer.removeEventListener('mousedown', this.onMouse, true); - layer.removeEventListener('mouseup', this.onMouse, true); - } - - layer.removeEventListener('click', this.onClick, true); - layer.removeEventListener('touchstart', this.onTouchStart, false); - layer.removeEventListener('touchmove', this.onTouchMove, false); - layer.removeEventListener('touchend', this.onTouchEnd, false); - layer.removeEventListener('touchcancel', this.onTouchCancel, false); -}; - - -/** - * Check whether FastClick is needed. - * - * @param {Element} layer The layer to listen on - */ -FastClick.notNeeded = function(layer) { - 'use strict'; - var metaViewport; - - // Devices that don't support touch don't need FastClick - if (typeof window.ontouchstart === 'undefined') { - return true; - } - - if ((/Chrome\/[0-9]+/).test(navigator.userAgent)) { - - // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89) - if (FastClick.prototype.deviceIsAndroid) { - metaViewport = document.querySelector('meta[name=viewport]'); - if (metaViewport && metaViewport.content.indexOf('user-scalable=no') !== -1) { - return true; - } - - // Chrome desktop doesn't need FastClick (issue #15) - } else { - return true; - } - } - - // IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97) - if (layer.style.msTouchAction === 'none') { - return true; - } - - return false; -}; - - -/** - * Factory method for creating a FastClick object - * - * @param {Element} layer The layer to listen on - */ -FastClick.attach = function(layer) { - 'use strict'; - return new FastClick(layer); -}; - - -if (typeof define !== 'undefined' && define.amd) { - - // AMD. Register as an anonymous module. - define(function() { - 'use strict'; - return FastClick; - }); -} else if (typeof module !== 'undefined' && module.exports) { - module.exports = FastClick.attach; - module.exports.FastClick = FastClick; -} else { - window.FastClick = FastClick; +/** + * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. + * + * @version 0.6.9 + * @codingstandard ftlabs-jsv2 + * @copyright The Financial Times Limited [All Rights Reserved] + * @license MIT License (see LICENSE.txt) + */ + +/*jslint browser:true, node:true*/ +/*global define, Event, Node*/ + + +/** + * Instantiate fast-clicking listeners on the specificed layer. + * + * @constructor + * @param {Element} layer The layer to listen on + */ +function FastClick(layer) { + 'use strict'; + var oldOnClick, self = this; + + + /** + * Whether a click is currently being tracked. + * + * @type boolean + */ + this.trackingClick = false; + + + /** + * Timestamp for when when click tracking started. + * + * @type number + */ + this.trackingClickStart = 0; + + + /** + * The element being tracked for a click. + * + * @type EventTarget + */ + this.targetElement = null; + + + /** + * X-coordinate of touch start event. + * + * @type number + */ + this.touchStartX = 0; + + + /** + * Y-coordinate of touch start event. + * + * @type number + */ + this.touchStartY = 0; + + + /** + * ID of the last touch, retrieved from Touch.identifier. + * + * @type number + */ + this.lastTouchIdentifier = 0; + + + /** + * Touchmove boundary, beyond which a click will be cancelled. + * + * @type number + */ + this.touchBoundary = 10; + + + /** + * The FastClick layer. + * + * @type Element + */ + this.layer = layer; + + if (!layer || !layer.nodeType) { + throw new TypeError('Layer must be a document node'); + } + + /** @type function() */ + this.onClick = function() { return FastClick.prototype.onClick.apply(self, arguments); }; + + /** @type function() */ + this.onMouse = function() { return FastClick.prototype.onMouse.apply(self, arguments); }; + + /** @type function() */ + this.onTouchStart = function() { return FastClick.prototype.onTouchStart.apply(self, arguments); }; + + /** @type function() */ + this.onTouchMove = function() { return FastClick.prototype.onTouchMove.apply(self, arguments); }; + + /** @type function() */ + this.onTouchEnd = function() { return FastClick.prototype.onTouchEnd.apply(self, arguments); }; + + /** @type function() */ + this.onTouchCancel = function() { return FastClick.prototype.onTouchCancel.apply(self, arguments); }; + + if (FastClick.notNeeded(layer)) { + return; + } + + // Set up event handlers as required + if (this.deviceIsAndroid) { + layer.addEventListener('mouseover', this.onMouse, true); + layer.addEventListener('mousedown', this.onMouse, true); + layer.addEventListener('mouseup', this.onMouse, true); + } + + layer.addEventListener('click', this.onClick, true); + layer.addEventListener('touchstart', this.onTouchStart, false); + layer.addEventListener('touchmove', this.onTouchMove, false); + layer.addEventListener('touchend', this.onTouchEnd, false); + layer.addEventListener('touchcancel', this.onTouchCancel, false); + + // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) + // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick + // layer when they are cancelled. + if (!Event.prototype.stopImmediatePropagation) { + layer.removeEventListener = function(type, callback, capture) { + var rmv = Node.prototype.removeEventListener; + if (type === 'click') { + rmv.call(layer, type, callback.hijacked || callback, capture); + } else { + rmv.call(layer, type, callback, capture); + } + }; + + layer.addEventListener = function(type, callback, capture) { + var adv = Node.prototype.addEventListener; + if (type === 'click') { + adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) { + if (!event.propagationStopped) { + callback(event); + } + }), capture); + } else { + adv.call(layer, type, callback, capture); + } + }; + } + + // If a handler is already declared in the element's onclick attribute, it will be fired before + // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and + // adding it as listener. + if (typeof layer.onclick === 'function') { + + // Android browser on at least 3.2 requires a new reference to the function in layer.onclick + // - the old one won't work if passed to addEventListener directly. + oldOnClick = layer.onclick; + layer.addEventListener('click', function(event) { + oldOnClick(event); + }, false); + layer.onclick = null; + } +} + + +/** + * Android requires exceptions. + * + * @type boolean + */ +FastClick.prototype.deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0; + + +/** + * iOS requires exceptions. + * + * @type boolean + */ +FastClick.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent); + + +/** + * iOS 4 requires an exception for select elements. + * + * @type boolean + */ +FastClick.prototype.deviceIsIOS4 = FastClick.prototype.deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent); + + +/** + * iOS 6.0(+?) requires the target element to be manually derived + * + * @type boolean + */ +FastClick.prototype.deviceIsIOSWithBadTarget = FastClick.prototype.deviceIsIOS && (/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent); + + +/** + * Determine whether a given element requires a native click. + * + * @param {EventTarget|Element} target Target DOM element + * @returns {boolean} Returns true if the element needs a native click + */ +FastClick.prototype.needsClick = function(target) { + 'use strict'; + switch (target.nodeName.toLowerCase()) { + + // Don't send a synthetic click to disabled inputs (issue #62) + case 'button': + case 'select': + case 'textarea': + if (target.disabled) { + return true; + } + + break; + case 'input': + + // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) + if ((this.deviceIsIOS && target.type === 'file') || target.disabled) { + return true; + } + + break; + case 'label': + case 'video': + return true; + } + + return (/\bneedsclick\b/).test(target.className); +}; + + +/** + * Determine whether a given element requires a call to focus to simulate click into element. + * + * @param {EventTarget|Element} target Target DOM element + * @returns {boolean} Returns true if the element requires a call to focus to simulate native click. + */ +FastClick.prototype.needsFocus = function(target) { + 'use strict'; + switch (target.nodeName.toLowerCase()) { + case 'textarea': + case 'select': + return true; + case 'input': + switch (target.type) { + case 'button': + case 'checkbox': + case 'file': + case 'image': + case 'radio': + case 'submit': + return false; + } + + // No point in attempting to focus disabled inputs + return !target.disabled && !target.readOnly; + default: + return (/\bneedsfocus\b/).test(target.className); + } +}; + + +/** + * Send a click event to the specified element. + * + * @param {EventTarget|Element} targetElement + * @param {Event} event + */ +FastClick.prototype.sendClick = function(targetElement, event) { + 'use strict'; + var clickEvent, touch; + + // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) + if (document.activeElement && document.activeElement !== targetElement) { + document.activeElement.blur(); + } + + touch = event.changedTouches[0]; + + // Synthesise a click event, with an extra attribute so it can be tracked + clickEvent = document.createEvent('MouseEvents'); + clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); + clickEvent.forwardedTouchEvent = true; + targetElement.dispatchEvent(clickEvent); +}; + + +/** + * @param {EventTarget|Element} targetElement + */ +FastClick.prototype.focus = function(targetElement) { + 'use strict'; + var length; + + if (this.deviceIsIOS && targetElement.setSelectionRange) { + length = targetElement.value.length; + targetElement.setSelectionRange(length, length); + } else { + targetElement.focus(); + } +}; + + +/** + * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it. + * + * @param {EventTarget|Element} targetElement + */ +FastClick.prototype.updateScrollParent = function(targetElement) { + 'use strict'; + var scrollParent, parentElement; + + scrollParent = targetElement.fastClickScrollParent; + + // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the + // target element was moved to another parent. + if (!scrollParent || !scrollParent.contains(targetElement)) { + parentElement = targetElement; + do { + if (parentElement.scrollHeight > parentElement.offsetHeight) { + scrollParent = parentElement; + targetElement.fastClickScrollParent = parentElement; + break; + } + + parentElement = parentElement.parentElement; + } while (parentElement); + } + + // Always update the scroll top tracker if possible. + if (scrollParent) { + scrollParent.fastClickLastScrollTop = scrollParent.scrollTop; + } +}; + + +/** + * @param {EventTarget} targetElement + * @returns {Element|EventTarget} + */ +FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) { + 'use strict'; + + // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node. + if (eventTarget.nodeType === Node.TEXT_NODE) { + return eventTarget.parentNode; + } + + return eventTarget; +}; + + +/** + * On touch start, record the position and scroll offset. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.onTouchStart = function(event) { + 'use strict'; + var targetElement, touch, selection; + + // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111). + if (event.targetTouches.length > 1) { + return true; + } + + targetElement = this.getTargetElementFromEventTarget(event.target); + touch = event.targetTouches[0]; + + if (this.deviceIsIOS) { + + // Only trusted events will deselect text on iOS (issue #49) + selection = window.getSelection(); + if (selection.rangeCount && !selection.isCollapsed) { + return true; + } + + if (!this.deviceIsIOS4) { + + // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23): + // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched + // with the same identifier as the touch event that previously triggered the click that triggered the alert. + // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an + // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform. + if (touch.identifier === this.lastTouchIdentifier) { + event.preventDefault(); + return false; + } + + this.lastTouchIdentifier = touch.identifier; + + // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and: + // 1) the user does a fling scroll on the scrollable layer + // 2) the user stops the fling scroll with another tap + // then the event.target of the last 'touchend' event will be the element that was under the user's finger + // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check + // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42). + this.updateScrollParent(targetElement); + } + } + + this.trackingClick = true; + this.trackingClickStart = event.timeStamp; + this.targetElement = targetElement; + + this.touchStartX = touch.pageX; + this.touchStartY = touch.pageY; + + // Prevent phantom clicks on fast double-tap (issue #36) + if ((event.timeStamp - this.lastClickTime) < 200) { + event.preventDefault(); + } + + return true; +}; + + +/** + * Based on a touchmove event object, check whether the touch has moved past a boundary since it started. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.touchHasMoved = function(event) { + 'use strict'; + var touch = event.changedTouches[0], boundary = this.touchBoundary; + + if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) { + return true; + } + + return false; +}; + + +/** + * Update the last position. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.onTouchMove = function(event) { + 'use strict'; + if (!this.trackingClick) { + return true; + } + + // If the touch has moved, cancel the click tracking + if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) { + this.trackingClick = false; + this.targetElement = null; + } + + return true; +}; + + +/** + * Attempt to find the labelled control for the given label element. + * + * @param {EventTarget|HTMLLabelElement} labelElement + * @returns {Element|null} + */ +FastClick.prototype.findControl = function(labelElement) { + 'use strict'; + + // Fast path for newer browsers supporting the HTML5 control attribute + if (labelElement.control !== undefined) { + return labelElement.control; + } + + // All browsers under test that support touch events also support the HTML5 htmlFor attribute + if (labelElement.htmlFor) { + return document.getElementById(labelElement.htmlFor); + } + + // If no for attribute exists, attempt to retrieve the first labellable descendant element + // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label + return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'); +}; + + +/** + * On touch end, determine whether to send a click event at once. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.onTouchEnd = function(event) { + 'use strict'; + var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement; + + if (!this.trackingClick) { + return true; + } + + // Prevent phantom clicks on fast double-tap (issue #36) + if ((event.timeStamp - this.lastClickTime) < 200) { + this.cancelNextClick = true; + return true; + } + + this.lastClickTime = event.timeStamp; + + trackingClickStart = this.trackingClickStart; + this.trackingClick = false; + this.trackingClickStart = 0; + + // On some iOS devices, the targetElement supplied with the event is invalid if the layer + // is performing a transition or scroll, and has to be re-detected manually. Note that + // for this to function correctly, it must be called *after* the event target is checked! + // See issue #57; also filed as rdar://13048589 . + if (this.deviceIsIOSWithBadTarget) { + touch = event.changedTouches[0]; + + // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null + targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement; + targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent; + } + + targetTagName = targetElement.tagName.toLowerCase(); + if (targetTagName === 'label') { + forElement = this.findControl(targetElement); + if (forElement) { + this.focus(targetElement); + if (this.deviceIsAndroid) { + return false; + } + + targetElement = forElement; + } + } else if (this.needsFocus(targetElement)) { + + // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through. + // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37). + if ((event.timeStamp - trackingClickStart) > 100 || (this.deviceIsIOS && window.top !== window && targetTagName === 'input')) { + this.targetElement = null; + return false; + } + + this.focus(targetElement); + + // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open. + if (!this.deviceIsIOS4 || targetTagName !== 'select') { + this.targetElement = null; + event.preventDefault(); + } + + return false; + } + + if (this.deviceIsIOS && !this.deviceIsIOS4) { + + // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled + // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42). + scrollParent = targetElement.fastClickScrollParent; + if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) { + return true; + } + } + + // Prevent the actual click from going though - unless the target node is marked as requiring + // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted. + if (!this.needsClick(targetElement)) { + event.preventDefault(); + this.sendClick(targetElement, event); + } + + return false; +}; + + +/** + * On touch cancel, stop tracking the click. + * + * @returns {void} + */ +FastClick.prototype.onTouchCancel = function() { + 'use strict'; + this.trackingClick = false; + this.targetElement = null; +}; + + +/** + * Determine mouse events which should be permitted. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.onMouse = function(event) { + 'use strict'; + + // If a target element was never set (because a touch event was never fired) allow the event + if (!this.targetElement) { + return true; + } + + if (event.forwardedTouchEvent) { + return true; + } + + // Programmatically generated events targeting a specific element should be permitted + if (!event.cancelable) { + return true; + } + + // Derive and check the target element to see whether the mouse event needs to be permitted; + // unless explicitly enabled, prevent non-touch click events from triggering actions, + // to prevent ghost/doubleclicks. + if (!this.needsClick(this.targetElement) || this.cancelNextClick) { + + // Prevent any user-added listeners declared on FastClick element from being fired. + if (event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } else { + + // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) + event.propagationStopped = true; + } + + // Cancel the event + event.stopPropagation(); + event.preventDefault(); + + return false; + } + + // If the mouse event is permitted, return true for the action to go through. + return true; +}; + + +/** + * On actual clicks, determine whether this is a touch-generated click, a click action occurring + * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or + * an actual click which should be permitted. + * + * @param {Event} event + * @returns {boolean} + */ +FastClick.prototype.onClick = function(event) { + 'use strict'; + var permitted; + + // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early. + if (this.trackingClick) { + this.targetElement = null; + this.trackingClick = false; + return true; + } + + // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target. + if (event.target.type === 'submit' && event.detail === 0) { + return true; + } + + permitted = this.onMouse(event); + + // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through. + if (!permitted) { + this.targetElement = null; + } + + // If clicks are permitted, return true for the action to go through. + return permitted; +}; + + +/** + * Remove all FastClick's event listeners. + * + * @returns {void} + */ +FastClick.prototype.destroy = function() { + 'use strict'; + var layer = this.layer; + + if (this.deviceIsAndroid) { + layer.removeEventListener('mouseover', this.onMouse, true); + layer.removeEventListener('mousedown', this.onMouse, true); + layer.removeEventListener('mouseup', this.onMouse, true); + } + + layer.removeEventListener('click', this.onClick, true); + layer.removeEventListener('touchstart', this.onTouchStart, false); + layer.removeEventListener('touchmove', this.onTouchMove, false); + layer.removeEventListener('touchend', this.onTouchEnd, false); + layer.removeEventListener('touchcancel', this.onTouchCancel, false); +}; + + +/** + * Check whether FastClick is needed. + * + * @param {Element} layer The layer to listen on + */ +FastClick.notNeeded = function(layer) { + 'use strict'; + var metaViewport; + + // Devices that don't support touch don't need FastClick + if (typeof window.ontouchstart === 'undefined') { + return true; + } + + if ((/Chrome\/[0-9]+/).test(navigator.userAgent)) { + + // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89) + if (FastClick.prototype.deviceIsAndroid) { + metaViewport = document.querySelector('meta[name=viewport]'); + if (metaViewport && metaViewport.content.indexOf('user-scalable=no') !== -1) { + return true; + } + + // Chrome desktop doesn't need FastClick (issue #15) + } else { + return true; + } + } + + // IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97) + if (layer.style.msTouchAction === 'none') { + return true; + } + + return false; +}; + + +/** + * Factory method for creating a FastClick object + * + * @param {Element} layer The layer to listen on + */ +FastClick.attach = function(layer) { + 'use strict'; + return new FastClick(layer); +}; + + +if (typeof define !== 'undefined' && define.amd) { + + // AMD. Register as an anonymous module. + define(function() { + 'use strict'; + return FastClick; + }); +} else if (typeof module !== 'undefined' && module.exports) { + module.exports = FastClick.attach; + module.exports.FastClick = FastClick; +} else { + window.FastClick = FastClick; } \ No newline at end of file diff --git a/core/client/assets/vendor/icheck/jquery.icheck.min.js b/core/clientold/assets/vendor/icheck/jquery.icheck.min.js similarity index 100% rename from core/client/assets/vendor/icheck/jquery.icheck.min.js rename to core/clientold/assets/vendor/icheck/jquery.icheck.min.js diff --git a/core/client/assets/vendor/jquery.hammer.min.js b/core/clientold/assets/vendor/jquery.hammer.min.js similarity index 100% rename from core/client/assets/vendor/jquery.hammer.min.js rename to core/clientold/assets/vendor/jquery.hammer.min.js diff --git a/core/client/assets/vendor/nprogress.js b/core/clientold/assets/vendor/nprogress.js similarity index 100% rename from core/client/assets/vendor/nprogress.js rename to core/clientold/assets/vendor/nprogress.js diff --git a/core/client/assets/vendor/packery.pkgd.min.js b/core/clientold/assets/vendor/packery.pkgd.min.js similarity index 100% rename from core/client/assets/vendor/packery.pkgd.min.js rename to core/clientold/assets/vendor/packery.pkgd.min.js diff --git a/core/client/assets/vendor/shortcuts.js b/core/clientold/assets/vendor/shortcuts.js similarity index 100% rename from core/client/assets/vendor/shortcuts.js rename to core/clientold/assets/vendor/shortcuts.js diff --git a/core/client/assets/vendor/showdown/extensions/ghostdown.js b/core/clientold/assets/vendor/showdown/extensions/ghostdown.js similarity index 100% rename from core/client/assets/vendor/showdown/extensions/ghostdown.js rename to core/clientold/assets/vendor/showdown/extensions/ghostdown.js diff --git a/core/client/assets/vendor/showdown/showdown.js b/core/clientold/assets/vendor/showdown/showdown.js similarity index 100% rename from core/client/assets/vendor/showdown/showdown.js rename to core/clientold/assets/vendor/showdown/showdown.js diff --git a/core/client/assets/vendor/to-title-case.js b/core/clientold/assets/vendor/to-title-case.js similarity index 100% rename from core/client/assets/vendor/to-title-case.js rename to core/clientold/assets/vendor/to-title-case.js diff --git a/core/client/assets/vendor/validator-client.js b/core/clientold/assets/vendor/validator-client.js similarity index 100% rename from core/client/assets/vendor/validator-client.js rename to core/clientold/assets/vendor/validator-client.js diff --git a/core/client/helpers/index.js b/core/clientold/helpers/index.js similarity index 100% rename from core/client/helpers/index.js rename to core/clientold/helpers/index.js diff --git a/core/client/init.js b/core/clientold/init.js similarity index 100% rename from core/client/init.js rename to core/clientold/init.js diff --git a/core/client/markdown-actions.js b/core/clientold/markdown-actions.js similarity index 100% rename from core/client/markdown-actions.js rename to core/clientold/markdown-actions.js diff --git a/core/client/mobile-interactions.js b/core/clientold/mobile-interactions.js similarity index 100% rename from core/client/mobile-interactions.js rename to core/clientold/mobile-interactions.js diff --git a/core/client/models/base.js b/core/clientold/models/base.js similarity index 100% rename from core/client/models/base.js rename to core/clientold/models/base.js diff --git a/core/client/models/post.js b/core/clientold/models/post.js similarity index 100% rename from core/client/models/post.js rename to core/clientold/models/post.js diff --git a/core/client/models/settings.js b/core/clientold/models/settings.js similarity index 100% rename from core/client/models/settings.js rename to core/clientold/models/settings.js diff --git a/core/client/models/tag.js b/core/clientold/models/tag.js similarity index 100% rename from core/client/models/tag.js rename to core/clientold/models/tag.js diff --git a/core/client/models/themes.js b/core/clientold/models/themes.js similarity index 100% rename from core/client/models/themes.js rename to core/clientold/models/themes.js diff --git a/core/client/models/uploadModal.js b/core/clientold/models/uploadModal.js similarity index 100% rename from core/client/models/uploadModal.js rename to core/clientold/models/uploadModal.js diff --git a/core/client/models/user.js b/core/clientold/models/user.js similarity index 100% rename from core/client/models/user.js rename to core/clientold/models/user.js diff --git a/core/client/models/widget.js b/core/clientold/models/widget.js similarity index 100% rename from core/client/models/widget.js rename to core/clientold/models/widget.js diff --git a/core/client/router.js b/core/clientold/router.js similarity index 88% rename from core/client/router.js rename to core/clientold/router.js index 1293247b33..072b5edad8 100644 --- a/core/client/router.js +++ b/core/clientold/router.js @@ -5,15 +5,15 @@ Ghost.Router = Backbone.Router.extend({ routes: { - '' : 'blog', - 'content/' : 'blog', + '' : 'blog', + 'content/' : 'blog', 'settings(/:pane)/' : 'settings', 'editor(/:id)/' : 'editor', - 'debug/' : 'debug', - 'register/' : 'register', - 'signup/' : 'signup', - 'signin/' : 'login', - 'forgotten/' : 'forgotten', + 'debug/' : 'debug', + 'register/' : 'register', + 'signup/' : 'signup', + 'signin/' : 'login', + 'forgotten/' : 'forgotten', 'reset/:token/' : 'reset' }, diff --git a/core/client/toggle.js b/core/clientold/toggle.js similarity index 100% rename from core/client/toggle.js rename to core/clientold/toggle.js diff --git a/core/client/tpl/forgotten.hbs b/core/clientold/tpl/forgotten.hbs similarity index 100% rename from core/client/tpl/forgotten.hbs rename to core/clientold/tpl/forgotten.hbs diff --git a/core/clientold/tpl/hbs-tpl.js b/core/clientold/tpl/hbs-tpl.js new file mode 100644 index 0000000000..e24baccf97 --- /dev/null +++ b/core/clientold/tpl/hbs-tpl.js @@ -0,0 +1,602 @@ +this["JST"] = this["JST"] || {}; + +this["JST"]["forgotten"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + + + + return "
\n
\n \n
\n \n
\n"; + }); + +this["JST"]["list-item"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this, functionType="function"; + +function program1(depth0,data) { + + + return " featured"; + } + +function program3(depth0,data) { + + + return " page"; + } + +function program5(depth0,data) { + + var buffer = "", stack1; + buffer += "\n "; + stack1 = helpers['if'].call(depth0, (depth0 && depth0.page), {hash:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),data:data}); + if(stack1 || stack1 === 0) { buffer += stack1; } + buffer += "\n "; + return buffer; + } +function program6(depth0,data) { + + + return "\n Page\n "; + } + +function program8(depth0,data) { + + var buffer = "", stack1, options; + buffer += "\n \n "; + return buffer; + } + +function program10(depth0,data) { + + + return "\n Draft\n "; + } + + buffer += "\n

"; + if (stack1 = helpers.title) { stack1 = stack1.call(depth0, {hash:{},data:data}); } + else { stack1 = (depth0 && depth0.title); stack1 = typeof stack1 === functionType ? stack1.call(depth0, {hash:{},data:data}) : stack1; } + if(stack1 || stack1 === 0) { buffer += stack1; } + buffer += "

\n
\n \n "; + stack1 = helpers['if'].call(depth0, (depth0 && depth0.published), {hash:{},inverse:self.program(10, program10, data),fn:self.program(5, program5, data),data:data}); + if(stack1 || stack1 === 0) { buffer += stack1; } + buffer += "\n \n
\n
\n"; + return buffer; + }); + +this["JST"]["login"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression; + + + buffer += "
\n
\n \n
\n
\n \n
\n \n
\n Forgotten password?\n
\n
\n"; + return buffer; + }); + +this["JST"]["modal"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, stack2, functionType="function", escapeExpression=this.escapeExpression, self=this; + +function program1(depth0,data) { + + var buffer = "", stack1; + buffer += "-" + + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.type)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)); + return buffer; + } + +function program3(depth0,data) { + + var stack1, stack2; + stack2 = helpers.each.call(depth0, ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.style), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data}); + if(stack2 || stack2 === 0) { return stack2; } + else { return ''; } + } +function program4(depth0,data) { + + var buffer = ""; + buffer += "modal-style-" + + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0)) + + " "; + return buffer; + } + +function program6(depth0,data) { + + var buffer = "", stack1; + buffer += "

" + + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.content)),stack1 == null || stack1 === false ? stack1 : stack1.title)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)) + + "

"; + return buffer; + } + +function program8(depth0,data) { + + + return "Close"; + } + +function program10(depth0,data) { + + var buffer = "", stack1, stack2; + buffer += "\n
\n \n \n
\n "; + return buffer; + } +function program11(depth0,data) { + + var stack1; + return escapeExpression(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.confirm)),stack1 == null || stack1 === false ? stack1 : stack1.accept)),stack1 == null || stack1 === false ? stack1 : stack1.buttonClass)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)); + } + +function program13(depth0,data) { + + + return "button-add"; + } + +function program15(depth0,data) { + + var stack1; + return escapeExpression(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.confirm)),stack1 == null || stack1 === false ? stack1 : stack1.reject)),stack1 == null || stack1 === false ? stack1 : stack1.buttonClass)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)); + } + +function program17(depth0,data) { + + + return "button-delete"; + } + + buffer += "
\n
\n "; + stack2 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.content)),stack1 == null || stack1 === false ? stack1 : stack1.title), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data}); + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "\n "; + stack2 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.close), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data}); + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "\n
\n
\n "; + stack2 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.confirm), {hash:{},inverse:self.noop,fn:self.program(10, program10, data),data:data}); + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "\n
\n
"; + return buffer; + }); + +this["JST"]["modals/blank"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var stack1, stack2, functionType="function"; + + + stack2 = ((stack1 = ((stack1 = (depth0 && depth0.content)),stack1 == null || stack1 === false ? stack1 : stack1.text)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1); + if(stack2 || stack2 === 0) { return stack2; } + else { return ''; } + }); + +this["JST"]["modals/copyToHTML"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + + + + return "Press Ctrl / Cmd + C to copy the following HTML.\n
\n\n
"; + }); + +this["JST"]["modals/markdown"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + + + + return "
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ResultMarkdownShortcut
Bold**text**Ctrl / Cmd + B
Emphasize*text*Ctrl / Cmd + I
Inline Code`code`Cmd + K / Ctrl + Shift + K
Strike-through~~text~~Ctrl + Alt + U
Link[title](http://)Ctrl + Shift + L
Image![alt](http://)Ctrl + Shift + I
List* itemCtrl + L
Blockquote> quoteCtrl + Q
H1# HeadingCtrl + Alt + 1
H2## HeadingCtrl + Alt + 2
H3### HeadingCtrl + Alt + 3
H4#### HeadingCtrl + Alt + 4
H5##### HeadingCtrl + Alt + 5
H6###### HeadingCtrl + Alt + 6
Select WordCtrl + Alt + W
New ParagraphCtrl / Cmd + Enter
UppercaseCtrl + U
LowercaseCtrl + Shift + U
TitlecaseCtrl + Alt + Shift + U
Insert Current DateCtrl + Shift + 1
\n For further Markdown syntax reference: Markdown Documentation\n
\n"; + }); + +this["JST"]["modals/uploadImage"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, stack2, functionType="function", escapeExpression=this.escapeExpression, self=this; + +function program1(depth0,data) { + + + return " style=\"display: none\""; + } + +function program3(depth0,data) { + + var buffer = "", stack1; + buffer += "accept=\"" + + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.options)),stack1 == null || stack1 === false ? stack1 : stack1.acceptEncoding)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)) + + "\""; + return buffer; + } + + buffer += "
\n \n = 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this; + +function program1(depth0,data) { + + var buffer = "", stack1; + buffer += "-"; + if (stack1 = helpers.type) { stack1 = stack1.call(depth0, {hash:{},data:data}); } + else { stack1 = (depth0 && depth0.type); stack1 = typeof stack1 === functionType ? stack1.call(depth0, {hash:{},data:data}) : stack1; } + buffer += escapeExpression(stack1); + return buffer; + } + + buffer += "
\n "; + if (stack1 = helpers.message) { stack1 = stack1.call(depth0, {hash:{},data:data}); } + else { stack1 = (depth0 && depth0.message); stack1 = typeof stack1 === functionType ? stack1.call(depth0, {hash:{},data:data}) : stack1; } + if(stack1 || stack1 === 0) { buffer += stack1; } + buffer += "\n Close\n
\n"; + return buffer; + }); + +this["JST"]["preview"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, stack2, functionType="function", escapeExpression=this.escapeExpression, self=this; + +function program1(depth0,data) { + + + return "featured"; + } + +function program3(depth0,data) { + + + return "unfeatured"; + } + +function program5(depth0,data) { + + + return "Unfeature"; + } + +function program7(depth0,data) { + + + return "Feature"; + } + +function program9(depth0,data) { + + + return "Published"; + } + +function program11(depth0,data) { + + + return "Written"; + } + +function program13(depth0,data) { + + var stack1; + return escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.author)),stack1 == null || stack1 === false ? stack1 : stack1.name)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)); + } + +function program15(depth0,data) { + + var stack1; + return escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.author)),stack1 == null || stack1 === false ? stack1 : stack1.email)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1)); + } + +function program17(depth0,data) { + + var buffer = "", stack1; + buffer += "\n
\n
\n

You Haven't Written Any Posts Yet!

\n
\n
\n
\n"; + return buffer; + } + + buffer += "
\n \n \n Star\n \n \n "; + stack1 = helpers['if'].call(depth0, (depth0 && depth0.published), {hash:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),data:data}); + if(stack1 || stack1 === 0) { buffer += stack1; } + buffer += "\n by\n "; + stack2 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.author)),stack1 == null || stack1 === false ? stack1 : stack1.name), {hash:{},inverse:self.program(15, program15, data),fn:self.program(13, program13, data),data:data}); + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "\n \n
\n Edit Post\n Post Settings\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n \n \n \n
\n Static Page\n \n \n \n
\n
\n Delete This Post\n
\n
\n
\n
\n

"; + if (stack2 = helpers.title) { stack2 = stack2.call(depth0, {hash:{},data:data}); } + else { stack2 = (depth0 && depth0.title); stack2 = typeof stack2 === functionType ? stack2.call(depth0, {hash:{},data:data}) : stack2; } + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "

"; + if (stack2 = helpers.html) { stack2 = stack2.call(depth0, {hash:{},data:data}); } + else { stack2 = (depth0 && depth0.html); stack2 = typeof stack2 === functionType ? stack2.call(depth0, {hash:{},data:data}) : stack2; } + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "
\n
\n"; + stack2 = helpers.unless.call(depth0, (depth0 && depth0.title), {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data}); + if(stack2 || stack2 === 0) { buffer += stack2; } + buffer += "\n"; + return buffer; + }); + +this["JST"]["reset"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + + + + return "
\n
\n \n
\n
\n \n
\n \n
\n"; + }); + +this["JST"]["settings/general"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { + this.compilerInfo = [4,'>= 1.0.0']; +helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; + var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this; + +function program1(depth0,data) { + + var buffer = "", stack1; + buffer += "\n \"logo\"\n "; + return buffer; + } + +function program3(depth0,data) { + + + return "\n Upload Image\n "; + } + +function program5(depth0,data) { + + var buffer = "", stack1; + buffer += "\n \"cover\n "; + return buffer; + } + +function program7(depth0,data) { + + + return "\n Upload Image\n "; + } + +function program9(depth0,data) { + + var buffer = "", stack1; + buffer += "\n