From 8b489173df6efc7de7fce52ba02d2c541024135f Mon Sep 17 00:00:00 2001 From: keegan-lillo Date: Sun, 27 Sep 2015 16:48:25 -0700 Subject: [PATCH 01/68] Create README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..be7d4dd --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# pebble-clay +Pebble Config Framework From 227bb49786c3e16038e5739b2760ec817870a36e Mon Sep 17 00:00:00 2001 From: Keegan Date: Sun, 11 Oct 2015 00:15:18 -0700 Subject: [PATCH 02/68] Basic build process and transforming json into html --- .eslintrc | 16 + README.md | 3 + gulpfile.js | 37 ++ index.js | 95 +++ mold.js | 34 + src/config-page.html | 18 + src/scripts/config-page.js | 158 +++++ src/scripts/lib/item-types.js | 49 ++ src/scripts/lib/manipulators.js | 47 ++ src/styles/config-page.css | 59 ++ src/templates/components/color.mustache | 4 + src/templates/components/footer.mustache | 3 + src/templates/components/heading.mustache | 3 + src/templates/components/input.mustache | 11 + src/templates/components/select.mustache | 8 + src/templates/components/subheading.mustache | 3 + src/templates/components/submit.mustache | 3 + src/templates/components/toggle.mustache | 4 + vendor/pebble-slate/.bower.json | 21 + vendor/pebble-slate/History.md | 16 + vendor/pebble-slate/LICENSE | 22 + vendor/pebble-slate/README.md | 312 ++++++++++ vendor/pebble-slate/bower.json | 13 + vendor/pebble-slate/dist/css/slate.css | 485 +++++++++++++++ vendor/pebble-slate/dist/css/slate.min.css | 1 + .../dist/fonts/PFDinDisplayPro-Light.woff | Bin 0 -> 179100 bytes .../dist/fonts/ptsans-regular.woff | Bin 0 -> 12988 bytes vendor/pebble-slate/dist/js/slate.js | 381 ++++++++++++ vendor/pebble-slate/dist/js/slate.min.js | 2 + .../pebble-slate/docs/assets/screenshot.png | Bin 0 -> 78767 bytes .../pebble-slate/docs/assets/slate-button.png | Bin 0 -> 2150 bytes .../docs/assets/slate-checkbox.png | Bin 0 -> 8329 bytes .../assets/slate-date-time-colorpickers.png | Bin 0 -> 21486 bytes .../docs/assets/slate-draggable.png | Bin 0 -> 11154 bytes .../assets/slate-header-content-footer.png | Bin 0 -> 17461 bytes .../docs/assets/slate-input-button.png | Bin 0 -> 5860 bytes .../pebble-slate/docs/assets/slate-input.png | Bin 0 -> 3668 bytes .../pebble-slate/docs/assets/slate-list.png | Bin 0 -> 9951 bytes .../docs/assets/slate-paragraph.png | Bin 0 -> 30180 bytes .../pebble-slate/docs/assets/slate-radio.png | Bin 0 -> 11713 bytes .../pebble-slate/docs/assets/slate-slider.png | Bin 0 -> 3218 bytes .../docs/assets/slate-tab-button.png | Bin 0 -> 5531 bytes .../pebble-slate/docs/assets/slate-toggle.png | Bin 0 -> 12045 bytes vendor/pebble-slate/docs/index.html | 54 ++ vendor/pebble-slate/docs/template.html | 210 +++++++ .../pebble-slate/external/Sortable/LICENSE.md | 22 + .../external/Sortable/Sortable.min.js | 2 + .../pebble-slate/external/zepto/zepto.min.js | 2 + vendor/pebble-slate/gulpfile.js | 51 ++ .../lib/fonts/PFDinDisplayPro-Light.woff | Bin 0 -> 179100 bytes .../lib/fonts/ptsans-regular.woff | Bin 0 -> 12988 bytes vendor/pebble-slate/lib/js/main.js | 377 ++++++++++++ vendor/pebble-slate/lib/sass/main.scss | 581 ++++++++++++++++++ vendor/pebble-slate/package.json | 29 + 54 files changed, 3136 insertions(+) create mode 100644 .eslintrc create mode 100644 gulpfile.js create mode 100644 index.js create mode 100644 mold.js create mode 100644 src/config-page.html create mode 100644 src/scripts/config-page.js create mode 100644 src/scripts/lib/item-types.js create mode 100644 src/scripts/lib/manipulators.js create mode 100644 src/styles/config-page.css create mode 100644 src/templates/components/color.mustache create mode 100644 src/templates/components/footer.mustache create mode 100644 src/templates/components/heading.mustache create mode 100644 src/templates/components/input.mustache create mode 100644 src/templates/components/select.mustache create mode 100644 src/templates/components/subheading.mustache create mode 100644 src/templates/components/submit.mustache create mode 100644 src/templates/components/toggle.mustache create mode 100644 vendor/pebble-slate/.bower.json create mode 100644 vendor/pebble-slate/History.md create mode 100644 vendor/pebble-slate/LICENSE create mode 100644 vendor/pebble-slate/README.md create mode 100644 vendor/pebble-slate/bower.json create mode 100644 vendor/pebble-slate/dist/css/slate.css create mode 100644 vendor/pebble-slate/dist/css/slate.min.css create mode 100644 vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff create mode 100644 vendor/pebble-slate/dist/fonts/ptsans-regular.woff create mode 100644 vendor/pebble-slate/dist/js/slate.js create mode 100644 vendor/pebble-slate/dist/js/slate.min.js create mode 100644 vendor/pebble-slate/docs/assets/screenshot.png create mode 100644 vendor/pebble-slate/docs/assets/slate-button.png create mode 100644 vendor/pebble-slate/docs/assets/slate-checkbox.png create mode 100644 vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png create mode 100644 vendor/pebble-slate/docs/assets/slate-draggable.png create mode 100644 vendor/pebble-slate/docs/assets/slate-header-content-footer.png create mode 100644 vendor/pebble-slate/docs/assets/slate-input-button.png create mode 100644 vendor/pebble-slate/docs/assets/slate-input.png create mode 100644 vendor/pebble-slate/docs/assets/slate-list.png create mode 100644 vendor/pebble-slate/docs/assets/slate-paragraph.png create mode 100644 vendor/pebble-slate/docs/assets/slate-radio.png create mode 100644 vendor/pebble-slate/docs/assets/slate-slider.png create mode 100644 vendor/pebble-slate/docs/assets/slate-tab-button.png create mode 100644 vendor/pebble-slate/docs/assets/slate-toggle.png create mode 100644 vendor/pebble-slate/docs/index.html create mode 100644 vendor/pebble-slate/docs/template.html create mode 100644 vendor/pebble-slate/external/Sortable/LICENSE.md create mode 100644 vendor/pebble-slate/external/Sortable/Sortable.min.js create mode 100644 vendor/pebble-slate/external/zepto/zepto.min.js create mode 100644 vendor/pebble-slate/gulpfile.js create mode 100644 vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff create mode 100644 vendor/pebble-slate/lib/fonts/ptsans-regular.woff create mode 100644 vendor/pebble-slate/lib/js/main.js create mode 100644 vendor/pebble-slate/lib/sass/main.scss create mode 100644 vendor/pebble-slate/package.json diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..af72445 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,16 @@ +{ + "extends": "pebble", + "env" : { + "node": true, + "browser": true + }, + "globals": { + "Pebble": true, + "$": true, + "t": true + }, + "rules" : { + "new-cap": [0], + "max-params": [1] + } +} diff --git a/README.md b/README.md index be7d4dd..ed62350 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ # pebble-clay Pebble Config Framework + +config html + - contains diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..a51a25d --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,37 @@ +'use strict'; + +var gulp = require('gulp'); +var browserify = require('browserify'); +var source = require('vinyl-source-stream'); +var stringify = require('stringify'); +var del = require('del'); +var inline = require('gulp-inline'); +var minifyInline = require('gulp-minify-inline'); +var minifyHTML = require('gulp-minify-html'); + +gulp.task('clean', function(done) { + del(['dist', 'tmp']).then(function() { + done(); + }); +}); + +gulp.task('browserify', ['clean'], function(done) { + return browserify('src/scripts/config-page.js', { debug: true }) + .transform(stringify(['.html', '.mustache'])) + .bundle() + .pipe(source('config-page.js')) + .pipe(gulp.dest('./tmp/')); +}); + +gulp.task('inlineHtml', ['clean', 'browserify'], function() { + return gulp.src('src/config-page.html') + .pipe(inline()) + .pipe(minifyInline({ + js: {}, + jsSelector: 'script[uglify]' + })) + .pipe(minifyHTML()) + .pipe(gulp.dest('dist/')); +}); + +gulp.task('default', ['inlineHtml']); diff --git a/index.js b/index.js new file mode 100644 index 0000000..7c7a202 --- /dev/null +++ b/index.js @@ -0,0 +1,95 @@ +'use strict'; + +var configPageHtml = require('./dist/config-page.html'); + +function encodeDataUri(input) { + if (window.btoa) { + return 'data:text/html;base64,' + encodeURIComponent(window.btoa(input)); + } + + // iOS doesn't have a window so we need to polyfil window.btoa + // extracted from https://github.com/inexorabletash/polyfill + var B64_ALPHABET = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + input = String(input); + var position = 0; + var out = []; + var o1; + var o2; + var o3; + var e1; + var e2; + var e3; + var e4; + + if (/[^\x00-\xFF]/.test(input)) { throw Error('InvalidCharacterError'); } + + while (position < input.length) { + o1 = input.charCodeAt(position++); + o2 = input.charCodeAt(position++); + o3 = input.charCodeAt(position++); + + // 111111 112222 222233 333333 + e1 = o1 >> 2; + e2 = ((o1 & 0x3) << 4) | (o2 >> 4); + e3 = ((o2 & 0xf) << 2) | (o3 >> 6); + e4 = o3 & 0x3f; + + if (position === input.length + 2) { + e3 = 64; + e4 = 64; + } else if (position === input.length + 1) { + e4 = 64; + } + + out.push(B64_ALPHABET.charAt(e1), + B64_ALPHABET.charAt(e2), + B64_ALPHABET.charAt(e3), + B64_ALPHABET.charAt(e4)); + } + + return 'data:text/html;base64,' + encodeURIComponent(out.join('')); +} + +function Clay(config) { + this.config = config; + /** + * @type {{}} + * @private + */ + this._defaults = {}; +} + +/** + * Generate the Data URI used by the config Page with settings injected + * @param {string} clayData - the entire HTML page as a data URI + */ +Clay.prototype.generateUrl = function() { + var settings; + try { + settings = JSON.parse(localStorage.getItem('clay-settings')) || {}; + } catch (e) { + console.error(e); + settings = {}; + } + // Show config page + return encodeDataUri(configPageHtml + .replace('$$CONFIG$$', JSON.stringify(this.config)) + .replace('$$SETTINGS$$', JSON.stringify(settings)) + ); +}; + +Clay.prototype.getSettings = function(response) { + // Decode and parse config data as JSON + var settings = JSON.parse(decodeURIComponent(response)); + // @todo get defaults in here + if (!settings) return {}; + + localStorage.setItem('clay-settings', JSON.stringify(settings)); +}; + +Clay.prototype.getDefaults = function() { + return this._defaults; +}; + +module.exports = Clay; diff --git a/mold.js b/mold.js new file mode 100644 index 0000000..c5ae6ed --- /dev/null +++ b/mold.js @@ -0,0 +1,34 @@ +'use strict'; + +var browserify = require('browserify'); +var source = require('vinyl-source-stream'); +var gulp = require('gulp'); +var path = require('path'); +var template = require('gulp-template'); +var stringify = require('stringify'); +var del = require('del'); + +var projectPath = process.argv[2] || process.cwd(); +var pebbleJsPath = path.resolve(projectPath, 'src/js/pebble-js-app.js'); +var clayJsPath = path.resolve(projectPath, 'src/js/pebble-clay-js-app.js'); + +var warningMessage = + '/* Do not edit this file! Use "pebble-clay-js-app.js" instead. */'; + +gulp.task('clean', function() { + return del([pebbleJsPath]); +}); + +gulp.task('build', ['clean', 'pebble-js-app'], function() { + +}); + +gulp.task('pebble-js-app', function() { + browserify(clayJsPath, { debug: false }) + .transform(stringify(['.html', '.mustache'])) + .bundle() + .pipe(source('pebble-js-app.js')) + .pipe(gulp.dest('./src/js/')); +}); + +gulp.start('build'); diff --git a/src/config-page.html b/src/config-page.html new file mode 100644 index 0000000..79804ad --- /dev/null +++ b/src/config-page.html @@ -0,0 +1,18 @@ + + + + + + + + + + +
+ + + + diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js new file mode 100644 index 0000000..fc9f372 --- /dev/null +++ b/src/scripts/config-page.js @@ -0,0 +1,158 @@ +'use strict'; + +/** + * A Clay config Item + * @typedef {object} Clay~Item + * @property {string} type + * @property {string} app_key + * @property {string} id + * @property {string} content + * @property {string|boolean} default + * @property {string} label + * @property {object} attributes + * @property {array} options + * @property {array} items + */ + +var mustache = require('mustache'); +var itemTypes = require('./lib/item-types'); +var $ = require('zepto-browserify').$; + +var config = $.extend(true, [], window.clayConfig || []); +var settings = $.extend(true, {}, window.claySettings || {}); + +// Get query variables +function getQueryParam(variable, defaultValue) { + var query = location.search.substring(1); + var vars = query.split('&'); + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split('='); + + if (pair[0] === variable) { + return decodeURIComponent(pair[1]); + } + } + return defaultValue || false; +} + +function submit() { + // Set the return URL depending on the runtime environment + var return_to = getQueryParam('return_to', 'pebblejs://close#'); + document.location = return_to + encodeURIComponent(JSON.stringify(settings)); +} + +/** + * + * @param {string} key + * @param {string|boolean} _default + * @return {string|boolean} + */ +function getSetting(key, _default) { + return typeof settings[key] !== 'undefined' ? settings[key] : (_default || ''); +} + +function setSetting(key, value) { + settings[key] = value; +} + +/** + * @param {Clay~Item} item + * @param {$} $parent + */ +function processConfigItem(item, $parent) { + // @todo add validation on the Item + + if (Array.isArray(item)) { + item.forEach(function(item) { + processConfigItem(item, $parent); + }); + } else if (item.type === 'section') { + processConfigItem( + item.items, + $('
').appendTo($parent) + ); + } else if (item.type === 'block') { + processConfigItem( + item.items, + $('
').appendTo($parent) + ); + } else { + var apiItem = {}; + var itemType = itemTypes[item.type]; + var templateData = $.extend({}, item, { + attributes: $.map(item.attributes || [], function(item, key) { + return { + key: key, + // .replace('"', '"'), + value: item.toString() + // .replace('"', '"') + }; + }), + value: typeof itemType.valueTransformer === 'function' ? + itemType.valueTransformer(getSetting(item.app_key, item.default), item) : + getSetting(item.app_key, item.default) + }); + + apiItem.$element = $(mustache.render(itemType.template, templateData)); + apiItem.$manipulatorTarget = apiItem.$element.find('[data-manipulator-target]'); + apiItem.on = function(events, handler) { + return apiItem.$manipulatorTarget.on(events, $.proxy(handler, apiItem)); + }; + apiItem.one = function(events, handler) { + return apiItem.$manipulatorTarget.one(events, $.proxy(handler, apiItem)); + }; + apiItem.off = apiItem.$manipulatorTarget.off.bind(apiItem.$manipulatorTarget); + apiItem.triggerHandler = + apiItem.$manipulatorTarget.triggerHandler.bind(apiItem.$manipulatorTarget); + + // attach the manipulator methods the the apiItem + $.each(itemType.manipulator, function(methodName, method) { + apiItem[methodName] = method.bind(apiItem); + }); + + apiItem.config = item; + + if (item.id) { + _interface.itemsById[item.id] = apiItem; + } + + if (item.app_key) { + _interface.itemsByAppKey[item.app_key] = apiItem; + } + + _interface.items.push(apiItem); + + $parent.append(apiItem.$element); + } +} + +var _interface = { + items: [], + itemsById: {}, + itemsByAppKey: {} +}; + +var $mainForm = $('#main-form'); + +_interface.getItemByAppKey = function(key) { + return _interface.itemsByAppKey[key]; +}; + +_interface.getItemById = function(key) { + return _interface.itemsById[key]; +}; + +_interface.getItemsByType = function(type) { + return _interface.items.filter(function(item) { + return item.config.type === type; + }); +}; + +processConfigItem(config, $mainForm, 0); + +$mainForm.submit(submit); + +module.exports = _interface; +window._interface = _interface; + +console.log(_interface); diff --git a/src/scripts/lib/item-types.js b/src/scripts/lib/item-types.js new file mode 100644 index 0000000..4bea1fb --- /dev/null +++ b/src/scripts/lib/item-types.js @@ -0,0 +1,49 @@ +'use strict'; + +var manipulators = require('./manipulators'); + +module.exports = { + heading: { + template: require('../../templates/components/heading.mustache'), + manipulator: manipulators.html + }, + subheading: { + template: require('../../templates/components/subheading.mustache'), + manipulator: manipulators.html + }, + footer: { + template: require('../../templates/components/footer.mustache'), + manipulator: manipulators.html + }, + input: { + template: require('../../templates/components/input.mustache'), + manipulator: manipulators.val + }, + color: { + template: require('../../templates/components/color.mustache'), + manipulator: manipulators.val + }, + select: { + template: require('../../templates/components/select.mustache'), + manipulator: manipulators.val, + valueTransformer: function(rawValue, item) { + item.options.forEach(function(option, index) { + if (option.value === rawValue) { + item.options[index].selected = 'selected'; + } + }); + return rawValue; + } + }, + toggle: { + template: require('../../templates/components/toggle.mustache'), + manipulator: manipulators.checked, + valueTransformer: function(rawValue) { + return rawValue ? 'checked' : ''; + } + }, + submit: { + template: require('../../templates/components/submit.mustache'), + manipulator: manipulators.val + } +}; diff --git a/src/scripts/lib/manipulators.js b/src/scripts/lib/manipulators.js new file mode 100644 index 0000000..e405e96 --- /dev/null +++ b/src/scripts/lib/manipulators.js @@ -0,0 +1,47 @@ +'use strict'; + +module.exports = { + html: { + get: function() { + return this.$manipulatorTarget.html(); + }, + set: function(value) { + return this.$manipulatorTarget.html(value) + .triggerHandler('change'); + } + }, + val: { + get: function() { + return this.$manipulatorTarget.val(); + }, + set: function(value) { + return this.$manipulatorTarget.val(value) + .triggerHandler('change'); + }, + disable: function() { + return this.$manipulatorTarget.prop('disabled', true) + .triggerHandler('change'); + }, + enable: function() { + return this.$manipulatorTarget.prop('disabled', false) + .triggerHandler('change'); + } + }, + checked: { + get: function() { + return this.$manipulatorTarget.prop('checked'); + }, + set: function(value) { + return this.$manipulatorTarget.prop('checked', value) + .triggerHandler('change'); + }, + disable: function() { + return this.$manipulatorTarget.prop('disabled', true) + .triggerHandler('change'); + }, + enable: function() { + return this.$manipulatorTarget.prop('disabled', false) + .triggerHandler('change'); + } + } +}; diff --git a/src/styles/config-page.css b/src/styles/config-page.css new file mode 100644 index 0000000..ed0a217 --- /dev/null +++ b/src/styles/config-page.css @@ -0,0 +1,59 @@ + +html, body { + height: 100%; + margin: 0; +} + +.hide { + display:none; +} +.item-styled-color .value { + box-sizing: border-box; + height: 26px; +} + +.item-container { + margin-top: 0; + padding-top: 15px; +} + +input[type="button"]:disabled { + background-color: #ccc; +} + +#cancel-btn { + background-color: #444; +} + +#cancel-btn, +#save-btn { + width: 45%; +} + +#main-form { + min-height: 100%; + /* equal to footer height */ + margin-bottom: -1.5rem; +} + +#main-form:after { + content: ""; + display: block; + padding-top: 2rem; +} + +footer, #main-form:after { + height: 1.5rem; +} + +footer { + display: block; + text-align: center; + width: 100%; +} + +.item { + display: table; + width:100%; + box-sizing: border-box; +} diff --git a/src/templates/components/color.mustache b/src/templates/components/color.mustache new file mode 100644 index 0000000..3eafa32 --- /dev/null +++ b/src/templates/components/color.mustache @@ -0,0 +1,4 @@ + diff --git a/src/templates/components/footer.mustache b/src/templates/components/footer.mustache new file mode 100644 index 0000000..a536c55 --- /dev/null +++ b/src/templates/components/footer.mustache @@ -0,0 +1,3 @@ + diff --git a/src/templates/components/heading.mustache b/src/templates/components/heading.mustache new file mode 100644 index 0000000..fb87890 --- /dev/null +++ b/src/templates/components/heading.mustache @@ -0,0 +1,3 @@ +
+

{{&content}}

+
diff --git a/src/templates/components/input.mustache b/src/templates/components/input.mustache new file mode 100644 index 0000000..e7e441e --- /dev/null +++ b/src/templates/components/input.mustache @@ -0,0 +1,11 @@ + diff --git a/src/templates/components/select.mustache b/src/templates/components/select.mustache new file mode 100644 index 0000000..ef26f2c --- /dev/null +++ b/src/templates/components/select.mustache @@ -0,0 +1,8 @@ + diff --git a/src/templates/components/subheading.mustache b/src/templates/components/subheading.mustache new file mode 100644 index 0000000..573dff0 --- /dev/null +++ b/src/templates/components/subheading.mustache @@ -0,0 +1,3 @@ +
+

{{&content}}

+
diff --git a/src/templates/components/submit.mustache b/src/templates/components/submit.mustache new file mode 100644 index 0000000..27eb81d --- /dev/null +++ b/src/templates/components/submit.mustache @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/templates/components/toggle.mustache b/src/templates/components/toggle.mustache new file mode 100644 index 0000000..b59bd83 --- /dev/null +++ b/src/templates/components/toggle.mustache @@ -0,0 +1,4 @@ + diff --git a/vendor/pebble-slate/.bower.json b/vendor/pebble-slate/.bower.json new file mode 100644 index 0000000..1bc632e --- /dev/null +++ b/vendor/pebble-slate/.bower.json @@ -0,0 +1,21 @@ +{ + "name": "Slate", + "homepage": "https://github.com/pebble/slate", + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "_release": "81d6db0ccd", + "_resolution": { + "type": "branch", + "branch": "master", + "commit": "81d6db0ccd64e455985c01683fed4fd287970637" + }, + "_source": "git@github.com:keegan-lillo/slate.git", + "_target": "master", + "_originalSource": "git@github.com:keegan-lillo/slate.git" +} \ No newline at end of file diff --git a/vendor/pebble-slate/History.md b/vendor/pebble-slate/History.md new file mode 100644 index 0000000..6404c07 --- /dev/null +++ b/vendor/pebble-slate/History.md @@ -0,0 +1,16 @@ + +0.0.3 / 2015-07-29 +================== + + * Change PFDinDisplayPro-Regular to PFDinDisplayPro-Light. + * Use the web fonts as a fallback for when system font is unavailable. + +0.0.2 / 2015-07-29 +================== + + * Fix font imports. + +0.0.1 / 2015-07-07 +================== + + * Initial release diff --git a/vendor/pebble-slate/LICENSE b/vendor/pebble-slate/LICENSE new file mode 100644 index 0000000..bee51b7 --- /dev/null +++ b/vendor/pebble-slate/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Pebble Technology + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/pebble-slate/README.md b/vendor/pebble-slate/README.md new file mode 100644 index 0000000..17d2829 --- /dev/null +++ b/vendor/pebble-slate/README.md @@ -0,0 +1,312 @@ +Slate +===== + +![Bower](https://img.shields.io/bower/v/pebble-slate.svg) + +Slate is a front-end framework for developing Pebble mobile configuration pages. +It's the fastest way to make a clean UI for a Pebble app's mobile configuration +page. + +![screenshot](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/screenshot.png) + +Getting Started +--------------- + +### Getting Slate + +There are only four files that makeup the Slate framework, a CSS file and a +JavaScript file, and two fonts. + +There are two quick ways to getting started with Slate. + +#### Via Download + +The CSS and JS files and fonts are also available via download. + +[Download Slate 0.0.3 >](https://github.com/pebble/slate/archive/v0.0.3.zip) + +#### Via Bower + +The CSS and JS files and fonts are also avaliable via Bower. + +```bash +bower install pebble-slate +``` + +### Zepto.js + +Slate is also bundled with [Zepto.js](https://github.com/madrobby/zepto), which +is "a minimalist JavaScript library for modern browsers with a largely +jQuery-compatible API." + +Video Tutorial +-------------- + +A detailed live demo tutorial was given at the Pebble SF Meetup, and can be +watched in full below. + +[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/TtP7z6wceqI/0.jpg)](http://www.youtube.com/watch?v=TtP7z6wceqI) + +Additionally, the example app used in the video +[can be found here](https://github.com/pebble-hacks/slate-watchface-template), +while a second example implementation +[can be found here](https://github.com/pebble-examples/slate-config-example). + +Documentation +------------- + +Here is a list of the different components you can create with Slate. + +### Paragraphs + +![paragraph](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-paragraph.png) + +```html +
+
+
+ Abilities or he perfectly pretended so strangers be exquisite. Oh to + another chamber pleased imagine do in. Went me rank at last loud shot an + draw. Excellent so to no sincerity smallness. Removal request delight if + on he we. Unaffected in we by apartments astonished to decisively + themselves. Offended ten old consider speaking. +
+
+
+``` + +### Headers, Footers, and Items + +![header, footer, and item](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-header-content-footer.png) + +```html +
+
Single Item
+
+ +
+ +
+``` + +### Toggles and Selects + +![toggles and select](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-toggle.png) + +```html +
+
Multiple Items
+
+ + + +
+
+``` + +### Checkboxes + +![checkboxes](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-checkbox.png) + +```html +
+
Checkboxes
+
+ + +
+
+``` + +### Radio Buttons + +![radio buttons](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-radio.png) + +```html +
+
Radio Buttons
+
+ + + +
+
+``` + +### Date, Time, and Colorpickers + +![date, time, and colorpickers](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-date-time-colorpickers.png) + +```html +
+
Date, Time, Colorpickers
+
+ + + + +
+
+``` + +### Input Fields + +![input field](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-input.png) + +```html +
+
Input Field
+
+ +
+
+``` + +### Input Fields with Buttons + +![input field with button](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-input-button.png) + +```html +
+
Input Field + Send Button
+
+ +
+
+``` + +### Tab Buttons + +![tab buttons](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-tab-button.png) + +```html +
+
Tab Buttons
+
+ +
+
+``` + +### Sliders + +![slider](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-slider.png) + +```html +
+
Slider
+
+ +
+
+``` + +### Draggable Lists + +![draggable list](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-draggable.png) + +```html +
+
draggable Items
+
+
+ + + + +
+
+``` + +### Lists + +![list](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-list.png) + +```html +
+
Item List
+
+
+ + +
+
+
+``` + +### Buttons + +![button](https://raw.githubusercontent.com/pebble/slate/master/docs/assets/slate-button.png) + +```html +
+
+ +
+
+``` diff --git a/vendor/pebble-slate/bower.json b/vendor/pebble-slate/bower.json new file mode 100644 index 0000000..e67f9d8 --- /dev/null +++ b/vendor/pebble-slate/bower.json @@ -0,0 +1,13 @@ +{ + "name": "Slate", + "version": "0.0.3", + "homepage": "https://github.com/pebble/slate", + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/vendor/pebble-slate/dist/css/slate.css b/vendor/pebble-slate/dist/css/slate.css new file mode 100644 index 0000000..cad659d --- /dev/null +++ b/vendor/pebble-slate/dist/css/slate.css @@ -0,0 +1,485 @@ +@font-face { + font-family: 'PFDinDisplayProLightWebfont'; + src: url("../fonts/PFDinDisplayPro-Light.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-variant: normal; } +@font-face { + font-family: 'PTSansRegularWebfont'; + src: url("../fonts/PTSans-regular.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-variant: normal; } +* { + margin: 0; + padding: 0; } + +*:focus { + outline-width: 0; } + +a { + color: #FF4700; + text-decoration: none; } + +body { + background-color: #EAEAEA; + margin-bottom: 15px; + font-size: 1.2em; + line-height: 1.4em; + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; } + +body, select, input[type=text], input[type=time], input[type=date] { + font-family: 'PFDinDisplayPro-Light', PFDinDisplayProLightWebfont, sans-serif; + font-weight: normal; } + +select, input[type=time], input[type=date] { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; + border: none; + position: absolute; + top: 13px; + color: #A8A8A8; + font-size: 1em; + line-height: 1em; + background-color: #F7F7F7; } + +input[type=date] { + direction: rtl; } + +select { + right: 30px; + top: 14px; } + +input[type=time] { + right: 10px !important; } + +input[type=date] { + right: 10px !important; } + +.select-triangle { + position: absolute; + right: 10px; + top: 20px; + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #FF4700; } + +.item-container { + color: #333333; + margin-top: 15px; } + +.item-container-header { + padding: 3px 10px; + text-transform: uppercase; + font-family: 'PT Sans', PTSansRegularWebfont, sans-serif; + font-size: .8em; + font-weight: normal; + color: #A8A8A8; } + +.item-container-content { + background-color: #F7F7F7; + border-top: 1px solid #DEDEDE; + border-bottom: 1px solid #DEDEDE; } + +.item-container-footer { + padding: 3px 10px; + font-size: .7em; + line-height: 1.4em; + color: #A8A8A8; } + +.item { + position: relative; + padding: 10px; + display: block; + overflow: hidden; } + +.item:not(:first-child) { + border-top: 1px solid #DEDEDE; } + +.item-subtitle-wrapper { + font-size: 1em; } + +.item-subtitle-wrapper .item-styled-toggle-wrapper { + top: 16px; } + +.item-subtitle-wrapper .item-styled-checkbox { + top: 18px; } + +.item-subtitle-wrapper .item-styled-radio { + top: 16px; } + +.item-subtitle-wrapper .item-draggable-handle { + top: 18px; } + +.item-subtitle { + font-size: .7em; + line-height: .7em; + padding: .3em 0; } + +.item-styled-toggle-wrapper { + position: absolute; + right: 10px; + top: 8px; + width: 56px; + height: 30px; + border-radius: 5px; + transition-timing-function: ease-in-out; + transition-duration: 0.3s; + transition-property: background-color; } + +.item-styled-toggle { + position: relative; + background-color: #FFFFFF; + width: 28px; + height: 28px; + border-radius: 5px; + top: 1px; + transition-timing-function: ease-in-out; + transition-duration: 0.3s; + transition-property: left; } + +.item-toggle { + display: none; } + +.item-toggle + .item-styled-toggle-wrapper { + background-color: #A8A8A8; } + +.item-toggle:checked + .item-styled-toggle-wrapper { + background-color: #FF4700; } + +.item-toggle + .item-styled-toggle-wrapper .item-styled-toggle { + left: 1px; } + +.item-toggle:checked + .item-styled-toggle-wrapper .item-styled-toggle { + left: 27px; } + +.item-styled-toggle-bar { + width: 3px; + height: 15px; + margin-left: 3px; + background-color: #EAEAEA; + float: left; + position: relative; + left: 4px; + top: 7px; } + +.item-styled-checkbox { + position: absolute; + right: 10px; + top: 10px; + width: 21px; + height: 21px; + border-radius: 5px; + border-width: 2px; + border-style: solid; } + +.item-checkbox { + display: none; } + +.item-checkbox + .item-styled-checkbox { + border-color: #DEDEDE; } + +.item-checkbox:checked + .item-styled-checkbox { + border-color: #FF4700; + background-color: #FF4700; } + +.item-checkbox:checked + .item-styled-checkbox:before { + content: ""; + display: block; + position: relative; + left: 7px; + width: 6px; + height: 14px; + border-color: #F7F7F7; + border-width: 0 2px 2px 0; + border-style: solid; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); } + +.item-styled-radio { + position: absolute; + right: 10px; + top: 10px; + width: 21px; + height: 21px; + border-radius: 12px; + border-width: 2px; + border-style: solid; } + +.item-radio { + display: none; } + +.item-radio + .item-styled-radio { + border-color: #DEDEDE; } + +.item-radio:checked + .item-styled-radio { + border-color: #FF4700; + background-color: #FF4700; } + +.item-radio:checked + .item-styled-radio:before { + content: ""; + display: block; + position: relative; + top: 1px; + left: 6px; + width: 6px; + height: 14px; + border-color: #F7F7F7; + border-width: 0 2px 2px 0; + border-style: solid; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); } + +.item-color { + display: none; } + +.item-styled-color { + background: #F7F7F7; } + .item-styled-color .value { + position: absolute; + right: 10px; + top: 10px; + width: 56px; + height: 30px; + border-radius: 5px; + border-color: #A8A8A8; + border-width: 1px; + border-style: solid; } + .item-styled-color .color-box-wrap { + display: none; + box-sizing: border-box; + position: relative; + height: 0; + width: 100%; + padding: 0 0 100% 0; + margin: 0.6em 0 0em; } + .item-styled-color .color-box-wrap.show { + display: block; } + .item-styled-color .color-box-wrap .color-box-container { + position: absolute; + height: 99.97%; + width: 100%; + left: 0; + top: 0; } + .item-styled-color .color-box-wrap .color-box-container .color-box { + float: left; + cursor: pointer; } + .item-styled-color .color-box-wrap .color-box-container .color-box.rounded-tl { + border-top-left-radius: 5px; } + .item-styled-color .color-box-wrap .color-box-container .color-box.rounded-tr { + border-top-right-radius: 5px; } + .item-styled-color .color-box-wrap .color-box-container .color-box.rounded-bl { + border-bottom-left-radius: 5px; } + .item-styled-color .color-box-wrap .color-box-container .color-box.rounded-br { + border-bottom-right-radius: 5px; } + +.item-date, .item-time { + position: absolute; + color: #F7F7F7 !important; } + +.item-styled-date, .item-styled-time { + position: absolute; + top: 13px; + right: 10px; + color: #A8A8A8; + font-size: 1em; + line-height: 1em; + background-color: #F7F7F7; } + +.item-input-wrapper { + border-radius: 5px; + border: 2px solid #DEDEDE; } + +.item-input-wrapper-button { + box-sizing: border-box; + width: 77%; } + +.item-input { + border: 0; + background-color: transparent; + padding: 0 10px 7px 10px; + font-size: 13px; + width: 100%; + box-sizing: border-box; } + +.button-container { + text-align: center; } + +.item-button { + width: 60%; + height: 35px; + background-color: #FF4700; + border-radius: 5px; + color: white; + font-size: 0.8em; + border: none; + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; } + +.item-input-button { + position: absolute; + right: 10px; + top: 9px; + width: 20%; } + +.tab-buttons { + display: table; + width: 100%; + box-sizing: border-box; + table-layout: fixed; } + +.tab-button { + display: table-cell; + position: relative; + color: #FF4700; + border: 1px solid #FF4700; + border-right-width: 0; + font-size: 14px; + padding: 5px 0; + text-align: center; + right: -1px; } + +.tab-button:first-child { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-right-width: 0; } + +.tab-button:last-child { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + border-right-width: 1px; } + +.tab-button.active { + background-color: #FF4700; + color: #F7F7F7; } + +.item-slider { + position: relative; + top: 8px; + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; + height: 30px; + width: 79%; + overflow: hidden; + background-color: transparent; + margin-top: -10px; } + +.item-slider::-webkit-slider-thumb:before { + content: ""; + position: absolute; + top: 11px; + left: -1001px; + height: 2px; + width: 1000px; + background: #FF4700; } + +.item-slider::-webkit-slider-thumb { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; + position: relative; + top: -13px; + height: 28px; + width: 28px; + background-color: #FFFFFF; + border-radius: 5px; + border: 2px solid #EAEAEA; } + +.item-slider::-webkit-slider-runnable-track { + height: 2px; + background-color: #DEDEDE; } + +.item-slider::-webkit-slider-thumb:after { + content: "lll"; + position: absolute; + left: 4px; + top: 3px; + height: 12px; + width: 10px; + font-weight: normal; + text-align: center; + color: #DEDEDE; + font-size: 16px; + letter-spacing: 1px; } + +.item-slider-text { + position: absolute; + top: 6px; + right: 10px; + width: 16%; } + +.item-slider-text .item-input { + text-align: center; } + +.delete-item { + width: 30px; + height: 30px; + right: 5px; + top: 5px; + position: absolute; + border-radius: 6px; } + +.delete-item:before, .delete-item:after { + content: ''; + position: absolute; + width: 24px; + height: 2px; + background-color: #A8A8A8; + border-radius: 2px; + top: 16px; } + +.delete-item:before { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + left: 3px; } + +.delete-item:after { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + right: 3px; } + +.add-item { + color: #FF4700; } + +.item-draggable-handle { + position: absolute; + right: 5px; + top: 10px; + height: 28px; + width: 28px; } + +.item-draggable-handle-bar { + margin-top: 5px; + height: 2px; + width: 20px; + background-color: #A8A8A8; + text-align: center; } + +[draggable=true] { + background-color: #F7F7F7; + border: 2px solid #EAEAEA; + border-radius: 2px; } diff --git a/vendor/pebble-slate/dist/css/slate.min.css b/vendor/pebble-slate/dist/css/slate.min.css new file mode 100644 index 0000000..0a9dcfe --- /dev/null +++ b/vendor/pebble-slate/dist/css/slate.min.css @@ -0,0 +1 @@ +@font-face{font-family:'PFDinDisplayProLightWebfont';src:url("../fonts/PFDinDisplayPro-Light.woff") format("woff");font-weight:normal;font-style:normal;font-variant:normal}@font-face{font-family:'PTSansRegularWebfont';src:url("../fonts/PTSans-regular.woff") format("woff");font-weight:normal;font-style:normal;font-variant:normal}*{margin:0;padding:0}*:focus{outline-width:0}a{color:#ff4700;text-decoration:none}body{background-color:#eaeaea;margin-bottom:15px;font-size:1.2em;line-height:1.4em;-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}body,select,input[type=text],input[type=time],input[type=date]{font-family:'PFDinDisplayPro-Light',PFDinDisplayProLightWebfont,sans-serif;font-weight:normal}select,input[type=time],input[type=date]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border:0;position:absolute;top:13px;color:#a8a8a8;font-size:1em;line-height:1em;background-color:#f7f7f7}input[type=date]{direction:rtl}select{right:30px;top:14px}input[type=time]{right:10px !important}input[type=date]{right:10px !important}.select-triangle{position:absolute;right:10px;top:20px;width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ff4700}.item-container{color:#333;margin-top:15px}.item-container-header{padding:3px 10px;text-transform:uppercase;font-family:'PT Sans',PTSansRegularWebfont,sans-serif;font-size:.8em;font-weight:normal;color:#a8a8a8}.item-container-content{background-color:#f7f7f7;border-top:1px solid #dedede;border-bottom:1px solid #dedede}.item-container-footer{padding:3px 10px;font-size:.7em;line-height:1.4em;color:#a8a8a8}.item{position:relative;padding:10px;display:block;overflow:hidden}.item:not(:first-child){border-top:1px solid #dedede}.item-subtitle-wrapper{font-size:1em}.item-subtitle-wrapper .item-styled-toggle-wrapper{top:16px}.item-subtitle-wrapper .item-styled-checkbox{top:18px}.item-subtitle-wrapper .item-styled-radio{top:16px}.item-subtitle-wrapper .item-draggable-handle{top:18px}.item-subtitle{font-size:.7em;line-height:.7em;padding:.3em 0}.item-styled-toggle-wrapper{position:absolute;right:10px;top:8px;width:56px;height:30px;border-radius:5px;transition-timing-function:ease-in-out;transition-duration:.3s;transition-property:background-color}.item-styled-toggle{position:relative;background-color:#fff;width:28px;height:28px;border-radius:5px;top:1px;transition-timing-function:ease-in-out;transition-duration:.3s;transition-property:left}.item-toggle{display:none}.item-toggle+.item-styled-toggle-wrapper{background-color:#a8a8a8}.item-toggle:checked+.item-styled-toggle-wrapper{background-color:#ff4700}.item-toggle+.item-styled-toggle-wrapper .item-styled-toggle{left:1px}.item-toggle:checked+.item-styled-toggle-wrapper .item-styled-toggle{left:27px}.item-styled-toggle-bar{width:3px;height:15px;margin-left:3px;background-color:#eaeaea;float:left;position:relative;left:4px;top:7px}.item-styled-checkbox{position:absolute;right:10px;top:10px;width:21px;height:21px;border-radius:5px;border-width:2px;border-style:solid}.item-checkbox{display:none}.item-checkbox+.item-styled-checkbox{border-color:#dedede}.item-checkbox:checked+.item-styled-checkbox{border-color:#ff4700;background-color:#ff4700}.item-checkbox:checked+.item-styled-checkbox:before{content:"";display:block;position:relative;left:7px;width:6px;height:14px;border-color:#f7f7f7;border-width:0 2px 2px 0;border-style:solid;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.item-styled-radio{position:absolute;right:10px;top:10px;width:21px;height:21px;border-radius:12px;border-width:2px;border-style:solid}.item-radio{display:none}.item-radio+.item-styled-radio{border-color:#dedede}.item-radio:checked+.item-styled-radio{border-color:#ff4700;background-color:#ff4700}.item-radio:checked+.item-styled-radio:before{content:"";display:block;position:relative;top:1px;left:6px;width:6px;height:14px;border-color:#f7f7f7;border-width:0 2px 2px 0;border-style:solid;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.item-color{display:none}.item-styled-color{background:#f7f7f7}.item-styled-color .value{position:absolute;right:10px;top:10px;width:56px;height:30px;border-radius:5px;border-color:#a8a8a8;border-width:1px;border-style:solid}.item-styled-color .color-box-wrap{display:none;box-sizing:border-box;position:relative;height:0;width:100%;padding:0 0 100% 0;margin:.6em 0 0}.item-styled-color .color-box-wrap.show{display:block}.item-styled-color .color-box-wrap .color-box-container{position:absolute;height:99.97%;width:100%;left:0;top:0}.item-styled-color .color-box-wrap .color-box-container .color-box{float:left;cursor:pointer}.item-styled-color .color-box-wrap .color-box-container .color-box.rounded-tl{border-top-left-radius:5px}.item-styled-color .color-box-wrap .color-box-container .color-box.rounded-tr{border-top-right-radius:5px}.item-styled-color .color-box-wrap .color-box-container .color-box.rounded-bl{border-bottom-left-radius:5px}.item-styled-color .color-box-wrap .color-box-container .color-box.rounded-br{border-bottom-right-radius:5px}.item-date,.item-time{position:absolute;color:#f7f7f7 !important}.item-styled-date,.item-styled-time{position:absolute;top:13px;right:10px;color:#a8a8a8;font-size:1em;line-height:1em;background-color:#f7f7f7}.item-input-wrapper{border-radius:5px;border:2px solid #dedede}.item-input-wrapper-button{box-sizing:border-box;width:77%}.item-input{border:0;background-color:transparent;padding:0 10px 7px 10px;font-size:13px;width:100%;box-sizing:border-box}.button-container{text-align:center}.item-button{width:60%;height:35px;background-color:#ff4700;border-radius:5px;color:white;font-size:.8em;border:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}.item-input-button{position:absolute;right:10px;top:9px;width:20%}.tab-buttons{display:table;width:100%;box-sizing:border-box;table-layout:fixed}.tab-button{display:table-cell;position:relative;color:#ff4700;border:1px solid #ff4700;border-right-width:0;font-size:14px;padding:5px 0;text-align:center;right:-1px}.tab-button:first-child{border-top-left-radius:5px;border-bottom-left-radius:5px;border-right-width:0}.tab-button:last-child{border-top-right-radius:5px;border-bottom-right-radius:5px;border-right-width:1px}.tab-button.active{background-color:#ff4700;color:#f7f7f7}.item-slider{position:relative;top:8px;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;height:30px;width:79%;overflow:hidden;background-color:transparent;margin-top:-10px}.item-slider::-webkit-slider-thumb:before{content:"";position:absolute;top:11px;left:-1001px;height:2px;width:1000px;background:#ff4700}.item-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;position:relative;top:-13px;height:28px;width:28px;background-color:#fff;border-radius:5px;border:2px solid #eaeaea}.item-slider::-webkit-slider-runnable-track{height:2px;background-color:#dedede}.item-slider::-webkit-slider-thumb:after{content:"lll";position:absolute;left:4px;top:3px;height:12px;width:10px;font-weight:normal;text-align:center;color:#dedede;font-size:16px;letter-spacing:1px}.item-slider-text{position:absolute;top:6px;right:10px;width:16%}.item-slider-text .item-input{text-align:center}.delete-item{width:30px;height:30px;right:5px;top:5px;position:absolute;border-radius:6px}.delete-item:before,.delete-item:after{content:'';position:absolute;width:24px;height:2px;background-color:#a8a8a8;border-radius:2px;top:16px}.delete-item:before{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);left:3px}.delete-item:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);right:3px}.add-item{color:#ff4700}.item-draggable-handle{position:absolute;right:5px;top:10px;height:28px;width:28px}.item-draggable-handle-bar{margin-top:5px;height:2px;width:20px;background-color:#a8a8a8;text-align:center}[draggable=true]{background-color:#f7f7f7;border:2px solid #eaeaea;border-radius:2px} \ No newline at end of file diff --git a/vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff b/vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff new file mode 100644 index 0000000000000000000000000000000000000000..1a206ffeee80dc333e337612b0fbec226db0cf96 GIT binary patch literal 179100 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�~ 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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/dist/js/slate.js b/vendor/pebble-slate/dist/js/slate.js new file mode 100644 index 0000000..dd9b051 --- /dev/null +++ b/vendor/pebble-slate/dist/js/slate.js @@ -0,0 +1,381 @@ +/*! Sortable 1.2.0 - MIT | git://github.com/rubaxa/Sortable.git */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():"undefined"!=typeof Package?Sortable=a():window.Sortable=a()}(function(){"use strict";function a(a,b){this.el=a,this.options=b=q({},b),a[H]=this;var d={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0};for(var e in d)!(e in b)&&(b[e]=d[e]);var g=b.group;g&&"object"==typeof g||(g=b.group={name:g}),["pull","put"].forEach(function(a){a in g||(g[a]=!0)}),b.groups=" "+g.name+(g.put.join?" "+g.put.join(" "):"")+" ";for(var h in this)"_"===h.charAt(0)&&(this[h]=c(this,this[h]));f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),f(a,"dragover",this),f(a,"dragenter",this),Q.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){t&&t.state!==a&&(i(t,"display",a?"none":""),!a&&t.state&&u.insertBefore(t,r),t.state=a)}function c(a,b){var c=P.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(P.call(arguments)))}}function d(a,b,c){if(a){c=c||J,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")\\s","g");do if(">*"===d&&a.parentNode===c||(""===d||a.nodeName.toUpperCase()==d)&&(!b.length||((" "+a.className+" ").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function e(a){a.dataTransfer.dropEffect="move",a.preventDefault()}function f(a,b,c){a.addEventListener(b,c,!1)}function g(a,b,c){a.removeEventListener(b,c,!1)}function h(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(G," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(G," ")}}function i(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return J.defaultView&&J.defaultView.getComputedStyle?c=J.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function j(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function k(a){a.draggable=!1}function l(){M=!1}function m(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return b.clientY-(d.top+d.height)>5&&c}function n(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function o(a){for(var b=0;a&&(a=a.previousElementSibling);)"TEMPLATE"!==a.nodeName.toUpperCase()&&b++;return b}function p(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function q(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var r,s,t,u,v,w,x,y,z,A,B,C,D,E,F={},G=/\s+/g,H="Sortable"+(new Date).getTime(),I=window,J=I.document,K=I.parseInt,L=!!("draggable"in J.createElement("div")),M=!1,N=function(a,b,c,d,e,f,g){var h=J.createEvent("Event"),i=(a||b[H]).options,j="on"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.item=d||b,h.from=e||b,h.clone=t,h.oldIndex=f,h.newIndex=g,i[j]&&i[j].call(a,h),b.dispatchEvent(h)},O=Math.abs,P=[].slice,Q=[],R=p(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(x!==c&&(w=b.scroll,x=c,w===!0)){w=c;do if(w.offsetWidth=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=I)),(F.vx!==f||F.vy!==g||F.el!==d)&&(F.el=d,F.vx=f,F.vy=g,clearInterval(F.pid),d&&(F.pid=setInterval(function(){d===I?I.scrollTo(I.pageXOffset+f*i,I.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30);return a.prototype={constructor:a,_onTapStart:function(a){var b=this,c=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,j=e.filter;if(!("mousedown"===f&&0!==a.button||e.disabled)&&(h=d(h,e.draggable,c))){if(A=o(h),"function"==typeof j){if(j.call(this,a,h,this))return N(b,i,"filter",h,c,A),void a.preventDefault()}else if(j&&(j=j.split(",").some(function(a){return a=d(i,a.trim(),c),a?(N(b,a,"filter",h,c,A),!0):void 0})))return void a.preventDefault();(!e.handle||d(i,e.handle,c))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,e=this,g=e.el,h=e.options,i=g.ownerDocument;c&&!r&&c.parentNode===g&&(D=a,u=g,r=c,v=r.nextSibling,C=h.group,d=function(){e._disableDelayedDrag(),r.draggable=!0,h.ignore.split(",").forEach(function(a){j(r,a.trim(),k)}),e._triggerDragStart(b)},f(i,"mouseup",e._onDrop),f(i,"touchend",e._onDrop),f(i,"touchcancel",e._onDrop),h.delay?(f(i,"mousemove",e._disableDelayedDrag),f(i,"touchmove",e._disableDelayedDrag),e._dragStartTimer=setTimeout(d,h.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),g(a,"mousemove",this._disableDelayedDrag),g(a,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(D={target:r,clientX:a.clientX,clientY:a.clientY},this._onDragStart(D,"touch")):L?(f(r,"dragend",this),f(u,"dragstart",this._onDragStart)):this._onDragStart(D,!0);try{J.selection?J.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){u&&r&&(h(r,this.options.ghostClass,!0),a.active=this,N(this,u,"start",r,u,A))},_emulateDragOver:function(){if(E){i(s,"display","none");var a=J.elementFromPoint(E.clientX,E.clientY),b=a,c=" "+this.options.group.name,d=Q.length;if(b)do{if(b[H]&&b[H].options.groups.indexOf(c)>-1){for(;d--;)Q[d]({clientX:E.clientX,clientY:E.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);i(s,"display","")}},_onTouchMove:function(a){if(D){var b=a.touches?a.touches[0]:a,c=b.clientX-D.clientX,d=b.clientY-D.clientY,e=a.touches?"translate3d("+c+"px,"+d+"px,0)":"translate("+c+"px,"+d+"px)";E=b,i(s,"webkitTransform",e),i(s,"mozTransform",e),i(s,"msTransform",e),i(s,"transform",e),a.preventDefault()}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;if(this._offUpEvents(),"clone"==C.pull&&(t=r.cloneNode(!0),i(t,"display","none"),u.insertBefore(t,r)),b){var e,g=r.getBoundingClientRect(),h=i(r);s=r.cloneNode(!0),i(s,"top",g.top-K(h.marginTop,10)),i(s,"left",g.left-K(h.marginLeft,10)),i(s,"width",g.width),i(s,"height",g.height),i(s,"opacity","0.8"),i(s,"position","fixed"),i(s,"zIndex","100000"),u.appendChild(s),e=s.getBoundingClientRect(),i(s,"width",2*g.width-e.width),i(s,"height",2*g.height-e.height),"touch"===b?(f(J,"touchmove",this._onTouchMove),f(J,"touchend",this._onDrop),f(J,"touchcancel",this._onDrop)):(f(J,"mousemove",this._onTouchMove),f(J,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,150)}else c&&(c.effectAllowed="move",d.setData&&d.setData.call(this,c,r)),f(J,"drop",this);setTimeout(this._dragStarted,0)},_onDragOver:function(a){var c,e,f,g=this.el,h=this.options,j=h.group,k=j.put,n=C===j,o=h.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!h.dragoverBubble&&a.stopPropagation()),C&&!h.disabled&&(n?o||(f=!u.contains(r)):C.pull&&k&&(C.name===j.name||k.indexOf&&~k.indexOf(C.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(R(a,h,this.el),M)return;if(c=d(a.target,h.draggable,g),e=r.getBoundingClientRect(),f)return b(!0),void(t||v?u.insertBefore(r,t||v):o||u.appendChild(r));if(0===g.children.length||g.children[0]===s||g===a.target&&(c=m(g,a))){if(c){if(c.animated)return;q=c.getBoundingClientRect()}b(n),g.appendChild(r),this._animate(e,r),c&&this._animate(q,c)}else if(c&&!c.animated&&c!==r&&void 0!==c.parentNode[H]){y!==c&&(y=c,z=i(c));var p,q=c.getBoundingClientRect(),w=q.right-q.left,x=q.bottom-q.top,A=/left|right|inline/.test(z.cssFloat+z.display),B=c.offsetWidth>r.offsetWidth,D=c.offsetHeight>r.offsetHeight,E=(A?(a.clientX-q.left)/w:(a.clientY-q.top)/x)>.5,F=c.nextElementSibling;M=!0,setTimeout(l,30),b(n),p=A?c.previousElementSibling===r&&!B||E&&B:F!==r&&!D||E&&D,p&&!F?g.appendChild(r):c.parentNode.insertBefore(r,p?F:c),this._animate(e,r),this._animate(q,c)}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();i(b,"transition","none"),i(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,i(b,"transition","all "+c+"ms"),i(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){i(b,"transition",""),i(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;g(J,"touchmove",this._onTouchMove),g(a,"mouseup",this._onDrop),g(a,"touchend",this._onDrop),g(a,"touchcancel",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(F.pid),clearTimeout(this.dragStartTimer),g(J,"drop",this),g(J,"mousemove",this._onTouchMove),g(c,"dragstart",this._onDragStart),this._offUpEvents(),b&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation(),s&&s.parentNode.removeChild(s),r&&(g(r,"dragend",this),k(r),h(r,this.options.ghostClass,!1),u!==r.parentNode?(B=o(r),N(null,r.parentNode,"sort",r,u,A,B),N(this,u,"sort",r,u,A,B),N(null,r.parentNode,"add",r,u,A,B),N(this,u,"remove",r,u,A,B)):(t&&t.parentNode.removeChild(t),r.nextSibling!==v&&(B=o(r),N(this,u,"update",r,u,A,B),N(this,u,"sort",r,u,A,B))),a.active&&N(this,u,"end",r,u,A,B)),u=r=s=v=t=w=x=D=E=y=z=C=a.active=null,this.save())},handleEvent:function(a){var b=a.type;"dragover"===b||"dragenter"===b?r&&(this._onDragOver(a),e(a)):("drop"===b||"dragend"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],c=this.el.children,e=0,f=c.length,g=this.options;f>e;e++)a=c[e],d(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||n(a));return b},sort:function(a){var b={},c=this.el;this.toArray().forEach(function(a,e){var f=c.children[e];d(f,this.options.draggable,c)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(c.removeChild(b[a]),c.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return d(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:void(c[a]=b)},destroy:function(){var a=this.el;a[H]=null,g(a,"mousedown",this._onTapStart),g(a,"touchstart",this._onTapStart),g(a,"dragover",this),g(a,"dragenter",this),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),Q.splice(Q.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:f,off:g,css:i,find:j,bind:c,is:function(a,b){return!!d(a,b,a)},extend:q,throttle:p,closest:d,toggleClass:h,index:o},a.version="1.2.0",a.create=function(b,c){return new a(b,c)},a}); +/* Zepto v1.1.6 - zepto event ajax form ie - zeptojs.com/license */ +var Zepto=function(){function L(t){return null==t?String(t):j[S.call(t)]||"object"}function Z(t){return"function"==L(t)}function _(t){return null!=t&&t==t.window}function $(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function D(t){return"object"==L(t)}function M(t){return D(t)&&!_(t)&&Object.getPrototypeOf(t)==Object.prototype}function R(t){return"number"==typeof t.length}function k(t){return s.call(t,function(t){return null!=t})}function z(t){return t.length>0?n.fn.concat.apply([],t):t}function F(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function q(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||c[F(t)]?e:e+"px"}function I(t){var e,n;return u[t]||(e=a.createElement(t),a.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),u[t]=n),u[t]}function V(t){return"children"in t?o.call(t.children):n.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function B(n,i,r){for(e in i)r&&(M(i[e])||A(i[e]))?(M(i[e])&&!M(n[e])&&(n[e]={}),A(i[e])&&!A(n[e])&&(n[e]=[]),B(n[e],i[e],r)):i[e]!==t&&(n[e]=i[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function J(t,e,n,i){return Z(e)?e.call(t,n,i):e}function X(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function W(e,n){var i=e.className||"",r=i&&i.baseVal!==t;return n===t?r?i.baseVal:i:void(r?i.baseVal=n:e.className=n)}function Y(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function G(t,e){e(t);for(var n=0,i=t.childNodes.length;i>n;n++)G(t.childNodes[n],e)}var t,e,n,i,C,N,r=[],o=r.slice,s=r.filter,a=window.document,u={},f={},c={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,h=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,p=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,d=/^(?:body|html)$/i,m=/([A-Z])/g,g=["val","css","html","text","data","width","height","offset"],v=["after","prepend","before","append"],y=a.createElement("table"),x=a.createElement("tr"),b={tr:a.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:x,th:x,"*":a.createElement("div")},w=/complete|loaded|interactive/,E=/^[\w-]*$/,j={},S=j.toString,T={},O=a.createElement("div"),P={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},A=Array.isArray||function(t){return t instanceof Array};return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,o=!r;return o&&(r=O).appendChild(t),i=~T.qsa(r,e).indexOf(t),o&&O.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return s.call(t,function(e,n){return t.indexOf(e)==n})},T.fragment=function(e,i,r){var s,u,f;return h.test(e)&&(s=n(a.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(p,"<$1>")),i===t&&(i=l.test(e)&&RegExp.$1),i in b||(i="*"),f=b[i],f.innerHTML=""+e,s=n.each(o.call(f.childNodes),function(){f.removeChild(this)})),M(r)&&(u=n(s),n.each(r,function(t,e){g.indexOf(t)>-1?u[t](e):u.attr(t,e)})),s},T.Z=function(t,e){return t=t||[],t.__proto__=n.fn,t.selector=e||"",t},T.isZ=function(t){return t instanceof T.Z},T.init=function(e,i){var r;if(!e)return T.Z();if("string"==typeof e)if(e=e.trim(),"<"==e[0]&&l.test(e))r=T.fragment(e,RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}else{if(Z(e))return n(a).ready(e);if(T.isZ(e))return e;if(A(e))r=k(e);else if(D(e))r=[e],e=null;else if(l.test(e))r=T.fragment(e.trim(),RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}}return T.Z(r,e)},n=function(t,e){return T.init(t,e)},n.extend=function(t){var e,n=o.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){B(t,n,e)}),t},T.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],s=i||r?e.slice(1):e,a=E.test(s);return $(t)&&a&&i?(n=t.getElementById(s))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:o.call(a&&!i?r?t.getElementsByClassName(s):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=a.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},n.type=L,n.isFunction=Z,n.isWindow=_,n.isArray=A,n.isPlainObject=M,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.inArray=function(t,e,n){return r.indexOf.call(e,t,n)},n.camelCase=C,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.map=function(t,e){var n,r,o,i=[];if(R(t))for(r=0;r=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return r.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return Z(t)?this.not(this.not(t)):n(s.call(this,function(e){return T.matches(e,t)}))},add:function(t,e){return n(N(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(e){var i=[];if(Z(e)&&e.call!==t)this.each(function(t){e.call(this,t)||i.push(this)});else{var r="string"==typeof e?this.filter(e):R(e)&&Z(e.item)?o.call(e):n(e);this.forEach(function(t){r.indexOf(t)<0&&i.push(t)})}return n(i)},has:function(t){return this.filter(function(){return D(t)?n.contains(this,t):n(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!D(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!D(t)?t:n(t)},find:function(t){var e,i=this;return e=t?"object"==typeof t?n(t).filter(function(){var t=this;return r.some.call(i,function(e){return n.contains(e,t)})}):1==this.length?n(T.qsa(this[0],t)):this.map(function(){return T.qsa(this,t)}):n()},closest:function(t,e){var i=this[0],r=!1;for("object"==typeof t&&(r=n(t));i&&!(r?r.indexOf(i)>=0:T.matches(i,t));)i=i!==e&&!$(i)&&i.parentNode;return n(i)},parents:function(t){for(var e=[],i=this;i.length>0;)i=n.map(i,function(t){return(t=t.parentNode)&&!$(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return U(e,t)},parent:function(t){return U(N(this.pluck("parentNode")),t)},children:function(t){return U(this.map(function(){return V(this)}),t)},contents:function(){return this.map(function(){return o.call(this.childNodes)})},siblings:function(t){return U(this.map(function(t,e){return s.call(V(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return n.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=I(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=Z(t);if(this[0]&&!e)var i=n(t).get(0),r=i.parentNode||this.length>1;return this.each(function(o){n(this).wrapAll(e?t.call(this,o):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){n(this[0]).before(t=n(t));for(var e;(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=Z(t);return this.each(function(i){var r=n(this),o=r.contents(),s=e?t.call(this,i):t;o.length?o.wrapAll(s):r.append(s)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var i=n(this);(e===t?"none"==i.css("display"):e)?i.show():i.hide()})},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var i=this.innerHTML;n(this).empty().append(J(this,t,e,i))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=J(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this[0].textContent:null},attr:function(n,i){var r;return"string"!=typeof n||1 in arguments?this.each(function(t){if(1===this.nodeType)if(D(n))for(e in n)X(this,e,n[e]);else X(this,n,J(this,i,t,this.getAttribute(n)))}):this.length&&1===this[0].nodeType?!(r=this[0].getAttribute(n))&&n in this[0]?this[0][n]:r:t},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){X(this,t)},this)})},prop:function(t,e){return t=P[t]||t,1 in arguments?this.each(function(n){this[t]=J(this,e,n,this[t])}):this[0]&&this[0][t]},data:function(e,n){var i="data-"+e.replace(m,"-$1").toLowerCase(),r=1 in arguments?this.attr(i,n):this.attr(i);return null!==r?Y(r):t},val:function(t){return 0 in arguments?this.each(function(e){this.value=J(this,t,e,this.value)}):this[0]&&(this[0].multiple?n(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var i=n(this),r=J(this,t,e,i.offset()),o=i.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==i.css("position")&&(s.position="relative"),i.css(s)});if(!this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(t,i){if(arguments.length<2){var r,o=this[0];if(!o)return;if(r=getComputedStyle(o,""),"string"==typeof t)return o.style[C(t)]||r.getPropertyValue(t);if(A(t)){var s={};return n.each(t,function(t,e){s[e]=o.style[C(e)]||r.getPropertyValue(e)}),s}}var a="";if("string"==L(t))i||0===i?a=F(t)+":"+H(t,i):this.each(function(){this.style.removeProperty(F(t))});else for(e in t)t[e]||0===t[e]?a+=F(e)+":"+H(e,t[e])+";":this.each(function(){this.style.removeProperty(F(e))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?r.some.call(this,function(t){return this.test(W(t))},q(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var r=W(this),o=J(this,t,e,r);o.split(/\s+/g).forEach(function(t){n(this).hasClass(t)||i.push(t)},this),i.length&&W(this,r+(r?" ":"")+i.join(" "))}}):this},removeClass:function(e){return this.each(function(n){if("className"in this){if(e===t)return W(this,"");i=W(this),J(this,e,n,i).split(/\s+/g).forEach(function(t){i=i.replace(q(t)," ")}),W(this,i.trim())}})},toggleClass:function(e,i){return e?this.each(function(r){var o=n(this),s=J(this,e,r,W(this));s.split(/\s+/g).forEach(function(e){(i===t?!o.hasClass(e):i)?o.addClass(e):o.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),i=this.offset(),r=d.test(e[0].nodeName)?{top:0,left:0}:e.offset();return i.top-=parseFloat(n(t).css("margin-top"))||0,i.left-=parseFloat(n(t).css("margin-left"))||0,r.top+=parseFloat(n(e[0]).css("border-top-width"))||0,r.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:i.top-r.top,left:i.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||a.body;t&&!d.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t})}},n.fn.detach=n.fn.remove,["width","height"].forEach(function(e){var i=e.replace(/./,function(t){return t[0].toUpperCase()});n.fn[e]=function(r){var o,s=this[0];return r===t?_(s)?s["inner"+i]:$(s)?s.documentElement["scroll"+i]:(o=this.offset())&&o[e]:this.each(function(t){s=n(this),s.css(e,J(this,r,t,s[e]()))})}}),v.forEach(function(t,e){var i=e%2;n.fn[t]=function(){var t,o,r=n.map(arguments,function(e){return t=L(e),"object"==t||"array"==t||null==e?e:T.fragment(e)}),s=this.length>1;return r.length<1?this:this.each(function(t,u){o=i?u:u.parentNode,u=0==e?u.nextSibling:1==e?u.firstChild:2==e?u:null;var f=n.contains(a.documentElement,o);r.forEach(function(t){if(s)t=t.cloneNode(!0);else if(!o)return n(t).remove();o.insertBefore(t,u),f&&G(t,function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},n.fn[i?t+"To":"insert"+(e?"Before":"After")]=function(e){return n(e)[t](this),this}}),T.Z.prototype=n.fn,T.uniq=N,T.deserializeValue=Y,n.zepto=T,n}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function l(t){return t._zid||(t._zid=e++)}function h(t,e,n,i){if(e=p(e),e.ns)var r=d(e.ns);return(s[l(t)]||[]).filter(function(t){return!(!t||e.e&&t.e!=e.e||e.ns&&!r.test(t.ns)||n&&l(t.fn)!==l(n)||i&&t.sel!=i)})}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!u&&t.e in f||!!e}function g(t){return c[t]||u&&f[t]||t}function v(e,i,r,o,a,u,f){var h=l(e),d=s[h]||(s[h]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return t(document).ready(r);var s=p(i);s.fn=r,s.sel=a,s.e in c&&(r=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?s.fn.apply(this,arguments):void 0}),s.del=u;var l=u||r;s.proxy=function(t){if(t=j(t),!t.isImmediatePropagationStopped()){t.data=o;var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return i===!1&&(t.preventDefault(),t.stopPropagation()),i}},s.i=d.length,d.push(s),"addEventListener"in e&&e.addEventListener(g(s.e),s.proxy,m(s,f))})}function y(t,e,n,i,r){var o=l(t);(e||"").split(/\s/).forEach(function(e){h(t,e,n,i).forEach(function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,r))})})}function j(e,i){return(i||!e.isDefaultPrevented)&&(i||(i=e),t.each(E,function(t,n){var r=i[t];e[t]=function(){return this[n]=x,r&&r.apply(i,arguments)},e[n]=b}),(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?i.returnValue===!1:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function S(t){var e,i={originalEvent:t};for(e in t)w.test(e)||t[e]===n||(i[e]=t[e]);return j(i,t)}var n,e=1,i=Array.prototype.slice,r=t.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in window,f={focus:"focusin",blur:"focusout"},c={mouseenter:"mouseover",mouseleave:"mouseout"};a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){var s=2 in arguments&&i.call(arguments,2);if(r(e)){var a=function(){return e.apply(n,s?s.concat(i.call(arguments)):arguments)};return a._zid=l(e),a}if(o(n))return s?(s.unshift(e[n],e),t.proxy.apply(null,s)):t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,s,a,u,f){var c,l,h=this;return e&&!o(e)?(t.each(e,function(t,e){h.on(t,s,a,e,f)}),h):(o(s)||r(u)||u===!1||(u=a,a=s,s=n),(r(a)||a===!1)&&(u=a,a=n),u===!1&&(u=b),h.each(function(n,r){f&&(c=function(t){return y(r,t.type,u),u.apply(this,arguments)}),s&&(l=function(e){var n,o=t(e.target).closest(s,r).get(0);return o&&o!==r?(n=t.extend(S(e),{currentTarget:o,liveFired:r}),(c||u).apply(o,[n].concat(i.call(arguments,1)))):void 0}),v(r,e,u,a,s,l||c)}))},t.fn.off=function(e,i,s){var a=this;return e&&!o(e)?(t.each(e,function(t,e){a.off(t,i,e)}),a):(o(i)||r(s)||s===!1||(s=i,i=n),s===!1&&(s=b),a.each(function(){y(this,e,s,i)}))},t.fn.trigger=function(e,n){return e=o(e)||t.isPlainObject(e)?t.Event(e):j(e),e._args=n,this.each(function(){e.type in f&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var i,r;return this.each(function(s,a){i=S(o(e)?t.Event(e):e),i._args=n,i.target=a,t.each(h(a,e.type||e),function(t,e){return r=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),r},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){o(t)||(e=t,t=e.type);var n=document.createEvent(a[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),j(n)}}(Zepto),function(t){function h(e,n,i){var r=t.Event(n);return t(e).trigger(r,i),!r.isDefaultPrevented()}function p(t,e,i,r){return t.global?h(e||n,i,r):void 0}function d(e){e.global&&0===t.active++&&p(e,null,"ajaxStart")}function m(e){e.global&&!--t.active&&p(e,null,"ajaxStop")}function g(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||p(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void p(e,n,"ajaxSend",[t,e])}function v(t,e,n,i){var r=n.context,o="success";n.success.call(r,t,o,e),i&&i.resolveWith(r,[t,o,e]),p(n,r,"ajaxSuccess",[e,n,t]),x(o,e,n)}function y(t,e,n,i,r){var o=i.context;i.error.call(o,n,e,t),r&&r.rejectWith(o,[n,e,t]),p(i,o,"ajaxError",[n,i,t||e]),x(e,n,i)}function x(t,e,n){var i=n.context;n.complete.call(i,e,t),p(n,i,"ajaxComplete",[e,n]),m(n)}function b(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==f?"html":t==u?"json":s.test(t)?"script":a.test(t)&&"xml")||"text"}function E(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function j(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=E(e.url,e.data),e.data=void 0)}function S(e,n,i,r){return t.isFunction(n)&&(r=i,i=n,n=void 0),t.isFunction(i)||(r=i,i=void 0),{url:e,data:n,success:i,dataType:r}}function C(e,n,i,r){var o,s=t.isArray(n),a=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),r&&(n=i?r:r+"["+(a||"object"==o||"array"==o?n:"")+"]"),!r&&s?e.add(u.name,u.value):"array"==o||!i&&"object"==o?C(e,u,i,n):e.add(n,u)})}var i,r,e=0,n=window.document,o=/)<[^<]*)*<\/script>/gi,s=/^(?:text|application)\/javascript/i,a=/^(?:text|application)\/xml/i,u="application/json",f="text/html",c=/^\s*$/,l=n.createElement("a");l.href=window.location.href,t.active=0,t.ajaxJSONP=function(i,r){if(!("type"in i))return t.ajax(i);var f,h,o=i.jsonpCallback,s=(t.isFunction(o)?o():o)||"jsonp"+ ++e,a=n.createElement("script"),u=window[s],c=function(e){t(a).triggerHandler("error",e||"abort")},l={abort:c};return r&&r.promise(l),t(a).on("load error",function(e,n){clearTimeout(h),t(a).off().remove(),"error"!=e.type&&f?v(f[0],l,i,r):y(null,n||"error",l,i,r),window[s]=u,f&&t.isFunction(u)&&u(f[0]),u=f=void 0}),g(l,i)===!1?(c("abort"),l):(window[s]=function(){f=arguments},a.src=i.url.replace(/\?(.+)=\?/,"?$1="+s),n.head.appendChild(a),i.timeout>0&&(h=setTimeout(function(){c("timeout")},i.timeout)),l)},t.ajaxSettings={type:"GET",beforeSend:b,success:b,error:b,complete:b,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:u,xml:"application/xml, text/xml",html:f,html:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var a,o=t.extend({},e||{}),s=t.Deferred&&t.Deferred();for(i in t.ajaxSettings)void 0===o[i]&&(o[i]=t.ajaxSettings[i]);d(o),o.crossDomain||(a=n.createElement("a"),a.href=o.url,a.href=a.href,o.crossDomain=l.protocol+"//"+l.host!=a.protocol+"//"+a.host),o.url||(o.url=window.location.toString()),j(o);var u=o.dataType,f=/\?.+=\?/.test(o.url);if(f&&(u="jsonp"),o.cache!==!1&&(e&&e.cache===!0||"script"!=u&&"jsonp"!=u)||(o.url=E(o.url,"_="+Date.now())),"jsonp"==u)return f||(o.url=E(o.url,o.jsonp?o.jsonp+"=?":o.jsonp===!1?"":"callback=?")),t.ajaxJSONP(o,s);var C,h=o.accepts[u],p={},m=function(t,e){p[t.toLowerCase()]=[t,e]},x=/^([\w-]+:)\/\//.test(o.url)?RegExp.$1:window.location.protocol,S=o.xhr(),T=S.setRequestHeader;if(s&&s.promise(S),o.crossDomain||m("X-Requested-With","XMLHttpRequest"),m("Accept",h||"*/*"),(h=o.mimeType||h)&&(h.indexOf(",")>-1&&(h=h.split(",",2)[0]),S.overrideMimeType&&S.overrideMimeType(h)),(o.contentType||o.contentType!==!1&&o.data&&"GET"!=o.type.toUpperCase())&&m("Content-Type",o.contentType||"application/x-www-form-urlencoded"),o.headers)for(r in o.headers)m(r,o.headers[r]);if(S.setRequestHeader=m,S.onreadystatechange=function(){if(4==S.readyState){S.onreadystatechange=b,clearTimeout(C);var e,n=!1;if(S.status>=200&&S.status<300||304==S.status||0==S.status&&"file:"==x){u=u||w(o.mimeType||S.getResponseHeader("content-type")),e=S.responseText;try{"script"==u?(1,eval)(e):"xml"==u?e=S.responseXML:"json"==u&&(e=c.test(e)?null:t.parseJSON(e))}catch(i){n=i}n?y(n,"parsererror",S,o,s):v(e,S,o,s)}else y(S.statusText||null,S.status?"error":"abort",S,o,s)}},g(S,o)===!1)return S.abort(),y(null,"abort",S,o,s),S;if(o.xhrFields)for(r in o.xhrFields)S[r]=o.xhrFields[r];var N="async"in o?o.async:!0;S.open(o.type,o.url,N,o.username,o.password);for(r in p)T.apply(S,p[r]);return o.timeout>0&&(C=setTimeout(function(){S.onreadystatechange=b,S.abort(),y(null,"timeout",S,o,s)},o.timeout)),S.send(o.data?o.data:null),S},t.get=function(){return t.ajax(S.apply(null,arguments))},t.post=function(){var e=S.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=S.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,i){if(!this.length)return this;var a,r=this,s=e.split(/\s/),u=S(e,n,i),f=u.success;return s.length>1&&(u.url=s[0],a=s[1]),u.success=function(e){r.html(a?t("
").html(e.replace(o,"")).find(a):e),f&&f.apply(r,arguments)},t.ajax(u),this};var T=encodeURIComponent;t.param=function(e,n){var i=[];return i.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(T(e)+"="+T(n))},C(i,e,n),i.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var e,n,i=[],r=function(t){return t.forEach?t.forEach(r):void i.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(i,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&r(t(o).val())}),i},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto); +'use strict'; + +(function($, Sortable) { + + var ENUMS = { + COLOR : { + EMPTY: 'transparent' + } + } + + $.extend($.fn, { + itemToggle: function() { + this.each(function() { + var $checkbox = $(this); + var item = $checkbox.parent(); + + var $injectedCheckbox = $('
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'); + + item.append($injectedCheckbox); + }); + }, + + itemCheckbox: function() { + this.each(function() { + var $checkbox = $(this); + var item = $checkbox.parent(); + + var $injectedCheckbox = $('
'); + + item.append($injectedCheckbox); + }); + }, + + itemSelect: function() { + this.each(function() { + var $select = $(this); + var $item = $select.parent(); + + $item.append('
'); + }); + }, + + itemDate: function() { + this.each(function() { + var $date = $(this); + var $item = $date.parent(); + + var $injectedDate = $('
'); + updateDate(); + + $item.append($injectedDate); + + $date.change(function() { + updateDate(); + }); + + function updateDate() { + $injectedDate.html($date.val()); + } + }); + }, + + itemTime: function() { + this.each(function() { + var $time = $(this); + var $item = $time.parent(); + + var $injectedTime = $('
'); + updateTime(); + + $item.append($injectedTime); + + $time.change(function() { + updateTime(); + }); + + function updateTime() { + $injectedTime.html($time.val()); + } + }); + }, + + itemRadio: function() { + this.each(function() { + var $radio = $(this); + var $item = $radio.parent(); + + var $injectedRadio = $('
'); + + $item.append($injectedRadio); + }); + }, + + itemColor: function(options){ + + var options = $.extend({}, { + sunny: false + }, options || {}); + + var layout = [ + [false , false , '#55FF00', '#AAFF55', false , '#FFFF55', '#FFFFAA', false , false ], + [false , '#AAFFAA', '#55FF55', '#00FF00', '#AAFF00', '#FFFF00', '#FFAA55', '#FFAAAA', false ], + ['#55FFAA', '#00FF55', '#00AA00', '#55AA00', '#AAAA55', '#AAAA00', '#FFAA00', '#FF5500', '#FF5555'], + ['#AAFFFF', '#00FFAA', '#00AA55', '#55AA55', '#005500', '#555500', '#AA5500', '#FF0000', '#FF0055'], + [false , '#55AAAA', '#00AAAA', '#005555', '#FFFFFF', '#000000', '#AA5555', '#AA0000', false ], + ['#55FFFF', '#00FFFF', '#00AAFF', '#0055AA', '#AAAAAA', '#555555', '#550000', '#AA0055', '#FF55AA'], + ['#55AAFF', '#0055FF', '#0000FF', '#0000AA', '#000055', '#550055', '#AA00AA', '#FF00AA', '#FFAAFF'], + [false , '#5555AA', '#5555FF', '#5500FF', '#5500AA', '#AA00FF', '#FF00FF', '#FF55FF', false ], + [false , false , false , '#AAAAFF', '#AA55FF', '#AA55AA', false , false , false ], + ]; + + var mappingSunny = {'000000': '000000','000055': '001e41','0000aa': '004387', + '0000ff': '0068ca','005500': '2b4a2c','005555': '27514f', + '0055aa': '16638d','0055ff': '007dce','00aa00': '5e9860', + '00aa55': '5c9b72','00aaaa': '57a5a2','00aaff': '4cb4db', + '00ff00': '8ee391','00ff55': '8ee69e','00ffaa': '8aebc0', + '00ffff': '84f5f1','550000': '4a161b','550055': '482748', + '5500aa': '40488a','5500ff': '2f6bcc','555500': '564e36', + '555555': '545454','5555aa': '4f6790','5555ff': '4180d0', + '55aa00': '759a64','55aa55': '759d76','55aaaa': '71a6a4', + '55aaff': '69b5dd','55ff00': '9ee594','55ff55': '9de7a0', + '55ffaa': '9becc2','55ffff': '95f6f2','aa0000': '99353f', + 'aa0055': '983e5a','aa00aa': '955694','aa00ff': '8f74d2', + 'aa5500': '9d5b4d','aa5555': '9d6064','aa55aa': '9a7099', + 'aa55ff': '9587d5','aaaa00': 'afa072','aaaa55': 'aea382', + 'aaaaaa': 'ababab','ffffff': 'ffffff','aaaaff': 'a7bae2', + 'aaff00': 'c9e89d','aaff55': 'c9eaa7','aaffaa': 'c7f0c8', + 'aaffff': 'c3f9f7','ff0000': 'e35462','ff0055': 'e25874', + 'ff00aa': 'e16aa3','ff00ff': 'de83dc','ff5500': 'e66e6b', + 'ff5555': 'e6727c','ff55aa': 'e37fa7','ff55ff': 'e194df', + 'ffaa00': 'f1aa86','ffaa55': 'f1ad93','ffaaaa': 'efb5b8', + 'ffaaff': 'ecc3eb','ffff00': 'ffeeab','ffff55': 'fff1b5', + 'ffffaa': 'fff6d3'}; + + var mappingNormal = {'000000': '000000','001e41': '000055','004387': '0000aa', + '0068ca': '0000ff','2b4a2c': '005500','27514f': '005555', + '16638d': '0055aa','007dce': '0055ff','5e9860': '00aa00', + '5c9b72': '00aa55','57a5a2': '00aaaa','4cb4db': '00aaff', + '8ee391': '00ff00','8ee69e': '00ff55','8aebc0': '00ffaa', + '84f5f1': '00ffff','4a161b': '550000','482748': '550055', + '40488a': '5500aa','2f6bcc': '5500ff','564e36': '555500', + '545454': '555555','4f6790': '5555aa','4180d0': '5555ff', + '759a64': '55aa00','759d76': '55aa55','71a6a4': '55aaaa', + '69b5dd': '55aaff','9ee594': '55ff00','9de7a0': '55ff55', + '9becc2': '55ffaa','95f6f2': '55ffff','99353f': 'aa0000', + '983e5a': 'aa0055','955694': 'aa00aa','8f74d2': 'aa00ff', + '9d5b4d': 'aa5500','9d6064': 'aa5555','9a7099': 'aa55aa', + '9587d5': 'aa55ff','afa072': 'aaaa00','aea382': 'aaaa55', + 'ababab': 'aaaaaa','ffffff': 'ffffff','a7bae2': 'aaaaff', + 'c9e89d': 'aaff00','c9eaa7': 'aaff55','c7f0c8': 'aaffaa', + 'c3f9f7': 'aaffff','e35462': 'ff0000','e25874': 'ff0055', + 'e16aa3': 'ff00aa','de83dc': 'ff00ff','e66e6b': 'ff5500', + 'e6727c': 'ff5555','e37fa7': 'ff55aa','e194df': 'ff55ff', + 'f1aa86': 'ffaa00','f1ad93': 'ffaa55','efb5b8': 'ffaaaa', + 'ecc3eb': 'ffaaff','ffeeab': 'ffff00','fff1b5': 'ffff55', + 'fff6d3': 'ffffaa'}; + + this.each(function() { + var $color = $(this); + var $item = $color.parent(); + var grid = ''; + var itemWidth = 100 / layout[0].length; + var itemHeight = 100 / layout.length; + var boxHeight = itemWidth * layout.length; + + for(var i = 0; i < layout.length; i++) { + for(var j = 0; j < layout[i].length; j++) { + + var color = layout[i][j] || ENUMS.COLOR.EMPTY; + var selectable = (color !== ENUMS.COLOR.EMPTY ? ' selectable' : ''); + + var roundedTL = (i === 0 && j === 0) + || i === 0 && !layout[i][j - 1] + || !layout[i][j - 1] && !layout[i -1][j] + ? ' rounded-tl' : ''; + + var roundedTR = i === 0 && !layout[i][j + 1] + || !layout[i][j + 1] && !layout[i -1][j] + ? ' rounded-tr ' : ''; + + var roundedBL = (i === layout.length - 1 && j === 0) + || i === layout.length - 1 && !layout[i][j - 1] + || !layout[i][j - 1] && !layout[i + 1][j] + ? ' rounded-bl' : ''; + + var roundedBR = i === layout.length - 1 && !layout[i][j + 1] + || !layout[i][j + 1] && !layout[i + 1][j] + ? ' rounded-br' : ''; + + if(options.sunny && color !== ENUMS.COLOR.EMPTY) { + color = '#' + mappingSunny[color.replace('#', '').toLowerCase()]; + } + + grid += '' + + ''; + } + } + + var $injectedColor = $('
' + + '' + + '
' + + '
' + + grid + + '
' + + '
' + + '
'); + $item.append($injectedColor); + + var $valueDisplay = $injectedColor.find('.value'); + + $color.on('click', function(ev) { + $item.find('.color-box-wrap').toggleClass('show'); + }); + + $color.on('change', function(ev) { + var value = $(this).val().replace(/^0x/, '').toLowerCase(); + if(options.sunny) { + value = mappingSunny[value]; + } + $valueDisplay.css('background-color', '#' + value); + }); + + $item.find('.color-box.selectable').on('click', function(ev) { + ev.preventDefault(); + + var value = $(this).data('value').toLowerCase(); + if(options.sunny) { + $color.val('0x' + mappingNormal[value.replace(/^0x/, '')]).trigger('change'); + } else { + $color.val(value).trigger('change'); + } + $valueDisplay.css('background-color', value.replace(/^0x/, '#')); + $item.find('.color-box-wrap').removeClass('show'); + }) + + }); + }, + + tab: function() { + this.each(function() { + var $tab = $(this); + + $tab.click(function() { + var $current = $(this); + var name = $current.attr('name'); + + $('a[name=' + name + ']').each(function(){ + $(this).removeClass('active'); + }); + + $current.addClass('active'); + }); + }); + }, + + itemSlider: function() { + this.each(function() { + var $slider = $(this); + var name = $slider.attr('name'); + var $input = $('input[name=' + name + '][class=item-input]'); + + $slider.on('input', function() { + var $current = $(this); + $input.val($current.val()); + }); + + $input.change(function() { + var $current = $(this); + $slider.val($current.val()); + }); + }); + }, + + itemDraggableList: function() { + this.each(function() { + var $handlebar = '
' + + '
' + + '
' + + '
' + + '
'; + + $(this).children('label').append($handlebar); + + Sortable.create(this, { + handle: '.item-draggable-handle' + }); + }); + }, + + itemDynamicList: function() { + this.each(function() { + var $list = $(this); + + $list.children('label').each(function() { + var $deleteButton = $('
'); + + $deleteButton.click(function() { + $(this).parent().remove(); + }); + + $(this).append($deleteButton); + }); + + var $addButton = $('
Add one more...
'); + + $list.append($addButton); + + $addButton.click(function() { + var $inbox = $('
' + + '
' + + '' + + '
' + + '
'); + + $inbox.insertBefore($list.children().last()); + + var $input = $inbox.find('input'); + $input.focus(); + + $input.keypress(function(e) { + var key = e.which; + if (key === 13) { + stopEditing($input, $inbox); + } + }); + + $input.focusout(function() { + stopEditing($input, $inbox); + }); + + function stopEditing(input, inbox) { + var text = input.val(); + inbox.html(text); + + var deletebutton = $('
'); + + deletebutton.click(function(){ + $(this).parent().remove(); + }); + + inbox.append(deletebutton); + } + }); + }); + } + }); + + $(function() { + $('.item-toggle').itemToggle(); + $('.item-checkbox').itemCheckbox(); + $('.item-select').itemSelect(); + $('.item-date').itemDate(); + $('.item-time').itemTime(); + $('.item-radio').itemRadio(); + $('.item-color-normal').itemColor({sunny: false}); + $('.item-color-sunny').itemColor({sunny: true}); + $('.tab-button').tab(); + $('.item-slider').itemSlider(); + $('.item-draggable-list').itemDraggableList(); + $('.item-dynamic-list').itemDynamicList(); + }); +}(Zepto, Sortable)); diff --git a/vendor/pebble-slate/dist/js/slate.min.js b/vendor/pebble-slate/dist/js/slate.min.js new file mode 100644 index 0000000..5ccd17e --- /dev/null +++ b/vendor/pebble-slate/dist/js/slate.min.js @@ -0,0 +1,2 @@ +!function(t){"use strict";"function"==typeof define&&define.amd?define(t):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t():"undefined"!=typeof Package?Sortable=t():window.Sortable=t()}(function(){"use strict";function t(t,e){this.el=t,this.options=e=v({},e),t[P]=this;var i={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(t.nodeName)?"li":">*",ghostClass:"sortable-ghost",ignore:"a, img",filter:null,animation:0,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0};for(var a in i)!(a in e)&&(e[a]=i[a]);var o=e.group;o&&"object"==typeof o||(o=e.group={name:o}),["pull","put"].forEach(function(t){t in o||(o[t]=!0)}),e.groups=" "+o.name+(o.put.join?" "+o.put.join(" "):"")+" ";for(var s in this)"_"===s.charAt(0)&&(this[s]=n(this,this[s]));r(t,"mousedown",this._onTapStart),r(t,"touchstart",this._onTapStart),r(t,"dragover",this),r(t,"dragenter",this),z.push(this._onDragOver),e.store&&this.sort(e.store.get(this))}function e(t){b&&b.state!==t&&(c(b,"display",t?"none":""),!t&&b.state&&x.insertBefore(b,g),b.state=t)}function n(t,e){var n=$.call(arguments,2);return e.bind?e.bind.apply(e,[t].concat(n)):function(){return e.apply(t,n.concat($.call(arguments)))}}function i(t,e,n){if(t){n=n||k,e=e.split(".");var i=e.shift().toUpperCase(),a=new RegExp("\\s("+e.join("|")+")\\s","g");do if(">*"===i&&t.parentNode===n||(""===i||t.nodeName.toUpperCase()==i)&&(!e.length||((" "+t.className+" ").match(a)||[]).length==e.length))return t;while(t!==n&&(t=t.parentNode))}return null}function a(t){t.dataTransfer.dropEffect="move",t.preventDefault()}function r(t,e,n){t.addEventListener(e,n,!1)}function o(t,e,n){t.removeEventListener(e,n,!1)}function s(t,e,n){if(t)if(t.classList)t.classList[n?"add":"remove"](e);else{var i=(" "+t.className+" ").replace(O," ").replace(" "+e+" "," ");t.className=(i+(n?" "+e:"")).replace(O," ")}}function c(t,e,n){var i=t&&t.style;if(i){if(void 0===n)return k.defaultView&&k.defaultView.getComputedStyle?n=k.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in i||(e="-webkit-"+e),i[e]=n+("string"==typeof n?"":"px")}}function f(t,e,n){if(t){var i=t.getElementsByTagName(e),a=0,r=i.length;if(n)for(;r>a;a++)n(i[a],a);return i}return[]}function l(t){t.draggable=!1}function u(){B=!1}function h(t,e){var n=t.lastElementChild,i=n.getBoundingClientRect();return e.clientY-(i.top+i.height)>5&&n}function d(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,i=0;n--;)i+=e.charCodeAt(n);return i.toString(36)}function p(t){for(var e=0;t&&(t=t.previousElementSibling);)"TEMPLATE"!==t.nodeName.toUpperCase()&&e++;return e}function m(t,e){var n,i;return function(){void 0===n&&(n=arguments,i=this,setTimeout(function(){1===n.length?t.call(i,n[0]):t.apply(i,n),n=void 0},e))}}function v(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var g,y,b,x,A,w,F,E,C,S,T,D,_,N,j={},O=/\s+/g,P="Sortable"+(new Date).getTime(),L=window,k=L.document,R=L.parseInt,M=!!("draggable"in k.createElement("div")),B=!1,Z=function(t,e,n,i,a,r,o){var s=k.createEvent("Event"),c=(t||e[P]).options,f="on"+n.charAt(0).toUpperCase()+n.substr(1);s.initEvent(n,!0,!0),s.item=i||e,s.from=a||e,s.clone=b,s.oldIndex=r,s.newIndex=o,c[f]&&c[f].call(t,s),e.dispatchEvent(s)},I=Math.abs,$=[].slice,z=[],Y=m(function(t,e,n){if(n&&e.scroll){var i,a,r,o,s=e.scrollSensitivity,c=e.scrollSpeed,f=t.clientX,l=t.clientY,u=window.innerWidth,h=window.innerHeight;if(F!==n&&(w=e.scroll,F=n,w===!0)){w=n;do if(w.offsetWidth=u-f)-(s>=f),o=(s>=h-l)-(s>=l),(r||o)&&(i=L)),(j.vx!==r||j.vy!==o||j.el!==i)&&(j.el=i,j.vx=r,j.vy=o,clearInterval(j.pid),i&&(j.pid=setInterval(function(){i===L?L.scrollTo(L.pageXOffset+r*c,L.pageYOffset+o*c):(o&&(i.scrollTop+=o*c),r&&(i.scrollLeft+=r*c))},24)))}},30);return t.prototype={constructor:t,_onTapStart:function(t){var e=this,n=this.el,a=this.options,r=t.type,o=t.touches&&t.touches[0],s=(o||t).target,c=s,f=a.filter;if(!("mousedown"===r&&0!==t.button||a.disabled)&&(s=i(s,a.draggable,n))){if(S=p(s),"function"==typeof f){if(f.call(this,t,s,this))return Z(e,c,"filter",s,n,S),void t.preventDefault()}else if(f&&(f=f.split(",").some(function(t){return t=i(c,t.trim(),n),t?(Z(e,t,"filter",s,n,S),!0):void 0})))return void t.preventDefault();(!a.handle||i(c,a.handle,n))&&this._prepareDragStart(t,o,s)}},_prepareDragStart:function(t,e,n){var i,a=this,o=a.el,s=a.options,c=o.ownerDocument;n&&!g&&n.parentNode===o&&(_=t,x=o,g=n,A=g.nextSibling,D=s.group,i=function(){a._disableDelayedDrag(),g.draggable=!0,s.ignore.split(",").forEach(function(t){f(g,t.trim(),l)}),a._triggerDragStart(e)},r(c,"mouseup",a._onDrop),r(c,"touchend",a._onDrop),r(c,"touchcancel",a._onDrop),s.delay?(r(c,"mousemove",a._disableDelayedDrag),r(c,"touchmove",a._disableDelayedDrag),a._dragStartTimer=setTimeout(i,s.delay)):i())},_disableDelayedDrag:function(){var t=this.el.ownerDocument;clearTimeout(this._dragStartTimer),o(t,"mousemove",this._disableDelayedDrag),o(t,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(t){t?(_={target:g,clientX:t.clientX,clientY:t.clientY},this._onDragStart(_,"touch")):M?(r(g,"dragend",this),r(x,"dragstart",this._onDragStart)):this._onDragStart(_,!0);try{k.selection?k.selection.empty():window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(){x&&g&&(s(g,this.options.ghostClass,!0),t.active=this,Z(this,x,"start",g,x,S))},_emulateDragOver:function(){if(N){c(y,"display","none");var t=k.elementFromPoint(N.clientX,N.clientY),e=t,n=" "+this.options.group.name,i=z.length;if(e)do{if(e[P]&&e[P].options.groups.indexOf(n)>-1){for(;i--;)z[i]({clientX:N.clientX,clientY:N.clientY,target:t,rootEl:e});break}t=e}while(e=e.parentNode);c(y,"display","")}},_onTouchMove:function(t){if(_){var e=t.touches?t.touches[0]:t,n=e.clientX-_.clientX,i=e.clientY-_.clientY,a=t.touches?"translate3d("+n+"px,"+i+"px,0)":"translate("+n+"px,"+i+"px)";N=e,c(y,"webkitTransform",a),c(y,"mozTransform",a),c(y,"msTransform",a),c(y,"transform",a),t.preventDefault()}},_onDragStart:function(t,e){var n=t.dataTransfer,i=this.options;if(this._offUpEvents(),"clone"==D.pull&&(b=g.cloneNode(!0),c(b,"display","none"),x.insertBefore(b,g)),e){var a,o=g.getBoundingClientRect(),s=c(g);y=g.cloneNode(!0),c(y,"top",o.top-R(s.marginTop,10)),c(y,"left",o.left-R(s.marginLeft,10)),c(y,"width",o.width),c(y,"height",o.height),c(y,"opacity","0.8"),c(y,"position","fixed"),c(y,"zIndex","100000"),x.appendChild(y),a=y.getBoundingClientRect(),c(y,"width",2*o.width-a.width),c(y,"height",2*o.height-a.height),"touch"===e?(r(k,"touchmove",this._onTouchMove),r(k,"touchend",this._onDrop),r(k,"touchcancel",this._onDrop)):(r(k,"mousemove",this._onTouchMove),r(k,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,150)}else n&&(n.effectAllowed="move",i.setData&&i.setData.call(this,n,g)),r(k,"drop",this);setTimeout(this._dragStarted,0)},_onDragOver:function(t){var n,a,r,o=this.el,s=this.options,f=s.group,l=f.put,d=D===f,p=s.sort;if(void 0!==t.preventDefault&&(t.preventDefault(),!s.dragoverBubble&&t.stopPropagation()),D&&!s.disabled&&(d?p||(r=!x.contains(g)):D.pull&&l&&(D.name===f.name||l.indexOf&&~l.indexOf(D.name)))&&(void 0===t.rootEl||t.rootEl===this.el)){if(Y(t,s,this.el),B)return;if(n=i(t.target,s.draggable,o),a=g.getBoundingClientRect(),r)return e(!0),void(b||A?x.insertBefore(g,b||A):p||x.appendChild(g));if(0===o.children.length||o.children[0]===y||o===t.target&&(n=h(o,t))){if(n){if(n.animated)return;v=n.getBoundingClientRect()}e(d),o.appendChild(g),this._animate(a,g),n&&this._animate(v,n)}else if(n&&!n.animated&&n!==g&&void 0!==n.parentNode[P]){E!==n&&(E=n,C=c(n));var m,v=n.getBoundingClientRect(),w=v.right-v.left,F=v.bottom-v.top,S=/left|right|inline/.test(C.cssFloat+C.display),T=n.offsetWidth>g.offsetWidth,_=n.offsetHeight>g.offsetHeight,N=(S?(t.clientX-v.left)/w:(t.clientY-v.top)/F)>.5,j=n.nextElementSibling;B=!0,setTimeout(u,30),e(d),m=S?n.previousElementSibling===g&&!T||N&&T:j!==g&&!_||N&&_,m&&!j?o.appendChild(g):n.parentNode.insertBefore(g,m?j:n),this._animate(a,g),this._animate(v,n)}}},_animate:function(t,e){var n=this.options.animation;if(n){var i=e.getBoundingClientRect();c(e,"transition","none"),c(e,"transform","translate3d("+(t.left-i.left)+"px,"+(t.top-i.top)+"px,0)"),e.offsetWidth,c(e,"transition","all "+n+"ms"),c(e,"transform","translate3d(0,0,0)"),clearTimeout(e.animated),e.animated=setTimeout(function(){c(e,"transition",""),c(e,"transform",""),e.animated=!1},n)}},_offUpEvents:function(){var t=this.el.ownerDocument;o(k,"touchmove",this._onTouchMove),o(t,"mouseup",this._onDrop),o(t,"touchend",this._onDrop),o(t,"touchcancel",this._onDrop)},_onDrop:function(e){var n=this.el,i=this.options;clearInterval(this._loopId),clearInterval(j.pid),clearTimeout(this.dragStartTimer),o(k,"drop",this),o(k,"mousemove",this._onTouchMove),o(n,"dragstart",this._onDragStart),this._offUpEvents(),e&&(e.preventDefault(),!i.dropBubble&&e.stopPropagation(),y&&y.parentNode.removeChild(y),g&&(o(g,"dragend",this),l(g),s(g,this.options.ghostClass,!1),x!==g.parentNode?(T=p(g),Z(null,g.parentNode,"sort",g,x,S,T),Z(this,x,"sort",g,x,S,T),Z(null,g.parentNode,"add",g,x,S,T),Z(this,x,"remove",g,x,S,T)):(b&&b.parentNode.removeChild(b),g.nextSibling!==A&&(T=p(g),Z(this,x,"update",g,x,S,T),Z(this,x,"sort",g,x,S,T))),t.active&&Z(this,x,"end",g,x,S,T)),x=g=y=A=b=w=F=_=N=E=C=D=t.active=null,this.save())},handleEvent:function(t){var e=t.type;"dragover"===e||"dragenter"===e?g&&(this._onDragOver(t),a(t)):("drop"===e||"dragend"===e)&&this._onDrop(t)},toArray:function(){for(var t,e=[],n=this.el.children,a=0,r=n.length,o=this.options;r>a;a++)t=n[a],i(t,o.draggable,this.el)&&e.push(t.getAttribute(o.dataIdAttr)||d(t));return e},sort:function(t){var e={},n=this.el;this.toArray().forEach(function(t,a){var r=n.children[a];i(r,this.options.draggable,n)&&(e[t]=r)},this),t.forEach(function(t){e[t]&&(n.removeChild(e[t]),n.appendChild(e[t]))})},save:function(){var t=this.options.store;t&&t.set(this)},closest:function(t,e){return i(t,e||this.options.draggable,this.el)},option:function(t,e){var n=this.options;return void 0===e?n[t]:void(n[t]=e)},destroy:function(){var t=this.el;t[P]=null,o(t,"mousedown",this._onTapStart),o(t,"touchstart",this._onTapStart),o(t,"dragover",this),o(t,"dragenter",this),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),z.splice(z.indexOf(this._onDragOver),1),this._onDrop(),this.el=t=null}},t.utils={on:r,off:o,css:c,find:f,bind:n,is:function(t,e){return!!i(t,e,t)},extend:v,throttle:m,closest:i,toggleClass:s,index:p},t.version="1.2.0",t.create=function(e,n){return new t(e,n)},t});var Zepto=function(){function t(t){return null==t?String(t):q[U.call(t)]||"object"}function e(e){return"function"==t(e)}function n(t){return null!=t&&t==t.window}function i(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function a(e){return"object"==t(e)}function r(t){return a(t)&&!n(t)&&Object.getPrototypeOf(t)==Object.prototype}function o(t){return"number"==typeof t.length}function s(t){return _.call(t,function(t){return null!=t})}function c(t){return t.length>0?F.fn.concat.apply([],t):t}function f(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(t){return t in O?O[t]:O[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function u(t,e){return"number"!=typeof e||P[f(t)]?e:e+"px"}function h(t){var e,n;return j[t]||(e=N.createElement(t),N.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),j[t]=n),j[t]}function d(t){return"children"in t?D.call(t.children):F.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function p(t,e,n){for(w in e)n&&(r(e[w])||G(e[w]))?(r(e[w])&&!r(t[w])&&(t[w]={}),G(e[w])&&!G(t[w])&&(t[w]=[]),p(t[w],e[w],n)):e[w]!==A&&(t[w]=e[w])}function m(t,e){return null==e?F(t):F(t).filter(e)}function v(t,n,i,a){return e(n)?n.call(t,i,a):n}function g(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function y(t,e){var n=t.className||"",i=n&&n.baseVal!==A;return e===A?i?n.baseVal:n:void(i?n.baseVal=e:t.className=e)}function b(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?F.parseJSON(t):t):t}catch(e){return t}}function x(t,e){e(t);for(var n=0,i=t.childNodes.length;i>n;n++)x(t.childNodes[n],e)}var A,w,F,E,C,S,T=[],D=T.slice,_=T.filter,N=window.document,j={},O={},P={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},L=/^\s*<(\w+|!)[^>]*>/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,M=/^(?:body|html)$/i,B=/([A-Z])/g,Z=["val","css","html","text","data","width","height","offset"],I=["after","prepend","before","append"],$=N.createElement("table"),z=N.createElement("tr"),Y={tr:N.createElement("tbody"),tbody:$,thead:$,tfoot:$,td:z,th:z,"*":N.createElement("div")},H=/complete|loaded|interactive/,X=/^[\w-]*$/,q={},U=q.toString,V={},W=N.createElement("div"),J={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},G=Array.isArray||function(t){return t instanceof Array};return V.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,a=t.parentNode,r=!a;return r&&(a=W).appendChild(t),i=~V.qsa(a,e).indexOf(t),r&&W.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},S=function(t){return _.call(t,function(e,n){return t.indexOf(e)==n})},V.fragment=function(t,e,n){var i,a,o;return k.test(t)&&(i=F(N.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(R,"<$1>")),e===A&&(e=L.test(t)&&RegExp.$1),e in Y||(e="*"),o=Y[e],o.innerHTML=""+t,i=F.each(D.call(o.childNodes),function(){o.removeChild(this)})),r(n)&&(a=F(i),F.each(n,function(t,e){Z.indexOf(t)>-1?a[t](e):a.attr(t,e)})),i},V.Z=function(t,e){return t=t||[],t.__proto__=F.fn,t.selector=e||"",t},V.isZ=function(t){return t instanceof V.Z},V.init=function(t,n){var i;if(!t)return V.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&L.test(t))i=V.fragment(t,RegExp.$1,n),t=null;else{if(n!==A)return F(n).find(t);i=V.qsa(N,t)}else{if(e(t))return F(N).ready(t);if(V.isZ(t))return t;if(G(t))i=s(t);else if(a(t))i=[t],t=null;else if(L.test(t))i=V.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==A)return F(n).find(t);i=V.qsa(N,t)}}return V.Z(i,t)},F=function(t,e){return V.init(t,e)},F.extend=function(t){var e,n=D.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){p(t,n,e)}),t},V.qsa=function(t,e){var n,a="#"==e[0],r=!a&&"."==e[0],o=a||r?e.slice(1):e,s=X.test(o);return i(t)&&s&&a?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:D.call(s&&!a?r?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},F.contains=N.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},F.type=t,F.isFunction=e,F.isWindow=n,F.isArray=G,F.isPlainObject=r,F.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},F.inArray=function(t,e,n){return T.indexOf.call(e,t,n)},F.camelCase=C,F.trim=function(t){return null==t?"":String.prototype.trim.call(t)},F.uuid=0,F.support={},F.expr={},F.map=function(t,e){var n,i,a,r=[];if(o(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return T.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return e(t)?this.not(this.not(t)):F(_.call(this,function(e){return V.matches(e,t)}))},add:function(t,e){return F(S(this.concat(F(t,e))))},is:function(t){return this.length>0&&V.matches(this[0],t)},not:function(t){var n=[];if(e(t)&&t.call!==A)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):o(t)&&e(t.item)?D.call(t):F(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return F(n)},has:function(t){return this.filter(function(){return a(t)?F.contains(this,t):F(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!a(t)?t:F(t)},last:function(){var t=this[this.length-1];return t&&!a(t)?t:F(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?F(t).filter(function(){var t=this;return T.some.call(n,function(e){return F.contains(e,t)})}):1==this.length?F(V.qsa(this[0],t)):this.map(function(){return V.qsa(this,t)}):F()},closest:function(t,e){var n=this[0],a=!1;for("object"==typeof t&&(a=F(t));n&&!(a?a.indexOf(n)>=0:V.matches(n,t));)n=n!==e&&!i(n)&&n.parentNode;return F(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=F.map(n,function(t){return(t=t.parentNode)&&!i(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return m(e,t)},parent:function(t){return m(S(this.pluck("parentNode")),t)},children:function(t){return m(this.map(function(){return d(this)}),t)},contents:function(){return this.map(function(){return D.call(this.childNodes)})},siblings:function(t){return m(this.map(function(t,e){return _.call(d(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return F.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=h(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var n=e(t);if(this[0]&&!n)var i=F(t).get(0),a=i.parentNode||this.length>1;return this.each(function(e){F(this).wrapAll(n?t.call(this,e):a?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){F(this[0]).before(t=F(t));for(var e;(e=t.children()).length;)t=e.first();F(t).append(this)}return this},wrapInner:function(t){var n=e(t);return this.each(function(e){var i=F(this),a=i.contents(),r=n?t.call(this,e):t;a.length?a.wrapAll(r):i.append(r)})},unwrap:function(){return this.parent().each(function(){F(this).replaceWith(F(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=F(this);(t===A?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return F(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return F(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;F(this).empty().append(v(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=v(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this[0].textContent:null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(a(t))for(w in t)g(this,w,t[w]);else g(this,t,v(this,e,n,this.getAttribute(t)))}):this.length&&1===this[0].nodeType?!(n=this[0].getAttribute(t))&&t in this[0]?this[0][t]:n:A},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){g(this,t)},this)})},prop:function(t,e){return t=J[t]||t,1 in arguments?this.each(function(n){this[t]=v(this,e,n,this[t])}):this[0]&&this[0][t]},data:function(t,e){var n="data-"+t.replace(B,"-$1").toLowerCase(),i=1 in arguments?this.attr(n,e):this.attr(n);return null!==i?b(i):A},val:function(t){return 0 in arguments?this.each(function(e){this.value=v(this,t,e,this.value)}):this[0]&&(this[0].multiple?F(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var n=F(this),i=v(this,t,e,n.offset()),a=n.offsetParent().offset(),r={top:i.top-a.top,left:i.left-a.left};"static"==n.css("position")&&(r.position="relative"),n.css(r)});if(!this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(e,n){if(arguments.length<2){var i,a=this[0];if(!a)return;if(i=getComputedStyle(a,""),"string"==typeof e)return a.style[C(e)]||i.getPropertyValue(e);if(G(e)){var r={};return F.each(e,function(t,e){r[e]=a.style[C(e)]||i.getPropertyValue(e)}),r}}var o="";if("string"==t(e))n||0===n?o=f(e)+":"+u(e,n):this.each(function(){this.style.removeProperty(f(e))});else for(w in e)e[w]||0===e[w]?o+=f(w)+":"+u(w,e[w])+";":this.each(function(){this.style.removeProperty(f(w))});return this.each(function(){this.style.cssText+=";"+o})},index:function(t){return t?this.indexOf(F(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?T.some.call(this,function(t){return this.test(y(t))},l(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){E=[];var n=y(this),i=v(this,t,e,n);i.split(/\s+/g).forEach(function(t){F(this).hasClass(t)||E.push(t)},this),E.length&&y(this,n+(n?" ":"")+E.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===A)return y(this,"");E=y(this),v(this,t,e,E).split(/\s+/g).forEach(function(t){E=E.replace(l(t)," ")}),y(this,E.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var i=F(this),a=v(this,t,n,y(this));a.split(/\s+/g).forEach(function(t){(e===A?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===A?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===A?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=M.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(F(t).css("margin-top"))||0,n.left-=parseFloat(F(t).css("margin-left"))||0,i.top+=parseFloat(F(e[0]).css("border-top-width"))||0,i.left+=parseFloat(F(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||N.body;t&&!M.test(t.nodeName)&&"static"==F(t).css("position");)t=t.offsetParent;return t})}},F.fn.detach=F.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});F.fn[t]=function(a){var r,o=this[0];return a===A?n(o)?o["inner"+e]:i(o)?o.documentElement["scroll"+e]:(r=this.offset())&&r[t]:this.each(function(e){o=F(this),o.css(t,v(this,a,e,o[t]()))})}}),I.forEach(function(e,n){var i=n%2;F.fn[e]=function(){var e,a,r=F.map(arguments,function(n){return e=t(n),"object"==e||"array"==e||null==n?n:V.fragment(n)}),o=this.length>1;return r.length<1?this:this.each(function(t,e){a=i?e:e.parentNode,e=0==n?e.nextSibling:1==n?e.firstChild:2==n?e:null;var s=F.contains(N.documentElement,a);r.forEach(function(t){if(o)t=t.cloneNode(!0);else if(!a)return F(t).remove();a.insertBefore(t,e),s&&x(t,function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},F.fn[i?e+"To":"insert"+(n?"Before":"After")]=function(t){return F(t)[e](this),this}}),V.Z.prototype=F.fn,V.uniq=S,V.deserializeValue=b,F.zepto=V,F}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function e(t){return t._zid||(t._zid=h++)}function n(t,n,r,o){if(n=i(n),n.ns)var s=a(n.ns);return(v[e(t)]||[]).filter(function(t){return!(!t||n.e&&t.e!=n.e||n.ns&&!s.test(t.ns)||r&&e(t.fn)!==e(r)||o&&t.sel!=o)})}function i(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function a(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function r(t,e){return t.del&&!y&&t.e in b||!!e}function o(t){return x[t]||y&&b[t]||t}function s(n,a,s,c,l,h,d){var p=e(n),m=v[p]||(v[p]=[]);a.split(/\s/).forEach(function(e){if("ready"==e)return t(document).ready(s);var a=i(e);a.fn=s,a.sel=l,a.e in x&&(s=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=h;var p=h||s;a.proxy=function(t){if(t=f(t),!t.isImmediatePropagationStopped()){t.data=c;var e=p.apply(n,t._args==u?[t]:[t].concat(t._args));return e===!1&&(t.preventDefault(),t.stopPropagation()),e}},a.i=m.length,m.push(a),"addEventListener"in n&&n.addEventListener(o(a.e),a.proxy,r(a,d))})}function c(t,i,a,s,c){var f=e(t);(i||"").split(/\s/).forEach(function(e){n(t,e,a,s).forEach(function(e){delete v[f][e.i],"removeEventListener"in t&&t.removeEventListener(o(e.e),e.proxy,r(e,c))})})}function f(e,n){return(n||!e.isDefaultPrevented)&&(n||(n=e),t.each(E,function(t,i){var a=n[t];e[t]=function(){return this[i]=A,a&&a.apply(n,arguments)},e[i]=w}),(n.defaultPrevented!==u?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(e.isDefaultPrevented=A)),e}function l(t){var e,n={originalEvent:t};for(e in t)F.test(e)||t[e]===u||(n[e]=t[e]);return f(n,t)}var u,h=1,d=Array.prototype.slice,p=t.isFunction,m=function(t){return"string"==typeof t},v={},g={},y="onfocusin"in window,b={focus:"focusin",blur:"focusout"},x={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",t.event={add:s,remove:c},t.proxy=function(n,i){var a=2 in arguments&&d.call(arguments,2);if(p(n)){var r=function(){return n.apply(i,a?a.concat(d.call(arguments)):arguments)};return r._zid=e(n),r}if(m(i))return a?(a.unshift(n[i],n),t.proxy.apply(null,a)):t.proxy(n[i],n);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var A=function(){return!0},w=function(){return!1},F=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,n,i,a,r){var o,f,h=this;return e&&!m(e)?(t.each(e,function(t,e){h.on(t,n,i,e,r)}),h):(m(n)||p(a)||a===!1||(a=i,i=n,n=u),(p(i)||i===!1)&&(a=i,i=u),a===!1&&(a=w),h.each(function(u,h){r&&(o=function(t){return c(h,t.type,a),a.apply(this,arguments)}),n&&(f=function(e){var i,r=t(e.target).closest(n,h).get(0);return r&&r!==h?(i=t.extend(l(e),{currentTarget:r,liveFired:h}),(o||a).apply(r,[i].concat(d.call(arguments,1)))):void 0}),s(h,e,a,i,n,f||o)}))},t.fn.off=function(e,n,i){var a=this;return e&&!m(e)?(t.each(e,function(t,e){a.off(t,n,e)}),a):(m(n)||p(i)||i===!1||(i=n,n=u),i===!1&&(i=w),a.each(function(){c(this,e,i,n)}))},t.fn.trigger=function(e,n){return e=m(e)||t.isPlainObject(e)?t.Event(e):f(e),e._args=n,this.each(function(){e.type in b&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,i){var a,r;return this.each(function(o,s){a=l(m(e)?t.Event(e):e),a._args=i,a.target=s,t.each(n(s,e.type||e),function(t,e){return r=e.proxy(a),a.isImmediatePropagationStopped()?!1:void 0})}),r},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){m(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||"Events"),i=!0;if(e)for(var a in e)"bubbles"==a?i=!!e[a]:n[a]=e[a];return n.initEvent(t,i,!0),f(n)}}(Zepto),function(t){function e(e,n,i){var a=t.Event(n);return t(e).trigger(a,i),!a.isDefaultPrevented()}function n(t,n,i,a){return t.global?e(n||y,i,a):void 0}function i(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}function a(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}function r(t,e){var i=e.context;return e.beforeSend.call(i,t,e)===!1||n(e,i,"ajaxBeforeSend",[t,e])===!1?!1:void n(e,i,"ajaxSend",[t,e])}function o(t,e,i,a){var r=i.context,o="success";i.success.call(r,t,o,e),a&&a.resolveWith(r,[t,o,e]),n(i,r,"ajaxSuccess",[e,i,t]),c(o,e,i)}function s(t,e,i,a,r){var o=a.context;a.error.call(o,i,e,t),r&&r.rejectWith(o,[i,e,t]),n(a,o,"ajaxError",[i,a,t||e]),c(e,i,a)}function c(t,e,i){var r=i.context;i.complete.call(r,e,t),n(i,r,"ajaxComplete",[e,i]),a(i)}function f(){}function l(t){return t&&(t=t.split(";",2)[0]),t&&(t==F?"html":t==w?"json":x.test(t)?"script":A.test(t)&&"xml")||"text"}function u(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function h(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=u(e.url,e.data),e.data=void 0)}function d(e,n,i,a){return t.isFunction(n)&&(a=i,i=n,n=void 0),t.isFunction(i)||(a=i,i=void 0),{url:e,data:n,success:i,dataType:a}}function p(e,n,i,a){var r,o=t.isArray(n),s=t.isPlainObject(n);t.each(n,function(n,c){r=t.type(c),a&&(n=i?a:a+"["+(s||"object"==r||"array"==r?n:"")+"]"),!a&&o?e.add(c.name,c.value):"array"==r||!i&&"object"==r?p(e,c,i,n):e.add(n,c)})}var m,v,g=0,y=window.document,b=/)<[^<]*)*<\/script>/gi,x=/^(?:text|application)\/javascript/i,A=/^(?:text|application)\/xml/i,w="application/json",F="text/html",E=/^\s*$/,C=y.createElement("a");C.href=window.location.href,t.active=0,t.ajaxJSONP=function(e,n){if(!("type"in e))return t.ajax(e);var i,a,c=e.jsonpCallback,f=(t.isFunction(c)?c():c)||"jsonp"+ ++g,l=y.createElement("script"),u=window[f],h=function(e){t(l).triggerHandler("error",e||"abort")},d={abort:h};return n&&n.promise(d),t(l).on("load error",function(r,c){clearTimeout(a),t(l).off().remove(),"error"!=r.type&&i?o(i[0],d,e,n):s(null,c||"error",d,e,n),window[f]=u,i&&t.isFunction(u)&&u(i[0]),u=i=void 0}),r(d,e)===!1?(h("abort"),d):(window[f]=function(){i=arguments},l.src=e.url.replace(/\?(.+)=\?/,"?$1="+f),y.head.appendChild(l),e.timeout>0&&(a=setTimeout(function(){h("timeout")},e.timeout)),d)},t.ajaxSettings={ +type:"GET",beforeSend:f,success:f,error:f,complete:f,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:w,xml:"application/xml, text/xml",html:F,html:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var n,a=t.extend({},e||{}),c=t.Deferred&&t.Deferred();for(m in t.ajaxSettings)void 0===a[m]&&(a[m]=t.ajaxSettings[m]);i(a),a.crossDomain||(n=y.createElement("a"),n.href=a.url,n.href=n.href,a.crossDomain=C.protocol+"//"+C.host!=n.protocol+"//"+n.host),a.url||(a.url=window.location.toString()),h(a);var d=a.dataType,p=/\?.+=\?/.test(a.url);if(p&&(d="jsonp"),a.cache!==!1&&(e&&e.cache===!0||"script"!=d&&"jsonp"!=d)||(a.url=u(a.url,"_="+Date.now())),"jsonp"==d)return p||(a.url=u(a.url,a.jsonp?a.jsonp+"=?":a.jsonp===!1?"":"callback=?")),t.ajaxJSONP(a,c);var g,b=a.accepts[d],x={},A=function(t,e){x[t.toLowerCase()]=[t,e]},w=/^([\w-]+:)\/\//.test(a.url)?RegExp.$1:window.location.protocol,F=a.xhr(),S=F.setRequestHeader;if(c&&c.promise(F),a.crossDomain||A("X-Requested-With","XMLHttpRequest"),A("Accept",b||"*/*"),(b=a.mimeType||b)&&(b.indexOf(",")>-1&&(b=b.split(",",2)[0]),F.overrideMimeType&&F.overrideMimeType(b)),(a.contentType||a.contentType!==!1&&a.data&&"GET"!=a.type.toUpperCase())&&A("Content-Type",a.contentType||"application/x-www-form-urlencoded"),a.headers)for(v in a.headers)A(v,a.headers[v]);if(F.setRequestHeader=A,F.onreadystatechange=function(){if(4==F.readyState){F.onreadystatechange=f,clearTimeout(g);var e,n=!1;if(F.status>=200&&F.status<300||304==F.status||0==F.status&&"file:"==w){d=d||l(a.mimeType||F.getResponseHeader("content-type")),e=F.responseText;try{"script"==d?(1,eval)(e):"xml"==d?e=F.responseXML:"json"==d&&(e=E.test(e)?null:t.parseJSON(e))}catch(i){n=i}n?s(n,"parsererror",F,a,c):o(e,F,a,c)}else s(F.statusText||null,F.status?"error":"abort",F,a,c)}},r(F,a)===!1)return F.abort(),s(null,"abort",F,a,c),F;if(a.xhrFields)for(v in a.xhrFields)F[v]=a.xhrFields[v];var T="async"in a?a.async:!0;F.open(a.type,a.url,T,a.username,a.password);for(v in x)S.apply(F,x[v]);return a.timeout>0&&(g=setTimeout(function(){F.onreadystatechange=f,F.abort(),s(null,"timeout",F,a,c)},a.timeout)),F.send(a.data?a.data:null),F},t.get=function(){return t.ajax(d.apply(null,arguments))},t.post=function(){var e=d.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=d.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,i){if(!this.length)return this;var a,r=this,o=e.split(/\s/),s=d(e,n,i),c=s.success;return o.length>1&&(s.url=o[0],a=o[1]),s.success=function(e){r.html(a?t("
").html(e.replace(b,"")).find(a):e),c&&c.apply(r,arguments)},t.ajax(s),this};var S=encodeURIComponent;t.param=function(e,n){var i=[];return i.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(S(e)+"="+S(n))},p(i,e,n),i.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var e,n,i=[],a=function(t){return t.forEach?t.forEach(a):void i.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(i,r){n=r.type,e=r.name,e&&"fieldset"!=r.nodeName.toLowerCase()&&!r.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||r.checked)&&a(t(r).val())}),i},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto),function(t,e){var n={COLOR:{EMPTY:"transparent"}};t.extend(t.fn,{itemToggle:function(){this.each(function(){var e=t(this),n=e.parent(),i=t('
');n.append(i)})},itemCheckbox:function(){this.each(function(){var e=t(this),n=e.parent(),i=t('
');n.append(i)})},itemSelect:function(){this.each(function(){var e=t(this),n=e.parent();n.append('
')})},itemDate:function(){this.each(function(){function e(){a.html(n.val())}var n=t(this),i=n.parent(),a=t('
');e(),i.append(a),n.change(function(){e()})})},itemTime:function(){this.each(function(){function e(){a.html(n.val())}var n=t(this),i=n.parent(),a=t('
');e(),i.append(a),n.change(function(){e()})})},itemRadio:function(){this.each(function(){var e=t(this),n=e.parent(),i=t('
');n.append(i)})},itemColor:function(e){var e=t.extend({},{sunny:!1},e||{}),i=[[!1,!1,"#55FF00","#AAFF55",!1,"#FFFF55","#FFFFAA",!1,!1],[!1,"#AAFFAA","#55FF55","#00FF00","#AAFF00","#FFFF00","#FFAA55","#FFAAAA",!1],["#55FFAA","#00FF55","#00AA00","#55AA00","#AAAA55","#AAAA00","#FFAA00","#FF5500","#FF5555"],["#AAFFFF","#00FFAA","#00AA55","#55AA55","#005500","#555500","#AA5500","#FF0000","#FF0055"],[!1,"#55AAAA","#00AAAA","#005555","#FFFFFF","#000000","#AA5555","#AA0000",!1],["#55FFFF","#00FFFF","#00AAFF","#0055AA","#AAAAAA","#555555","#550000","#AA0055","#FF55AA"],["#55AAFF","#0055FF","#0000FF","#0000AA","#000055","#550055","#AA00AA","#FF00AA","#FFAAFF"],[!1,"#5555AA","#5555FF","#5500FF","#5500AA","#AA00FF","#FF00FF","#FF55FF",!1],[!1,!1,!1,"#AAAAFF","#AA55FF","#AA55AA",!1,!1,!1]],a={"000000":"000000","000055":"001e41","0000aa":"004387","0000ff":"0068ca","005500":"2b4a2c","005555":"27514f","0055aa":"16638d","0055ff":"007dce","00aa00":"5e9860","00aa55":"5c9b72","00aaaa":"57a5a2","00aaff":"4cb4db","00ff00":"8ee391","00ff55":"8ee69e","00ffaa":"8aebc0","00ffff":"84f5f1",550000:"4a161b",550055:"482748","5500aa":"40488a","5500ff":"2f6bcc",555500:"564e36",555555:"545454","5555aa":"4f6790","5555ff":"4180d0","55aa00":"759a64","55aa55":"759d76","55aaaa":"71a6a4","55aaff":"69b5dd","55ff00":"9ee594","55ff55":"9de7a0","55ffaa":"9becc2","55ffff":"95f6f2",aa0000:"99353f",aa0055:"983e5a",aa00aa:"955694",aa00ff:"8f74d2",aa5500:"9d5b4d",aa5555:"9d6064",aa55aa:"9a7099",aa55ff:"9587d5",aaaa00:"afa072",aaaa55:"aea382",aaaaaa:"ababab",ffffff:"ffffff",aaaaff:"a7bae2",aaff00:"c9e89d",aaff55:"c9eaa7",aaffaa:"c7f0c8",aaffff:"c3f9f7",ff0000:"e35462",ff0055:"e25874",ff00aa:"e16aa3",ff00ff:"de83dc",ff5500:"e66e6b",ff5555:"e6727c",ff55aa:"e37fa7",ff55ff:"e194df",ffaa00:"f1aa86",ffaa55:"f1ad93",ffaaaa:"efb5b8",ffaaff:"ecc3eb",ffff00:"ffeeab",ffff55:"fff1b5",ffffaa:"fff6d3"},r={"000000":"000000","001e41":"000055","004387":"0000aa","0068ca":"0000ff","2b4a2c":"005500","27514f":"005555","16638d":"0055aa","007dce":"0055ff","5e9860":"00aa00","5c9b72":"00aa55","57a5a2":"00aaaa","4cb4db":"00aaff","8ee391":"00ff00","8ee69e":"00ff55","8aebc0":"00ffaa","84f5f1":"00ffff","4a161b":"550000",482748:"550055","40488a":"5500aa","2f6bcc":"5500ff","564e36":"555500",545454:"555555","4f6790":"5555aa","4180d0":"5555ff","759a64":"55aa00","759d76":"55aa55","71a6a4":"55aaaa","69b5dd":"55aaff","9ee594":"55ff00","9de7a0":"55ff55","9becc2":"55ffaa","95f6f2":"55ffff","99353f":"aa0000","983e5a":"aa0055",955694:"aa00aa","8f74d2":"aa00ff","9d5b4d":"aa5500","9d6064":"aa5555","9a7099":"aa55aa","9587d5":"aa55ff",afa072:"aaaa00",aea382:"aaaa55",ababab:"aaaaaa",ffffff:"ffffff",a7bae2:"aaaaff",c9e89d:"aaff00",c9eaa7:"aaff55",c7f0c8:"aaffaa",c3f9f7:"aaffff",e35462:"ff0000",e25874:"ff0055",e16aa3:"ff00aa",de83dc:"ff00ff",e66e6b:"ff5500",e6727c:"ff5555",e37fa7:"ff55aa",e194df:"ff55ff",f1aa86:"ffaa00",f1ad93:"ffaa55",efb5b8:"ffaaaa",ecc3eb:"ffaaff",ffeeab:"ffff00",fff1b5:"ffff55",fff6d3:"ffffaa"};this.each(function(){for(var o=t(this),s=o.parent(),c="",f=100/i[0].length,l=100/i.length,u=f*i.length,h=0;h
'}var x=t('
'+c+"
");s.append(x);var A=x.find(".value");o.on("click",function(t){s.find(".color-box-wrap").toggleClass("show")}),o.on("change",function(n){var i=t(this).val().replace(/^0x/,"").toLowerCase();e.sunny&&(i=a[i]),A.css("background-color","#"+i)}),s.find(".color-box.selectable").on("click",function(n){n.preventDefault();var i=t(this).data("value").toLowerCase();e.sunny?o.val("0x"+r[i.replace(/^0x/,"")]).trigger("change"):o.val(i).trigger("change"),A.css("background-color",i.replace(/^0x/,"#")),s.find(".color-box-wrap").removeClass("show")})})},tab:function(){this.each(function(){var e=t(this);e.click(function(){var e=t(this),n=e.attr("name");t("a[name="+n+"]").each(function(){t(this).removeClass("active")}),e.addClass("active")})})},itemSlider:function(){this.each(function(){var e=t(this),n=e.attr("name"),i=t("input[name="+n+"][class=item-input]");e.on("input",function(){var e=t(this);i.val(e.val())}),i.change(function(){var n=t(this);e.val(n.val())})})},itemDraggableList:function(){this.each(function(){var n='
';t(this).children("label").append(n),e.create(this,{handle:".item-draggable-handle"})})},itemDynamicList:function(){this.each(function(){var e=t(this);e.children("label").each(function(){var e=t('
');e.click(function(){t(this).parent().remove()}),t(this).append(e)});var n=t('
Add one more...
');e.append(n),n.click(function(){function n(e,n){var i=e.val();n.html(i);var a=t('
');a.click(function(){t(this).parent().remove()}),n.append(a)}var i=t('
');i.insertBefore(e.children().last());var a=i.find("input");a.focus(),a.keypress(function(t){var e=t.which;13===e&&n(a,i)}),a.focusout(function(){n(a,i)})})})}}),t(function(){t(".item-toggle").itemToggle(),t(".item-checkbox").itemCheckbox(),t(".item-select").itemSelect(),t(".item-date").itemDate(),t(".item-time").itemTime(),t(".item-radio").itemRadio(),t(".item-color-normal").itemColor({sunny:!1}),t(".item-color-sunny").itemColor({sunny:!0}),t(".tab-button").tab(),t(".item-slider").itemSlider(),t(".item-draggable-list").itemDraggableList(),t(".item-dynamic-list").itemDynamicList()})}(Zepto,Sortable); diff --git a/vendor/pebble-slate/docs/assets/screenshot.png b/vendor/pebble-slate/docs/assets/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcaccf27b3ae58ff223015ac60fadb53e689f1c GIT binary patch literal 78767 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 z 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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-button.png b/vendor/pebble-slate/docs/assets/slate-button.png new file mode 100644 index 0000000000000000000000000000000000000000..87fb6ad341dccefb19732427f6b00a6d1898d0fd GIT binary patch literal 2150 zcmah~X;@Qd7QUcBN6JtKijG)}VMLaOEEGZ_F+dj9023kv5HTb-5J+-ka$^EQQ5n{$ z`xXX@jtc?-#X;hrB2x!pkc!|!F$xOSErOIatxD+)1*Xq4LwkSR`13oZE-Y}&>gM9u7Gq`XxB!pEwIS2#@pkxpgBH^Wg zY>+3&*wzmE0l*Sh5r+$NS>a?pB=O{#Vm#Fn8G;4?KdM^BNh#=&E6r$> zNI*fydb4mW84XMo1!u~^=*$QXKQoIYQGRMNLLdQQ9!f0{OBG}_1wG44M%E@b z7LA$>fzv7IpG9$5Q79TD2T|UhJ{Ud@{~3x%^2B@l5J|*OQ3S-s;(W0L90o@sdwY>_ z1k~JvMzYBTLNc4qoXdq+6m%*K%g9))N~Q8td3i$e6fB-ZB4Kd^EP;SQA~1>!Da=!2 zqzdPG20EzV%SAF+1W8dQMqVCYudWDB%X#ax?^hGEq_85Zw}GnF(S$YT9^ zs6?_5t$^9!fA#)fVg)Bd24dNu0#eHP$i@ksO{rvLnjGZ8kemZS;`uH{r9v>INQGo5 z8f~^~C|4GbFOr&^ZnG#BiyR_Vz&t4*453rd2#=>oBp?UiKVt;=Fqn8R5+09dc>B_Q zXn`~ajz}ZYy#fOW^H@5>S4u!BJdYJDV41i@v8I8L$dJr*P%hdI3Yc<8f|@OyELvO( zeNnzStYA?s4922ZEFuPL+TLGm_q+?4A=7eUcoAb^{6Q%)^KxXk_qjGr0Kn3FA@l%_ zT0hj66Z}ZIx^48>toZYUP1bwOh-d zn3tZ;qjQ7Pmy>&$JyeSujebQdCvwl!VP4s$><%P;S(QyqYMOWsmrvuH-)&s8`bD4d z-E`Kzkr(~OvGM7*1L2y|Qb$KeJHU6>?H6IER{*}&7c6%6nghw!Kp_TbaR5F_0Q|*f zC>=28yLk&S!{26I1xwK+10B@JDcaJp_fxq2aF!5~dWLZ4-epYztSy=LF z$}O}!D&;_Hyz;wkEL+2oVog(t%ar9n@AG!Izd3bBCK|+N?*@o@eTIAYUCvL-GDFMl zC2n2Ol(AUtzeCS)o;`n5dH-uNb9WO932ZG%)}U9a^Y zUo7>|3)0%3rYf`p*$wVF?0$3aA8Yi1m)Ep73?3UM8k?Q=XyA@jHMHr?`;*%(iYGfe zzB&GfbKlC3quIhLb7lID_7j~Cv6pKL-yoX5pUg_@d|ESb#~E9l5wX5)QX0&7c&je; z&$}+SD&_Lgp7*1Jp|?lUW^Veqii#~C-})j_vtwo&rWRsapzrF^>?Zmyt!fDJFaJ={ zo|UvupUL+b7izSVGkpi6kJVhE{e78Dgl5Q^TkGOvU7E?t?rN(uk3rxI>M8-Tp&1T}G6y&a>wuw{gcKRCnlT2}s5g zY9iC@#wi+i=Lk!`!CFmbs4`rg=Ksn%pRhX zz1M|jf10s>bLNrhyhIS<*kO&i$u7Fplh%f>`jAt`@hj_e=W8{I>L=2&byV!Dz-A+? zxN}2M6nlQmY-jG*6=!Y@xfb~?*R*?V9~gL-wb9t>02H)3*r5R54}bd#xP;SLT3WvR z0C0Sq#VzR#jf}J%r*1G4i(|s$cp&Bb*qvs;H7?a!`)o_O>CYd+h@hVf+`9WGKX!dr literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-checkbox.png b/vendor/pebble-slate/docs/assets/slate-checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..538d5d79d571f04416db2fed85e3829d07bbaae8 GIT binary patch literal 8329 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%0Da%hC{u?G{Ku|!Sk_6}$+y`RbjV+M@R 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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png b/vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7de4883462ef9c217b5c6bb57423cafac77243 GIT binary patch literal 21486 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�P>+T|ot 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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-draggable.png b/vendor/pebble-slate/docs/assets/slate-draggable.png new file mode 100644 index 0000000000000000000000000000000000000000..8c478644779485682b0469df9a36b3eab33fb06e GIT binary patch literal 11154 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

>`cbljb0`VyzEyon$4Xe*L}c8 zi=Z^c!+io+BKj}Ny(u3@rknmE)?03sF9Kh0M7dmt?+&ole|GmCn&`{YBYAPZFENlU zn*8DH-9?W7>)Hb(C|_wPhN%8i_A_hODmh-)S z_)WuHr2>ErApi?vTA48}5O9{&OP|)$TA1Wpvm!#OT1s_9TV$K|VM|>6CcAjl+Re)M zn!%6jrhh!$BEstOV2|T59OF5XXG2-3Mnf{BHy_XTH|7c&84j^xRv{%XBhezyOt+7M zTd5!P(Pi8SRcTSxNBxa#} zAL4pS;8{R>l;#rOKtommQnRAT9|>9#GVme=4)y3X;o4tyo6>O-jS+=7r{kW~Rht36 zl?Cti$LBwgiFOM#At{WX|DPRfPyLl6G&{ij=@XOe)>Pf=z?NeE`G>A%tTQu>KXuNY z?vc7;!}<5#L2K1?A8zzN<1V@NXu*BilbUXmoaXJ^{rpRcX6e%Vj5^%G=dIEWr5{Y+ zsw(NU<=mD%X^Ycp73s${qr3vu56gc zm2D%^W88IZp5CYLMZXkEgF#bpoE~>YfU|WMk!S0W_lknI-y^S%N7}3pS!0i^8fAC@ lv9}+xv$UP<|9%E$h82~Ex1Buw;1=j04^LM=mvv4FO#sMuaIF9U literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-input-button.png b/vendor/pebble-slate/docs/assets/slate-input-button.png new file mode 100644 index 0000000000000000000000000000000000000000..8d95a29def78a904c3c44373dace0598a9c81f7e GIT binary patch literal 5860 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 Q{B-UNQ-iBks8~MwA5H+1x&QzG literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-input.png b/vendor/pebble-slate/docs/assets/slate-input.png new file mode 100644 index 0000000000000000000000000000000000000000..3042caa4be33c443f818b23f2c8062af6a7491b2 GIT binary patch literal 3668 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 R1vdWk%#5v!at+S^{(nUTSndD- literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-list.png b/vendor/pebble-slate/docs/assets/slate-list.png new file mode 100644 index 0000000000000000000000000000000000000000..507f59b5e207be8776e04860e0581828b2ecbf47 GIT binary patch literal 9951 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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-paragraph.png b/vendor/pebble-slate/docs/assets/slate-paragraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e29ea7e76e8b01af1983d62666ece417309d59 GIT binary patch literal 30180 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�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 literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-radio.png b/vendor/pebble-slate/docs/assets/slate-radio.png new file mode 100644 index 0000000000000000000000000000000000000000..eaeb5c41cd60625e1c21975738f6868c8805b48c GIT binary patch literal 11713 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 ZfpZW2P8b%*{5)>~bTy6Oh3bws{twPK6{!FK literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/docs/assets/slate-toggle.png b/vendor/pebble-slate/docs/assets/slate-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..4beef3115fc228665392b0d4b9e615affa602cc5 GIT binary patch literal 12045 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 + + + + + + + Your Project + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + diff --git a/vendor/pebble-slate/docs/template.html b/vendor/pebble-slate/docs/template.html new file mode 100644 index 0000000..27241de --- /dev/null +++ b/vendor/pebble-slate/docs/template.html @@ -0,0 +1,210 @@ + + + + + + + + + +
+
+
+
+ Abilities or he perfectly pretended so strangers be exquisite. Oh to + another chamber pleased imagine do in. Went me rank at last loud shot an + draw. Excellent so to no sincerity smallness. Removal request delight if + on he we. Unaffected in we by apartments astonished to decisively + themselves. Offended ten old consider speaking. +
+
+
+ +
+
Single Item
+
+ +
+ +
+ +
+
Multiple Items
+
+ + + +
+
+ +
+
Date, Time, Colorpickers
+
+ + + + +
+
+ +
+
Checkboxes
+
+ + +
+
+ +
+
Radio Buttons
+
+ + + +
+
+ +
+
Subtitles
+
+ + + +
+
+ +
+
Input Field
+
+ +
+
+ +
+
Tab Buttons
+
+ +
+
+ +
+
Slider
+
+ +
+
+ +
+
Input Field + Send Button
+
+ +
+
+ +
+
draggable Items
+
+
+ + + +
+
+
+ +
+
Item List
+
+
+ + +
+
+
+ +
+
+ +
+
+
+ + + diff --git a/vendor/pebble-slate/external/Sortable/LICENSE.md b/vendor/pebble-slate/external/Sortable/LICENSE.md new file mode 100644 index 0000000..7270203 --- /dev/null +++ b/vendor/pebble-slate/external/Sortable/LICENSE.md @@ -0,0 +1,22 @@ +## MIT LICENSE +Copyright 2013-2015 Lebedev Konstantin +http://rubaxa.github.io/Sortable/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/pebble-slate/external/Sortable/Sortable.min.js b/vendor/pebble-slate/external/Sortable/Sortable.min.js new file mode 100644 index 0000000..6b3c942 --- /dev/null +++ b/vendor/pebble-slate/external/Sortable/Sortable.min.js @@ -0,0 +1,2 @@ +/*! Sortable 1.2.0 - MIT | git://github.com/rubaxa/Sortable.git */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():"undefined"!=typeof Package?Sortable=a():window.Sortable=a()}(function(){"use strict";function a(a,b){this.el=a,this.options=b=q({},b),a[H]=this;var d={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0};for(var e in d)!(e in b)&&(b[e]=d[e]);var g=b.group;g&&"object"==typeof g||(g=b.group={name:g}),["pull","put"].forEach(function(a){a in g||(g[a]=!0)}),b.groups=" "+g.name+(g.put.join?" "+g.put.join(" "):"")+" ";for(var h in this)"_"===h.charAt(0)&&(this[h]=c(this,this[h]));f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),f(a,"dragover",this),f(a,"dragenter",this),Q.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){t&&t.state!==a&&(i(t,"display",a?"none":""),!a&&t.state&&u.insertBefore(t,r),t.state=a)}function c(a,b){var c=P.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(P.call(arguments)))}}function d(a,b,c){if(a){c=c||J,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")\\s","g");do if(">*"===d&&a.parentNode===c||(""===d||a.nodeName.toUpperCase()==d)&&(!b.length||((" "+a.className+" ").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function e(a){a.dataTransfer.dropEffect="move",a.preventDefault()}function f(a,b,c){a.addEventListener(b,c,!1)}function g(a,b,c){a.removeEventListener(b,c,!1)}function h(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(G," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(G," ")}}function i(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return J.defaultView&&J.defaultView.getComputedStyle?c=J.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function j(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function k(a){a.draggable=!1}function l(){M=!1}function m(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return b.clientY-(d.top+d.height)>5&&c}function n(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function o(a){for(var b=0;a&&(a=a.previousElementSibling);)"TEMPLATE"!==a.nodeName.toUpperCase()&&b++;return b}function p(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function q(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var r,s,t,u,v,w,x,y,z,A,B,C,D,E,F={},G=/\s+/g,H="Sortable"+(new Date).getTime(),I=window,J=I.document,K=I.parseInt,L=!!("draggable"in J.createElement("div")),M=!1,N=function(a,b,c,d,e,f,g){var h=J.createEvent("Event"),i=(a||b[H]).options,j="on"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.item=d||b,h.from=e||b,h.clone=t,h.oldIndex=f,h.newIndex=g,i[j]&&i[j].call(a,h),b.dispatchEvent(h)},O=Math.abs,P=[].slice,Q=[],R=p(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(x!==c&&(w=b.scroll,x=c,w===!0)){w=c;do if(w.offsetWidth=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=I)),(F.vx!==f||F.vy!==g||F.el!==d)&&(F.el=d,F.vx=f,F.vy=g,clearInterval(F.pid),d&&(F.pid=setInterval(function(){d===I?I.scrollTo(I.pageXOffset+f*i,I.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30);return a.prototype={constructor:a,_onTapStart:function(a){var b=this,c=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,j=e.filter;if(!("mousedown"===f&&0!==a.button||e.disabled)&&(h=d(h,e.draggable,c))){if(A=o(h),"function"==typeof j){if(j.call(this,a,h,this))return N(b,i,"filter",h,c,A),void a.preventDefault()}else if(j&&(j=j.split(",").some(function(a){return a=d(i,a.trim(),c),a?(N(b,a,"filter",h,c,A),!0):void 0})))return void a.preventDefault();(!e.handle||d(i,e.handle,c))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,e=this,g=e.el,h=e.options,i=g.ownerDocument;c&&!r&&c.parentNode===g&&(D=a,u=g,r=c,v=r.nextSibling,C=h.group,d=function(){e._disableDelayedDrag(),r.draggable=!0,h.ignore.split(",").forEach(function(a){j(r,a.trim(),k)}),e._triggerDragStart(b)},f(i,"mouseup",e._onDrop),f(i,"touchend",e._onDrop),f(i,"touchcancel",e._onDrop),h.delay?(f(i,"mousemove",e._disableDelayedDrag),f(i,"touchmove",e._disableDelayedDrag),e._dragStartTimer=setTimeout(d,h.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),g(a,"mousemove",this._disableDelayedDrag),g(a,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(D={target:r,clientX:a.clientX,clientY:a.clientY},this._onDragStart(D,"touch")):L?(f(r,"dragend",this),f(u,"dragstart",this._onDragStart)):this._onDragStart(D,!0);try{J.selection?J.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){u&&r&&(h(r,this.options.ghostClass,!0),a.active=this,N(this,u,"start",r,u,A))},_emulateDragOver:function(){if(E){i(s,"display","none");var a=J.elementFromPoint(E.clientX,E.clientY),b=a,c=" "+this.options.group.name,d=Q.length;if(b)do{if(b[H]&&b[H].options.groups.indexOf(c)>-1){for(;d--;)Q[d]({clientX:E.clientX,clientY:E.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);i(s,"display","")}},_onTouchMove:function(a){if(D){var b=a.touches?a.touches[0]:a,c=b.clientX-D.clientX,d=b.clientY-D.clientY,e=a.touches?"translate3d("+c+"px,"+d+"px,0)":"translate("+c+"px,"+d+"px)";E=b,i(s,"webkitTransform",e),i(s,"mozTransform",e),i(s,"msTransform",e),i(s,"transform",e),a.preventDefault()}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;if(this._offUpEvents(),"clone"==C.pull&&(t=r.cloneNode(!0),i(t,"display","none"),u.insertBefore(t,r)),b){var e,g=r.getBoundingClientRect(),h=i(r);s=r.cloneNode(!0),i(s,"top",g.top-K(h.marginTop,10)),i(s,"left",g.left-K(h.marginLeft,10)),i(s,"width",g.width),i(s,"height",g.height),i(s,"opacity","0.8"),i(s,"position","fixed"),i(s,"zIndex","100000"),u.appendChild(s),e=s.getBoundingClientRect(),i(s,"width",2*g.width-e.width),i(s,"height",2*g.height-e.height),"touch"===b?(f(J,"touchmove",this._onTouchMove),f(J,"touchend",this._onDrop),f(J,"touchcancel",this._onDrop)):(f(J,"mousemove",this._onTouchMove),f(J,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,150)}else c&&(c.effectAllowed="move",d.setData&&d.setData.call(this,c,r)),f(J,"drop",this);setTimeout(this._dragStarted,0)},_onDragOver:function(a){var c,e,f,g=this.el,h=this.options,j=h.group,k=j.put,n=C===j,o=h.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!h.dragoverBubble&&a.stopPropagation()),C&&!h.disabled&&(n?o||(f=!u.contains(r)):C.pull&&k&&(C.name===j.name||k.indexOf&&~k.indexOf(C.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(R(a,h,this.el),M)return;if(c=d(a.target,h.draggable,g),e=r.getBoundingClientRect(),f)return b(!0),void(t||v?u.insertBefore(r,t||v):o||u.appendChild(r));if(0===g.children.length||g.children[0]===s||g===a.target&&(c=m(g,a))){if(c){if(c.animated)return;q=c.getBoundingClientRect()}b(n),g.appendChild(r),this._animate(e,r),c&&this._animate(q,c)}else if(c&&!c.animated&&c!==r&&void 0!==c.parentNode[H]){y!==c&&(y=c,z=i(c));var p,q=c.getBoundingClientRect(),w=q.right-q.left,x=q.bottom-q.top,A=/left|right|inline/.test(z.cssFloat+z.display),B=c.offsetWidth>r.offsetWidth,D=c.offsetHeight>r.offsetHeight,E=(A?(a.clientX-q.left)/w:(a.clientY-q.top)/x)>.5,F=c.nextElementSibling;M=!0,setTimeout(l,30),b(n),p=A?c.previousElementSibling===r&&!B||E&&B:F!==r&&!D||E&&D,p&&!F?g.appendChild(r):c.parentNode.insertBefore(r,p?F:c),this._animate(e,r),this._animate(q,c)}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();i(b,"transition","none"),i(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,i(b,"transition","all "+c+"ms"),i(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){i(b,"transition",""),i(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;g(J,"touchmove",this._onTouchMove),g(a,"mouseup",this._onDrop),g(a,"touchend",this._onDrop),g(a,"touchcancel",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(F.pid),clearTimeout(this.dragStartTimer),g(J,"drop",this),g(J,"mousemove",this._onTouchMove),g(c,"dragstart",this._onDragStart),this._offUpEvents(),b&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation(),s&&s.parentNode.removeChild(s),r&&(g(r,"dragend",this),k(r),h(r,this.options.ghostClass,!1),u!==r.parentNode?(B=o(r),N(null,r.parentNode,"sort",r,u,A,B),N(this,u,"sort",r,u,A,B),N(null,r.parentNode,"add",r,u,A,B),N(this,u,"remove",r,u,A,B)):(t&&t.parentNode.removeChild(t),r.nextSibling!==v&&(B=o(r),N(this,u,"update",r,u,A,B),N(this,u,"sort",r,u,A,B))),a.active&&N(this,u,"end",r,u,A,B)),u=r=s=v=t=w=x=D=E=y=z=C=a.active=null,this.save())},handleEvent:function(a){var b=a.type;"dragover"===b||"dragenter"===b?r&&(this._onDragOver(a),e(a)):("drop"===b||"dragend"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],c=this.el.children,e=0,f=c.length,g=this.options;f>e;e++)a=c[e],d(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||n(a));return b},sort:function(a){var b={},c=this.el;this.toArray().forEach(function(a,e){var f=c.children[e];d(f,this.options.draggable,c)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(c.removeChild(b[a]),c.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return d(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:void(c[a]=b)},destroy:function(){var a=this.el;a[H]=null,g(a,"mousedown",this._onTapStart),g(a,"touchstart",this._onTapStart),g(a,"dragover",this),g(a,"dragenter",this),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),Q.splice(Q.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:f,off:g,css:i,find:j,bind:c,is:function(a,b){return!!d(a,b,a)},extend:q,throttle:p,closest:d,toggleClass:h,index:o},a.version="1.2.0",a.create=function(b,c){return new a(b,c)},a}); \ No newline at end of file diff --git a/vendor/pebble-slate/external/zepto/zepto.min.js b/vendor/pebble-slate/external/zepto/zepto.min.js new file mode 100644 index 0000000..f45479a --- /dev/null +++ b/vendor/pebble-slate/external/zepto/zepto.min.js @@ -0,0 +1,2 @@ +/* Zepto v1.1.6 - zepto event ajax form ie - zeptojs.com/license */ +var Zepto=function(){function L(t){return null==t?String(t):j[S.call(t)]||"object"}function Z(t){return"function"==L(t)}function _(t){return null!=t&&t==t.window}function $(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function D(t){return"object"==L(t)}function M(t){return D(t)&&!_(t)&&Object.getPrototypeOf(t)==Object.prototype}function R(t){return"number"==typeof t.length}function k(t){return s.call(t,function(t){return null!=t})}function z(t){return t.length>0?n.fn.concat.apply([],t):t}function F(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function q(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||c[F(t)]?e:e+"px"}function I(t){var e,n;return u[t]||(e=a.createElement(t),a.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),u[t]=n),u[t]}function V(t){return"children"in t?o.call(t.children):n.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function B(n,i,r){for(e in i)r&&(M(i[e])||A(i[e]))?(M(i[e])&&!M(n[e])&&(n[e]={}),A(i[e])&&!A(n[e])&&(n[e]=[]),B(n[e],i[e],r)):i[e]!==t&&(n[e]=i[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function J(t,e,n,i){return Z(e)?e.call(t,n,i):e}function X(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function W(e,n){var i=e.className||"",r=i&&i.baseVal!==t;return n===t?r?i.baseVal:i:void(r?i.baseVal=n:e.className=n)}function Y(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function G(t,e){e(t);for(var n=0,i=t.childNodes.length;i>n;n++)G(t.childNodes[n],e)}var t,e,n,i,C,N,r=[],o=r.slice,s=r.filter,a=window.document,u={},f={},c={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,h=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,p=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,d=/^(?:body|html)$/i,m=/([A-Z])/g,g=["val","css","html","text","data","width","height","offset"],v=["after","prepend","before","append"],y=a.createElement("table"),x=a.createElement("tr"),b={tr:a.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:x,th:x,"*":a.createElement("div")},w=/complete|loaded|interactive/,E=/^[\w-]*$/,j={},S=j.toString,T={},O=a.createElement("div"),P={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},A=Array.isArray||function(t){return t instanceof Array};return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,o=!r;return o&&(r=O).appendChild(t),i=~T.qsa(r,e).indexOf(t),o&&O.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return s.call(t,function(e,n){return t.indexOf(e)==n})},T.fragment=function(e,i,r){var s,u,f;return h.test(e)&&(s=n(a.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(p,"<$1>")),i===t&&(i=l.test(e)&&RegExp.$1),i in b||(i="*"),f=b[i],f.innerHTML=""+e,s=n.each(o.call(f.childNodes),function(){f.removeChild(this)})),M(r)&&(u=n(s),n.each(r,function(t,e){g.indexOf(t)>-1?u[t](e):u.attr(t,e)})),s},T.Z=function(t,e){return t=t||[],t.__proto__=n.fn,t.selector=e||"",t},T.isZ=function(t){return t instanceof T.Z},T.init=function(e,i){var r;if(!e)return T.Z();if("string"==typeof e)if(e=e.trim(),"<"==e[0]&&l.test(e))r=T.fragment(e,RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}else{if(Z(e))return n(a).ready(e);if(T.isZ(e))return e;if(A(e))r=k(e);else if(D(e))r=[e],e=null;else if(l.test(e))r=T.fragment(e.trim(),RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}}return T.Z(r,e)},n=function(t,e){return T.init(t,e)},n.extend=function(t){var e,n=o.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){B(t,n,e)}),t},T.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],s=i||r?e.slice(1):e,a=E.test(s);return $(t)&&a&&i?(n=t.getElementById(s))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:o.call(a&&!i?r?t.getElementsByClassName(s):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=a.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},n.type=L,n.isFunction=Z,n.isWindow=_,n.isArray=A,n.isPlainObject=M,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.inArray=function(t,e,n){return r.indexOf.call(e,t,n)},n.camelCase=C,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.map=function(t,e){var n,r,o,i=[];if(R(t))for(r=0;r=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return r.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return Z(t)?this.not(this.not(t)):n(s.call(this,function(e){return T.matches(e,t)}))},add:function(t,e){return n(N(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(e){var i=[];if(Z(e)&&e.call!==t)this.each(function(t){e.call(this,t)||i.push(this)});else{var r="string"==typeof e?this.filter(e):R(e)&&Z(e.item)?o.call(e):n(e);this.forEach(function(t){r.indexOf(t)<0&&i.push(t)})}return n(i)},has:function(t){return this.filter(function(){return D(t)?n.contains(this,t):n(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!D(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!D(t)?t:n(t)},find:function(t){var e,i=this;return e=t?"object"==typeof t?n(t).filter(function(){var t=this;return r.some.call(i,function(e){return n.contains(e,t)})}):1==this.length?n(T.qsa(this[0],t)):this.map(function(){return T.qsa(this,t)}):n()},closest:function(t,e){var i=this[0],r=!1;for("object"==typeof t&&(r=n(t));i&&!(r?r.indexOf(i)>=0:T.matches(i,t));)i=i!==e&&!$(i)&&i.parentNode;return n(i)},parents:function(t){for(var e=[],i=this;i.length>0;)i=n.map(i,function(t){return(t=t.parentNode)&&!$(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return U(e,t)},parent:function(t){return U(N(this.pluck("parentNode")),t)},children:function(t){return U(this.map(function(){return V(this)}),t)},contents:function(){return this.map(function(){return o.call(this.childNodes)})},siblings:function(t){return U(this.map(function(t,e){return s.call(V(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return n.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=I(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=Z(t);if(this[0]&&!e)var i=n(t).get(0),r=i.parentNode||this.length>1;return this.each(function(o){n(this).wrapAll(e?t.call(this,o):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){n(this[0]).before(t=n(t));for(var e;(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=Z(t);return this.each(function(i){var r=n(this),o=r.contents(),s=e?t.call(this,i):t;o.length?o.wrapAll(s):r.append(s)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var i=n(this);(e===t?"none"==i.css("display"):e)?i.show():i.hide()})},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var i=this.innerHTML;n(this).empty().append(J(this,t,e,i))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=J(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this[0].textContent:null},attr:function(n,i){var r;return"string"!=typeof n||1 in arguments?this.each(function(t){if(1===this.nodeType)if(D(n))for(e in n)X(this,e,n[e]);else X(this,n,J(this,i,t,this.getAttribute(n)))}):this.length&&1===this[0].nodeType?!(r=this[0].getAttribute(n))&&n in this[0]?this[0][n]:r:t},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){X(this,t)},this)})},prop:function(t,e){return t=P[t]||t,1 in arguments?this.each(function(n){this[t]=J(this,e,n,this[t])}):this[0]&&this[0][t]},data:function(e,n){var i="data-"+e.replace(m,"-$1").toLowerCase(),r=1 in arguments?this.attr(i,n):this.attr(i);return null!==r?Y(r):t},val:function(t){return 0 in arguments?this.each(function(e){this.value=J(this,t,e,this.value)}):this[0]&&(this[0].multiple?n(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var i=n(this),r=J(this,t,e,i.offset()),o=i.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==i.css("position")&&(s.position="relative"),i.css(s)});if(!this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(t,i){if(arguments.length<2){var r,o=this[0];if(!o)return;if(r=getComputedStyle(o,""),"string"==typeof t)return o.style[C(t)]||r.getPropertyValue(t);if(A(t)){var s={};return n.each(t,function(t,e){s[e]=o.style[C(e)]||r.getPropertyValue(e)}),s}}var a="";if("string"==L(t))i||0===i?a=F(t)+":"+H(t,i):this.each(function(){this.style.removeProperty(F(t))});else for(e in t)t[e]||0===t[e]?a+=F(e)+":"+H(e,t[e])+";":this.each(function(){this.style.removeProperty(F(e))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?r.some.call(this,function(t){return this.test(W(t))},q(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var r=W(this),o=J(this,t,e,r);o.split(/\s+/g).forEach(function(t){n(this).hasClass(t)||i.push(t)},this),i.length&&W(this,r+(r?" ":"")+i.join(" "))}}):this},removeClass:function(e){return this.each(function(n){if("className"in this){if(e===t)return W(this,"");i=W(this),J(this,e,n,i).split(/\s+/g).forEach(function(t){i=i.replace(q(t)," ")}),W(this,i.trim())}})},toggleClass:function(e,i){return e?this.each(function(r){var o=n(this),s=J(this,e,r,W(this));s.split(/\s+/g).forEach(function(e){(i===t?!o.hasClass(e):i)?o.addClass(e):o.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),i=this.offset(),r=d.test(e[0].nodeName)?{top:0,left:0}:e.offset();return i.top-=parseFloat(n(t).css("margin-top"))||0,i.left-=parseFloat(n(t).css("margin-left"))||0,r.top+=parseFloat(n(e[0]).css("border-top-width"))||0,r.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:i.top-r.top,left:i.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||a.body;t&&!d.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t})}},n.fn.detach=n.fn.remove,["width","height"].forEach(function(e){var i=e.replace(/./,function(t){return t[0].toUpperCase()});n.fn[e]=function(r){var o,s=this[0];return r===t?_(s)?s["inner"+i]:$(s)?s.documentElement["scroll"+i]:(o=this.offset())&&o[e]:this.each(function(t){s=n(this),s.css(e,J(this,r,t,s[e]()))})}}),v.forEach(function(t,e){var i=e%2;n.fn[t]=function(){var t,o,r=n.map(arguments,function(e){return t=L(e),"object"==t||"array"==t||null==e?e:T.fragment(e)}),s=this.length>1;return r.length<1?this:this.each(function(t,u){o=i?u:u.parentNode,u=0==e?u.nextSibling:1==e?u.firstChild:2==e?u:null;var f=n.contains(a.documentElement,o);r.forEach(function(t){if(s)t=t.cloneNode(!0);else if(!o)return n(t).remove();o.insertBefore(t,u),f&&G(t,function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},n.fn[i?t+"To":"insert"+(e?"Before":"After")]=function(e){return n(e)[t](this),this}}),T.Z.prototype=n.fn,T.uniq=N,T.deserializeValue=Y,n.zepto=T,n}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function l(t){return t._zid||(t._zid=e++)}function h(t,e,n,i){if(e=p(e),e.ns)var r=d(e.ns);return(s[l(t)]||[]).filter(function(t){return!(!t||e.e&&t.e!=e.e||e.ns&&!r.test(t.ns)||n&&l(t.fn)!==l(n)||i&&t.sel!=i)})}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!u&&t.e in f||!!e}function g(t){return c[t]||u&&f[t]||t}function v(e,i,r,o,a,u,f){var h=l(e),d=s[h]||(s[h]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return t(document).ready(r);var s=p(i);s.fn=r,s.sel=a,s.e in c&&(r=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?s.fn.apply(this,arguments):void 0}),s.del=u;var l=u||r;s.proxy=function(t){if(t=j(t),!t.isImmediatePropagationStopped()){t.data=o;var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return i===!1&&(t.preventDefault(),t.stopPropagation()),i}},s.i=d.length,d.push(s),"addEventListener"in e&&e.addEventListener(g(s.e),s.proxy,m(s,f))})}function y(t,e,n,i,r){var o=l(t);(e||"").split(/\s/).forEach(function(e){h(t,e,n,i).forEach(function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,r))})})}function j(e,i){return(i||!e.isDefaultPrevented)&&(i||(i=e),t.each(E,function(t,n){var r=i[t];e[t]=function(){return this[n]=x,r&&r.apply(i,arguments)},e[n]=b}),(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?i.returnValue===!1:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function S(t){var e,i={originalEvent:t};for(e in t)w.test(e)||t[e]===n||(i[e]=t[e]);return j(i,t)}var n,e=1,i=Array.prototype.slice,r=t.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in window,f={focus:"focusin",blur:"focusout"},c={mouseenter:"mouseover",mouseleave:"mouseout"};a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){var s=2 in arguments&&i.call(arguments,2);if(r(e)){var a=function(){return e.apply(n,s?s.concat(i.call(arguments)):arguments)};return a._zid=l(e),a}if(o(n))return s?(s.unshift(e[n],e),t.proxy.apply(null,s)):t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,s,a,u,f){var c,l,h=this;return e&&!o(e)?(t.each(e,function(t,e){h.on(t,s,a,e,f)}),h):(o(s)||r(u)||u===!1||(u=a,a=s,s=n),(r(a)||a===!1)&&(u=a,a=n),u===!1&&(u=b),h.each(function(n,r){f&&(c=function(t){return y(r,t.type,u),u.apply(this,arguments)}),s&&(l=function(e){var n,o=t(e.target).closest(s,r).get(0);return o&&o!==r?(n=t.extend(S(e),{currentTarget:o,liveFired:r}),(c||u).apply(o,[n].concat(i.call(arguments,1)))):void 0}),v(r,e,u,a,s,l||c)}))},t.fn.off=function(e,i,s){var a=this;return e&&!o(e)?(t.each(e,function(t,e){a.off(t,i,e)}),a):(o(i)||r(s)||s===!1||(s=i,i=n),s===!1&&(s=b),a.each(function(){y(this,e,s,i)}))},t.fn.trigger=function(e,n){return e=o(e)||t.isPlainObject(e)?t.Event(e):j(e),e._args=n,this.each(function(){e.type in f&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var i,r;return this.each(function(s,a){i=S(o(e)?t.Event(e):e),i._args=n,i.target=a,t.each(h(a,e.type||e),function(t,e){return r=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),r},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){o(t)||(e=t,t=e.type);var n=document.createEvent(a[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),j(n)}}(Zepto),function(t){function h(e,n,i){var r=t.Event(n);return t(e).trigger(r,i),!r.isDefaultPrevented()}function p(t,e,i,r){return t.global?h(e||n,i,r):void 0}function d(e){e.global&&0===t.active++&&p(e,null,"ajaxStart")}function m(e){e.global&&!--t.active&&p(e,null,"ajaxStop")}function g(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||p(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void p(e,n,"ajaxSend",[t,e])}function v(t,e,n,i){var r=n.context,o="success";n.success.call(r,t,o,e),i&&i.resolveWith(r,[t,o,e]),p(n,r,"ajaxSuccess",[e,n,t]),x(o,e,n)}function y(t,e,n,i,r){var o=i.context;i.error.call(o,n,e,t),r&&r.rejectWith(o,[n,e,t]),p(i,o,"ajaxError",[n,i,t||e]),x(e,n,i)}function x(t,e,n){var i=n.context;n.complete.call(i,e,t),p(n,i,"ajaxComplete",[e,n]),m(n)}function b(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==f?"html":t==u?"json":s.test(t)?"script":a.test(t)&&"xml")||"text"}function E(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function j(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=E(e.url,e.data),e.data=void 0)}function S(e,n,i,r){return t.isFunction(n)&&(r=i,i=n,n=void 0),t.isFunction(i)||(r=i,i=void 0),{url:e,data:n,success:i,dataType:r}}function C(e,n,i,r){var o,s=t.isArray(n),a=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),r&&(n=i?r:r+"["+(a||"object"==o||"array"==o?n:"")+"]"),!r&&s?e.add(u.name,u.value):"array"==o||!i&&"object"==o?C(e,u,i,n):e.add(n,u)})}var i,r,e=0,n=window.document,o=/)<[^<]*)*<\/script>/gi,s=/^(?:text|application)\/javascript/i,a=/^(?:text|application)\/xml/i,u="application/json",f="text/html",c=/^\s*$/,l=n.createElement("a");l.href=window.location.href,t.active=0,t.ajaxJSONP=function(i,r){if(!("type"in i))return t.ajax(i);var f,h,o=i.jsonpCallback,s=(t.isFunction(o)?o():o)||"jsonp"+ ++e,a=n.createElement("script"),u=window[s],c=function(e){t(a).triggerHandler("error",e||"abort")},l={abort:c};return r&&r.promise(l),t(a).on("load error",function(e,n){clearTimeout(h),t(a).off().remove(),"error"!=e.type&&f?v(f[0],l,i,r):y(null,n||"error",l,i,r),window[s]=u,f&&t.isFunction(u)&&u(f[0]),u=f=void 0}),g(l,i)===!1?(c("abort"),l):(window[s]=function(){f=arguments},a.src=i.url.replace(/\?(.+)=\?/,"?$1="+s),n.head.appendChild(a),i.timeout>0&&(h=setTimeout(function(){c("timeout")},i.timeout)),l)},t.ajaxSettings={type:"GET",beforeSend:b,success:b,error:b,complete:b,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:u,xml:"application/xml, text/xml",html:f,html:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var a,o=t.extend({},e||{}),s=t.Deferred&&t.Deferred();for(i in t.ajaxSettings)void 0===o[i]&&(o[i]=t.ajaxSettings[i]);d(o),o.crossDomain||(a=n.createElement("a"),a.href=o.url,a.href=a.href,o.crossDomain=l.protocol+"//"+l.host!=a.protocol+"//"+a.host),o.url||(o.url=window.location.toString()),j(o);var u=o.dataType,f=/\?.+=\?/.test(o.url);if(f&&(u="jsonp"),o.cache!==!1&&(e&&e.cache===!0||"script"!=u&&"jsonp"!=u)||(o.url=E(o.url,"_="+Date.now())),"jsonp"==u)return f||(o.url=E(o.url,o.jsonp?o.jsonp+"=?":o.jsonp===!1?"":"callback=?")),t.ajaxJSONP(o,s);var C,h=o.accepts[u],p={},m=function(t,e){p[t.toLowerCase()]=[t,e]},x=/^([\w-]+:)\/\//.test(o.url)?RegExp.$1:window.location.protocol,S=o.xhr(),T=S.setRequestHeader;if(s&&s.promise(S),o.crossDomain||m("X-Requested-With","XMLHttpRequest"),m("Accept",h||"*/*"),(h=o.mimeType||h)&&(h.indexOf(",")>-1&&(h=h.split(",",2)[0]),S.overrideMimeType&&S.overrideMimeType(h)),(o.contentType||o.contentType!==!1&&o.data&&"GET"!=o.type.toUpperCase())&&m("Content-Type",o.contentType||"application/x-www-form-urlencoded"),o.headers)for(r in o.headers)m(r,o.headers[r]);if(S.setRequestHeader=m,S.onreadystatechange=function(){if(4==S.readyState){S.onreadystatechange=b,clearTimeout(C);var e,n=!1;if(S.status>=200&&S.status<300||304==S.status||0==S.status&&"file:"==x){u=u||w(o.mimeType||S.getResponseHeader("content-type")),e=S.responseText;try{"script"==u?(1,eval)(e):"xml"==u?e=S.responseXML:"json"==u&&(e=c.test(e)?null:t.parseJSON(e))}catch(i){n=i}n?y(n,"parsererror",S,o,s):v(e,S,o,s)}else y(S.statusText||null,S.status?"error":"abort",S,o,s)}},g(S,o)===!1)return S.abort(),y(null,"abort",S,o,s),S;if(o.xhrFields)for(r in o.xhrFields)S[r]=o.xhrFields[r];var N="async"in o?o.async:!0;S.open(o.type,o.url,N,o.username,o.password);for(r in p)T.apply(S,p[r]);return o.timeout>0&&(C=setTimeout(function(){S.onreadystatechange=b,S.abort(),y(null,"timeout",S,o,s)},o.timeout)),S.send(o.data?o.data:null),S},t.get=function(){return t.ajax(S.apply(null,arguments))},t.post=function(){var e=S.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=S.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,i){if(!this.length)return this;var a,r=this,s=e.split(/\s/),u=S(e,n,i),f=u.success;return s.length>1&&(u.url=s[0],a=s[1]),u.success=function(e){r.html(a?t("
").html(e.replace(o,"")).find(a):e),f&&f.apply(r,arguments)},t.ajax(u),this};var T=encodeURIComponent;t.param=function(e,n){var i=[];return i.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(T(e)+"="+T(n))},C(i,e,n),i.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var e,n,i=[],r=function(t){return t.forEach?t.forEach(r):void i.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(i,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&r(t(o).val())}),i},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto); diff --git a/vendor/pebble-slate/gulpfile.js b/vendor/pebble-slate/gulpfile.js new file mode 100644 index 0000000..e7d289d --- /dev/null +++ b/vendor/pebble-slate/gulpfile.js @@ -0,0 +1,51 @@ +// jshint ignore: start +var gulp = require('gulp'), + rimraf = require('rimraf'), + concat = require('gulp-concat'), + sass = require('gulp-ruby-sass'), + notify = require('gulp-notify'), + uglifycss = require('gulp-uglifycss'), + uglify = require('gulp-uglify'); + +var config = { + srcName: 'main', + libName: 'slate', + fontPath: './lib/fonts', + sassPath: './lib/sass', + extPath: './external', + jsPath: './lib/js', + distPath: './dist' +}; + +gulp.task('clean', function(cb) { + rimraf(config.distPath, cb); +}); + +gulp.task('css', function() { + return sass(config.sassPath + '/' + config.srcName + '.scss') + .on("error", notify.onError(function (error) { + return "Error: " + error.message; + })) + .pipe(concat(config.libName + '.css')) + .pipe(gulp.dest(config.distPath + '/css')) + .pipe(concat(config.libName + '.min.css')) + .pipe(uglifycss()) + .pipe(gulp.dest(config.distPath + '/css')); +}); + +gulp.task('js', function() { + return gulp.src([config.extPath + '/*/*.js', config.jsPath + '/*.js']) + .pipe(concat(config.libName + '.js')) + .pipe(gulp.dest(config.distPath + '/js')) + .pipe(uglify()) + .pipe(concat(config.libName + '.min.js')) + .pipe(gulp.dest(config.distPath + '/js')); +}); + +gulp.task('fonts', function() { + return gulp.src(config.fontPath + '/*') + .pipe(gulp.dest(config.distPath + '/fonts')); +}); + +gulp.task('build', ['css', 'js', 'fonts']); +gulp.task('default', ['build']); diff --git a/vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff b/vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff new file mode 100644 index 0000000000000000000000000000000000000000..1a206ffeee80dc333e337612b0fbec226db0cf96 GIT binary patch literal 179100 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�~ z3^|(IK#n8FlH93T}Q{s=j02Trv+N1Hu;hgTB7TzL(9~q9^F7E z=tf$ho9I#WXnG7imL5kwCZEvb=?U~idJ;XEo(eugQ z=>_ycdJ(;tUP3RWm(k1V74%Aa6}_5XL$9URk(bEJ^m=*&y^-ETZ>G13VoHnM*m6wMgL9zLtm$F&^PH@^lkbMeV4vR-=`nY59vqr zzw~4J3H=}alzv7(r(e)7fdB;n1O^d^LJVpk4hcv?3TmMa>Y)J|VH!+_888zzgITaS zYyq=j4r~cq!Pc-1Yzy1L_OJu&2s^>funX)8yTR_T2kZ%ZK@;o^bDiV1GCO4upfC3l=~(EQB6d1ii2r`d|qxg=MfD`e6W8z`-yGLof^@uo70m zYFGnn;Se|!4uiwt2sjc97=<)sz=Sc#LJllg2jh^30u;f9608RY%HVzc_#^xY{tSPCzrx?(@9-o%1^iZQIg zI3_TODXhghtj7jy#A!GkXW&fS3}@lyxCPF}Ik+XciQGs|#;tH`+y=MB?QnbC0e8fm z$mO^*xsqH#-X^z@3vn0R6?enk$<^dGavr&uT!MSxp12n_;odkGo3RC3u?^?pd~C-K z?8JR=U)&G(#{=*{JP5mR0e0g;?7>CYi;J-jm*7%dhRd-Z2XF-*jDt9Y!#IK~aTTt{ zHMkZJ!9(#dJRFa}BhkQ7Ok)O39K$T;(86^%j(IF#5p68tdUUXiE_%2DCvYQHa1$Pd zN8>SgEFOo);|X{oxrSVeC*jF>3i%QFF`kO2;pun=o{4AS*?10~i|66_cmZCB7m*tB z3%nRF!AtQnyd1Bj8lS;u@i}}RU%(gfC43oQ!B_D${3rek z|Be5_*YOQ}6W_wO@f~~@-^2Iu1N;y_!vEsO_zC_GKgG}RbNm9oWQ0)$3>jk)7G*J3 z!{RK#k}Sn)Ssklq4Xlw(W7F9THj{0}X0grL7Hl?~!?t8wv8~xQY+JS++n(*fc4RxT zo!KsISGF75o$bN)WP7nDwl|y0npq2LWo>L8o6p)=2kT_}uzlHnY=3qDJCGg3y4V8N z%@(pAwutqz#jKAlVN2OEww(2|0k(o2%m&#I8)hSHC0oT-vo&ljJA@s|4r7P2BiND5 zV52O}GR$OSEX#7tV(ZvA%d-M2GMkmydgib)bD76BunD%2RoEtW6g!$7!;WRgvE$hZ z>_m1FJDHurPGzUD)7cs9Om-GKo1MeXW#_T;*#+!Eb`iUnUBWJ9m$A#)73@lO6}y^U z!>(o5vFq6l>_&DIyP4g>Ze_Qz+u0rLPIedj7Q36>!|rAGvHRHr>_PSrdzd{^S27*T z&ZNzvYdU78He>OjY?WQRXqO}MH(nldbCpugEJk{bLcxeEH1ny>nWA3yj^5#If6Z|!NkJIQlnHdV7Z4Ya#sC_ zT2kf46=f@72no^<==Wj+1uN~?MI6l8IBa+^p98ydR-#LN${l=JO&7Ipax1)w@ zRV1NWt@H&dWF*9vGDAp>S>?1eryb%<3>3_)PxnH65otXe6)tmfBqKr>^Ce>`XGO9i zq{!!)kPI8G$he3|G_L|%^kTlAgsoMeld~gb5o~k~FXD=wh{)-vq&8zZXT^Lw*d{)k zvO=3u?@bPKV|Y?3m@#FAB(fgQvFkROj@?xB3Z}ztacb?N8N%F&&|JNnbIj0e-I(n; zVbt0X<}F(rL%d~kgINsWrj^aPA?BhLRy@6AIA$?#j)j)YkThp9Uwzu<;STTymHq)C zS};VgYf6q)Fbj4j(QP?tuP~N3Hzp;okruTQ=}LR98R<5}+J%0UYO8>p)L5@$Y%nA8 zH?`O+W(~(Hr* zDNigF!9L$+OO1&>Z36Ty0c%}yNl4wg08T9p8#q1*$?{w;<_%slY2Fk?0`L+RLuy%g zT|R_Fm#J9g<-nG4D_EZYMEezgQStYO`HNxxe#Ku@u`U`VyX-nP@6^~+%%WM$@^-1> zVEb_xP;s#3P&<$drDLrf#-fAD21nU27`DL)+c2nXaMUoQxXN-!4u!&44ux?zEX@r| z8&+am6_H`FyRO*X5w*LX+T9V~E6?|8M0w@OAu{4v#caeAzqKQiJoLg?Y{bt3&#$9Z zA!{c>@R|@@3E=2jNq8kVYI znHrX>pFK;5#=>Qf%2{) z!Rnc=7O$-?7H7IzDla5zRvhn&D6bbPbn2=i;n;Fdjs5<(+EP0F+khgjP{bO3*HFUb z{YKIF-9vGVgsiIJcNhh9R{?&5QM~ekpbQz3*{yU8sI5t^4QO?1s>iOH>dK0v!-r+M zNVuUZ$VGorR)><&HAzOIOH_l>*rhbqcBjpZmCyS&^@No4gp~A5QBv14*|@$CUtfr? zZz^BkBtE`tImOf;7@Zsl2^$Cr8<^_pK*-a9$p)zkQ}9Sg-bhH^$W-G-Cd*h8tmRo{ zJ8EB2{;})_TQ(biLUj-|(H&CMJw;J{a3=eUgKbYPoCJ#l+0Xm1+MYmdea~cJsh+SI zJ%O}_-l_5H4N2*pETu7g2rKr*Q`qC;)b+PK*oahL*v`ICc=|$i)%Q(S7wc1vr(wwy zC5=m`+L2rqM7D9+S7!r<WY)CaFVwIclVm6RE4CO@Q9dWlDqYi@LF z#Cu5q3H4MGU|hbE6eJ!kBti8ek_+WyNI>=c9W%1>xs(;pMV-9lrf9^L0XiLDd9&L7w&}cM&(tA z(jc9iL=ZlPWe8WpGL*+*igG+GMEV~h%nY7`A?jwK2Vq#AdJ={x)BHzah?Ek(mpwV* zq=Xj%!ab-WNp5`=u9cQ+Oj@m(gvA;u<-KwhsZ(EC0=D&@k*{Kn+OH~QTHsTa6xYns zXsbA;OyirSVZKpSxK?gb6_c(72zO2MaMv`CbWLN@HO(Yk(}-}biukStY{IoF7PwZW zgj}nVMB%tO%gMyK0}?0;(wH^o<^)Ls<)rjT!3p7y0>w)1gPTjp9TQMF&S}#6TuL%2 zxSSL#d^jb2^^urYv|5_yElPAXRfC*Z5P%BNJ|-eN7|Deow;=fqWFD1Bt*6MfUsG(%Ln9X)n*@JRXsnnrrP=g z(v08)2r;UIAY^!DikbRY&@9zcO%tl8n^qp2a$1Z&?E*^m)YEdRr=OM+oPwGZoQ7JE zJ{7B!SyN8ODt&tBlnl1Po8sT}(5YFa&75?4YF>ScY8NU~>`n2U)2qZsNH=GD;+3z? z+!fVkm{_5kV05u;pUDM|ksdc)F`M#XIUg5@DVZdsn0ku*$(xJz6vU9|(KoNu!J$i6 zZLh~~oMyq6QtLD(MI`0*&CG}mPY9bWe#gp~i7|ukW-(`4uKd70zqzHO(}!B;wZu!_ zXxmI;j*&xrI<$^Xt)o-x=+rtowT@1$qf_hX4EzXq ztCIP@8fwu{tA^S%G*3hGHPo)5s?E*KI|Nk zVQdV?#w`9{9>zGfjzjCB>OmHrP=k7^MJMDC*AKM#L=}pvS6Z|phgzv8U2%BRvC`FE z($-NgzNn8kSw-Gsjf_2(QaFG8n)X=SDB3P>c9s!09LJszeJds*uauCZ>WLB*EiUO# z$_A&Ya#5{BbGAJmObSd+PUre~1hU+6*K-s@-DFy{#6hoABL>+`m3ZDXg}kK3yi%Qp zLy83|JF>+15i7WAtB70}Dd+eVwkB(VUxUz}c7*`evXq3O0ZFkh(I9)?c6PBAx z=gjnY{bbt4q&QS;gC83k%=oBf=ZsB;lZli}ejwIVxc&;)KFu-H6@C!%NH^J@%g=9f zmLi#%rV>BxTq|8}aw{dX`5Wjh-#~Bu2722!(C2*vef~Gl+Z(?^PXx}?R41nes|?4r zc!(5{9=@C6lqb)@jDyOC_^MpjbS-lXwj@OiyJt#WX5HP3x+d3BWD^L zDg`g^S|whja{b17Nt9K|uifQxgWAoE-nuz5Te!kZneR@<U1eef`u{W40q^)a!og>>Phqeh~;J@(~fEIo2f)2C9$G52r|#HB!9e4*v`0w`IFXm3Nny0 z(wH|OEav&5rNo)MnnjZ>t#8PC}Kpb?~+9PhLOh+E=~nd3oEN~mCF zEU!=_VV)NW$&I!}ZjcK#w^810*Z*QgNN~SoSOt0W`35)8K&lNBMa!t|a*WZYo`U7@Ae7@>PFB1>ibl->FP}B|8Jt{D;jPN? zc={Mo{_NRg<)cHUGin)i-J8sGu4&Me50P}VyHeuIqTNQ($QY4szSBl>i0k9e8u9dC z-QK7X>y;Z(i7hmXqU}Y7O1x-dJ>vg=v5ZJhwo-DVi+Hi5&DbJK{=!!Ij~ZGHqUeZ>r4%zx!KD}(hp#(MEnj4UxqMlrg?b~1ce>P_(HS9F=-Zs5z8@!)wPYO!S| zj~?&n%lUKD;8W4%=0+=RN0u9T*NFCuepX5Ln|#-$?_~~8G_5t|8?0u9?YLgn$VXS$ z3OB|rUcW{DC>8eyo@a>_IV*3K#3#(ypj{9uql0n_YKHQ*_%dijhbGL7S(G^EH{wG) zK1RuQ%+!$KWvnK#v3%LE=Zu?`nql4!WB^9SMVm5f{iqJPa^F{)MRSwKLlaqJ7R+L5 zh_|_1Qx~uEv=LirnQqZ2)cPsYB#)ozlM+YK>UH`kysnx=3T+IflA@$kLivbFD_^`! zu4-=i3siVwS;m`Q4%8a6jCec#^!2Lj^q2WL z>f5Yh>L;qdT&1hlE|b>B{M7X^KY{(oi8K~j>>D6+*_Ws?+UN4~x{5g=EGcu`-x;0h zen>>V2cYkDQs%y|Mpb~1s5RO`d%R8`_DleOYcsEYA7FjO~+ z(!i_7FCJfRwS;_jRY=u2znpvnby4}Ug3|IW_6y7xH5f|Ix@xgi6I7O5XigNKuSS<& zH48-%sv7jURVDh|)q3=8@T*c`(^MX*()7ja0`-F@%e1OW6sxLLUz}gD3X2SgKd?t^ z`8y(iJ@KnQi3A@D^z(Rr@L?c$_Uec2+)l=`DO+c%zXevm|EmAPL4WT3KglZuCIA3< zoZG>`pv|z0fsuiUfk~Tj7Xvd80vY>(R49W7gCT<|gE#{N1Bdp01{MZ?23r&nRt6Uo y5r+LhgQ9`j9FP<-G2}2r0!54%sHmHp6ej!s|4&LL<7hkWZc0M%Z$vagN?u8mU*%L=t*tgX ziCgB@nYqj8xuB1@M@NZIx{Ig@$X24sLT%U$=;c{%uvjlPxHwtjc})JoNBkFmGhRX| zZo*$+!6*KG9xwRgFJR&cC!;K|ZP<%O=kt8u82s+c?l+Uu1^23+@X)B5AT$w4RL>-$ zH+w(u+w4&$BA|o_ih_a)VhzNA{vhE%R1^y{Hy5RIWvpF9>8f1D#j0KAd5fe_@6x2; z!;;AOm-hSp-EBL4hFcd;{Ek^NZ{m>z)jNc$T1gr*x&Qrtlv~x6z^96wB5Tg9iFeWi zS?BI@A_CvZ7a4OH6A$EUI!N_-@p)wzpp+KbJBslymrO0opqUIkQ+P<-2G0TUh@#@} zi?ubK8fn=>ktCvxA@T1Cb2-t)#^I*Tkui8x3jgol`fJI1Trs!ie;&})bA&^zd%vmO z`%ic!&9HdUcA)K|bqjphH2aQ7lXp{uNx_@uO@&;;`M)fQ zErM;Z9nv7(zGk>4`}*^~FJw|6wY~1X2hZ2i*=sM9x<*6@zvasOl)fb0(N*p02BjE` zLo%ogMhmF0$##k`_YDLD2zLAQo7gqZu5>&(M1lkf62!N@_m7-@I@Yy*=Tx4^LL?iv z{3&YBgUEEak?C4aw$Pn#|7m8B} z9WY=4d8e|TgP@=vx~GXsxI_W4TFed&40sn&d!PjHlS|E0$7)W`7ZeX+qNy2~ zb?7q9EQ@&w%|8S=VpI_0@}o6jZTUAj5$);gjLOtxO^@8n_{~X(htPaCDpzeOo1BVv z1f6lS&?b;ZUn2@~UQ;TDk@u)9RGBm`Q9BYO-4z4?nZ>;D>>GnL3Wo^rjf=^Kvhku9 z01slyS(3#}!8P(457rF;o0D@dt zUuXYvNG?3%k|}dY24vd*qW`UN8>X=aGRCHp!elU8I^;`PYZ+3%v28NvU2I;YK3^{I zX)lmC$|z7FlX})Tp}Mj~oU3NFJFLuytQ1RiV{I%D8q>y-gM~Y^H)uPB3@S~3(=5ob z9qg=vT0P=00z_3saPwm;Mnu%(T?d>nk~1Wd4ai2xK%|2-ubd~_DdAby8_txI+@yh* zEyn=l20|uk%8mw@6GO;gD7Pq$ycg9N=!l6Os~8#sSkSk%47suJ&bh`?;e=H%E>}fe zv5f9#n^nWEmTW7A3q^-Uhw*C*91sCTD2AIs#0aDmh}1ObbSxNblOUJfD@3+jq4GI} zE13j^DuR)!gCe!TC=CaUHpB=q#{9$_Z@ej_I!vc9%WR0b=FwYhDT7TmGeg1H2xXY| zGCpv;xg)`b$i>3&a@9+bDd$uTq#@VsipY(Zgq#Xb`7~ILaH1k|vVGAc8VkXK`7VNFQ0>CCrXg9$6ET!eh0+ut7r?@Dl>k0y z?rz~xNBajX=1wtgjp0pGVPrMZhlKfGnR&p@5}gn4tPZ^LGRK!khGLAYP=;U<18pR34iTKUUm#f}`d;R3-M}BC3~! z+)9zT*kGeI)>_8=P+UZdArUWy0R%}r4;5B(#`}Lh@jYm?Ck}%~ z@1}uW0sY(cz`hDLGrj(TG$kmo|7pzk-*3Rn6XkmVF9YgtbRYIs!)kGI0PBYwb$&dt z8i37+Fx+PGY@Rdb)_HV(!~VkgENgkU>(3j^J7?4EoU`YSd1C&=5tq5##P|6h-~7|z z_qv@n3HqbAnyL-qSg8ErW2U?fsJnsp!KzvS>uv<-r2zFMz*d`hLkXH53(H-#sEJ-}Zfoqyq$#K$VCX^D4V}Ip)*0)ei<9R|9T{DFY)!!U7 z-@r4qEcnBcYsk<*8bat;Ywo!SDY{Aw+ImlfVT@zZYprbHKi8h9{Hai%YvOYPG82$E zmd9kGSa2H|vH0Q7h7qsZjFFJ)`(a3rFOD#=xqS(e#pA3~edN5oF{ij*G;-@fncA1R|%yV~ol?b9giTQ7ojYeb^^(lEq2fOlZ7|&!3As3aMPJ}& zq-n@sE6m0A^8H~Yd`%A2BQ}}dJ{Swh=pww_m9!xx5KE{ebP61e7Z}9Th-`dCdXNG~ z>9|hW66$@(!I^=wMltF2s9`kKJ&w!{wnE12FT~iJz81LyW>;OE58~Cxcy~Rs z5K0l{zyw-Y51U-!^uP>h`-3?ar^u?ZM#>v|5o?o#PLimO*fpft1mkwg41ME%t+V(W z90#)1U>d|NUtMxWDS!-YQ-ID%J~)NBugmDYyr;vyOebzt7Cv! zMykDAV`ifz6A6eWCQG8&v&e4Fa%dV8=-K*3*)LY)_Sck>n20x&V`8mRn}nhluA9J= zAFZ*-Azd`LH$+xL^ZWoGWNKGWB2zXZ)RE@=uZeLK2m33MPK(0p%)jVlNMaOo2Nv|2w-YAC z<;)o1pholNA*1HYvb(LMy=DuMx_x_p^CoxKP}|nG_@(LSw!LFRbXbQn37zrbBX5mr z79~vu315jl)JIl%xN@Ie_W=zc`qlvcSu{WnZBG!f%MGKoPZM{3pWN+h! z*Im4M-%&4U?MO~_wO2x2ts4`Cx~K|ftg1@uhxBVYZKo!|_PFr$f~IZ?1AQA^ zZ)4gw((Bj0axr2mpNT-SV&GGdA*4Vdbh=0-fkj;ri?iAbu__V+Q9msH1fi@nR{c{M zm_6x(jJu8NW>sRS8Cb2FNgzZ!$A|gd%Vp~XN3C;mk+*V3ES|k^b{W0VwF0Ao3uOWs zE8j%1y*L_^(8oL>kS0^xmzjz;YV3Pb6xQM>st>|g{* zJ$hW=fzN|$$Bu9m+WT?1TJeXd%ZcuEC{A+FH_w`kZ=g&P8NNMC4xb=~Lw-{se;Vi@ z$zcP`)VN!6&fiMhX!-<00XOq%b`P~KH{7Lt7q=r+1_GE(|)R~pT+a4Xk2@j1yk~i>+c3fZBlt+ zG~SkxP$Up$8L;_)Cj2Gw4S417f;l&4XDC2}PMFaZ5vo zLNdXNR&3PY(W+UpQOWGIb_Glu3PVDe_LBF_zyfjkhW7X3XV_`4!mODw+1V-7ijHZj zpUwpx)(^dcZWCX*Y^2($=*HROZ6veL;wtr@nA*Y*h`wJ}T}i0n5d^Id0kG~ho9$ub zRJvURObd=WD~Ev2!N&4S14}kJ(b3`I)zxw^4Lviv!{sQ=LOJuyf(em4gG1JCL+7Y# ziR?X+RhW*{)XXctq0YLLp>k8HI(x=hszf!7EOT`Pmpw#P%FhiaO$W7GHzc|Z_Gl_q z$e}h@vXDVan(BNA)2U9_N^kG0pO#2=bNTr zq(YTsB60Lw%g#``JPkr(ZFVhNLwzwxA*psQJ1cAF)VCuH!)RZ;Efz?KGP711o97&o zY!)l`=nKJ7Fdo^d!7Pwms1sz^T!?!mTv4Cta_ioBcd189*_G%LzpQT&Q~R5wj?;7z zV2<{HVN`iXJqY?D9T%o^P=77+QNQ&Fyrk`)PZm``_lP z^hy-H8qyDrHH1GU8A#tmhPJ2We@`_~r8X!(XzR0qByVf?feu4;ERr8IF>ULd1Dz>V z(?-~>3Dj~?sv$BquX1X)lv)uL{f~*ut(Xe;o_P;J5u0aR=FhxJ9D*V>H($0MKOH&k zDyb4js+x8s^33Thct?4*ws3Vc9u=@el>KB4%?6skGfOCvxYzi#{z-OH7$YZEMDiZ2|*%b z(pIyj&jQ$GdagM9@(i*?770<`S{f!-#iwC9vomo}G%X>Np#4uCG6jzDE=cyogPH#| zap(nTa$#1GY5i|rTMF5V@ktx2=k@%y7X=fYC|Xe!8y;-+FThcpPL;L$D6n&QIz|w; z(o1s^&rBfd&iXh?B7iNZA*x>Hs$P|0ngzTcY_RP#`UVM@f zzsX1cIs5OslOz!E~6+PgVRNg0&i=xNwElt!V;|yQ%nzOKyjn=smnf=X9 zjnVOhYTsOGOa0`^C>5cHs;L>ro_;ixpy5sr=T2ln{=rlt(h$C@HIvxbAcWF`7NqCA zB=?-Cg??XEc2^y#u~?SgRXXp+|9|;kY2kUP5IPMA(VelfwXyp$OF|FIsS0O_jf5(S zGNGKRzaJIz4&`HQ}Cf~q{|ngj}gnRNq= zbHdVtFFMAEtn@i*E1Okhubm|g*OHn3#`rIgWq1{s=YLJ2BBpUXUX(>vi})5~4|@i50XPEpIVWC}Y9 zi()&nGKYpLVoY9}DEg`tJfCl&E0ZINF}fgle|PrX+@()gA>+?yblix$nfmB$=auv+ z=j(ah{ROl8;~u8IhB5b*2svUGp2#Z@^At2j?Y|bk_;sT>0@YINrnj-|xsp_BT&#+; zg{rJkc!ef^i{S3l!bF}BGowEwa=;QDj;-w%iUusu`d_=hBY?;hcE7%F8L(Xb_FNLu zVkawO7Qhm%Hdsy+@-fMzMyzVc4&PV}b-qhrPKmWqp}`GU9MH!WMli2p5q*X_?3AGI z$zbZB`qGXut<94vMX7{ds=7u+V0VGr%4<+Fx71ep5Ax4wMbq|6_$UV%iHxYfUBm1t z(xSD~aQqZEaIWep_tED~yzm>|KZD(8&9W(&mtz3_t37KuyF#^MEcspHbksBAV2yRi z>v2bIUv(*4zD>yQmXQj5J>vpA9_>1;W?ULqP0tR_!)Oeytv~mtB}7Ye1Q((W4&|{b z%63ghj8evX?O3J)Yc^UWe(%*|gdp+=!Jl?)@26Fwy{pMe{zP9L)y&Uau#dqRE+^0x=zWb{P8v@8XcX_5vz`BuGGEMzV46C3zwu=Sh z?L?olxG#MEb2UO-n<_Kt9OBXPd(?VMsE%H-V4UUTp`{o$o6@Mq(`6RO_%BD2R3jEZC|C(xl#^Y$M{SJHB{`w0k`!G%%_Kf|D&G>jFSZQgX;z%Dc z@?0?eCwYx6(sM;6h0T+V5%q26ISHE8;*brU|61-;Ni_@o(-OkGRPWumv1@jJW8Dkw zuM{hwzmfa#hU$jgCU>fwiNj%R&(--GlQ!P5+;Jp1?r~v*t#7!2>%9{pO86$qDQ>Q= zW5l?Ipreh3WBsh@dt+&;_Ifs%`>fmwODzK&IiX?{2q7;PkvnYJ z=2RKCWsQHi&zrv{Tu30aa-B?`HZ?}+BI7ABVVuOU#-}%$RUFrJ(h{)KYeO7){iR(O;T_}&`Nuwt$40xj90*e3a zp0u1cZPAsy1!r4n>mC-bqwf)Bg%yn}4FkxbSCYb4gly1O{jU4z+Tbv0>540vi_W%6 zU?cX{A%|hy-ADIE8J8Yivh=3#TPz*KpPIN$Hl;<$^z@=F(ZgX?&(&VbJxFmb$ZSpO zCR^Xj?A1D@@ta$ZOdxtk?##O-kR11HxDw7=dhhjG2F8A!ZO22XC5I_TGQa76f^)3M z7%V|p)hUTVl}UqbqFB$B-Jb%3Q_0zpshs9yi;W*$-#BNIj9wX@IpdSU6BoK%NLNG- z9mM|QEK?9ThUQpnUc{s{JAbkc2Y6jTVrn7}v#kL!^*adaaKmZ`L`YRrZi^>HP^5 zED+yAE7?aBZeE+>$Q%AwhJ~rf4sok4%n&Ax{JQbB!PRh^pR0QfmBF%}rAQ~Tw89|0 zkut#jzub{(|L$wDR+)L=KVRJhKo?)NmrQ%pK4R{h+&h*%?802jU|9Nn^Wv4?^WdL9 z>+z!ej(umH9gYp}+YXsbbWda{6lHtK{1+!)n} zfo56DZ-*CChnq^zt-P(}IZOGa{Ju24MLv3tY<`Gz&Xdn+lEYDQ;i%rio>{E;aO5#2 zCA+pYj;R%z7}F`L{~S!2sw%{65sXG>hNP=CV%DRJsXzC6<1)4jL z9Wm`@Ez8eK2}(@)Ajr#~gdGl{o##(JK8-U-$;frbb7KO3_ytHcsmUAJo+TeP`MO4V z7S~ne_oz>>;0)y@Sp!0o-=xQ}!TwfFxf54-k6D77A3G+fX+ym>Ix9QN%hvX{6vENT zVN3jHTW8(fK19PP7?bXw;NjNN1J)$D(GVd*C}n!Go>3~&F@>&P4Jmvrc%?#xccm@g z5P7rypAxTomfy86z9ij!u0BBFk;+eIWIk8;g}RZ(YZY!dae@`jG+uH)!**k*6ddG` z=j`&(&GsbWe%+>LlRG>Qqg$GW<+ZV^Yl7^aSz$P*r_(1ZKz%llo8_t6N$~wh%lBT7 zo*W)r=L-f#o-7A(^KL|#@L>?wS=F&QG{ZYjo?iBEgJu}AmJ44Lv+_1QCo5oXw>>SV z?|I8*gw})$xlcNvb2DA}_DmAekV#fX&$CQsXtI6BGLU68UxVXjsJrG~feR_vo#=No ziIb1>D!-B1C%awBHlqUu|68o2ylOA`xO^PPG~xtv>zWsC7#Q63;2io++dWG~ zmp&C{Dp_RQlb-t=g#jfP-tKjQ0Lpq#29erK0e7@We zSgmI0&7ipO`yTE~{l(NzE(y~5jOV5+iEJ{0P1jqpf>pG@1$K$SZ2sYmXteM&nWypL zo(w{&l=)fy`yU**`N6O};LJM#mL6kcY-j6)Vt$%VTF6SE`hM#=+>Ep*Ey2W;{6m<+P!kwd^eu`-QJ&ko|Q6G1sP)+F7we#Oopz8T|k*G;*ESq56h{ z=|3)Vb>#bD(Sa#4N9P64RQHA3D$;rV1JfFwr_9kweJM3eQMe7d$DRwehT08TdbbZw zjkHS`7OYEp_vOs8?oOxnPXNURykZ4{wI|B-1!_yUnQUG*!{M)rchHrw9J4sZ>_9xQ z?w?+N^b>Lvw`@Klf8DZ+g!erUWCh1_me`^^E8c$rnBjR^OkP#&?8LF5jd>q7UvIZe2wVA`I z#E%6^D_Tu9a8aL~YbG^mb@WwZdn`NJ=*XV-R`#oTxkcWS^_K<5l2lJO8NF9{bBC!! zm#bT9Qz=?!9-<`gAw}48RXWw1j(-9<@1^|0D!S_WZT;22jErP?C`*%_t+FSXa=!mC z;LZAin`PASnzit*4=z~-cENnJm2!(tJ4f+7N2A|5l1Vv*zTnjpT)(+7k64^5eOOaW zoSvHiyDe8G$&$eBoqqTPT6)`&%ugt%&FSN<262*~Ae^yWfX6NJ>+-f}&F7)_#U>WovKA_LneRW* zzg_ROB5`Z-K{(EqTh2r}wC!(1&!h-*yaE zA?y<%yS#2%7mPBze68L-To0s__2j6J6=Op7Inb{g;1<1p9$OJjuM1#<+L#U?>^#t$ z9l|as(9i1xZR{y_4b7KoXBn_=9!8eoTCV&$P!4~cON6@#k)p>dWB_thRT*wLiE-l<(B_P971oqZ`44WAsap? z1u@stl31u1?ezmzl%O!iqhOUq?7J~SytGU-FCeFYcQ0AX(`{*tj@E|5a>(!sAs`+!$;OIhijfb<#c zayt+#R-B8r<(L%(4go!K!V1DrhS_1W0%;{URRjdiPO%UU6S^l=3{rBRTRwx1ucUWK zzu}bDdGF;-+LIo-+tD?{x;ix`W`cXDU~;A#3-_=b66H3dajD&EESEA^@f~xDxBej4 zf@>a?t!AhdSl*_=o2)ldjx^ubXAH^>E@G7~3qkt`l(cdz^j91&d~vh+c6q%e$D06! zZj4A~#TFz+d2cDeJgPl(N>Y;EhEx^ONsyS|Z_6zP(~E&6__uT7W>P!ZW>-}u1#3>2R1j(@eUtc>J(1QGrEcuavNrg{a{COfy%Rp#cwcHTA{#b zjDW;mV%?7w=>kX+@Q#$`b56NV0*@M%4kM$P+F2-`NjL#`*H8hqi3s&L2bEy7PDd<{ zM4ID9Bf{|ECMmF@yB^g+qbke;RgJU}7IXG(iMAlZ#3y4lc-4Mxc3xw-56uBxRl}~` z6dBs~o`U&fkPxfQHgn7{$5+wjCWPz!nTVn#F=^Ii4-uOdvMrH_X&qS>YFn#Re=k#9 zL9PYTOrN*nBZ*uYfwibnH5$~=RLdZ!nkQO@h!Q7+7~06ePF^3M!!$=ngV=7b%Sna8 z+~H$%$k%&JtbhZ}3*;@qZkvQL9a@ait11i5^=*8lrF-Rw6tC|TJ&HUE!~`K0qnI;F zI#I4GlF_>SMzmC-Cj^6QJYL?UL79_fnr9ZEmY{BUs0#hj#*9re8adskDQQ*-Ww-S^ zdA+s!f|7>7#Ubt1&N1s?w*2Hti)CF2QLBNapMH~l4m-M3%>7PI_9IM+o(_o{(ld=1 zW>Tf@Xp|YEPDes`y&bcBTb2P>ck6HQBgNYNg0c^R7kA*=I2TQ`nLF|`sx8FV-4+_F z>-E18>hJiFoY7jh~RC>Mp}P1w(Ii47O_Y756Jwy#|(eo-APr@XhFraE9D?@ zip|~@V!4sMxGEXOK{y+LAXYe@!X`y2Yd&SN=>;~J-IgXHEMCD>W|TEjE@m{f;GP(= zVP<2$Z4`6Qibk>8+tRY7K$}7!%8n-)B8E7H2D3A}VrW;rkcJSPBpt3s;_1=ACNa)I znA!OleB~ijH`eYZWW`SR25HV|1tng#<7KknPjbUWMs$$#V++;ZGk`g@V75~}h83j5 z;aZNi5Gx#0XOz&CvKUN_Xma8CeqBLU`p#7$XQrY#mswN=FTx=#pp|3HQW>`CZfOb%iB|LKqsl&J>SHD5hUj=sMu?aJpg~X4oR}*^Fk(vaCv& zOB_lbI67WGtS4Y)c=!r(nT0JTX& zJ(G%+FNI=Hpe$MmS3zjlOATdoyQJa$m^F$POYA}Cr71n$zZ1Zta|<<{cdg!TEP9EM zZ=l{T@YL_#sjem@cP0#TdHHe?i<4GX$w4@aeEps5>G!Z;ixOPeb%l+U zXrS~m%uC_tZ#|L{uXSoMHO+^2I8@5zjG`HdA#*4LWlCo#9vOf1)II*rDTlgHJXuVn zR<68^BsNL8>tz`C7R%C|ijiq?2#X$vIFVc{c~SDrp|YkG>rz&9Nj$!Po7bjm-sZ$Y zdeHAL@(J4`#DU^ea=K`tm+t9zcWPiVd>!{0hP!p$1L50dptayCnsDOF15|x4vj|^hnIim zzwbSgYdQ2CL&fr`Q|~hyQtskCu4M9i+fp{WVa_P`5=ABn+(&({(swV9^vV(ZiHUG` zo&W#m(N6oleo{&whFlv}?ga^o6t*S{H$AP$4RI>Vy9%@!cHJr^JHF#8P*hV43PcR* z^4pg3phm5L(nr6$>f>S%C@2G@MpNr!a~^)6dau2FZfqP({v`mc9rK5st}jcV{P5 z>vyA-{qAB;0Mar+@70lrgK4^oxUKe|KHpb8Nka4zlM$H`)^*Bg%OGd%;*HQjF=*$r zx3Y`S2x|GZL+Gb(e$C<1cwsP_W~iv#wd;$5lGCJ;;m?ACbC9KYxXbH@8Uj34vAuU! zq-OX>Etzl#HCYG|)bx+LE0yUrHbG)8g6#|}lLIkW0V|~#3S%>{)_ARt%1@CT-2CKG@t{4+qEj{aN zhYh5hk*ur0XG{mOdTu)%>W!z=x)xXc9X1(uo>6t0UhVHS) zTX0HuQS(tR&d%4Nk`^Atw0S0QFHyW+Fs^%rD5jjVTe=SC)xeH~FTX##Ell6WWtwe# z(d`Gd(}vW^q&Vd+FT+#J5DlaJk)4N5yZg^|b|(WQSCwebjyw`Hu!$vSe+>@453{s? zb|W97t{ToZ6hdvURPR@~wqfNq-N;G7332)L@0a%l-pB2tZaX91aS~ijc^;v6uA0>8 zC2j&?*Cf!1Aypsa_r7|NgG;wN&}->ON#9dy$f{?MB;-C#i~s3D9PAJY{pjT=z4z%o zAow&(fr%^r|Bk05-QMRN8u4AskGQzVr`H*STt~W2pN`V-p5N0c?|QXqn}5!~k9!0= zh79}Yy`bxU)``%jOPOBdH8u6)av$`s;S^)k)u~{Y4=$y4jxwjN_r7@#-@+-_Fc_J- z`3lpwtMXzW1qq>q&(BFcX9q`aWQ)pzLMr3O~( zN+Wy>B+|HniN%_fNfKfFV4N8-E~Cc`1vkG@XP^&?2CG_BT;TZX?I5h<7pEBs0e$7*PayA>PkMivt^E=$Av4IA&Gki@ngak9rs>s+=QcmXtDY8 zJqgn*7VPAaLO66wxC+t~OY%|&u!*C1H(qWIX@2b`DBE3R<=Qv`PBi6k<&A`S&LsFx(DI0`S47?rGVj ziLY9tV1}@f6l!YRxEtxLX$4UF*BDk-0QQU;kmO9GJBP% z@NXq-Y=(j;9Mk7oGf8~swA?QhlWwA==AYlyD*W0{B`i~qm%;HF_04J`)CIam8I!Y1 z${*RV^N?HnJ&$Th!>>-kRSIQt+45l$a&rmrz-P$l+69hgQuMnR2Fd_iCrc`H&aN;9 zk|honRua(v{@FCIxr|t4#TajPzz41Dns;wWsbN7;=3#|QY4JLTrovqt<@MhGTxa`t z*`g|N)7Kld!rt<=4y~@kht&W_ zg9r)I^S{4)xyr2aHg3jjx)Hhi8C?4Mt{vV1bc2T?HiPTsL0;Es$ka#wd%L=W;rmT) zwQ)Jbjxzrys?uG`=ZR&%3i&DW!*Bs2Svc%eYhJsYRw&cH@xsHVvvw8#HCL$M|=@r9_X;UGJ?) zrIoWjg13TX*zga`MfAAz*LPm9-%Z*a*;F$!Sy))YD$UYc_iftBw%%PHex@-{!b__H zD4?C9qzEJjQ`~zMPVtyL=OrEi3M)^m%PG3 zXi$A32EoC|L$R9RMq_BUBgE_RqU&L`jC2HYO^3EYJkg?V$7nBL4g|S}$L_W;)-R4I zCG?R=Ax#IGbu}sqr0hf(=UJSJ!JZ&+k0FXF0D?~Gz}7FzkTL9bGvO1%2Le2Gqp-m z9Xf@(!qY*owI%KJCANyzaDrYEFoq4_XqUzJHcVySQAf8rV$dbj+8tSd~q$)5paD5Zn-6`*dfDP|1;(&pg z?sFkPx((3~su*#YWo){N!(|bdd2=Xe<0Lbq%cWzpDO6{OG^NTls|lrPXD?Ei9FNox z6;s|mCq@>hrr9L9%sZ{D}f#FIOeW=ak?<4E|;V*9k1r39XFN{FUe*yojp=XrF zA=h-bVdh*`$p8KTg+^iCKOhh=D9~X33g-XpA%GAfh$+kQf+)#~s_BMl*^cY^K^VnJ zn&m}V)lJ*=!#K^$y6wk#{Q*D_7y^aC5l9pogT>(qL=u@orO_Eo7MsK6@dZMWSR$3l z6-t#_qt)pRMw8iMwb>m`m)qm@`C$abaDt?0hUIuclw?KKbi=f4hclp?RVreBUzwHI z9&5*SWfqCyGFTZE-`?3yXr;hHJ#d&lURkd=EBk3Ym%4B9eF#8`oAg#117{K}Hpu~y z;%24%5kN5p&LmiDk^>;c%}O_c0000000000JOwj=5JCtcgb+f?mjcGXnFK5EroHXa z3@D1CD1XJF7z1Y#EH=pjkm6>gX_}^Knx<*G*_iZvsvwFnV8-?4z$9F$fl2r68)Kp0 yuQ%EL*XQT&8D;!lKgWwL5@ejR@k_&{P=3vAnL$TK8A>|s90TZif7FrxpI-nbaROlg literal 0 HcmV?d00001 diff --git a/vendor/pebble-slate/lib/js/main.js b/vendor/pebble-slate/lib/js/main.js new file mode 100644 index 0000000..09f7684 --- /dev/null +++ b/vendor/pebble-slate/lib/js/main.js @@ -0,0 +1,377 @@ +'use strict'; + +(function($, Sortable) { + + var ENUMS = { + COLOR : { + EMPTY: 'transparent' + } + } + + $.extend($.fn, { + itemToggle: function() { + this.each(function() { + var $checkbox = $(this); + var item = $checkbox.parent(); + + var $injectedCheckbox = $('
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'); + + item.append($injectedCheckbox); + }); + }, + + itemCheckbox: function() { + this.each(function() { + var $checkbox = $(this); + var item = $checkbox.parent(); + + var $injectedCheckbox = $('
'); + + item.append($injectedCheckbox); + }); + }, + + itemSelect: function() { + this.each(function() { + var $select = $(this); + var $item = $select.parent(); + + $item.append('
'); + }); + }, + + itemDate: function() { + this.each(function() { + var $date = $(this); + var $item = $date.parent(); + + var $injectedDate = $('
'); + updateDate(); + + $item.append($injectedDate); + + $date.change(function() { + updateDate(); + }); + + function updateDate() { + $injectedDate.html($date.val()); + } + }); + }, + + itemTime: function() { + this.each(function() { + var $time = $(this); + var $item = $time.parent(); + + var $injectedTime = $('
'); + updateTime(); + + $item.append($injectedTime); + + $time.change(function() { + updateTime(); + }); + + function updateTime() { + $injectedTime.html($time.val()); + } + }); + }, + + itemRadio: function() { + this.each(function() { + var $radio = $(this); + var $item = $radio.parent(); + + var $injectedRadio = $('
'); + + $item.append($injectedRadio); + }); + }, + + itemColor: function(options){ + + var options = $.extend({}, { + sunny: false + }, options || {}); + + var layout = [ + [false , false , '#55FF00', '#AAFF55', false , '#FFFF55', '#FFFFAA', false , false ], + [false , '#AAFFAA', '#55FF55', '#00FF00', '#AAFF00', '#FFFF00', '#FFAA55', '#FFAAAA', false ], + ['#55FFAA', '#00FF55', '#00AA00', '#55AA00', '#AAAA55', '#AAAA00', '#FFAA00', '#FF5500', '#FF5555'], + ['#AAFFFF', '#00FFAA', '#00AA55', '#55AA55', '#005500', '#555500', '#AA5500', '#FF0000', '#FF0055'], + [false , '#55AAAA', '#00AAAA', '#005555', '#FFFFFF', '#000000', '#AA5555', '#AA0000', false ], + ['#55FFFF', '#00FFFF', '#00AAFF', '#0055AA', '#AAAAAA', '#555555', '#550000', '#AA0055', '#FF55AA'], + ['#55AAFF', '#0055FF', '#0000FF', '#0000AA', '#000055', '#550055', '#AA00AA', '#FF00AA', '#FFAAFF'], + [false , '#5555AA', '#5555FF', '#5500FF', '#5500AA', '#AA00FF', '#FF00FF', '#FF55FF', false ], + [false , false , false , '#AAAAFF', '#AA55FF', '#AA55AA', false , false , false ], + ]; + + var mappingSunny = {'000000': '000000','000055': '001e41','0000aa': '004387', + '0000ff': '0068ca','005500': '2b4a2c','005555': '27514f', + '0055aa': '16638d','0055ff': '007dce','00aa00': '5e9860', + '00aa55': '5c9b72','00aaaa': '57a5a2','00aaff': '4cb4db', + '00ff00': '8ee391','00ff55': '8ee69e','00ffaa': '8aebc0', + '00ffff': '84f5f1','550000': '4a161b','550055': '482748', + '5500aa': '40488a','5500ff': '2f6bcc','555500': '564e36', + '555555': '545454','5555aa': '4f6790','5555ff': '4180d0', + '55aa00': '759a64','55aa55': '759d76','55aaaa': '71a6a4', + '55aaff': '69b5dd','55ff00': '9ee594','55ff55': '9de7a0', + '55ffaa': '9becc2','55ffff': '95f6f2','aa0000': '99353f', + 'aa0055': '983e5a','aa00aa': '955694','aa00ff': '8f74d2', + 'aa5500': '9d5b4d','aa5555': '9d6064','aa55aa': '9a7099', + 'aa55ff': '9587d5','aaaa00': 'afa072','aaaa55': 'aea382', + 'aaaaaa': 'ababab','ffffff': 'ffffff','aaaaff': 'a7bae2', + 'aaff00': 'c9e89d','aaff55': 'c9eaa7','aaffaa': 'c7f0c8', + 'aaffff': 'c3f9f7','ff0000': 'e35462','ff0055': 'e25874', + 'ff00aa': 'e16aa3','ff00ff': 'de83dc','ff5500': 'e66e6b', + 'ff5555': 'e6727c','ff55aa': 'e37fa7','ff55ff': 'e194df', + 'ffaa00': 'f1aa86','ffaa55': 'f1ad93','ffaaaa': 'efb5b8', + 'ffaaff': 'ecc3eb','ffff00': 'ffeeab','ffff55': 'fff1b5', + 'ffffaa': 'fff6d3'}; + + var mappingNormal = {'000000': '000000','001e41': '000055','004387': '0000aa', + '0068ca': '0000ff','2b4a2c': '005500','27514f': '005555', + '16638d': '0055aa','007dce': '0055ff','5e9860': '00aa00', + '5c9b72': '00aa55','57a5a2': '00aaaa','4cb4db': '00aaff', + '8ee391': '00ff00','8ee69e': '00ff55','8aebc0': '00ffaa', + '84f5f1': '00ffff','4a161b': '550000','482748': '550055', + '40488a': '5500aa','2f6bcc': '5500ff','564e36': '555500', + '545454': '555555','4f6790': '5555aa','4180d0': '5555ff', + '759a64': '55aa00','759d76': '55aa55','71a6a4': '55aaaa', + '69b5dd': '55aaff','9ee594': '55ff00','9de7a0': '55ff55', + '9becc2': '55ffaa','95f6f2': '55ffff','99353f': 'aa0000', + '983e5a': 'aa0055','955694': 'aa00aa','8f74d2': 'aa00ff', + '9d5b4d': 'aa5500','9d6064': 'aa5555','9a7099': 'aa55aa', + '9587d5': 'aa55ff','afa072': 'aaaa00','aea382': 'aaaa55', + 'ababab': 'aaaaaa','ffffff': 'ffffff','a7bae2': 'aaaaff', + 'c9e89d': 'aaff00','c9eaa7': 'aaff55','c7f0c8': 'aaffaa', + 'c3f9f7': 'aaffff','e35462': 'ff0000','e25874': 'ff0055', + 'e16aa3': 'ff00aa','de83dc': 'ff00ff','e66e6b': 'ff5500', + 'e6727c': 'ff5555','e37fa7': 'ff55aa','e194df': 'ff55ff', + 'f1aa86': 'ffaa00','f1ad93': 'ffaa55','efb5b8': 'ffaaaa', + 'ecc3eb': 'ffaaff','ffeeab': 'ffff00','fff1b5': 'ffff55', + 'fff6d3': 'ffffaa'}; + + this.each(function() { + var $color = $(this); + var $item = $color.parent(); + var grid = ''; + var itemWidth = 100 / layout[0].length; + var itemHeight = 100 / layout.length; + var boxHeight = itemWidth * layout.length; + + for(var i = 0; i < layout.length; i++) { + for(var j = 0; j < layout[i].length; j++) { + + var color = layout[i][j] || ENUMS.COLOR.EMPTY; + var selectable = (color !== ENUMS.COLOR.EMPTY ? ' selectable' : ''); + + var roundedTL = (i === 0 && j === 0) + || i === 0 && !layout[i][j - 1] + || !layout[i][j - 1] && !layout[i -1][j] + ? ' rounded-tl' : ''; + + var roundedTR = i === 0 && !layout[i][j + 1] + || !layout[i][j + 1] && !layout[i -1][j] + ? ' rounded-tr ' : ''; + + var roundedBL = (i === layout.length - 1 && j === 0) + || i === layout.length - 1 && !layout[i][j - 1] + || !layout[i][j - 1] && !layout[i + 1][j] + ? ' rounded-bl' : ''; + + var roundedBR = i === layout.length - 1 && !layout[i][j + 1] + || !layout[i][j + 1] && !layout[i + 1][j] + ? ' rounded-br' : ''; + + if(options.sunny && color !== ENUMS.COLOR.EMPTY) { + color = '#' + mappingSunny[color.replace('#', '').toLowerCase()]; + } + + grid += '' + + ''; + } + } + + var $injectedColor = $('
' + + '' + + '
' + + '
' + + grid + + '
' + + '
' + + '
'); + $item.append($injectedColor); + + var $valueDisplay = $injectedColor.find('.value'); + + $color.on('click', function(ev) { + $item.find('.color-box-wrap').toggleClass('show'); + }); + + $color.on('change', function(ev) { + var value = $(this).val().replace(/^0x/, '').toLowerCase(); + if(options.sunny) { + value = mappingSunny[value]; + } + $valueDisplay.css('background-color', '#' + value); + }); + + $item.find('.color-box.selectable').on('click', function(ev) { + ev.preventDefault(); + + var value = $(this).data('value').toLowerCase(); + if(options.sunny) { + $color.val('0x' + mappingNormal[value.replace(/^0x/, '')]).trigger('change'); + } else { + $color.val(value).trigger('change'); + } + $valueDisplay.css('background-color', value.replace(/^0x/, '#')); + $item.find('.color-box-wrap').removeClass('show'); + }) + + }); + }, + + tab: function() { + this.each(function() { + var $tab = $(this); + + $tab.click(function() { + var $current = $(this); + var name = $current.attr('name'); + + $('a[name=' + name + ']').each(function(){ + $(this).removeClass('active'); + }); + + $current.addClass('active'); + }); + }); + }, + + itemSlider: function() { + this.each(function() { + var $slider = $(this); + var name = $slider.attr('name'); + var $input = $('input[name=' + name + '][class=item-input]'); + + $slider.on('input', function() { + var $current = $(this); + $input.val($current.val()); + }); + + $input.change(function() { + var $current = $(this); + $slider.val($current.val()); + }); + }); + }, + + itemDraggableList: function() { + this.each(function() { + var $handlebar = '
' + + '
' + + '
' + + '
' + + '
'; + + $(this).children('label').append($handlebar); + + Sortable.create(this, { + handle: '.item-draggable-handle' + }); + }); + }, + + itemDynamicList: function() { + this.each(function() { + var $list = $(this); + + $list.children('label').each(function() { + var $deleteButton = $('
'); + + $deleteButton.click(function() { + $(this).parent().remove(); + }); + + $(this).append($deleteButton); + }); + + var $addButton = $('
Add one more...
'); + + $list.append($addButton); + + $addButton.click(function() { + var $inbox = $('
' + + '
' + + '' + + '
' + + '
'); + + $inbox.insertBefore($list.children().last()); + + var $input = $inbox.find('input'); + $input.focus(); + + $input.keypress(function(e) { + var key = e.which; + if (key === 13) { + stopEditing($input, $inbox); + } + }); + + $input.focusout(function() { + stopEditing($input, $inbox); + }); + + function stopEditing(input, inbox) { + var text = input.val(); + inbox.html(text); + + var deletebutton = $('
'); + + deletebutton.click(function(){ + $(this).parent().remove(); + }); + + inbox.append(deletebutton); + } + }); + }); + } + }); + + $(function() { + $('.item-toggle').itemToggle(); + $('.item-checkbox').itemCheckbox(); + $('.item-select').itemSelect(); + $('.item-date').itemDate(); + $('.item-time').itemTime(); + $('.item-radio').itemRadio(); + $('.item-color-normal').itemColor({sunny: false}); + $('.item-color-sunny').itemColor({sunny: true}); + $('.tab-button').tab(); + $('.item-slider').itemSlider(); + $('.item-draggable-list').itemDraggableList(); + $('.item-dynamic-list').itemDynamicList(); + }); +}(Zepto, Sortable)); diff --git a/vendor/pebble-slate/lib/sass/main.scss b/vendor/pebble-slate/lib/sass/main.scss new file mode 100644 index 0000000..d3384da --- /dev/null +++ b/vendor/pebble-slate/lib/sass/main.scss @@ -0,0 +1,581 @@ +@font-face { + font-family: 'PFDinDisplayProLightWebfont'; + src: url('../fonts/PFDinDisplayPro-Light.woff') format('woff'); + font-weight: normal; + font-style: normal; + font-variant:normal; +} + +@font-face { + font-family: 'PTSansRegularWebfont'; + src: url('../fonts/PTSans-regular.woff') format('woff'); + font-weight: normal; + font-style: normal; + font-variant:normal; +} + +$orange: #FF4700; +$dark-gray: #333333; +$gray: #A8A8A8; +$light-gray: #EAEAEA; +$medium-light-gray: #DEDEDE; +$lighter-gray: #F7F7F7; +$white: #FFFFFF; +$border-radius: 5px; + +@mixin transform($deg) { + -webkit-transform: rotate($deg); + -moz-transform: rotate($deg); + -ms-transform: rotate($deg); + -o-transform: rotate($deg); + transform: rotate($deg); +} + +@mixin user-select($type) { + -webkit-user-select: $type; + -moz-user-select: $type; + -ms-user-select: $type; + user-select: $type; +} + +@mixin appearance($type) { + -webkit-appearance: $type; + -moz-appearance: $type; + -ms-appearance: $type; + appearance: $type; +} + +* { + margin: 0; + padding: 0; +} + +*:focus { + outline-width: 0; +} + +a { + color: $orange; + text-decoration: none; +} + +body { + background-color: $light-gray; + margin-bottom: 15px; + font-size: 1.2em; + line-height: 1.4em; + @include user-select(none !important); +} + +body, select, input[type=text], input[type=time], input[type=date] { + font-family: 'PFDinDisplayPro-Light', PFDinDisplayProLightWebfont, sans-serif; + font-weight: normal; +} + +select, input[type=time], input[type=date] { + @include appearance(none); + border: none; + position: absolute; + top: 13px; + color: $gray; + font-size: 1em; + line-height: 1em; + background-color: $lighter-gray; +} + +input[type=date] { + direction: rtl; +} + +select { + right: 30px; + top: 14px; +} + +input[type=time] { + right: 10px !important; +} + +input[type=date] { + right: 10px !important; +} + +.select-triangle { + position: absolute; + right: 10px; + top: 20px; + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid $orange; +} + +.item-container { + color: $dark-gray; + margin-top: 15px; +} + +.item-container-header { + padding: 3px 10px; + text-transform: uppercase; + font-family: 'PT Sans', PTSansRegularWebfont, sans-serif; + font-size: .8em; + font-weight: normal; + color: $gray; +} + +.item-container-content { + background-color: $lighter-gray; + border-top: 1px solid $medium-light-gray; + border-bottom: 1px solid $medium-light-gray; +} + +.item-container-footer { + padding: 3px 10px; + font-size: .7em; + line-height: 1.4em; + color: $gray; +} + +.item { + position: relative; + padding: 10px; + display: block; + overflow: hidden; +} + +.item:not(:first-child) { + border-top: 1px solid $medium-light-gray; +} + +.item-subtitle-wrapper { + font-size: 1em; +} + +.item-subtitle-wrapper .item-styled-toggle-wrapper { + top: 16px; +} + +.item-subtitle-wrapper .item-styled-checkbox { + top: 18px; +} + +.item-subtitle-wrapper .item-styled-radio { + top: 16px; +} + +.item-subtitle-wrapper .item-draggable-handle { + top: 18px; +} + +.item-subtitle { + font-size: .7em; + line-height: .7em; + padding: .3em 0; +} + +.item-styled-toggle-wrapper { + position: absolute; + right: 10px; + top: 8px; + width: 56px; + height: 30px; + border-radius: $border-radius; + transition-timing-function: ease-in-out; + transition-duration: 0.3s; + transition-property: background-color; +} + +.item-styled-toggle { + position: relative; + background-color: $white; + width: 28px; + height: 28px; + border-radius: $border-radius; + top: 1px; + transition-timing-function: ease-in-out; + transition-duration: 0.3s; + transition-property: left; +} + +.item-toggle { + display: none; +} + +.item-toggle + .item-styled-toggle-wrapper { + background-color: $gray; +} + +.item-toggle:checked + .item-styled-toggle-wrapper { + background-color: $orange; +} + +.item-toggle + .item-styled-toggle-wrapper .item-styled-toggle { + left: 1px; +} + +.item-toggle:checked + .item-styled-toggle-wrapper .item-styled-toggle { + left: 27px; +} + +.item-styled-toggle-bar { + width: 3px; + height: 15px; + margin-left: 3px; + background-color: $light-gray; + float: left; + position: relative; + left: 4px; + top: 7px; +} + +.item-styled-checkbox { + position: absolute; + right: 10px; + top: 10px; + width: 21px; + height: 21px; + border-radius: $border-radius; + border-width: 2px; + border-style: solid; +} + +.item-checkbox { + display: none; +} + +.item-checkbox + .item-styled-checkbox { + border-color: $medium-light-gray; +} + +.item-checkbox:checked + .item-styled-checkbox { + border-color: $orange; + background-color: $orange; +} + +.item-checkbox:checked + .item-styled-checkbox:before { + content: ""; + display: block; + position: relative; + left: 7px; + width: 6px; + height: 14px; + border-color: $lighter-gray; + border-width: 0 2px 2px 0; + border-style: solid; + @include transform(45deg); +} + +.item-styled-radio { + position: absolute; + right: 10px; + top: 10px; + width: 21px; + height: 21px; + border-radius: 12px; + border-width: 2px; + border-style: solid; +} + +.item-radio { + display: none; +} + +.item-radio + .item-styled-radio { + border-color: $medium-light-gray; +} + +.item-radio:checked + .item-styled-radio { + border-color: $orange; + background-color: $orange; +} + +.item-radio:checked + .item-styled-radio:before { + content: ""; + display: block; + position: relative; + top: 1px; + left: 6px; + width: 6px; + height: 14px; + border-color: $lighter-gray; + border-width: 0 2px 2px 0; + border-style: solid; + @include transform(45deg); +} + +.item-color { + display:none; +} + +.item-styled-color { + + background: $lighter-gray; + + .value { + position: absolute; + right: 10px; + top: 10px; + width: 56px; + height: 30px; + border-radius: $border-radius; + border-color: $gray; + border-width: 1px; + border-style: solid; + } + + .color-box-wrap { + display:none; + box-sizing: border-box; + position: relative; + height: 0; + width: 100%; + padding: 0 0 100% 0; // overridden with inline style + margin: 0.6em 0 0em; + + &.show { + display: block; + } + + .color-box-container { + position: absolute; + height: 99.97%; + width: 100%; + left: 0; + top: 0; + + .color-box { + float:left; + cursor: pointer; + + &.rounded-tl { + border-top-left-radius: $border-radius; + } + + &.rounded-tr { + border-top-right-radius: $border-radius; + } + + &.rounded-bl { + border-bottom-left-radius: $border-radius; + } + + &.rounded-br { + border-bottom-right-radius: $border-radius; + } + } + + } + } +} + +.item-date, .item-time { + position: absolute; + color: $lighter-gray !important; +} + +.item-styled-date, .item-styled-time { + position: absolute; + top: 13px; + right: 10px; + color: $gray; + font-size: 1em; + line-height: 1em; + background-color: $lighter-gray; +} + +.item-input-wrapper { + border-radius: $border-radius; + border: 2px solid $medium-light-gray; +} + +.item-input-wrapper-button { + box-sizing: border-box; + width: 77%; +} + +.item-input { + border: 0; + background-color: transparent; + padding: 0 10px 7px 10px; + font-size: 13px; + width: 100%; + box-sizing: border-box; +} + +.button-container { + text-align: center; +} + +.item-button { + width: 60%; + height: 35px; + background-color: $orange; + border-radius: $border-radius; + color: white; + font-size: 0.8em; + border: none; + @include appearance(none); +} + +.item-input-button { + position: absolute; + right: 10px; + top: 9px; + width: 20%; +} + +.tab-buttons { + display: table; + width: 100%; + box-sizing: border-box; + table-layout: fixed; +} + +.tab-button { + display: table-cell; + position: relative; + color: $orange; + border: 1px solid $orange; + border-right-width: 0; + font-size: 14px; + padding: 5px 0; + text-align: center; + right: -1px; +} + +.tab-button:first-child { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-right-width: 0; +} + +.tab-button:last-child { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + border-right-width: 1px; +} + +.tab-button.active { + background-color: $orange; + color: $lighter-gray; +} + +.item-slider { + position: relative; + top: 8px; + @include appearance(none); + height: 30px; + width: 79%; + overflow: hidden; + background-color: transparent; + margin-top: -10px; +} + +.item-slider::-webkit-slider-thumb:before { + content: ""; + position: absolute; + top: 11px; + left: -1001px; + height: 2px; + width: 1000px; + background: $orange; +} + +.item-slider::-webkit-slider-thumb { + @include appearance(none); + position: relative; + top: -13px; + height: 28px; + width: 28px; + background-color: $white; + border-radius: $border-radius; + border: 2px solid $light-gray; +} + +.item-slider::-webkit-slider-runnable-track { + height: 2px; + background-color: $medium-light-gray; +} + +.item-slider::-webkit-slider-thumb:after { + content: "lll"; + position: absolute; + left: 4px; + top: 3px; + height: 12px; + width: 10px; + font-weight: normal; + text-align: center; + color: $medium-light-gray; + font-size: 16px; + letter-spacing: 1px; +} + +.item-slider-text { + position: absolute; + top: 6px; + right: 10px; + width: 16%; +} + +.item-slider-text .item-input { + text-align: center; +} + +.delete-item{ + width: 30px; + height: 30px; + right: 5px; + top: 5px; + position: absolute; + border-radius: 6px; +} + +.delete-item:before,.delete-item:after{ + content: ''; + position: absolute; + width: 24px; + height: 2px; + background-color: $gray; + border-radius: 2px; + top: 16px; +} + +.delete-item:before{ + @include transform(45deg); + left: 3px; +} + +.delete-item:after{ + @include transform(-45deg); + right: 3px; +} + +.add-item{ + color: $orange; +} + +.item-draggable-handle { + position: absolute; + right: 5px; + top: 10px; + height: 28px; + width: 28px; +} + +.item-draggable-handle-bar { + margin-top: 5px; + height: 2px; + width: 20px; + background-color: $gray; + text-align: center; +} + +[draggable=true] { + background-color: $lighter-gray; + border: 2px solid $light-gray; + border-radius: 2px; +} + diff --git a/vendor/pebble-slate/package.json b/vendor/pebble-slate/package.json new file mode 100644 index 0000000..ebbf5b2 --- /dev/null +++ b/vendor/pebble-slate/package.json @@ -0,0 +1,29 @@ +{ + "name": "Slate", + "version": "0.0.3", + "description": "Front-end framework for developing Pebble mobile configuration pages.", + "scripts": { + "build": "gulp build" + }, + "repository": { + "type": "git", + "url": "https://github.com/pebble/slate.git" + }, + "keywords": [ + "Pebble" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/pebble/slate/issues" + }, + "homepage": "https://github.com/pebble/slate", + "devDependencies": { + "gulp": "^3.9.0", + "gulp-concat": "^2.5.2", + "gulp-notify": "^2.2.0", + "gulp-ruby-sass": "^1.0.5", + "gulp-uglify": "^1.2.0", + "gulp-uglifycss": "^1.0.4", + "rimraf": "^2.4.0" + } +} From 8c958f1baedfc50d217825745ec73ab360a1a93b Mon Sep 17 00:00:00 2001 From: Keegan Date: Sun, 11 Oct 2015 00:16:22 -0700 Subject: [PATCH 03/68] package.json --- package.json | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..194fd78 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "pebble-clay", + "version": "1.0.0", + "description": "Pebble Config Framework", + "main": "index.js", + "directories": { + "example": "example" + }, + "scripts": { + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/keegan-lillo/pebble-clay.git" + }, + "keywords": [ + "Pebble", + "Config" + ], + "author": "Keegan Lillo", + "license": "GPL", + "bugs": { + "url": "https://github.com/keegan-lillo/pebble-clay/issues" + }, + "homepage": "https://github.com/keegan-lillo/pebble-clay#readme", + "devDependencies": { + "eslint": "^1.5.1", + "eslint-config-pebble": "^1.2.0", + "eslint-plugin-standard": "^1.3.1" + }, + "dependencies": { + "browserify": "^11.2.0", + "browserify-mustache": "0.0.4", + "del": "^2.0.2", + "gulp": "^3.9.0", + "gulp-inline": "0.0.15", + "gulp-minify-html": "^1.0.4", + "gulp-minify-inline": "^0.1.1", + "gulp-template": "^3.0.0", + "hogan.js": "^3.0.2", + "mustache": "^2.1.3", + "stringify": "^3.1.0", + "vinyl-source-stream": "^1.1.0", + "zepto-browserify": "^1.0.0" + } +} From 53e49339b5ea31c8443155bffae1d09995548c22 Mon Sep 17 00:00:00 2001 From: Keegan Date: Mon, 12 Oct 2015 01:49:56 -0700 Subject: [PATCH 04/68] refactor and add the ability to inject custom code --- gulpfile.js | 2 +- index.js | 25 +++--- src/config-page.html | 4 +- src/scripts/config-page.js | 86 +++++++++----------- src/scripts/lib/item-types.js | 15 +--- src/templates/components/color.mustache | 2 +- src/templates/components/footer.mustache | 4 +- src/templates/components/heading.mustache | 2 +- src/templates/components/input.mustache | 1 - src/templates/components/select.mustache | 2 +- src/templates/components/subheading.mustache | 2 +- src/templates/components/toggle.mustache | 2 +- 12 files changed, 65 insertions(+), 82 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index a51a25d..6409b2f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -16,7 +16,7 @@ gulp.task('clean', function(done) { }); gulp.task('browserify', ['clean'], function(done) { - return browserify('src/scripts/config-page.js', { debug: true }) + return browserify('src/scripts/config-page.js', { debug: false }) .transform(stringify(['.html', '.mustache'])) .bundle() .pipe(source('config-page.js')) diff --git a/index.js b/index.js index 7c7a202..885f275 100644 --- a/index.js +++ b/index.js @@ -51,20 +51,22 @@ function encodeDataUri(input) { return 'data:text/html;base64,' + encodeURIComponent(out.join('')); } -function Clay(config) { +/** + * @param {array} config - the Clay config + * @param {function} [customFn] - custom code to run from the config page. + * Will run with api as context + * @constructor + */ +function Clay(config, customFn) { this.config = config; - /** - * @type {{}} - * @private - */ - this._defaults = {}; + this.customFn = customFn || function() {}; } /** * Generate the Data URI used by the config Page with settings injected - * @param {string} clayData - the entire HTML page as a data URI + * @param {string} returnTo - used while developing on desktop. */ -Clay.prototype.generateUrl = function() { +Clay.prototype.generateUrl = function(returnTo) { var settings; try { settings = JSON.parse(localStorage.getItem('clay-settings')) || {}; @@ -74,6 +76,8 @@ Clay.prototype.generateUrl = function() { } // Show config page return encodeDataUri(configPageHtml + .replace('$$CUSTOM_FN$$', this.customFn.toString().replace(/^.*?\{/, '{')) + .replace('$$RETURN_TO$$', returnTo || 'pebblejs://close#') .replace('$$CONFIG$$', JSON.stringify(this.config)) .replace('$$SETTINGS$$', JSON.stringify(settings)) ); @@ -86,10 +90,7 @@ Clay.prototype.getSettings = function(response) { if (!settings) return {}; localStorage.setItem('clay-settings', JSON.stringify(settings)); -}; - -Clay.prototype.getDefaults = function() { - return this._defaults; + return settings; }; module.exports = Clay; diff --git a/src/config-page.html b/src/config-page.html index 79804ad..2419edd 100644 --- a/src/config-page.html +++ b/src/config-page.html @@ -6,13 +6,15 @@
- + diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js index fc9f372..9b93d5f 100644 --- a/src/scripts/config-page.js +++ b/src/scripts/config-page.js @@ -20,40 +20,32 @@ var $ = require('zepto-browserify').$; var config = $.extend(true, [], window.clayConfig || []); var settings = $.extend(true, {}, window.claySettings || {}); +var returnTo = window.returnTo || 'pebblejs://close#'; +var customFn = window.customFn; -// Get query variables -function getQueryParam(variable, defaultValue) { - var query = location.search.substring(1); - var vars = query.split('&'); - for (var i = 0; i < vars.length; i++) { - var pair = vars[i].split('='); - - if (pair[0] === variable) { - return decodeURIComponent(pair[1]); - } - } - return defaultValue || false; -} - -function submit() { +function submit(event) { + $.each(api.itemsByAppKey, function(appKey, item) { + settings[appKey] = item.get(); + }); // Set the return URL depending on the runtime environment - var return_to = getQueryParam('return_to', 'pebblejs://close#'); - document.location = return_to + encodeURIComponent(JSON.stringify(settings)); + location.href = returnTo + encodeURIComponent(JSON.stringify(settings)); + event.preventDefault(); + return false; } /** * * @param {string} key - * @param {string|boolean} _default + * @param {string|boolean} defaultValue * @return {string|boolean} */ -function getSetting(key, _default) { - return typeof settings[key] !== 'undefined' ? settings[key] : (_default || ''); +function getSetting(key, defaultValue) { + return typeof settings[key] !== 'undefined' ? settings[key] : (defaultValue || ''); } -function setSetting(key, value) { - settings[key] = value; -} +// function setSetting(key, value) { +// settings[key] = value; +// } /** * @param {Clay~Item} item @@ -83,18 +75,20 @@ function processConfigItem(item, $parent) { attributes: $.map(item.attributes || [], function(item, key) { return { key: key, - // .replace('"', '"'), value: item.toString() - // .replace('"', '"') }; - }), - value: typeof itemType.valueTransformer === 'function' ? - itemType.valueTransformer(getSetting(item.app_key, item.default), item) : - getSetting(item.app_key, item.default) + }) }); apiItem.$element = $(mustache.render(itemType.template, templateData)); apiItem.$manipulatorTarget = apiItem.$element.find('[data-manipulator-target]'); + + // this caters for situations where the manipulator target is the root element + if (!apiItem.$manipulatorTarget.length) { + apiItem.$manipulatorTarget = apiItem.$element; + } + + // proxy event related methods apiItem.on = function(events, handler) { return apiItem.$manipulatorTarget.on(events, $.proxy(handler, apiItem)); }; @@ -105,28 +99,31 @@ function processConfigItem(item, $parent) { apiItem.triggerHandler = apiItem.$manipulatorTarget.triggerHandler.bind(apiItem.$manipulatorTarget); - // attach the manipulator methods the the apiItem + // attach the manipulator methods to the apiItem $.each(itemType.manipulator, function(methodName, method) { apiItem[methodName] = method.bind(apiItem); }); + // set the value of the item via the manipulator to ensure consistency + apiItem.set(getSetting(item.app_key, item.value)); + apiItem.config = item; if (item.id) { - _interface.itemsById[item.id] = apiItem; + api.itemsById[item.id] = apiItem; } if (item.app_key) { - _interface.itemsByAppKey[item.app_key] = apiItem; + api.itemsByAppKey[item.app_key] = apiItem; } - _interface.items.push(apiItem); + api.items.push(apiItem); $parent.append(apiItem.$element); } } -var _interface = { +var api = { items: [], itemsById: {}, itemsByAppKey: {} @@ -134,25 +131,22 @@ var _interface = { var $mainForm = $('#main-form'); -_interface.getItemByAppKey = function(key) { - return _interface.itemsByAppKey[key]; +api.getItemByAppKey = function(key) { + return api.itemsByAppKey[key]; }; -_interface.getItemById = function(key) { - return _interface.itemsById[key]; +api.getItemById = function(key) { + return api.itemsById[key]; }; -_interface.getItemsByType = function(type) { - return _interface.items.filter(function(item) { +api.getItemsByType = function(type) { + return api.items.filter(function(item) { return item.config.type === type; }); }; processConfigItem(config, $mainForm, 0); +$mainForm.on('submit', submit); -$mainForm.submit(submit); - -module.exports = _interface; -window._interface = _interface; - -console.log(_interface); +module.exports = api; +customFn.call(api); diff --git a/src/scripts/lib/item-types.js b/src/scripts/lib/item-types.js index 4bea1fb..ae4ac50 100644 --- a/src/scripts/lib/item-types.js +++ b/src/scripts/lib/item-types.js @@ -25,22 +25,11 @@ module.exports = { }, select: { template: require('../../templates/components/select.mustache'), - manipulator: manipulators.val, - valueTransformer: function(rawValue, item) { - item.options.forEach(function(option, index) { - if (option.value === rawValue) { - item.options[index].selected = 'selected'; - } - }); - return rawValue; - } + manipulator: manipulators.val }, toggle: { template: require('../../templates/components/toggle.mustache'), - manipulator: manipulators.checked, - valueTransformer: function(rawValue) { - return rawValue ? 'checked' : ''; - } + manipulator: manipulators.checked }, submit: { template: require('../../templates/components/submit.mustache'), diff --git a/src/templates/components/color.mustache b/src/templates/components/color.mustache index 3eafa32..f6e5564 100644 --- a/src/templates/components/color.mustache +++ b/src/templates/components/color.mustache @@ -1,4 +1,4 @@ diff --git a/src/templates/components/footer.mustache b/src/templates/components/footer.mustache index a536c55..6c4787d 100644 --- a/src/templates/components/footer.mustache +++ b/src/templates/components/footer.mustache @@ -1,3 +1 @@ - + diff --git a/src/templates/components/heading.mustache b/src/templates/components/heading.mustache index fb87890..3872b02 100644 --- a/src/templates/components/heading.mustache +++ b/src/templates/components/heading.mustache @@ -1,3 +1,3 @@
-

{{&content}}

+

diff --git a/src/templates/components/input.mustache b/src/templates/components/input.mustache index e7e441e..574a949 100644 --- a/src/templates/components/input.mustache +++ b/src/templates/components/input.mustache @@ -3,7 +3,6 @@
diff --git a/src/templates/components/select.mustache b/src/templates/components/select.mustache index ef26f2c..2e6e3ff 100644 --- a/src/templates/components/select.mustache +++ b/src/templates/components/select.mustache @@ -2,7 +2,7 @@ {{label}} diff --git a/src/templates/components/subheading.mustache b/src/templates/components/subheading.mustache index 573dff0..ec02c20 100644 --- a/src/templates/components/subheading.mustache +++ b/src/templates/components/subheading.mustache @@ -1,3 +1,3 @@
-

{{&content}}

+

diff --git a/src/templates/components/toggle.mustache b/src/templates/components/toggle.mustache index b59bd83..ba7f734 100644 --- a/src/templates/components/toggle.mustache +++ b/src/templates/components/toggle.mustache @@ -1,4 +1,4 @@ From 1d0d179429c7c17afd7523221bed194c8af4de80 Mon Sep 17 00:00:00 2001 From: Keegan Date: Mon, 12 Oct 2015 11:57:01 -0700 Subject: [PATCH 05/68] browserify things --- gulpfile.js | 13 +++++++++++-- index.js | 2 +- mold.js | 11 ++--------- package.json | 6 ++++-- src/config-page.html | 2 +- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 6409b2f..a6b6952 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -31,7 +31,16 @@ gulp.task('inlineHtml', ['clean', 'browserify'], function() { jsSelector: 'script[uglify]' })) .pipe(minifyHTML()) - .pipe(gulp.dest('dist/')); + .pipe(gulp.dest('tmp/')); }); -gulp.task('default', ['inlineHtml']); +gulp.task('clay', ['inlineHtml'], function() { + return browserify('index.js', { debug: false }) + .transform(stringify(['.html', '.mustache'])) + .require(require.resolve('./index'), {expose: 'pebble-clay'}) + .bundle() + .pipe(source('clay.js')) + .pipe(gulp.dest('./dist/')); +}); + +gulp.task('default', ['clay']); diff --git a/index.js b/index.js index 885f275..f9bda32 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ 'use strict'; -var configPageHtml = require('./dist/config-page.html'); +var configPageHtml = require('./tmp/config-page.html'); function encodeDataUri(input) { if (window.btoa) { diff --git a/mold.js b/mold.js index c5ae6ed..b1f5bf1 100644 --- a/mold.js +++ b/mold.js @@ -4,8 +4,6 @@ var browserify = require('browserify'); var source = require('vinyl-source-stream'); var gulp = require('gulp'); var path = require('path'); -var template = require('gulp-template'); -var stringify = require('stringify'); var del = require('del'); var projectPath = process.argv[2] || process.cwd(); @@ -19,16 +17,11 @@ gulp.task('clean', function() { return del([pebbleJsPath]); }); -gulp.task('build', ['clean', 'pebble-js-app'], function() { - -}); - -gulp.task('pebble-js-app', function() { +gulp.task('pebble-js-app', ['clean'], function() { browserify(clayJsPath, { debug: false }) - .transform(stringify(['.html', '.mustache'])) .bundle() .pipe(source('pebble-js-app.js')) .pipe(gulp.dest('./src/js/')); }); -gulp.start('build'); +gulp.start('pebble-js-app'); diff --git a/package.json b/package.json index 194fd78..6dbb3f8 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,13 @@ "name": "pebble-clay", "version": "1.0.0", "description": "Pebble Config Framework", - "main": "index.js", + "main": "dist/clay.js", "directories": { "example": "example" }, "scripts": { - "test": "mocha" + "test": "mocha", + "build": "gulp" }, "repository": { "type": "git", @@ -33,6 +34,7 @@ "browserify-mustache": "0.0.4", "del": "^2.0.2", "gulp": "^3.9.0", + "gulp-html-to-js": "0.0.1", "gulp-inline": "0.0.15", "gulp-minify-html": "^1.0.4", "gulp-minify-inline": "^0.1.1", diff --git a/src/config-page.html b/src/config-page.html index 2419edd..917ad92 100644 --- a/src/config-page.html +++ b/src/config-page.html @@ -15,6 +15,6 @@
- + From 3a68dc17023541d79230a118599f5fa487bd61e8 Mon Sep 17 00:00:00 2001 From: Keegan Date: Mon, 12 Oct 2015 12:15:52 -0700 Subject: [PATCH 06/68] no more mold --- mold.js | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 mold.js diff --git a/mold.js b/mold.js deleted file mode 100644 index b1f5bf1..0000000 --- a/mold.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var browserify = require('browserify'); -var source = require('vinyl-source-stream'); -var gulp = require('gulp'); -var path = require('path'); -var del = require('del'); - -var projectPath = process.argv[2] || process.cwd(); -var pebbleJsPath = path.resolve(projectPath, 'src/js/pebble-js-app.js'); -var clayJsPath = path.resolve(projectPath, 'src/js/pebble-clay-js-app.js'); - -var warningMessage = - '/* Do not edit this file! Use "pebble-clay-js-app.js" instead. */'; - -gulp.task('clean', function() { - return del([pebbleJsPath]); -}); - -gulp.task('pebble-js-app', ['clean'], function() { - browserify(clayJsPath, { debug: false }) - .bundle() - .pipe(source('pebble-js-app.js')) - .pipe(gulp.dest('./src/js/')); -}); - -gulp.start('pebble-js-app'); From 5cd57bf3aeb61c17dd77a7f9f5eab8c0b65356f2 Mon Sep 17 00:00:00 2001 From: keegan-lillo Date: Mon, 19 Oct 2015 11:40:54 -0700 Subject: [PATCH 07/68] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ed62350..687e194 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # pebble-clay Pebble Config Framework -config html - - contains +__This is very much a work in progress but you are welcome to provide any feedback/feature requests you'd like via github issues__ From 0aef0caf79b3307f9e3366083c9c6aedd0ace338 Mon Sep 17 00:00:00 2001 From: Keegan Date: Wed, 21 Oct 2015 19:40:03 -0700 Subject: [PATCH 08/68] Touched everything by mistake --- .eslintrc | 0 .gitignore | 0 LICENSE | 0 README.md | 0 gulpfile.js | 0 index.js | 0 package.json | 0 src/scripts/config-page.js | 0 src/scripts/lib/item-types.js | 0 src/scripts/lib/manipulators.js | 0 src/styles/config-page.css | 0 src/templates/components/color.mustache | 0 src/templates/components/footer.mustache | 0 src/templates/components/heading.mustache | 0 src/templates/components/input.mustache | 0 src/templates/components/select.mustache | 0 src/templates/components/subheading.mustache | 0 src/templates/components/submit.mustache | 0 src/templates/components/toggle.mustache | 0 vendor/pebble-slate/.bower.json | 0 vendor/pebble-slate/History.md | 0 vendor/pebble-slate/LICENSE | 0 vendor/pebble-slate/README.md | 0 vendor/pebble-slate/bower.json | 0 vendor/pebble-slate/dist/css/slate.css | 0 vendor/pebble-slate/dist/css/slate.min.css | 0 .../dist/fonts/PFDinDisplayPro-Light.woff | Bin vendor/pebble-slate/dist/fonts/ptsans-regular.woff | Bin vendor/pebble-slate/dist/js/slate.js | 0 vendor/pebble-slate/dist/js/slate.min.js | 0 vendor/pebble-slate/docs/assets/screenshot.png | Bin vendor/pebble-slate/docs/assets/slate-button.png | Bin vendor/pebble-slate/docs/assets/slate-checkbox.png | Bin .../docs/assets/slate-date-time-colorpickers.png | Bin vendor/pebble-slate/docs/assets/slate-draggable.png | Bin .../docs/assets/slate-header-content-footer.png | Bin .../pebble-slate/docs/assets/slate-input-button.png | Bin vendor/pebble-slate/docs/assets/slate-input.png | Bin vendor/pebble-slate/docs/assets/slate-list.png | Bin vendor/pebble-slate/docs/assets/slate-paragraph.png | Bin vendor/pebble-slate/docs/assets/slate-radio.png | Bin vendor/pebble-slate/docs/assets/slate-slider.png | Bin .../pebble-slate/docs/assets/slate-tab-button.png | Bin vendor/pebble-slate/docs/assets/slate-toggle.png | Bin vendor/pebble-slate/docs/index.html | 0 vendor/pebble-slate/docs/template.html | 0 vendor/pebble-slate/external/Sortable/LICENSE.md | 0 .../pebble-slate/external/Sortable/Sortable.min.js | 0 vendor/pebble-slate/external/zepto/zepto.min.js | 0 vendor/pebble-slate/gulpfile.js | 0 .../lib/fonts/PFDinDisplayPro-Light.woff | Bin vendor/pebble-slate/lib/fonts/ptsans-regular.woff | Bin vendor/pebble-slate/lib/js/main.js | 0 vendor/pebble-slate/lib/sass/main.scss | 0 vendor/pebble-slate/package.json | 0 55 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .eslintrc mode change 100644 => 100755 .gitignore mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 gulpfile.js mode change 100644 => 100755 index.js mode change 100644 => 100755 package.json mode change 100644 => 100755 src/scripts/config-page.js mode change 100644 => 100755 src/scripts/lib/item-types.js mode change 100644 => 100755 src/scripts/lib/manipulators.js mode change 100644 => 100755 src/styles/config-page.css mode change 100644 => 100755 src/templates/components/color.mustache mode change 100644 => 100755 src/templates/components/footer.mustache mode change 100644 => 100755 src/templates/components/heading.mustache mode change 100644 => 100755 src/templates/components/input.mustache mode change 100644 => 100755 src/templates/components/select.mustache mode change 100644 => 100755 src/templates/components/subheading.mustache mode change 100644 => 100755 src/templates/components/submit.mustache mode change 100644 => 100755 src/templates/components/toggle.mustache mode change 100644 => 100755 vendor/pebble-slate/.bower.json mode change 100644 => 100755 vendor/pebble-slate/History.md mode change 100644 => 100755 vendor/pebble-slate/LICENSE mode change 100644 => 100755 vendor/pebble-slate/README.md mode change 100644 => 100755 vendor/pebble-slate/bower.json mode change 100644 => 100755 vendor/pebble-slate/dist/css/slate.css mode change 100644 => 100755 vendor/pebble-slate/dist/css/slate.min.css mode change 100644 => 100755 vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff mode change 100644 => 100755 vendor/pebble-slate/dist/fonts/ptsans-regular.woff mode change 100644 => 100755 vendor/pebble-slate/dist/js/slate.js mode change 100644 => 100755 vendor/pebble-slate/dist/js/slate.min.js mode change 100644 => 100755 vendor/pebble-slate/docs/assets/screenshot.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-button.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-checkbox.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-draggable.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-header-content-footer.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-input-button.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-input.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-list.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-paragraph.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-radio.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-slider.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-tab-button.png mode change 100644 => 100755 vendor/pebble-slate/docs/assets/slate-toggle.png mode change 100644 => 100755 vendor/pebble-slate/docs/index.html mode change 100644 => 100755 vendor/pebble-slate/docs/template.html mode change 100644 => 100755 vendor/pebble-slate/external/Sortable/LICENSE.md mode change 100644 => 100755 vendor/pebble-slate/external/Sortable/Sortable.min.js mode change 100644 => 100755 vendor/pebble-slate/external/zepto/zepto.min.js mode change 100644 => 100755 vendor/pebble-slate/gulpfile.js mode change 100644 => 100755 vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff mode change 100644 => 100755 vendor/pebble-slate/lib/fonts/ptsans-regular.woff mode change 100644 => 100755 vendor/pebble-slate/lib/js/main.js mode change 100644 => 100755 vendor/pebble-slate/lib/sass/main.scss mode change 100644 => 100755 vendor/pebble-slate/package.json diff --git a/.eslintrc b/.eslintrc old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/gulpfile.js b/gulpfile.js old mode 100644 new mode 100755 diff --git a/index.js b/index.js old mode 100644 new mode 100755 diff --git a/package.json b/package.json old mode 100644 new mode 100755 diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js old mode 100644 new mode 100755 diff --git a/src/scripts/lib/item-types.js b/src/scripts/lib/item-types.js old mode 100644 new mode 100755 diff --git a/src/scripts/lib/manipulators.js b/src/scripts/lib/manipulators.js old mode 100644 new mode 100755 diff --git a/src/styles/config-page.css b/src/styles/config-page.css old mode 100644 new mode 100755 diff --git a/src/templates/components/color.mustache b/src/templates/components/color.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/footer.mustache b/src/templates/components/footer.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/heading.mustache b/src/templates/components/heading.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/input.mustache b/src/templates/components/input.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/select.mustache b/src/templates/components/select.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/subheading.mustache b/src/templates/components/subheading.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/submit.mustache b/src/templates/components/submit.mustache old mode 100644 new mode 100755 diff --git a/src/templates/components/toggle.mustache b/src/templates/components/toggle.mustache old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/.bower.json b/vendor/pebble-slate/.bower.json old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/History.md b/vendor/pebble-slate/History.md old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/LICENSE b/vendor/pebble-slate/LICENSE old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/README.md b/vendor/pebble-slate/README.md old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/bower.json b/vendor/pebble-slate/bower.json old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/css/slate.css b/vendor/pebble-slate/dist/css/slate.css old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/css/slate.min.css b/vendor/pebble-slate/dist/css/slate.min.css old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff b/vendor/pebble-slate/dist/fonts/PFDinDisplayPro-Light.woff old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/fonts/ptsans-regular.woff b/vendor/pebble-slate/dist/fonts/ptsans-regular.woff old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/js/slate.js b/vendor/pebble-slate/dist/js/slate.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/dist/js/slate.min.js b/vendor/pebble-slate/dist/js/slate.min.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/screenshot.png b/vendor/pebble-slate/docs/assets/screenshot.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-button.png b/vendor/pebble-slate/docs/assets/slate-button.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-checkbox.png b/vendor/pebble-slate/docs/assets/slate-checkbox.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png b/vendor/pebble-slate/docs/assets/slate-date-time-colorpickers.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-draggable.png b/vendor/pebble-slate/docs/assets/slate-draggable.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-header-content-footer.png b/vendor/pebble-slate/docs/assets/slate-header-content-footer.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-input-button.png b/vendor/pebble-slate/docs/assets/slate-input-button.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-input.png b/vendor/pebble-slate/docs/assets/slate-input.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-list.png b/vendor/pebble-slate/docs/assets/slate-list.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-paragraph.png b/vendor/pebble-slate/docs/assets/slate-paragraph.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-radio.png b/vendor/pebble-slate/docs/assets/slate-radio.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-slider.png b/vendor/pebble-slate/docs/assets/slate-slider.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-tab-button.png b/vendor/pebble-slate/docs/assets/slate-tab-button.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/assets/slate-toggle.png b/vendor/pebble-slate/docs/assets/slate-toggle.png old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/index.html b/vendor/pebble-slate/docs/index.html old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/docs/template.html b/vendor/pebble-slate/docs/template.html old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/external/Sortable/LICENSE.md b/vendor/pebble-slate/external/Sortable/LICENSE.md old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/external/Sortable/Sortable.min.js b/vendor/pebble-slate/external/Sortable/Sortable.min.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/external/zepto/zepto.min.js b/vendor/pebble-slate/external/zepto/zepto.min.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/gulpfile.js b/vendor/pebble-slate/gulpfile.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff b/vendor/pebble-slate/lib/fonts/PFDinDisplayPro-Light.woff old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/lib/fonts/ptsans-regular.woff b/vendor/pebble-slate/lib/fonts/ptsans-regular.woff old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/lib/js/main.js b/vendor/pebble-slate/lib/js/main.js old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/lib/sass/main.scss b/vendor/pebble-slate/lib/sass/main.scss old mode 100644 new mode 100755 diff --git a/vendor/pebble-slate/package.json b/vendor/pebble-slate/package.json old mode 100644 new mode 100755 From d47db97bb6ce36c3a1452031cc3ccdef1803e759 Mon Sep 17 00:00:00 2001 From: Keegan Date: Thu, 12 Nov 2015 09:42:18 -0800 Subject: [PATCH 09/68] WIP --- gulpfile.js | 2 +- src/config-page.html | 2 +- src/scripts/config-page.js | 14 +++++++++----- src/scripts/lib/item-types.js | 4 ++++ src/scripts/lib/manipulators.js | 18 ++++++++++++++++++ src/templates/components/radiogroup.mustache | 15 +++++++++++++++ 6 files changed, 48 insertions(+), 7 deletions(-) mode change 100644 => 100755 src/config-page.html create mode 100644 src/templates/components/radiogroup.mustache diff --git a/gulpfile.js b/gulpfile.js index a6b6952..83fe187 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -15,7 +15,7 @@ gulp.task('clean', function(done) { }); }); -gulp.task('browserify', ['clean'], function(done) { +gulp.task('browserify', ['clean'], function() { return browserify('src/scripts/config-page.js', { debug: false }) .transform(stringify(['.html', '.mustache'])) .bundle() diff --git a/src/config-page.html b/src/config-page.html old mode 100644 new mode 100755 index 917ad92..2419edd --- a/src/config-page.html +++ b/src/config-page.html @@ -15,6 +15,6 @@
- + diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js index 9b93d5f..3d0ed6e 100755 --- a/src/scripts/config-page.js +++ b/src/scripts/config-page.js @@ -10,8 +10,8 @@ * @property {string|boolean} default * @property {string} label * @property {object} attributes - * @property {array} options - * @property {array} items + * @property {Array} options + * @property {Array} items */ var mustache = require('mustache'); @@ -47,8 +47,10 @@ function getSetting(key, defaultValue) { // settings[key] = value; // } +var index = 0; + /** - * @param {Clay~Item} item + * @param {Clay~Item|Array} item * @param {$} $parent */ function processConfigItem(item, $parent) { @@ -73,9 +75,11 @@ function processConfigItem(item, $parent) { var itemType = itemTypes[item.type]; var templateData = $.extend({}, item, { attributes: $.map(item.attributes || [], function(item, key) { + console.log(index); return { key: key, - value: item.toString() + value: item.toString(), + index: index++ }; }) }); @@ -145,7 +149,7 @@ api.getItemsByType = function(type) { }); }; -processConfigItem(config, $mainForm, 0); +processConfigItem(config, $mainForm); $mainForm.on('submit', submit); module.exports = api; diff --git a/src/scripts/lib/item-types.js b/src/scripts/lib/item-types.js index ae4ac50..a93fc3e 100755 --- a/src/scripts/lib/item-types.js +++ b/src/scripts/lib/item-types.js @@ -31,6 +31,10 @@ module.exports = { template: require('../../templates/components/toggle.mustache'), manipulator: manipulators.checked }, + radiogroup: { + template: require('../../templates/components/radiogroup.mustache'), + manipulator: manipulators.radiogroup + }, submit: { template: require('../../templates/components/submit.mustache'), manipulator: manipulators.val diff --git a/src/scripts/lib/manipulators.js b/src/scripts/lib/manipulators.js index e405e96..ddc583a 100755 --- a/src/scripts/lib/manipulators.js +++ b/src/scripts/lib/manipulators.js @@ -43,5 +43,23 @@ module.exports = { return this.$manipulatorTarget.prop('disabled', false) .triggerHandler('change'); } + }, + radiogroup: { + get: function() { + return this.$manipulatorTarget.find('input:checked').val(); + }, + set: function(value) { + this.$manipulatorTarget.find('[value="' + value + '"]') + .prop('checked', true); + return this.$manipulatorTarget.triggerHandler('change'); + }, + disable: function() { + return this.$manipulatorTarget.prop('disabled', true) + .triggerHandler('change'); + }, + enable: function() { + return this.$manipulatorTarget.prop('disabled', false) + .triggerHandler('change'); + } } }; diff --git a/src/templates/components/radiogroup.mustache b/src/templates/components/radiogroup.mustache new file mode 100644 index 0000000..1bb44e2 --- /dev/null +++ b/src/templates/components/radiogroup.mustache @@ -0,0 +1,15 @@ +
+ {{label}} +
+ {{#options}} + + {{/options}} +
+
From 58a1a3f4983257f8370ab47088fb8e5ade9c9f68 Mon Sep 17 00:00:00 2001 From: Keegan Date: Wed, 6 Jan 2016 17:28:34 -0800 Subject: [PATCH 10/68] basic dev setup done --- dev/config.js | 77 +++++++++++++++++++ dev/custom-fn.js | 5 ++ dev/dev.html | 14 ++++ dev/dev.js | 6 ++ gulpfile.js | 34 ++++++-- package.json | 4 +- pebble-clay-example/clay.json | 39 ++++++++++ src/config-page.html | 2 +- .../{config-page.css => config-page.scss} | 0 9 files changed, 173 insertions(+), 8 deletions(-) create mode 100644 dev/config.js create mode 100644 dev/custom-fn.js create mode 100644 dev/dev.html create mode 100644 dev/dev.js mode change 100755 => 100644 package.json create mode 100644 pebble-clay-example/clay.json rename src/styles/{config-page.css => config-page.scss} (100%) diff --git a/dev/config.js b/dev/config.js new file mode 100644 index 0000000..4f3bbf6 --- /dev/null +++ b/dev/config.js @@ -0,0 +1,77 @@ +'use strict'; +/* eslint-disable quotes */ + +module.exports = [ + { + "type": "section", + "items": [ + { + "type": "heading", + "id": "main-heading", + "value": "My Cool App" + }, + { + "type": "footer", + "value": "By Keegan Lillo - Lillo.me" + } + ] + }, + { + "type": "section", + "items": [ + { + "type": "subheading", + "value": "Settings" + }, + { + "type": "block", + "items": [ + { + "type": "input", + "app_key": "greeting", + "value": "Hello", + "label": "Greeting", + "attributes": { + "placeholder": "Enter a \"greeting\"", + "limit": 10, + "required": "required" + } + }, + { + "type": "toggle", + "app_key": "like_stuff", + "label": "Enable Cool Stuff", + "value": true + }, + { + "id": "flavor", + "type": "select", + "app_key": "flavor", + "value": "grape", + "label": "Favorite Flavor", + "options": [ + { "label": "Berry", "value": "berry" }, + { "label": "Grape", "value": "grape" }, + { "label": "Banana", "value": "banana" } + ] + }, + { + "type": "color", + "app_key": "background", + "value": "0xFF0000", + "label": "Background Color" + } + ] + } + ] + }, + { + "type": "section", + "items": [ + { + "type": "submit", + "value": "Save" + } + ] + } +]; diff --git a/dev/custom-fn.js b/dev/custom-fn.js new file mode 100644 index 0000000..3658764 --- /dev/null +++ b/dev/custom-fn.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function() { + console.debug('custom fn worked'); +}; diff --git a/dev/dev.html b/dev/dev.html new file mode 100644 index 0000000..6e10636 --- /dev/null +++ b/dev/dev.html @@ -0,0 +1,14 @@ + + + + + Pebble Clay Development Page + + + + +
+ + + + diff --git a/dev/dev.js b/dev/dev.js new file mode 100644 index 0000000..2612208 --- /dev/null +++ b/dev/dev.js @@ -0,0 +1,6 @@ +'use strict'; + +window.returnTo = '$$RETURN_TO$$'; +window.clayConfig = require('./config.js'); +window.claySettings = {}; +window.customFn = require('./custom-fn.js'); diff --git a/gulpfile.js b/gulpfile.js index 83fe187..21861b7 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,14 +8,14 @@ var del = require('del'); var inline = require('gulp-inline'); var minifyInline = require('gulp-minify-inline'); var minifyHTML = require('gulp-minify-html'); +var sass = require('gulp-sass'); +var sourceMaps = require('gulp-sourcemaps'); -gulp.task('clean', function(done) { - del(['dist', 'tmp']).then(function() { - done(); - }); +gulp.task('clean-js', function() { + return del(['tmp/config-page.js']); }); -gulp.task('browserify', ['clean'], function() { +gulp.task('js', ['clean-js'], function() { return browserify('src/scripts/config-page.js', { debug: false }) .transform(stringify(['.html', '.mustache'])) .bundle() @@ -23,7 +23,18 @@ gulp.task('browserify', ['clean'], function() { .pipe(gulp.dest('./tmp/')); }); -gulp.task('inlineHtml', ['clean', 'browserify'], function() { +gulp.task('clean-sass', function() { + return del(['tmp/config-page.scss']); +}); +gulp.task('sass', ['clean-sass'], function() { + gulp.src('./src/styles/config-page.scss') + .pipe(sourceMaps.init()) + .pipe(sass().on('error', sass.logError)) + .pipe(sourceMaps.write('./')) + .pipe(gulp.dest('tmp')); +}); + +gulp.task('inlineHtml', ['js', 'sass'], function() { return gulp.src('src/config-page.html') .pipe(inline()) .pipe(minifyInline({ @@ -44,3 +55,14 @@ gulp.task('clay', ['inlineHtml'], function() { }); gulp.task('default', ['clay']); + +gulp.task('dev', ['js', 'sass'], function() { + + gulp.watch('./src/styles/', ['sass']); + gulp.watch('./src/scripts/', ['js']); + + return browserify('dev/dev.js', { debug: true }) + .bundle() + .pipe(source('dev.js')) + .pipe(gulp.dest('./tmp/')); +}); diff --git a/package.json b/package.json old mode 100755 new mode 100644 index 6dbb3f8..58b84d0 --- a/package.json +++ b/package.json @@ -27,7 +27,9 @@ "devDependencies": { "eslint": "^1.5.1", "eslint-config-pebble": "^1.2.0", - "eslint-plugin-standard": "^1.3.1" + "eslint-plugin-standard": "^1.3.1", + "gulp-sass": "^2.1.1", + "gulp-sourcemaps": "^1.6.0" }, "dependencies": { "browserify": "^11.2.0", diff --git a/pebble-clay-example/clay.json b/pebble-clay-example/clay.json new file mode 100644 index 0000000..684cafe --- /dev/null +++ b/pebble-clay-example/clay.json @@ -0,0 +1,39 @@ +[ + { + "type": "static_title", + "text": "My Cool Example App" + }, + { + "type": "static_heading1", + "text": "By Keegan Lillo - Lillo.me" + }, + [ + { + "type": "input_text", + "app_key": "greeting", + "default": "Hello", + "label": "Greeting", + "attributes": { + "placeholder": "Enter a greeting", + "limit": 10, + "required": true + } + }, + { + "type": "input_select", + "app_key": "flavor", + "default": "grape", + "options": [ + { "label": "Berry", "value": "berry" }, + { "label": "Grape", "value": "grape" }, + { "label": "Banana", "value": "banana" } + ] + }, + { + "type": "input_color", + "app_key": "background", + "default": "0xFF0000", + "label": "Background Color" + } + ] +] diff --git a/src/config-page.html b/src/config-page.html index 2419edd..22ad39c 100755 --- a/src/config-page.html +++ b/src/config-page.html @@ -3,7 +3,7 @@ - + + + diff --git a/gulpfile.js b/gulpfile.js index 21861b7..0021387 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -16,8 +16,9 @@ gulp.task('clean-js', function() { }); gulp.task('js', ['clean-js'], function() { - return browserify('src/scripts/config-page.js', { debug: false }) - .transform(stringify(['.html', '.mustache'])) + return browserify('src/scripts/config-page.js', { debug: true }) + .transform(stringify(['.html', '.tpl'])) + .transform('deamdify') .bundle() .pipe(source('config-page.js')) .pipe(gulp.dest('./tmp/')); @@ -47,7 +48,7 @@ gulp.task('inlineHtml', ['js', 'sass'], function() { gulp.task('clay', ['inlineHtml'], function() { return browserify('index.js', { debug: false }) - .transform(stringify(['.html', '.mustache'])) + .transform(stringify(['.html', '.tpl'])) .require(require.resolve('./index'), {expose: 'pebble-clay'}) .bundle() .pipe(source('clay.js')) @@ -58,8 +59,8 @@ gulp.task('default', ['clay']); gulp.task('dev', ['js', 'sass'], function() { - gulp.watch('./src/styles/', ['sass']); - gulp.watch('./src/scripts/', ['js']); + gulp.watch('src/styles/**/*.scss', ['sass']); + gulp.watch(['src/scripts/**/*.js', 'src/templates/**/*.tpl'], ['js']); return browserify('dev/dev.js', { debug: true }) .bundle() diff --git a/package.json b/package.json index 58b84d0..efe3afd 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ }, "homepage": "https://github.com/keegan-lillo/pebble-clay#readme", "devDependencies": { + "deamdify": "^0.1.1", "eslint": "^1.5.1", "eslint-config-pebble": "^1.2.0", "eslint-plugin-standard": "^1.3.1", @@ -33,18 +34,12 @@ }, "dependencies": { "browserify": "^11.2.0", - "browserify-mustache": "0.0.4", "del": "^2.0.2", "gulp": "^3.9.0", - "gulp-html-to-js": "0.0.1", "gulp-inline": "0.0.15", "gulp-minify-html": "^1.0.4", "gulp-minify-inline": "^0.1.1", - "gulp-template": "^3.0.0", - "hogan.js": "^3.0.2", - "mustache": "^2.1.3", "stringify": "^3.1.0", - "vinyl-source-stream": "^1.1.0", - "zepto-browserify": "^1.0.0" + "vinyl-source-stream": "^1.1.0" } } diff --git a/pebble-clay-example/clay.json b/pebble-clay-example/clay.json deleted file mode 100644 index 684cafe..0000000 --- a/pebble-clay-example/clay.json +++ /dev/null @@ -1,39 +0,0 @@ -[ - { - "type": "static_title", - "text": "My Cool Example App" - }, - { - "type": "static_heading1", - "text": "By Keegan Lillo - Lillo.me" - }, - [ - { - "type": "input_text", - "app_key": "greeting", - "default": "Hello", - "label": "Greeting", - "attributes": { - "placeholder": "Enter a greeting", - "limit": 10, - "required": true - } - }, - { - "type": "input_select", - "app_key": "flavor", - "default": "grape", - "options": [ - { "label": "Berry", "value": "berry" }, - { "label": "Grape", "value": "grape" }, - { "label": "Banana", "value": "banana" } - ] - }, - { - "type": "input_color", - "app_key": "background", - "default": "0xFF0000", - "label": "Background Color" - } - ] -] diff --git a/src/config-page.html b/src/config-page.html index 22ad39c..3349c98 100755 --- a/src/config-page.html +++ b/src/config-page.html @@ -13,7 +13,7 @@ -
+
diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js index 3d0ed6e..9ef80d8 100755 --- a/src/scripts/config-page.js +++ b/src/scripts/config-page.js @@ -14,17 +14,18 @@ * @property {Array} items */ -var mustache = require('mustache'); -var itemTypes = require('./lib/item-types'); -var $ = require('zepto-browserify').$; +var itemTypes = require('./lib/items'); +var $ = require('./vendor/minified/minified').$; +var _ = require('./vendor/minified/minified')._; +var HTML = require('./vendor/minified/minified').HTML; -var config = $.extend(true, [], window.clayConfig || []); -var settings = $.extend(true, {}, window.claySettings || {}); +var config = _.extend([], window.clayConfig || []); +var settings = _.extend({}, window.claySettings || {}); var returnTo = window.returnTo || 'pebblejs://close#'; var customFn = window.customFn; function submit(event) { - $.each(api.itemsByAppKey, function(appKey, item) { + _.each(api.itemsByAppKey, function(appKey, item) { settings[appKey] = item.get(); }); // Set the return URL depending on the runtime environment @@ -47,8 +48,6 @@ function getSetting(key, defaultValue) { // settings[key] = value; // } -var index = 0; - /** * @param {Clay~Item|Array} item * @param {$} $parent @@ -63,29 +62,29 @@ function processConfigItem(item, $parent) { } else if (item.type === 'section') { processConfigItem( item.items, - $('
').appendTo($parent) + $parent.add(HTML('
')) ); } else if (item.type === 'block') { processConfigItem( item.items, - $('
').appendTo($parent) + $parent.add(HTML('
')) ); } else { + console.debug('KEEGAN: itemType', item.type); var apiItem = {}; var itemType = itemTypes[item.type]; - var templateData = $.extend({}, item, { - attributes: $.map(item.attributes || [], function(item, key) { - console.log(index); - return { - key: key, - value: item.toString(), - index: index++ - }; - }) - }); + var templateData = { + label: '', + options: [], + attributes: {} + }; - apiItem.$element = $(mustache.render(itemType.template, templateData)); - apiItem.$manipulatorTarget = apiItem.$element.find('[data-manipulator-target]'); + console.debug('KEEGAN: templateData', templateData); + + _.extend(templateData, item); + apiItem.$element = HTML(_.formatHtml(itemType.template, templateData)); + apiItem.$manipulatorTarget = + apiItem.$element.select('[data-manipulator-target]'); // this caters for situations where the manipulator target is the root element if (!apiItem.$manipulatorTarget.length) { @@ -93,26 +92,44 @@ function processConfigItem(item, $parent) { } // proxy event related methods + var eventProxies = {}; apiItem.on = function(events, handler) { - return apiItem.$manipulatorTarget.on(events, $.proxy(handler, apiItem)); + eventProxies[handler] = function(event) { + handler.call(apiItem, event); + }; + return apiItem.$manipulatorTarget.on(events, eventProxies[handler]); }; apiItem.one = function(events, handler) { - return apiItem.$manipulatorTarget.one(events, $.proxy(handler, apiItem)); + eventProxies[handler] = function(event) { + handler.call(apiItem, event); + $.off(eventProxies[handler]); + }; + return apiItem.$manipulatorTarget.on(events, eventProxies[handler]); }; - apiItem.off = apiItem.$manipulatorTarget.off.bind(apiItem.$manipulatorTarget); - apiItem.triggerHandler = - apiItem.$manipulatorTarget.triggerHandler.bind(apiItem.$manipulatorTarget); + apiItem.off = function(handler) { + return $.off(eventProxies[handler]); + }; + + apiItem.trigger = + apiItem.$manipulatorTarget.trigger.bind(apiItem.$manipulatorTarget); // attach the manipulator methods to the apiItem - $.each(itemType.manipulator, function(methodName, method) { + _.eachObj(itemType.manipulator, function(methodName, method) { apiItem[methodName] = method.bind(apiItem); }); + apiItem.config = item; + + // attach the initialize method to the API. + apiItem.iniialize = typeof itemType.initialize === 'function' ? + itemType.initialize : + function() {}; + apiItem.iniialize.bind(apiItem); + apiItem.iniialize(); + // set the value of the item via the manipulator to ensure consistency apiItem.set(getSetting(item.app_key, item.value)); - apiItem.config = item; - if (item.id) { api.itemsById[item.id] = apiItem; } @@ -123,7 +140,7 @@ function processConfigItem(item, $parent) { api.items.push(apiItem); - $parent.append(apiItem.$element); + $parent.add(apiItem.$element); } } diff --git a/src/scripts/lib/item-types.js b/src/scripts/lib/item-types.js deleted file mode 100755 index a93fc3e..0000000 --- a/src/scripts/lib/item-types.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var manipulators = require('./manipulators'); - -module.exports = { - heading: { - template: require('../../templates/components/heading.mustache'), - manipulator: manipulators.html - }, - subheading: { - template: require('../../templates/components/subheading.mustache'), - manipulator: manipulators.html - }, - footer: { - template: require('../../templates/components/footer.mustache'), - manipulator: manipulators.html - }, - input: { - template: require('../../templates/components/input.mustache'), - manipulator: manipulators.val - }, - color: { - template: require('../../templates/components/color.mustache'), - manipulator: manipulators.val - }, - select: { - template: require('../../templates/components/select.mustache'), - manipulator: manipulators.val - }, - toggle: { - template: require('../../templates/components/toggle.mustache'), - manipulator: manipulators.checked - }, - radiogroup: { - template: require('../../templates/components/radiogroup.mustache'), - manipulator: manipulators.radiogroup - }, - submit: { - template: require('../../templates/components/submit.mustache'), - manipulator: manipulators.val - } -}; diff --git a/src/scripts/lib/items.js b/src/scripts/lib/items.js new file mode 100755 index 0000000..ae96c67 --- /dev/null +++ b/src/scripts/lib/items.js @@ -0,0 +1,13 @@ +'use strict'; + +module.exports = { + heading: require('./items/heading'), + subheading: require('./items/subheading'), + footer: require('./items/footer'), + input: require('./items/input'), + color: require('./items/color'), + select: require('./items/select'), + toggle: require('./items/toggle'), + radiogroup: require('./items/radiogroup'), + submit: require('./items/submit') +}; diff --git a/src/scripts/lib/items/color.js b/src/scripts/lib/items/color.js new file mode 100644 index 0000000..1c56496 --- /dev/null +++ b/src/scripts/lib/items/color.js @@ -0,0 +1,87 @@ +'use strict'; + +var HTML = require('../../vendor/minified/minified').HTML; + +module.exports = { + template: require('../../../templates/items/color.tpl'), + manipulator: require('../manipulators').val, + initialize: function() { + var self = this; + console.debug('KEEGAN: initializer', self); + + /* eslint-disable comma-spacing, no-multi-spaces, max-len, + standard/array-bracket-even-spacing */ + var layout = self.config.layout || [ + [false , false , '#55FF00', '#AAFF55', false , '#FFFF55', '#FFFFAA', false , false ], + [false , '#AAFFAA', '#55FF55', '#00FF00', '#AAFF00', '#FFFF00', '#FFAA55', '#FFAAAA', false ], + ['#55FFAA', '#00FF55', '#00AA00', '#55AA00', '#AAAA55', '#AAAA00', '#FFAA00', '#FF5500', '#FF5555'], + ['#AAFFFF', '#00FFAA', '#00AA55', '#55AA55', '#005500', '#555500', '#AA5500', '#FF0000', '#FF0055'], + [false , '#55AAAA', '#00AAAA', '#005555', '#FFFFFF', '#000000', '#AA5555', '#AA0000', false ], + ['#55FFFF', '#00FFFF', '#00AAFF', '#0055AA', '#AAAAAA', '#555555', '#550000', '#AA0055', '#FF55AA'], + ['#55AAFF', '#0055FF', '#0000FF', '#0000AA', '#000055', '#550055', '#AA00AA', '#FF00AA', '#FFAAFF'], + [false , '#5555AA', '#5555FF', '#5500FF', '#5500AA', '#AA00FF', '#FF00FF', '#FF55FF', false ], + [false , false , false , '#AAAAFF', '#AA55FF', '#AA55AA', false , false , false ] + ]; + /* eslint-enable */ + + var grid = ''; + var itemWidth = 100 / layout[0].length; + var itemHeight = 100 / layout.length; + var boxHeight = itemWidth * layout.length; + var $elem = self.$element; + + for (var i = 0; i < layout.length; i++) { + for (var j = 0; j < layout[i].length; j++) { + + var color = layout[i][j] || 'transparent'; + var selectable = (color !== 'transparent' ? ' selectable' : ''); + + var roundedTL = (i === 0 && j === 0) || i === 0 && !layout[i][j - 1] || + !layout[i][j - 1] && !layout[i - 1][j] ? + ' rounded-tl' : + ''; + + var roundedTR = i === 0 && !layout[i][j + 1] || + !layout[i][j + 1] && !layout[i - 1][j] ? + ' rounded-tr ' : + ''; + + var roundedBL = (i === layout.length - 1 && j === 0) || + i === layout.length - 1 && !layout[i][j - 1] || + !layout[i][j - 1] && !layout[i + 1][j] ? + ' rounded-bl' : + ''; + + var roundedBR = i === layout.length - 1 && !layout[i][j + 1] || + !layout[i][j + 1] && !layout[i + 1][j] ? + ' rounded-br' : + ''; + + grid += '' + + ''; + } + } + + $elem.select('.color-box-container').add(HTML(grid)); + + var $injectedColor = $elem.select('.color-box-container') + var $valueDisplay = $injectedColor.select('.value'); + + $elem.on('click', function(ev) { + $elem.select('.color-box-wrap').set('show'); + }); + + self.on('change', function(ev) { + var value = self.get().replace(/^0x/, '').toLowerCase(); + $valueDisplay.set('$background-color', '#' + value); + }); + + } +} diff --git a/src/scripts/lib/items/footer.js b/src/scripts/lib/items/footer.js new file mode 100644 index 0000000..4313443 --- /dev/null +++ b/src/scripts/lib/items/footer.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/footer.tpl'), + manipulator: require('../manipulators').html +}; diff --git a/src/scripts/lib/items/heading.js b/src/scripts/lib/items/heading.js new file mode 100644 index 0000000..37d72e8 --- /dev/null +++ b/src/scripts/lib/items/heading.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/heading.tpl'), + manipulator: require('../manipulators').html +}; diff --git a/src/scripts/lib/items/input.js b/src/scripts/lib/items/input.js new file mode 100644 index 0000000..c6c0fad --- /dev/null +++ b/src/scripts/lib/items/input.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/input.tpl'), + manipulator: require('../manipulators').val +}; diff --git a/src/scripts/lib/items/radiogroup.js b/src/scripts/lib/items/radiogroup.js new file mode 100644 index 0000000..f581230 --- /dev/null +++ b/src/scripts/lib/items/radiogroup.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/radiogroup.tpl'), + manipulator: require('../manipulators').radiogroup +}; diff --git a/src/scripts/lib/items/select.js b/src/scripts/lib/items/select.js new file mode 100644 index 0000000..07a5c8d --- /dev/null +++ b/src/scripts/lib/items/select.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/select.tpl'), + manipulator: require('../manipulators').val +}; diff --git a/src/scripts/lib/items/subheading.js b/src/scripts/lib/items/subheading.js new file mode 100644 index 0000000..c99b7ef --- /dev/null +++ b/src/scripts/lib/items/subheading.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/subheading.tpl'), + manipulator: require('../manipulators').html +}; diff --git a/src/scripts/lib/items/submit.js b/src/scripts/lib/items/submit.js new file mode 100644 index 0000000..3082c23 --- /dev/null +++ b/src/scripts/lib/items/submit.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/submit.tpl'), + manipulator: require('../manipulators').val +}; diff --git a/src/scripts/lib/items/toggle.js b/src/scripts/lib/items/toggle.js new file mode 100644 index 0000000..6c33742 --- /dev/null +++ b/src/scripts/lib/items/toggle.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + template: require('../../../templates/items/toggle.tpl'), + manipulator: require('../manipulators').checked +}; diff --git a/src/scripts/lib/manipulators.js b/src/scripts/lib/manipulators.js index ddc583a..e6be686 100755 --- a/src/scripts/lib/manipulators.js +++ b/src/scripts/lib/manipulators.js @@ -3,45 +3,45 @@ module.exports = { html: { get: function() { - return this.$manipulatorTarget.html(); + return this.$manipulatorTarget.get('innerHTML'); }, set: function(value) { - return this.$manipulatorTarget.html(value) - .triggerHandler('change'); + return this.$manipulatorTarget.set('innerHTML', value) + .trigger('change'); } }, val: { get: function() { - return this.$manipulatorTarget.val(); + return this.$manipulatorTarget.get('value'); }, set: function(value) { - return this.$manipulatorTarget.val(value) - .triggerHandler('change'); + return this.$manipulatorTarget.set('value', value) + .trigger('change'); }, disable: function() { - return this.$manipulatorTarget.prop('disabled', true) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', true) + .trigger('change'); }, enable: function() { - return this.$manipulatorTarget.prop('disabled', false) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', false) + .trigger('change'); } }, checked: { get: function() { - return this.$manipulatorTarget.prop('checked'); + return this.$manipulatorTarget.get('checked'); }, set: function(value) { - return this.$manipulatorTarget.prop('checked', value) - .triggerHandler('change'); + return this.$manipulatorTarget.set('checked', value) + .trigger('change'); }, disable: function() { - return this.$manipulatorTarget.prop('disabled', true) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', true) + .trigger('change'); }, enable: function() { - return this.$manipulatorTarget.prop('disabled', false) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', false) + .trigger('change'); } }, radiogroup: { @@ -51,15 +51,15 @@ module.exports = { set: function(value) { this.$manipulatorTarget.find('[value="' + value + '"]') .prop('checked', true); - return this.$manipulatorTarget.triggerHandler('change'); + return this.$manipulatorTarget.trigger('change'); }, disable: function() { - return this.$manipulatorTarget.prop('disabled', true) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', true) + .trigger('change'); }, enable: function() { - return this.$manipulatorTarget.prop('disabled', false) - .triggerHandler('change'); + return this.$manipulatorTarget.set('disabled', false) + .trigger('change'); } } }; diff --git a/src/scripts/vendor/minified/minified.js b/src/scripts/vendor/minified/minified.js new file mode 100644 index 0000000..114a125 --- /dev/null +++ b/src/scripts/vendor/minified/minified.js @@ -0,0 +1,3676 @@ +// minified.js config start -- use this comment to re-create a configuration in the Builder +// - Only sections add, always, amdsupport, dollardollar, each, +// - eachobj, error, extend, filter, find, format, formathtml, get, html, isobject, +// - map, mapobj, off, on, ready, request, select, set, template, trigger, +// - underscore, wait. + + +// WARNING! This file is autogenerated from minified-master.js and others. + +/* + * Minified.js - Lightweight Client-Side JavaScript Library (full package) + * Version: Version 2014 beta 5 b2 + * + * Public Domain. Use, modify and distribute it any way you like. No attribution required. + * To the extent possible under law, Tim Jansen has waived all copyright and related or neighboring rights to Minified. + * Please see http://creativecommons.org/publicdomain/zero/1.0/. + * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + * + * Contains code based on https://github.com/douglascrockford/JSON-js (also Public Domain). + * + * https://github.com/timjansen/minified.js + */ +// ==ClosureCompiler== +// @output_file_name minified.js +// @compilation_level ADVANCED_OPTIMIZATIONS +// ==/ClosureCompiler== + +/*$ + * @id ALL + * @doc no + * @required + * This id allows identifying whether both Web and Util are available. + */ + +///#snippet commonAmdStart + +/*$ + * @id require + * @name require() + * @syntax require(name) + * @group OPTIONS + * @module WEB, UTIL + * Returns a reference to a module. If you do not use an AMD loader to load Minified, just call require() with the + * argument 'minified' to get a reference to Minified. You can also access all modules defined using ##define(). + * + * If you do use an AMD loader, Minified will not define this function and you can use the AMD loader to obtain the + * reference to Minified. + * Minified's version of require is very simple and will only support Minified and other libraries designed + * for Minfied, but no real AMD libraries. If you need to work with libraries requiring AMD, you need a real AMD loader. + * + * @param name the name of the module to request. Minified is available as 'minified'. + * @return the reference to the module. Use the name 'minified' to get Minified. You can also access any modules defined using + * ##define(). If the name is unknown, it returns undefined. + * + * @see ##define() allows you to define modules that can be obtained using require(). + */ + +/*$ + * @id define + * @name define() + * @syntax define(name, factoryFunction) + * @group OPTIONS + * @module WEB, UTIL + * Defines a module that can be returned by ##require(), in case you don't have a AMD loader. If you have a AMD loader before you include Minified, + * define() will not be set and you can use the AMD loader's (more powerful) variant. + * + * Minified's versions of require() and define() are very simple and can not resolve things like circular references. + * Also, they are not AMD-compatible and only useful for simple modules. If you need to work with real AMD libraries that are not written + * for Minified, you need a real AMD loader. + * + * @example Creates a simple module and uses it: + *
+ * define('makeGreen', function(require) {
+ *     var MINI = require('minified'), $ = MINI.$; // obtain own ref to Minified
+ *     return function(list) {
+ *         $(list).set({$color: '#0f0', $backgroundColor: '#050'});
+ *     });
+ * });
+ *
+ * var makeGreen = require('makeGreen');
+ * makeGreen('.notGreenEnough');
+ * 
+ * + * @param name the name of the module to request. In Minified's implementation, only 'minified' is supported. + * @param factoryFunction is a function(require) will be called the first time the name is defined to obtain the module + * reference. It received a reference to ##require() (which is required for AMD backward-compatibility) and + * must return the value that is returned by ##require(). The function will only be called once, its result will + * be cached. + *
require
A reference to ##require(). While you could use require() from the global + * context, this would prevent backward compatibility with AMD.
+ *
(callback return value)
The reference to be returned by ##require().
+ * + * @see ##require() can be used to obtain references defined with ##define(). + */ + +/*$ + * @id amdsupport + * @name AMD stubs + * @configurable default + * @group OPTIONS + * @doc no + * @module WEB, UTIL + * If enabled, Minified will create stubs so you can use it without an AMD framework. + * It requires AMD's define() function. + */ +if (/^u/.test(typeof define)) { // no AMD support available ? define a minimal version + (function(def){ + var require = this['require'] = function(name) { return def[name]; }; + this['define'] = function(name, f) { def[name] = def[name] || f(require); }; + })({}); +} +/*$ + * @stop + */ + +define('minified', function() { + + ///#/snippet commonAmdStart + ///#snippet webVars + /*$ + * @id WEB + * @doc no + * @required + * This id allows identifying whether the Web module is available. + */ + + /** + * @const + */ + var _window = window; + + /** + * @const + * @type {!string} + */ + var MINIFIED_MAGIC_NODEID = 'Nia'; + + /** + * @const + * @type {!string} + */ + var MINIFIED_MAGIC_PREV = 'NiaP'; + + var setter = {}, getter = {}; + + var idSequence = 1; // used as node id to identify nodes, and as general id for other maps + + + /*$ + * @id ready_vars + * @dependency + */ + /** @type {!Array.} */ + var DOMREADY_HANDLER = /^[ic]/.test(document['readyState']) ? _null : []; // check for 'interactive' and 'complete' + /*$ + * @stop + */ + + ///#/snippet webVars + ///#snippet utilVars + /*$ + * @id UTIL + * @doc no + * @required + * This id allows identifying whether the Util module is available. + */ + + var _null = null; + + /** @const */ + var undef; + + /*$ + * @id date_constants + * @dependency + */ + function val3(v) {return v.substr(0,3);} + var MONTH_LONG_NAMES = split('January,February,March,April,May,June,July,August,September,October,November,December', /,/g); + var MONTH_SHORT_NAMES = map(MONTH_LONG_NAMES, val3); // ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; + var WEEK_LONG_NAMES = split('Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday', /,/g); + var WEEK_SHORT_NAMES = map(WEEK_LONG_NAMES, val3); + var MERIDIAN_NAMES = split('am,pm', /,/g); + var MERIDIAN_NAMES_FULL = split('am,am,am,am,am,am,am,am,am,am,am,am,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm', /,/g); + + var FORMAT_DATE_MAP = { + 'y': ['FullYear', nonOp], + 'Y': ['FullYear', function(d) { return d % 100; }], + 'M': ['Month', plusOne], + 'n': ['Month', MONTH_SHORT_NAMES], + 'N': ['Month', MONTH_LONG_NAMES], + 'd': ['Date', nonOp], + 'm': ['Minutes', nonOp], + 'H': ['Hours', nonOp], + 'h': ['Hours', function(d) { return (d % 12) || 12; }], + 'k': ['Hours', plusOne], + 'K': ['Hours', function(d) { return d % 12; }], + 's': ['Seconds', nonOp], + 'S': ['Milliseconds', nonOp], + 'a': ['Hours', MERIDIAN_NAMES_FULL], + 'w': ['Day', WEEK_SHORT_NAMES], + 'W': ['Day', WEEK_LONG_NAMES], + 'z': ['TimezoneOffset', function(d, dummy, timezone) { + if (timezone) + return timezone; + + var sign = d > 0 ? '-' : '+'; + var off = d < 0 ? -d : d; + return sign + pad(2, Math.floor(off/60)) + pad(2, off%60); + }] + }; + + var PARSE_DATE_MAP = { + 'y': 0, // placeholder -> ctorIndex + 'Y': [0, -2000], + 'M': [1,1], // placeholder -> [ctorIndex, offset|value array] + 'n': [1, MONTH_SHORT_NAMES], + 'N': [1, MONTH_LONG_NAMES], + 'd': 2, + 'm': 4, + 'H': 3, + 'h': 3, + 'K': [3,1], + 'k': [3,1], + 's': 5, + 'S': 6, + 'a': [3, MERIDIAN_NAMES] + }; + + /*$ + * @stop + */ + + /** @const */ + var MAX_CACHED_TEMPLATES = 99; + var templateCache={}; // template -> function + var templates = []; // list of MAX_CACHED_TEMPLATES templates + + ///#/snippet utilVars + ///#snippet commonFunctions + + /** @param s {?} */ + function toString(s) { + return s!=_null ? ''+s : ''; + } + /** + * @param s {?} + * @param o {string} + */ + function isType(s,o) { + return typeof s == o; + } + /** @param s {?} */ + function isString(s) { + return isType(s, 'string'); + } + function isObject(f) { + return !!f && isType(f, 'object'); + } + function isNode(n) { + return n && n['nodeType']; + } + function isNumber(n) { + return isType(n, 'number'); + } + function isDate(n) { + return isObject(n) && !!n['getDay']; + } + function isBool(n) { + return n === true || n === false; + } + function isValue(n) { + var type = typeof n; + return type == 'object' ? !!(n && n['getDay']) : (type == 'string' || type == 'number' || isBool(n)); + } + function nonOp(v) { + return v; + } + function plusOne(d) { + return d+1; + } + function replace(s, regexp, sub) { + return toString(s).replace(regexp, sub != _null ? sub : ''); + } + function escapeRegExp(s) { + return replace(s, /[\\\[\]\/{}()*+?.$|^-]/g, "\\$&"); + } + function trim(s) { + return replace(s, /^\s+|\s+$/g); + } + function eachObj(obj, cb, ctx) { + for (var n in obj) + if (obj.hasOwnProperty(n)) + cb.call(ctx || obj, n, obj[n]); + return obj; + } + function each(list, cb, ctx) { + if (list) + for (var i = 0; i < list.length; i++) + cb.call(ctx || list, list[i], i); + return list; + } + function filter(list, filterFuncOrObject, ctx) { + var r = []; + var f = isFunction(filterFuncOrObject) ? filterFuncOrObject : function(value) { return filterFuncOrObject != value; }; + each(list, function(value, index) { + if (f.call(ctx || list, value, index)) + r.push(value); + }); + return r; + } + function collector(iterator, obj, collectFunc, ctx) { + var result = []; + iterator(obj, function (a, b) { + if (isList(a = collectFunc.call(ctx || obj, a, b))) // extreme variable reusing: a is now the callback result + each(a, function(rr) { result.push(rr); }); + else if (a != _null) + result.push(a); + }); + return result; + } + function collectObj(obj, collectFunc, ctx) { + return collector(eachObj, obj, collectFunc, ctx); + } + function collect(list, collectFunc, ctx) { + return collector(each, list, collectFunc, ctx); + } + function keyCount(obj) { + var c = 0; + eachObj(obj, function(key) { c++; }); + return c; + } + function keys(obj) { // use Object.keys? in IE>=9 + var list = []; + eachObj(obj, function(key) { list.push(key); }); + return list; + } + function map(list, mapFunc, ctx) { + var result = []; + each(list, function(item, index) { + result.push(mapFunc.call(ctx || list, item, index)); + }); + return result; + } + function startsWith(base, start) { + if (isList(base)) { + var s2 = _(start); // convert start as we don't know whether it is a list yet + return equals(sub(base, 0, s2.length), s2); + } + else + return start != _null && base.substr(0, start.length) == start; + } + function endsWith(base, end) { + if (isList(base)) { + var e2 = _(end); + return equals(sub(base, -e2.length), e2) || !e2.length; + } + else + return end != _null && base.substr(base.length - end.length) == end; + } + function reverse(list) { + var len = list.length; + if (isList(list)) + return new M(map(list, function() { return list[--len]; })); + else + return replace(list, /[\s\S]/g, function() { return list.charAt(--len); }); + } + function toObject(list, value) { + var obj = {}; + each(list, function(item, index) { + obj[item] = value; + }); + return obj; + } + function copyObj(from, to) { + var dest = to || {}; + for (var name in from) + dest[name] = from[name]; + return dest; + } + function merge(list, target) { + var o = target; + for (var i = 0; i < list.length; i++) + o = copyObj(list[i], o); + return o; + } + function getFindFunc(findFunc) { + return isFunction(findFunc) ? findFunc : function(obj, index) { if (findFunc === obj) return index; }; + } + function getFindIndex(list, index, defaultIndex) { + return index == _null ? defaultIndex : index < 0 ? Math.max(list.length+index, 0) : Math.min(list.length, index); + } + function find(list, findFunc, startIndex, endIndex) { + var f = getFindFunc(findFunc); + var e = getFindIndex(list, endIndex, list.length); + var r; + for (var i = getFindIndex(list, startIndex, 0); i < e; i++) + if ((r = f.call(list, list[i], i)) != _null) + return r; + } + function findLast(list, findFunc, startIndex, endIndex) { + var f = getFindFunc(findFunc); + var e = getFindIndex(list, endIndex, -1); + var r; + for (var i = getFindIndex(list, startIndex, list.length-1); i > e; i--) + if ((r = f.call(list, list[i], i)) != _null) + return r; + } + function sub(list, startIndex, endIndex) { + var r = []; + if (list) { + var e = getFindIndex(list, endIndex, list.length); + for (var i = getFindIndex(list, startIndex, 0); i < e; i++) + r.push(list[i]); + } + return r; + } + function array(list) { + return map(list, nonOp); + } + function unite(list) { + return function() { + return new M(callList(list, arguments)); + }; + } + function uniq(list) { + var found = {}; + return filter(list, function(item) { + if (found[item]) + return false; + else + return found[item] = 1; + }); + } + function intersection(list, otherList) { + var keys = toObject(otherList, 1); + return filter(list, function(item) { + var r = keys[item]; + keys[item] = 0; + return r; + }); + } + function contains(list, value) { // TODO: can Array.indexOf be used in >IE8? + for (var i = 0; i < list.length; i++) + if (list[i] == value) + return true; + return false; + } + // equals if a and b have the same elements and all are equal. Supports getters. + function equals(x, y) { + var a = isFunction(x) ? x() : x; + var b = isFunction(y) ? y() : y; + var aKeys; + if (a == b) + return true; + else if (a == _null || b == _null) + return false; + else if (isValue(a) || isValue(b)) + return isDate(a) && isDate(b) && +a==+b; + else if (isList(a)) { + return (a.length == b.length) && + !find(a, function(val, index) { + if (!equals(val, b[index])) + return true; + }); + } + else { + return !isList(b) && + ((aKeys = keys(a)).length == keyCount(b)) && + !find(aKeys, function(key) { + if (!equals(a[key],b[key])) + return true; + }); + } + } + + function call(f, fThisOrArgs, args) { + if (isFunction(f)) + return f.apply(args && fThisOrArgs, map(args || fThisOrArgs, nonOp)); + } + function callList(list, fThisOrArgs, args) { + return map(list, function(f) { return call(f, fThisOrArgs, args);}); + } + function bind(f, fThis, beforeArgs, afterArgs) { + return function() { + return call(f, fThis, collect([beforeArgs, arguments, afterArgs], nonOp)); + }; + } + function partial(f, beforeArgs, afterArgs) { + return bind(f, this, beforeArgs, afterArgs); + } + function pad(digits, number) { + var signed = number < 0 ? '-' : ''; + var preDecimal = (signed?-number:number).toFixed(0); + while (preDecimal.length < digits) + preDecimal = '0' + preDecimal; + return signed + preDecimal; + } + + function processNumCharTemplate(tpl, input, fwd) { + var inHash; + var inputPos = 0; + var rInput = fwd ? input : reverse(input); + var s = (fwd ? tpl : reverse(tpl)).replace(/./g, function(tplChar) { + if (tplChar == '0') { + inHash = false; + return rInput.charAt(inputPos++) || '0'; + } + else if (tplChar == '#') { + inHash = true; + return rInput.charAt(inputPos++) || ''; + } + else + return inHash && !rInput.charAt(inputPos) ? '' : tplChar; + }); + return fwd ? s : (input.substr(0, input.length - inputPos) + reverse(s)); + } + + function getTimezone(match, idx, refDate) { // internal helper, see below + if (idx == _null || !match) + return 0; + return parseFloat(match[idx]+match[idx+1])*60 + parseFloat(match[idx]+match[idx+2]) + refDate.getTimezoneOffset(); + } + + // formats number with format string (e.g. "#.000", "#,#", "00000", "000.00", "000.000.000,00", "000,000,000.##") + // choice syntax: :|:|... + // e.g. 0:no item|1:one item|>=2:# items + // ="null" used to compare with nulls. + // choice also works with strings or bools, e.g. ERR:error|WAR:warning|FAT:fatal|ok + function formatValue(fmt, value) { + var format = replace(fmt, /^\?/); + if (isDate(value)) { + var timezone, match; + + if (match = /^\[(([+-])(\d\d)(\d\d))\]\s*(.*)/.exec(format)) { + timezone = match[1]; + value = dateAdd(value, 'minutes', getTimezone(match, 2, value)); + format = match[5]; + } + + return replace(format, /(\w)(\1*)(?:\[([^\]]+)\])?/g, function(s, placeholderChar, placeholderDigits, params) { + var val = FORMAT_DATE_MAP[placeholderChar]; + if (val) { + var d = value['get' + val[0]](); + var optionArray = (params && params.split(',')); + + if (isList(val[1])) + d = (optionArray || val[1])[d]; + else + d = val[1](d, optionArray, timezone); + if (d != _null && !isString(d)) + d = pad(placeholderDigits.length+1, d); + return d; + } + else + return s; + }); + + } + else + return find(format.split(/\s*\|\s*/), function(fmtPart) { + var match, numFmtOrResult; + if (match = /^([<>]?)(=?)([^:]*?)\s*:\s*(.*)$/.exec(fmtPart)) { + var cmpVal1 = value, cmpVal2 = +(match[3]); + if (isNaN(cmpVal2) || !isNumber(cmpVal1)) { + cmpVal1 = (cmpVal1==_null) ? "null" : toString(cmpVal1); // not ""+value, because undefined is treated as null here + cmpVal2 = match[3]; + } + if (match[1]) { + if ((!match[2] && cmpVal1 == cmpVal2 ) || + (match[1] == '<' && cmpVal1 > cmpVal2) || + (match[1] == '>' && cmpVal1 < cmpVal2)) + return _null; + } + else if (cmpVal1 != cmpVal2) + return _null; + numFmtOrResult = match[4]; + } + else + numFmtOrResult = fmtPart; + + if (isNumber(value)) + return numFmtOrResult.replace(/[0#](.*[0#])?/, function(numFmt) { + var decimalFmt = /^([^.]+)(\.)([^.]+)$/.exec(numFmt) || /^([^,]+)(,)([^,]+)$/.exec(numFmt); + var signed = value < 0 ? '-' : ''; + var numData = /(\d+)(\.(\d+))?/.exec((signed?-value:value).toFixed(decimalFmt ? decimalFmt[3].length:0)); + var preDecimalFmt = decimalFmt ? decimalFmt[1] : numFmt; + var postDecimal = decimalFmt ? processNumCharTemplate(decimalFmt[3], replace(numData[3], /0+$/), true) : ''; + + return (signed ? '-' : '') + + (preDecimalFmt == '#' ? numData[1] : processNumCharTemplate(preDecimalFmt, numData[1])) + + (postDecimal.length ? decimalFmt[2] : '') + + postDecimal; + }); + else + return numFmtOrResult; + }); + } + // returns date; null if optional and not set; undefined if parsing failed + function parseDate(fmt, date) { + var indexMap = {}; // contains reGroupPosition -> typeLetter or [typeLetter, value array] + var reIndex = 1; + var timezoneOffsetMatch; + var timezoneIndex; + var match; + + var format = replace(fmt, /^\?/); + if (format!=fmt && !trim(date)) + return _null; + + if (match = /^\[([+-])(\d\d)(\d\d)\]\s*(.*)/.exec(format)) { + timezoneOffsetMatch = match; + format = match[4]; + } + + var parser = new RegExp(format.replace(/(.)(\1*)(?:\[([^\]]*)\])?/g, function(wholeMatch, placeholderChar, placeholderDigits, param) { + if (/[dmhkyhs]/i.test(placeholderChar)) { + indexMap[reIndex++] = placeholderChar; + var plen = placeholderDigits.length+1; + return "(\\d"+(plen<2?"+":("{1,"+plen+"}"))+")"; + } + else if (placeholderChar == 'z') { + timezoneIndex = reIndex; + reIndex += 3; + return "([+-])(\\d\\d)(\\d\\d)"; + } + else if (/[Nna]/.test(placeholderChar)) { + indexMap[reIndex++] = [placeholderChar, param && param.split(',')]; + return "([a-zA-Z\\u0080-\\u1fff]+)"; + } + else if (/w/i.test(placeholderChar)) + return "[a-zA-Z\\u0080-\\u1fff]+"; + else if (/\s/.test(placeholderChar)) + return "\\s+"; + else + return escapeRegExp(wholeMatch); + })); + + if (!(match = parser.exec(date))) + return undef; + + var ctorArgs = [0, 0, 0, 0, 0, 0, 0]; + for (var i = 1; i < reIndex; i++) { + var matchVal = match[i]; + var indexEntry = indexMap[i]; + if (isList(indexEntry)) { // for a, n or N + var placeholderChar = indexEntry[0]; + var mapEntry = PARSE_DATE_MAP[placeholderChar]; + var ctorIndex = mapEntry[0]; + var valList = indexEntry[1] || mapEntry[1]; + var listValue = find(valList, function(v, index) { if (startsWith(matchVal.toLowerCase(), v.toLowerCase())) return index; }); + if (listValue == _null) + return undef; + if (placeholderChar == 'a') + ctorArgs[ctorIndex] += listValue * 12; + else + ctorArgs[ctorIndex] = listValue; + } + else if (indexEntry) { // for numeric values (yHmMs) + var value = parseFloat(matchVal); + var mapEntry = PARSE_DATE_MAP[indexEntry]; + if (isList(mapEntry)) + ctorArgs[mapEntry[0]] += value - mapEntry[1]; + else + ctorArgs[mapEntry] += value; + } + } + var d = new Date(ctorArgs[0], ctorArgs[1], ctorArgs[2], ctorArgs[3], ctorArgs[4], ctorArgs[5], ctorArgs[6]); + return dateAdd(d, 'minutes', -getTimezone(timezoneOffsetMatch, 1, d) - getTimezone(match, timezoneIndex, d)); + } + // format ?##00,00## + // returns number; null if optional and not set; undefined if parsing failed + function parseNumber(fmt, value) { + var format = replace(fmt, /^\?/); + if (format!=fmt && !trim(value)) + return _null; + var decSep = (/(^|[^0#.,])(,|[0#.]*,[0#]+|[0#]+\.[0#]+\.[0#.,]*)($|[^0#.,])/.test(format)) ? ',' : '.'; + var r = parseFloat(replace(replace(replace(value, decSep == ',' ? /\./g : /,/g), decSep, '.'), /^[^\d-]*(-?\d)/, '$1')); + return isNaN(r) ? undef : r; + } + function now() { + return new Date(); + } + function dateClone(date) { + return new Date(+date); + } + function capWord(w) { + return w.charAt(0).toUpperCase() + w.substr(1); + } + function dateAddInline(d, cProp, value) { + d['set'+cProp](d['get'+cProp]() + value); + return d; + } + function dateAdd(date, property, value) { + if (value == _null) + return dateAdd(now(), date, property); + return dateAddInline(dateClone(date), capWord(property), value); + } + function dateMidnight(date) { + var od = date || now(); + return new Date(od.getFullYear(), od.getMonth(), od.getDate()); + } + function dateDiff(property, date1, date2) { + var d1t = +date1; + var d2t = +date2; + var dt = d2t - d1t; + if (dt < 0) + return -dateDiff(property, date2, date1); + + var propValues = {'milliseconds': 1, 'seconds': 1000, 'minutes': 60000, 'hours': 3600000}; + var ft = propValues[property]; + if (ft) + return dt / ft; + + var cProp = capWord(property); + var calApproxValues = {'fullYear': 8.64e7*365, 'month': 8.64e7*365/12, 'date': 8.64e7}; // minimum values, a little bit below avg values + var minimumResult = Math.floor((dt / calApproxValues[property])-2); // -2 to remove the imperfections caused by the values above + + var d = dateAddInline(new Date(d1t), cProp, minimumResult); + for (var i = minimumResult; i < minimumResult*1.2+4; i++) { // try out 20% more than needed, just to be sure + if (+dateAddInline(d, cProp, 1) > d2t) + return i; + } + // should never ever be reached + } + + function ucode(a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + } + + function escapeJavaScriptString(s) { + return replace(s, /[\x00-\x1f'"\u2028\u2029]/g, ucode); + } + + // reimplemented split for IE8 + function split(str, regexp) { + + return str.split(regexp); + } + + function template(template, escapeFunction) { + if (templateCache[template]) + return templateCache[template]; + else { + var funcBody = 'with(_.isObject(obj)?obj:{}){'+ + map(split(template, /{{|}}}?/g), function(chunk, index) { + var match, c1 = trim(chunk), c2 = replace(c1, /^{/), escapeSnippet = (c1==c2) ? 'esc(' : ''; + if (index%2) { // odd means JS code + if (match = /^each\b(\s+([\w_]+(\s*,\s*[\w_]+)?)\s*:)?(.*)/.exec(c2)) + return 'each('+(trim(match[4])?match[4]:'this')+', function('+match[2]+'){'; + else if (match = /^if\b(.*)/.exec(c2)) + return 'if('+match[1]+'){'; + else if (match = /^else\b\s*(if\b(.*))?/.exec(c2)) + return '}else ' + (match[1] ? 'if('+match[2] +')' : '')+'{'; + else if (match = /^\/(if)?/.exec(c2)) + return match[1] ? '}\n' : '});\n'; + else if (match = /^(var\s.*)/.exec(c2)) + return match[1]+';'; + else if (match = /^#(.*)/.exec(c2)) + return match[1]; + else if (match = /(.*)::\s*(.*)/.exec(c2)) + return 'print('+escapeSnippet+'_.formatValue("'+escapeJavaScriptString(match[2])+'",'+(trim(match[1])?match[1]:'this')+(escapeSnippet&&')')+'));\n'; + else + return 'print('+escapeSnippet+(trim(c2)?c2:'this')+(escapeSnippet&&')')+');\n'; + } + else if (chunk){ + return 'print("'+escapeJavaScriptString(chunk)+'");\n'; + } + }).join('')+'}'; + var f = (new Function('obj', 'each', 'esc', 'print', '_', funcBody)); + var t = function(obj, thisContext) { + var result = []; + f.call(thisContext || obj, obj, function(obj, func) { + if (isList(obj)) + each(obj, function(value, index) { func.call(value, value, index); }); + else + eachObj(obj, function(key, value) { func.call(value, key, value); }); + }, escapeFunction || nonOp, function() {call(result['push'], result, arguments);}, _); + return result.join(''); + }; + if (templates.push(t) > MAX_CACHED_TEMPLATES) + delete templateCache[templates.shift()]; + return templateCache[template] = t; + } + } + + function escapeHtml(s) { + return replace(s, /[<>'"&]/g, function(s) { + return '&#'+s.charCodeAt(0)+';'; + }); + } + + function formatHtml(tpl, obj) { + return template(tpl, escapeHtml)(obj); + } + + function listBindArray(func) { + return function(arg1, arg2) { + return new M(func(this, arg1, arg2)); + }; + } + function listBind(func) { + return function(arg1, arg2, arg3) { + return func(this, arg1, arg2, arg3); + }; + } + function funcArrayBind(func) { + return function(arg1, arg2, arg3) { + return new M(func(arg1, arg2, arg3)); + }; + } + + ///#/snippet commonFunctions + ///#snippet webFunctions + + // note: only the web version has the f.item check + function isFunction(f) { + return typeof f == 'function' && !f['item']; // item check as work-around for webkit bug 14547 + } + + function isList(v) { + return v && v.length != _null && !isString(v) && !isNode(v) && !isFunction(v) && v !== _window; + } + + // used by IE impl of on() only + function push(obj, prop, value) { + (obj[prop] = (obj[prop] || [])).push(value); + } + // used by IE impl of on()/off() only + function removeFromArray(array, value) { + for (var i = 0; array && i < array.length; i++) + if (array[i] === value) + array['splice'](i--, 1); + } + + function extractNumber(v) { + return parseFloat(replace(v, /^[^\d-]+/)); + } + + // retrieves the node id of the element, create one if needed. + function getNodeId(el) { + return (el[MINIFIED_MAGIC_NODEID] = (el[MINIFIED_MAGIC_NODEID] || ++idSequence)); + } + + // collect variant that filters out duplicate nodes from the given list, returns a new array + function collectUniqNodes(list, func) { + var result = []; + var nodeIds = {}; + var currentNodeId; + + flexiEach(list, function(value) { + flexiEach(func(value), function(node) { + if (!nodeIds[currentNodeId = getNodeId(node)]) { + result.push(node); + nodeIds[currentNodeId] = true; + } + }); + }); + return result; + } + + // finds out the 'natural' height of the first element, the one if $$slide=1 + function getNaturalHeight(elementList, factor) { + var q = {'$position': 'absolute', '$visibility': 'hidden', '$display': 'block', '$height': _null}; + var oldStyles = elementList['get'](q); + var h = elementList['set'](q)['get']('clientHeight'); + elementList['set'](oldStyles); + return h*factor + 'px'; + } + + + + + // @condblock !ie8compatibility + function on(subSelector, eventSpec, handler, args, bubbleSelector) { + if (isFunction(eventSpec)) + return this['on'](_null, subSelector, eventSpec, handler, args); + else if (isString(args)) + return this['on'](subSelector, eventSpec, handler, _null, args); + else + return this['each'](function(baseElement, index) { + flexiEach(subSelector ? dollarRaw(subSelector, baseElement) : baseElement, function(registeredOn) { + flexiEach(toString(eventSpec).split(/\s/), function(namePrefixed) { + var name = replace(namePrefixed, /[?|]/g); + var prefix = replace(namePrefixed, /[^?|]/g); + var capture = (name == 'blur' || name == 'focus') && !!bubbleSelector; // bubble selectors for 'blur' and 'focus' registered as capuring! + var triggerId = idSequence++; + + // returns true if processing should be continued + function triggerHandler(eventName, event, target) { + var match = !bubbleSelector; + var el = bubbleSelector ? target : registeredOn; + if (bubbleSelector) { + var selectorFilter = getFilterFunc(bubbleSelector, registeredOn); + while (el && el != registeredOn && !(match = selectorFilter(el))) + el = el['parentNode']; + } + return (!match) || (name != eventName) || ((handler.apply($(el), args || [event, index]) && prefix=='?') || prefix == '|'); + }; + + function eventHandler(event) { + if (!triggerHandler(name, event, event['target'])) { + event['preventDefault'](); + event['stopPropagation'](); + } + }; + + registeredOn.addEventListener(name, eventHandler, capture); + + if (!registeredOn['M']) + registeredOn['M'] = {}; + registeredOn['M'][triggerId] = triggerHandler; // to be called by trigger() + + handler['M'] = collector(flexiEach, [handler['M'], function () { // this function will be called by off() + registeredOn.removeEventListener(name, eventHandler, capture); + delete registeredOn['M'][triggerId]; + }], nonOp); + + }); + }); + }); + } + // @condend !ie8compatibility + + + // @condblock !ie8compatibility + function off(handler) { + callList(handler['M']); + handler['M'] = _null; + } + // @condend !ie8compatibility + + // for remove & window.unload, IE only + function detachHandlerList(dummy, handlerList) { + flexiEach(handlerList, function(h) { + h.element.detachEvent('on'+h.eventType, h.handlerFunc); + }); + } + + function ready(handler) { + if (DOMREADY_HANDLER) + DOMREADY_HANDLER.push(handler); + else + setTimeout(handler, 0); + } + + function $$(selector, context, childrenOnly) { + return dollarRaw(selector, context, childrenOnly)[0]; + } + + function EE(elementName, attributes, children) { + var e = $(document.createElement(elementName)); + // @condblock UTIL + // this attributes != null check is only required with Util's isObject() implementation. Web's isObject() is simpler. + return (isList(attributes) || (attributes != _null && !isObject(attributes)) ) ? e['add'](attributes) : e['set'](attributes)['add'](children); + // @condend UTIL + // @cond !UTIL return (isList(attributes) || (!isObject(attributes)) ) ? e['add'](attributes) : e['set'](attributes)['add'](children); + } + + function clone(listOrNode) { + return collector(flexiEach, listOrNode, function(e) { + var c; + if (isList(e)) + return clone(e); + else if (isNode(e)) { + c = e['cloneNode'](true); + c['removeAttribute'] && c['removeAttribute']('id'); + return c; + } + else + return e; + }); + } + + /*$ + * @stop + */ + + function $(selector, context, childOnly) { + // @condblock ready + return isFunction(selector) ? ready(selector) : new M(dollarRaw(selector, context, childOnly)); + // @condend + // @cond !ready return new M(dollarRaw(selector, context)); + } + + // implementation of $ that does not produce a Minified list, but just an array + + + + + + + + + + + // @condblock !ie7compatibility + function dollarRaw(selector, context, childOnly) { + function flatten(a) { // flatten list, keep non-lists, remove nulls + return isList(a) ? collector(flexiEach, a, flatten) : a; + } + function filterElements(list) { // converts into array, makes sure context is respected + return filter(collector(flexiEach, list, flatten), function(node) { + var a = node; + while (a = a['parentNode']) + if (a == context[0] || childOnly) + return a == context[0]; + // fall through to return undef + }); + } + + if (context) { + if ((context = dollarRaw(context)).length != 1) + return collectUniqNodes(context, function(ci) { return dollarRaw(selector, ci, childOnly);}); + else if (isString(selector)) { + if (isNode(context[0]) != 1) + return []; + else + return childOnly ? filterElements(context[0].querySelectorAll(selector)) : context[0].querySelectorAll(selector); + } + else + return filterElements(selector); + + } + else if (isString(selector)) + return document.querySelectorAll(selector); + else + return collector(flexiEach, selector, flatten); + }; + // @condend !ie7compatibility + + // If context is set, live updates will be possible. + // Please note that the context is not evaluated for the '*' and 'tagname.classname' patterns, because context is used only + // by on(), and in on() only nodes in the right context will be checked + function getFilterFunc(selector, context) { + function wordRegExpTester(name, prop) { + var re = RegExp('(^|\\s+)' + name + '(?=$|\\s)', 'i'); + return function(obj) {return name ? re.test(obj[prop]) : true;}; + } + + var nodeSet = {}; + var dotPos = nodeSet; + if (isFunction(selector)) + return selector; + else if (isNumber(selector)) + return function(v, index) { return index == selector; }; + else if (!selector || selector == '*' || + (isString(selector) && (dotPos = /^([\w-]*)\.?([\w-]*)$/.exec(selector)))) { + var nodeNameFilter = wordRegExpTester(dotPos[1], 'tagName'); + var classNameFilter = wordRegExpTester(dotPos[2], 'className'); + return function(v) { + return isNode(v) == 1 && nodeNameFilter(v) && classNameFilter(v); + }; + } + else if (context) + return function(v) { + return $(selector, context)['find'](v)!=_null; // live search instead of node set, for on() + }; + else { + $(selector)['each'](function(node) { + nodeSet[getNodeId(node)] = true; + }); + return function(v) { + return nodeSet[getNodeId(v)]; + }; + } + } + + function getInverseFilterFunc(selector) { + var f = getFilterFunc(selector); + return function(v) {return f(v) ? _null : true;}; + } + ///#/snippet webFunctions + + ///#snippet extrasFunctions + function flexiEach(list, cb) { + if (isList(list)) + each(list, cb); + else if (list != _null) + cb(list, 0); + return list; + } + + function Promise() { + this['state'] = null; + this['values'] = []; + this['parent'] = null; + } + + /*$ + * @id promise + * @name _.promise() + * @syntax _.promise() + * @syntax _.promise(otherPromises...) + * @module WEB+UTIL + * + * Creates a new ##promiseClass#Promise##, optionally assimilating other promises. If no other promise is given, + * a fresh new promise is returned. + * + * The returned promise provides the methods ##fulfill() and ##reject() that can be called directly to change the promise's state, + * as well as the more powerful ##fire(). + * + * If one promise is given as parameter, the new promise assimilates the given promise as-is, and just forwards + * fulfillment and rejection with the original values. + * + * If more than one promise are given, it will assimilate all of them with slightly different rules: + *
  • the new promise is fulfilled if all assimilated promises have been fulfilled. The fulfillment values + * of all assimilated promises are given to the handler as arguments. Note that the fulfillment values themselves are always + * arrays, as a promise can have several fulfillment values in Minified's implementation.
  • + *
  • when one of the promises is rejected, the new promise is rejected immediately. The rejection handler gets the + * promises rejection value (first argument if it got several) as first argument, an array of the result values + * of all promises as a second (that means one array of arguments for each promise), and the index of the failed + * promise as third. + *
+ * + * @example A simple promise that is fulfilled after 1 second, using Minified's invocation syntax: + *
var p = _.promise();
+   * setTimeout(function() {
+   *     p.fire(true);
+   * }, 1000);
+   * 
+ * + * @example Request three files in parallel. When all three have been downloaded, concatenate them into a single string. + *
+   * var files = _('fileA.txt', 'fileA.txt', 'fileC.txt');
+   * var content;
+   * _.promise(files.map(function(file) {
+   *      return $.request('get', '/txts/' + file);
+   * })).then(function(fileRslt1, fileRslt2, fileRslt3) {
+   *      content = _(fileRslt1, fileRslt2, fileRslt3).map( function(result) { return result[0]; }).join('');
+   * }).error(function(status, response, xhr, url) {
+   *    alert('failed to load file '+url);
+   * });
+   * 
+ * + * @param otherPromises one or more promises to assimilate (varargs). You can also pass lists of promises. + * @return the new promise. + */ + function promise() { + var deferred = []; // this function calls the functions supplied by then() + + var assimilatedPromises = arguments; + var assimilatedNum = assimilatedPromises.length; + var numCompleted = 0; // number of completed, assimilated promises + var rejectionHandlerNum = 0; + + var obj = new Promise(); + + obj['errHandled'] = function() { + rejectionHandlerNum++; + if (obj['parent']) + obj['parent']['errHandled'](); + }; + + /*$ + * @id fire + * @name promise.fire() + * @syntax _.fire(newState) + * @syntax _.fire(newState, values) + * @module WEB+UTIL + * + * Changes the state of the promise into either fulfilled or rejected. This will also notify all ##then() handlers. If the promise + * already has a state, the call will be ignored. + * + * fire() can be invoked as a function without context ('this'). Every promise has its own instance. + * + * @example A simple promise that is fulfilled after 1 second, using Minified's invocation syntax: + *
var p = _.promise();
+     * setTimeout(function() {
+     *     p.fire(true, []);
+     * }, 1000);
+     * 
+ * + * @example Call fire() without a context: + *
var p = _.promise(function(resolve, reject) {
+     *     setTimeout(resolve.fire, 1000);
+     * });
+     * 
+ * + * @param newState true to set the Promise to fulfilled, false to set the state as rejected. If you pass null or + * undefined, the promise's state does not change. + * @param values optional an array of values to pass to ##then() handlers as arguments. You can also pass a non-list argument, which will then + * be passed as only argument. + * @return the promise + */ + var fire = obj['fire'] = function(newState, newValues) { + if (obj['state'] == null && newState != null) { + obj['state'] = !!newState; + obj['values'] = isList(newValues) ? newValues : [newValues]; + setTimeout(function() { + each(deferred, function(f) {f();}); + }, 0); + } + return obj; + }; + + // use promise varargs + each(assimilatedPromises, function assimilate(promise, index) { + try { + if (promise['then']) + promise['then'](function(v) { + var then; + if ((isObject(v) || isFunction(v)) && isFunction(then = v['then'])) + assimilate(v, index); + else { + obj['values'][index] = array(arguments); + if (++numCompleted == assimilatedNum) + fire(true, assimilatedNum < 2 ? obj['values'][index] : obj['values']); + } + }, + function(e) { + obj['values'][index] = array(arguments); + fire(false, assimilatedNum < 2 ? obj['values'][index] : [obj['values'][index][0], obj['values'], index]); + }); + else + promise(function() {fire(true, array(arguments));}, function() {fire(false, array(arguments)); }); + } + catch (e) { + fire(false, [e, obj['values'], index]); + } + }); + + /*$ + * @id stop + * @name promise.stop() + * @syntax promise.stop() + * @module WEB+UTIL + * Stops an ongoing operation, if supported. Currently the only promises supporting this are those returned by ##request(), ##animate(), ##wait() and + * ##asyncEach(). + * stop() invocation will be propagated over promises returned by ##then() and promises assimilated by ##promise(). You only need to invoke stop + * with the last promise, and all dependent promises will automatically stop as well. + * + * stop() can be invoked as a function without context ('this'). Every promise has its own instance. + * + * @return In some cases, the stop() can return a value. This is currently only done by ##animate() and ##wait(), which will return the actual duration. + * ##asyncEach()'s promise will also return any value it got from the promise that it stopped. + * + * @example Animation chain that can be stopped. + *
+     * var div = $('#myMovingDiv').set({$left: '0px', $top: '0px'});
+     * var prom = div.animate({$left: '200px', $top: '0px'}, 600, 0)
+     *    .then(function() {
+     *           return _.promise(div.animate({$left: '200px', $top: '200px'}, 800, 0),
+     *                            div.animate({$backgroundColor: '#f00'}, 200));
+     *    }).then(function() {
+     *           return div.animate({$left: '100px', $top: '100px'}, 400);
+     *    });
+     *
+     * $('#stopButton').on('click', prom.stop);
+     * 
+ */ + obj['stop'] = function() { + each(assimilatedPromises, function(promise) { + if (promise['stop']) + promise['stop'](); + }); + + return obj['stop0'] && call(obj['stop0']); + }; + + /*$ + * @id then + * @name promise.then() + * @syntax promise.then() + * @syntax promise.then(onSuccess) + * @syntax promise.then(onSuccess, onError) + * + * @module WEB + * Registers two callbacks that will be invoked when the ##promise#Promise##'s asynchronous operation finished + * successfully (onSuccess) or an error occurred (onError). The callbacks will be called after + * then() returned, from the browser's event loop. + * You can chain then() invocations, as then() returns another Promise object that you can attach to. + * + * The full distribution of Minified implements the Promises/A+ specification, allowing interoperability with other Promises frameworks. + * + * Note: If you use the Web module, you will get a simplified Promises implementation that cuts some corners. The most notable + * difference is that when a then() handler throws an exception, this will not be caught and the promise returned by + * then will not be automatically rejected. + * + * @example Simple handler for an HTTP request. Handles only success and ignores errors. + *
+     * $.request('get', '/weather.html')
+     *     .then(function(txt) {
+     *        alert('Got response!');
+     *     });
+     * 
+ * + * @example Including an error handler. + *
+     * $.request('get', '/weather.html')
+     *     .then(function(txt) {
+     *        alert('Got response!');
+     *     }, function(err) {
+     *        alert('Error!');
+     *     }));
+     * 
+ * + * @example Chained handler. + *
+     * $.request('get', '/weather.do')
+     *     .then(function(txt) {
+     *        showWeather(txt);
+     *     }
+     *     .then(function() {
+     *        return $.request('get', '/traffic.do');
+     *     }
+     *     .then(function(txt) {
+     *        showTraffic(txt);
+     *     }
+     *     .then(function() {
+     *        alert('All result displayed');
+     *     }, function() {
+     *        alert('An error occurred');
+     *     });
+     * 
+ * + * @param onSuccess optional a callback function to be called when the operation has been completed successfully. The exact arguments it receives depend on the operation. + * If the function returns a ##promise#Promise##, that Promise will be evaluated to determine the state of the promise returned by then(). If it returns any other value, the + * returned Promise will also succeed. If the function throws an error, the returned Promise will be in error state. + * Pass null or undefined if you do not need the success handler. + * @param onError optional a callback function to be called when the operation failed. The exact arguments it receives depend on the operation. If the function returns a ##promise#Promise##, that promise will + * be evaluated to determine the state of the Promise returned by then(). If it returns anything else, the returned Promise will + * have success status. If the function throws an error, the returned Promise will be in the error state. + * You can pass null or undefined if you do not need the error handler. + * @return a new ##promise#Promise## object. If you specified a callback for success or error, the new Promises's state will be determined by that callback if it is called. + * If no callback has been provided and the original Promise changes to that state, the new Promise will change to that state as well. + */ + var then = obj['then'] = function (onFulfilled, onRejected) { + var promise2 = promise(); + var callCallbacks = function() { + try { + var f = (obj['state'] ? onFulfilled : onRejected); + if (isFunction(f)) { + (function resolve(x) { + try { + var then, cbCalled = 0; + if ((isObject(x) || isFunction(x)) && isFunction(then = x['then'])) { + if (x === promise2) + throw new TypeError(); + then.call(x, function(x) { if (!cbCalled++) resolve(x); }, function(value) { if (!cbCalled++) promise2['fire'](false, [value]);}); + promise2['stop0'] = x['stop']; + } + else + promise2['fire'](true, [x]); + } + catch(e) { + if (!(cbCalled++)) { + promise2['fire'](false, [e]); + if (!rejectionHandlerNum) + throw e; + } + } + })(call(f, undef, obj['values'])); + } + else + promise2['fire'](obj['state'], obj['values']); + } + catch (e) { + promise2['fire'](false, [e]); + if (!rejectionHandlerNum) + throw e; + } + }; + if (isFunction(onRejected)) + obj['errHandled'](); + promise2['stop0'] = obj['stop']; + promise2['parent'] = obj; + if (obj['state'] != null) + setTimeout(callCallbacks, 0); + else + deferred.push(callCallbacks); + return promise2; + }; + + /*$ + * @id always + * @group REQUEST + * @name promise.always() + * @syntax promise.always(callback) + * @configurable default + * @module WEB+UTIL + * Registers a callback that will always be called when the ##promise#Promise##'s operation ended, no matter whether the operation succeeded or not. + * This is a convenience function that will call ##then() with the same function for both arguments. It shares all of its semantics. + * + * @example Simple handler for a HTTP request. + *
+     * $.request('get', '/weather.html')
+     *     .always(function() {
+     *        alert('Got response or error!');
+     *     });
+     * 
+ * + * @param callback a function to be called when the operation has been finished, no matter what its result was. The exact arguments depend on the operation and may + * vary depending on whether it succeeded or not. If the function returns a ##promise#Promise##, that Promise will + * be evaluated to determine the state of the returned Promise. If provided and it returns regularly, the returned promise will + * have success status. If it throws an error, the returned Promise will be in the error state. + * @return a new ##promise#Promise## object. Its state is determined by the callback. + */ + obj['always'] = function(func) { return then(func, func); }; + + /*$ + * @id error + * @group REQUEST + * @name promise.error() + * @syntax promise.error(callback) + * @configurable default + * @module WEB, UTIL + * Registers a callback that will be called when the operation failed. + * This is a convenience function that will invoke ##then() with only the second argument set. It shares all of its semantics. + * + * @example Simple handler for a HTTP request. + *
+     * $.request('get', '/weather.html')
+     *     .error(function() {
+     *        alert('Got error!');
+     *     });
+     * 
+ * + * @param callback a function to be called when the operation has failed. The exact arguments depend on the operation. If the function returns a ##promise#Promise##, that Promise will + * be evaluated to determine the state of the returned Promise. If it returns regularly, the returned Promise will + * have success status. If it throws an error, the returned Promise will be in error state. + * @return a new ##promise#Promise## object. Its state is determined by the callback. + */ + obj['error'] = function(func) { return then(0, func); }; + + return obj; + } + + ///#/snippet extrasFunctions + ///#snippet extrasDocs + /*$ + * @id length + * @group SELECTORS + * @requires dollar + * @name list.length + * @syntax length + * @module WEB, UTIL + * + * Contains the number of elements in the ##list#Minified list##. + * + * @example With Web module: + *
+   * var list = $('input');
+   * var myValues = {};
+   * for (var i = 0; i < list.length; i++)
+   *    myValues[list[i].name] = list[i].value;
+   * 
+ * + * @example With Util module: + *
+   * var list = _(1, 2, 3);
+   * var sum = 0;
+   * for (var i = 0; i < list.length; i++)
+   *    sum += list[i];
+   * 
+ */ + /*$ + * @stop + */ + ///#/snippet extrasDocs + + ///#snippet utilM + + /* + * syntax: M(list, assimilateSublists) + * M(null, singleElement) + * + * + */ + /** @constructor */ + function M(list, assimilateSublists) { + var self = this, idx = 0; + if (list) + for (var i = 0, len = list.length; i < len; i++) { + var item = list[i]; + if (assimilateSublists && isList(item)) + for (var j = 0, len2 = item.length; j < len2; j++) + self[idx++] = item[j]; + else + self[idx++] = item; + } + else + self[idx++] = assimilateSublists; + + self['length'] = idx; + self['_'] = true; + } + + function _() { + return new M(arguments, true); + } + + ///#/snippet utilM + + //// LIST FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + copyObj({ + ///#snippet utilListFuncs + /*$ + * @id each + * @group LIST + * @requires + * @configurable default + * @name .each() + * @altname _.each() + * @syntax list.each(callback) + * @syntax list.each(callback, ctx) + * @syntax _.each(list, callback) + * @syntax _.each(list, callback, ctx) + * @module UTIL, WEB + * Invokes the given function once for each item in the list. The function will be called with the item as first parameter and + * the zero-based index as second. Unlike JavaScript's built-in forEach() it will be invoked for each item in the list, + * even if it is undefined. + * + * @example Creates the sum of all list entries. + *
+     * var sum = 0;
+     * _(17, 4, 22).each(function(item, index) {
+     *     sum += item;
+     * });
+     * 
+ * + * @example The previous example with a native array: + *
+     * var sum = 0;
+     * _.each([17, 4, 22], function(item, index) {
+     *     sum += item;
+     * });
+     * 
+ * + * @example This goes through all h2 elements of the class 'section' on a web page and changes their content: + *
+     * $('h2.section').each(function(item, index) {
+     *     item.innerHTML = 'Section ' + index + ': ' + item.innerHTML;
+     * });
+     * 
+ * + * @param list a list to iterate. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param callback The callback function(item, index) to invoke for each list element. + *
item
The current list element.
+ *
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ * The callback's return value will be ignored. + * @param ctx optional a context to pass to the callback as 'this'. Only supported in UTIL module. + * @return the list + * + * @see ##per() works like each(), but wraps the list elements in a list. + * @see ##find() can be used instead of each() if you need to abort the loop. + * @see ##eachObj() iterates through the properties of an object. + */ + 'each': listBind(each), + + /*$ + * @id filter + * @group LIST + * @requires + * @configurable default + * @name .filter() + * @altname _.filter() + * @syntax list.filter(filterFunc) + * @syntax list.filter(filterFunc, ctx) + * @syntax list.filter(value) + * @syntax _.filter(list, filterFunc) + * @syntax _.filter(list, filterFunc, ctx) + * @syntax _.filter(list, value) + * @module WEB, UTIL + * Creates a new ##list#Minified list## by taking an existing list and omitting certain elements from it. You + * can either specify a callback function to approve those items that will be in the new list (all modules), or + * you can pass a value to remove from the new list (Util module only). + * + * If the callback function returns true, the item is shallow-copied in the new list, otherwise it will be removed. + * For values, a simple equality operation (==) will be used. + * + * @example Removing all instances of the number 10 from a list: + *
+     * var list = _([4, 10, 22, 7, 2, 19, 10]).filter(10);
+     * 
+ * + * @example Removing all numbers over 10 from a list: + *
+     * var list = _([4, 22, 7, 2, 19]).filter(function(item, index) {
+     *     return item <= 10;
+     * });
+     * 
+ * + * @example The previous example with a native array is input. Note that the result is always a ##list#Minified list##: + *
+     * var list = _.filter([4, 22, 7, 2, 19], function(item, index) {
+     *     return item <= 10;
+     * });
+     * 
+ * + * @example Creates a list of all unchecked checkboxes on a web page: + *
+     * var list = $('input').filter(function(item, index) {
+     *     return item.getAttribute('type') == 'checkbox' && item.checked;
+     * });
+     * 
+ * + * @param list a list to filter. A list to use as input. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param filterFunc The filter callback function(item, index) that decides which elements to include: + *
item
The current list element.
+ *
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ *
(callback return value)
true to include the item in the new list, false to omit it.
+ * @param ctx optional a context to pass to the callback as 'this'. Only supported in UTIL module. + * @param value a value to remove from the list. It will be determined which elements to remove using ==. Must not + * be a function. Requires Util module. + * @return the new, filtered ##list#list## + * + * @see ##only() offers selector-based filtering. + */ + 'filter': listBindArray(filter), + + /*$ + * @id map + * @group LIST + * @requires + * @configurable default + * @name .map() + * @altname _.map() + * @syntax list.map(mapFunc) + * @syntax list.map(mapFunc, ctx) + * @syntax _.map(list, mapFunc) + * @syntax _.map(list, mapFunc, ctx) + * @module UTIL + * Creates a new ##list#Minified list## from the current list using the given callback function. + * The callback is invoked once for each element of the current list. The callback results will be added to the result list. + * + * map() is a simpler version of ##collect(). Unlike collect(), it always creates lists of the same size as the input list, but + * it is easier to use if the resulting list should contain nulls or nested list. + * + * @example Goes through a list of numbers and creates a new list with each value increased by 1: + *
+     * var inced = _(3, 7, 11, 5, 19, 3).map(function(number, index) {
+     *     return number + 1;
+     * });
+     * 
+ * + * @example The previous example with a native array is input. Note that the result is always a ##list#Minified list##: + *
+     * var inced = _.map([3, 7, 11, 5, 19, 3], function(number, index) {
+     *     return number + 1;
+     * });
+     * 
+ * + * @param list a list to transform. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param mapFunc The callback function(item, index) to invoke for each item: + *
item
The current list element.
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ *
(callback return value)
This value will replace the original value in the new list.
+ * @param ctx optional a context to pass to the callback as 'this'. + * @return the new ##list#list## + * + * @see ##collect() is a more powerful version of map(). + */ + 'map': listBindArray(map), + + /*$ + * @id find + * @group LIST + * @requires + * @configurable default + * @name .find() + * @altname _.find() + * @syntax list.find(findFunc) + * @syntax list.find(element) + * @syntax list.find(findFunc, startIndex) + * @syntax list.find(element, startIndex) + * @syntax _.find(list, findFunc) + * @syntax _.find(list, element) + * @syntax _.find(list, findFunc, startIndex) + * @syntax _.find(list, element, startIndex) + * @module WEB, UTIL + * Finds a specific value in the list. There are two ways of calling find(): + *
    + *
  1. With a value as argument. Then find() will search for the first occurrence of an identical value in the list, + * using the '===' operator for comparisons, and return the index. If it is not found, + * find() returns undefined.
  2. + *
  3. With a callback function. find() will then call the given function for each list element until the function + * returns a value that is not null or undefined. This value will be returned.
  4. + *
+ * + * find() can also be used as an alternative to ##each() if you need to abort the loop. + * + * @example Finds the first negative number in the list: + *
+     * var i = _(1, 2, -4, 5, 2, -1).find(function(value, index) { if (value < 0) return index; }); // returns 2
+     * 
+ + * @example Finds the index of the first 5 in the array: + *
+     * var i = _.find([3, 6, 7, 6, 5, 4, 5], 5); // returns 4 (index of first 5)
+     * 
+ * + * @example Determines the position of the element with the id '#wanted' among all li elements: + *
+     * var elementIndex = $('li').find($$('#wanted'));
+     * 
+ * + * @example Goes through the elements to find the first div that has the class 'myClass', and returns this element: + *
+     * var myClassElement = $('div').find(function(e) { if ($(e).is('.myClass')) return e; });
+     * 
+ * + * @param list A list to use as input. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param findFunc The callback function(item, index) that will be invoked for every list item until it returns a non-null value: + *
item
The current list element.
index
The second the zero-based index of the current element.
+ *
this
This list.
+ *
(callback return value)
If the callback returns something other than null or + * undefined, find() will return it directly. Otherwise it will continue.
+ * @param element the element to search for + * @param startIndex optional the 0-based index of the first element to search. + * @return if called with an element, either the element's index in the list or undefined if not found. If called with a callback function, + * it returns either the value returned by the callback or undefined. + * + * @see ##findLast() is the equivalent to find() for the list's end. + */ + 'find': listBind(find), + + /*$ + * @stop + */ + dummySort:0 + , + ///#/snippet utilListFuncs + ///#snippet webListFuncs + + /*$ + * @id select + * @group SELECTORS + * @requires dollar + * @configurable default + * @name .select() + * @syntax list.select(selector) + * @syntax list.select(selector, childrenOnly) + * @module WEB + * Executes a selector with the list as context. list.select(selector, childrenOnly) is equivalent + * to $(selector, list, childrenOnly). + * + * @example Returns a list of all list elements: + *
+     * var parents = $('ol.myList').select('li', true);
+     * 
+ * + * @example Returns a list of all child elements: + *
+     * var children = $('.myElements').select('*', true);
+     * 
+ * + * @param selector a selector or any other valid first argument for #dollar#$(). + * @param childrenOnly optional if set, only direct children of the context nodes are included in the list. Children of children will be filtered out. If omitted or not + * true, all descendants of the context will be included. + * @return the new list containing the selected descendants. + * + * @see ##only() executes a selector on the list elements, instead of their descendants. + */ + 'select': function(selector, childOnly) { + return $(selector, this, childOnly); + }, + + /*$ + * @id get + * @group SELECTORS + * @requires dollar + * @configurable default + * @name .get() + * @syntax list.get(name) + * @syntax list.get(name, toNumber) + * @syntax list.get(list) + * @syntax list.get(list, toNumber) + * @syntax list.get(map) + * @syntax list.get(map, toNumber) + * @module WEB + * Retrieves properties, attributes and styles from the list's first element. The syntax to request those values is mostly identical with ##set(). You can either + * get a single value if you specify only one name, or get an object map when you specify several names using an array or an object map. + * + * The name parameter defines what kind of data you are reading. The following name schemes are supported: + * + * + * + * + * + * + * + * + * + * + * + * + *
Name SchemaExampleSets what?Description
nameinnerHTMLPropertyA name without prefix of '$' or '@' gets a property of the object.
@name@hrefAttributeGets the HTML attribute using getAttribute().
%name%phoneData-AttributeGets a data attribute using getAttribute(). Data attributes are + * attributes whose names start with 'data-'. '%myattr' and '@data-myattr' are equivalent.
$name$fontSizeCSS PropertyGets a style using the element's style object. + * The syntax for the CSS styles is camel-case (e.g. "$backgroundColor", not "$background-color"). Shorthand properties like "border" or "margin" are + * not supported. You must use the full name, e.g. "$marginTop". Minified will try to determine the effective style + * and thus will return the value set in style sheets if not overwritten using a regular style.
$$CSS ClassesA simple $ returns the CSS classes of the element and is identical with "className".
$$$$StyleReads the element's style attribute in a browser-independent way. On legacy IEs it uses + * style.cssText, and on everything else just the "style" attribute.
$$show$$showShow/HideReturns 1 if the element is visible and 0 if it is not visible. An element counts as + * visible if '$visibility' is not 'hidden' and '$display' is not 'none'. Other properties will be ignored, even if they can also be used to hide the element.
$$fade$$fadeFade EffectThe name '$$fade' returns the opacity of the element as a value between 0 and 1. + * '$$fade' will also automatically evaluate the element's 'visibility' and 'display' styles to find out whether the element is actually visible.
$$slide$$slideSlide Effect'$$slide' returns the height of the element in pixels with a 'px' suffix and is equivalent to '$height'. + * Please note that you can pass that 'px' value to '$$slide' in ##set(), which will then set the according '$height'.
$$scrollX, $$scrollY$$scrollYScroll CoordinatesThe names '$$scrollX' and + * '$$scrollY' can be used on $(window) to retrieve the scroll coordinates of the document. + * The coordinates are specified in pixels without a 'px' unit postfix.
+ * + * @example Retrieves the id, title attribute and the background color of the element '#myElement': + *
+     * var id = $('#myElement).get('id');
+     * var title = $('#myElement).get('@title');
+     * var bgColor = $('#myElement).get('$backgroundColor');
+     * 
+ * + * @example Retrieves the id, title attribute and the background color of the element '#myElement' as a map: + *
+     * var m = $('#myElement).get(['id', '@title', '$backgroundColor']);
+     * var id = m.id;
+     * var title = m['@title'];
+     * var bgColor = m.$backgroundColor;
+     * 
+ * + * @example Uses ##get() and ##set() to reposition an element: + *
+     * var coords = $('#myElement').get({$top: 0, $left: 0}, true);
+     * coords.$top = coords.$top + 10 + 'px';
+     * coords.$left = coords.$left + 20 + 'px';
+     * $('#myElement').set(coords);
+     * 
+ * Please note that the values of $top and $left in the get() invocation do not matter and will be ignored! + * + * @param name the name of a single property or attribute to modify. Unprefixed names set properties, a '$' prefix sets CSS styles and + * '@' sets attributes. Please see the table above for special properties and other options. + * @param list in order to retrieve more than one value, you can specify several names in an array or list. get() will then return an object map + * containing the values. + * @param map if you specify an object that is neither list nor string, get() will use it as a map of property names. Each property name will be requested. + * The values of the properties in the map will be ignored. get() will then return a new object map containing of results. + * @param toNumber if 'true', get() converts all returned values into numbers. If they are strings, + * get() removes any non-numeric characters before the conversion. This is useful when you request + * a CSS property such as '$marginTop' that returns a value with a unit suffix, like "21px". get() will convert it + * into a number and return 21. If the returned value is not parsable as a number, NaN will be returned. + * @return if get() was called with a single name, it returns the corresponding value. + * If a list or map was given, get() returns a new object map with the names as keys and the values as values. + * It returns undefined if the list is empty. + * + * @see ##set() sets values using the same property syntax. + */ + 'get': function(spec, toNumber) { + var self = this; + var element = self[0]; + + if (element) { + if (isString(spec)) { + var match = /^(\W*)(.*)/.exec(replace(spec, /^%/,'@data-')); + var prefix = match[1]; + var s; + + if (getter[prefix]) + s = getter[prefix](this, match[2]); + else if (spec == '$') + s = self['get']('className'); + else if (spec == '$$') { + s = self['get']('@style'); + } + else if (spec == '$$slide') + s = self['get']('$height'); + else if (spec == '$$fade' || spec == '$$show') { + if (self['get']('$visibility') == 'hidden' || self['get']('$display') == 'none') + s = 0; + else if (spec == '$$fade') { + s = + isNaN(self['get']('$opacity', true)) ? 1 : self['get']('$opacity', true); + } + else // $$show + s = 1; + } + else if (prefix == '$') { + s = _window['getComputedStyle'](element, _null)['getPropertyValue'](replace(match[2], /[A-Z]/g, function (match2) { return '-' + match2.toLowerCase(); })); + } + else if (prefix == '@') + s = element.getAttribute(match[2]); + else + s = element[match[2]]; + return toNumber ? extractNumber(s) : s; + } + else { + var r = {}; + (isList(spec) ? flexiEach : eachObj)(spec, function(name) { + r[name] = self['get'](name, toNumber); + }); + return r; + } + } + }, + + /*$ + * @id set + * @group SELECTORS + * @requires dollar get + * @configurable default + * @name .set() + * @syntax list.set(name, value) + * @syntax list.set(properties) + * @syntax list.set(cssClasses) + * @module WEB + * + * Modifies the list's elements by setting their properties, attributes, CSS styles and/or CSS classes. You can either supply a + * single name and value to set only one property, or you can provide an object that contains name/value pairs to describe more than one property. + * More complex operations can be accomplished by supplying functions as values. They will then be called for each element that will + * be set. + * + * The name parameter defines what kind of data you are setting. The following name schemes are supported: + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Name SchemaExampleSets what?Description
nameinnerHTMLPropertyA name without prefix of '$' or '@' sets a property of the object.
@name@hrefAttributeSets the HTML attribute using setAttribute(). In order to stay compatible with Internet Explorer 7 and earlier, + * you should not set the attributes '@class' and '@style'. Instead use '$' and '$$' as shown below.
%name%phoneData-AttributeSets a data attribute using setAttribute(). Data attributes are + * attributes whose names start with 'data-'. '%myattr' and '@data-myattr' are equivalent.
$name$fontSizeCSS PropertySets a style using the element's style object. + * The syntax for the CSS styles is camel-case (e.g. "$backgroundColor", not "$background-color").
$$CSS ClassesA simple $ modifies the element's CSS classes using the object's className property. The value is a + * space-separated list of class names. If prefixed with '-' the class is removed, a '+' prefix adds the class and a class name without prefix toggles the class. + * The name '$' can also be omitted if set is called with class names as only argument.
$$$$StyleSets the element's style attribute in a browser-independent way.
$$show$$showShow/HideIf true or a number not 0, it will make sure the element is visible by + * making sure '$display' is not 'none' and by setting '$visibility' to 'visible'. Please see ##show() for details. If the value is false or 0, it + * will be hidden by setting '$display' to 'none'.
$$fade$$fadeFade EffectThe name '$$fade' sets the opacity of the element in a browser-independent way. The value must be a number + * between 0 and 1. '$$fade' will also automatically control the element's 'visibility' style. If the value is 0, + * the element's visibility will automatically be set to 'hidden'. If the value is larger, the visibility will be set to + * 'visible'. '$$fade' only works with block elements.
$$slide$$slideSlide EffectThe name '$$slide' allows a vertical slide-out or slide-in effect. The value must be a number + * between 0 and 1 and will be used to set the element's '$height'. '$$slide' will also automatically control the element's 'visibility' + * style. If the value is 0, the element's visibility will automatically be set to 'hidden'. If the value is larger, + * the visibility will be set to 'visible'. '$$slide' only works with block elements and will not set the + * element's margin or padding. If you need a margin or padding, you should wrap the elements in a simple <div>.
$$scrollX, $$scrollY$$scrollYScroll CoordinatesThe names '$$scrollX' and + * '$$scrollY' can be used on $(window) to set the scroll coordinates of the document. + * The coordinates are specified in pixels, but must not use a 'px' unit postfix.
+ * + * @example Unchecking checkboxes: + *
+     * $('input.checkbox').set('checked', false);
+     * 
+ * + * @example Changing the innerHTML property of an element: + *
+     * $('#toc').set('innerHTML', 'Content');
+     * 
+ * + * @example Changing attributes: + *
+     * $('a.someLinks').set('@href', 'http://www.example.com/');
+     * 
+ * + * @example Removing attributes: + *
+     * $('a.someLinks').set('@title', null);
+     * 
+ * + * @example Changing styles: + *
+     * $('.bigText').set('$fontSize', 'x-large');
+     * 
+ * + * @example Adding and removing CSS classes: + *
+     * $('.myElem').set('$', '+myClass -otherClass');
+     * 
+ * + * @example Toggling a CSS class: + *
+     * $('.myElem').set('$', 'on');
+     * 
+ * + * @example Shortcut for CSS manipulation: + *
+     * $('.myElem').set('+myClass -otherClass on');
+     * 
+ * + * @example Making an element transparent: + *
+     * $('.seeThrough').set('$$fade', 0.5);
+     * 
+ * + * @example Making an element visible. Note that $$fade will set the element's display style to 'block' and visibility style to 'visible'. + *
+     * $('.myElem').set('$$fade', 1);
+     * 
+ * + * @example Using a map to change several properties: + *
+     * $('input.checkbox').set({checked: false,
+     *                          '@title': 'Check this'});
+     * 
+ * + * @example Changing CSS with a map: + *
+     * $('.importantText').set({$fontSize: 'x-large',
+     *                          $color: 'black',
+     *                          $backgroundColor: 'red',
+     *                          $: '+selected -default'});
+     * 
+ * + * @example You can specify a function as value to modify a value instead of just setting it: + *
+     * $('h2').set('innerHTML', function(oldValue, index) {
+     *     return 'Chapter ' + index + ': ' + oldValue.toUpperCase();
+     * });
+     * 
+ * + * @param name the name of a single property or attribute to modify. Unprefixed names set properties, a '$' prefix sets CSS styles and + * '@' sets attributes. Please see the table above for special properties and other options. + * @param value the value to set. If value is null and name specified an attribute, the attribute will be removed. + * If dollar ('$') has been passed as name, the value can contain space-separated CSS class names. If prefixed with a '+' the class will be added, + * with a '-' prefix the class will be removed. Without prefix, the class will be toggled. + * If value is a function, the function(oldValue, index, obj) will be invoked for each list element + * to evaluate the new value: + *
oldValue
The old value of the property to be changed, as returned by ##get(). + * For the CSS style names, this is the computed style of the property
+ *
index
The list index of the object owning the property
+ *
obj
The list element owning the property.
+ *
(callback return value)
The value to be set.
+ * Functions are not supported by '$'. + * @param properties a Object as map containing names as keys and the values to set as map values. See above for the name and value syntax. + * @param cssClasses if set() is invoked with a string as single argument, the name "$" (CSS classes) is assumed and the argument is the + * value. See above for CSS syntax. + * Instead of a string, you can also specify a function(oldValue, index, obj) to modify the existing classes. + * @return the list + * + * @see ##get() retrieves values using the same property syntax. + * @see ##animate() animates values using the same property syntax. + * @see ##toggle() can toggle between two sets of values. + * @see ##dial() allows smooth transitions between two sets of values. + */ + 'set': function (name, value) { + var self = this; + if (value !== undef) { + var match = /^(\W*)(.*)/.exec(replace(replace(name, /^\$float$/, 'cssFloat'), /^%/,'@data-')); + var prefix = match[1]; + + if (setter[prefix]) + setter[prefix](this, match[2], value); + else if (name == '$$fade') { + this['set']({'$visibility': value ? 'visible' : 'hidden', '$opacity': value}); + } + else if (name == '$$slide') { + self['set']({'$visibility': value ? 'visible' : 'hidden', '$overflow': 'hidden', + '$height': /px/.test(value) ? value : function(oldValue, idx, element) { return getNaturalHeight($(element), value);} + }); + } + else if (name == '$$show') { + if (value) + self['set']({'$visibility': value ? 'visible' : 'hidden', '$display': ''}) // that value? part is only for gzip + ['set']({'$display': function(oldVal) { // set for 2nd time: now we get the stylesheet's $display + return oldVal == 'none' ? 'block' : oldVal; + }}); + else + self['set']({'$display': 'none'}); + } + else if (name == '$$') { + self['set']('@style', value); + } + else + flexiEach(this, function(obj, c) { + var newValue = isFunction(value) ? value($(obj)['get'](name), c, obj) : value; + if (prefix == '$') { + if (match[2]) + obj['style'][match[2]] = newValue; + else { + flexiEach(newValue && newValue.split(/\s+/), function(clzz) { + var cName = replace(clzz, /^[+-]/); + + if (/^\+/.test(clzz)) + obj['classList'].add(cName); + else if (/^-/.test(clzz)) + obj['classList'].remove(cName); + else + obj['classList'].toggle(cName); + }); + } + } + else if (name == '$$scrollX') + obj['scroll'](newValue, $(obj)['get']('$$scrollY')); + else if (name == '$$scrollY') + obj['scroll']($(obj)['get']('$$scrollX'), newValue); + else if (prefix == '@') { + if (newValue == _null) + obj.removeAttribute(match[2]); + else + obj.setAttribute(match[2], newValue); + } + else + obj[match[2]] = newValue; + }); + } + else if (isString(name) || isFunction(name)) + self['set']('$', name); + else + eachObj(name, function(n,v) { self['set'](n, v); }); + return self; + }, + + /*$ + * @id add + * @group ELEMENT + * @requires dollar each + * @configurable default + * @name .add() + * @syntax list.add(text) + * @syntax list.add(node) + * @syntax list.add(list) + * @syntax list.add(factoryFunction) + * @module WEB + * Adds the given node(s) as children to the list's HTML elements. If a string has been given, it will be added as text node. + * DOM nodes will be added directly. If you pass a list, all its elements will be added using the rules above. + * + * When you pass a DOM node and the target list has more than one element, the original node will be added to the first list element, + * and ##clone#clones## to all following list elements. + * + * ##EE(), ##HTML() and ##clone() are compatible with add() and can help you create new HTML nodes. + * + * @example Using the following HTML: + *
+     * <div id="comments">Here is some text.<br/></div>
+     * 
+ * The next line appends a text node to the div: + *
+     * $('#comments').add('Some additional text.');
+     * 
+ * This results in: + *
+     * <div id="comments">Here is some text.<br/>Some additional text.</div>
+     * 
+ * + * @example Using the following HTML: + *
+     * <ul id="myList">
+     *   <li>First list entry</li>
+     *   <li>Second list entry</li>
+     * </ul>
+     * 
+ * The following Javascript adds an element to the list: + *
+     * $('#myList').add(EE('li', 'My extra point');
+     * 
+ * This results in + *
+     * <ul id="myList">
+     *   <li>First list entry</li>
+     *   <li>Second list entry</li>
+     *   <li>My extra point</li>
+     * </ul>
+     * 
+ * + * @example Use a list to add several elements at once: + *
+     * $('#comments').add([
+     *      EE('br'),
+     *     'Some text',
+     *     EE('span', {'className': 'highlight'}, 'Some highlighted text')
+     * ]);
+     * 
+ * + * @example If you need to customize the content, you can write a factory function: + *
+     * $('.chapter').add(function(parent, index) { return EE('h2', 'Chapter number ' + index); });
+     * 
+ * + * @param text a string or number to add as text node + * @param node a DOM node to add to the list. If the list has more than one element, the given node will be added to the first element. + * For all additional elements, the node will be cloned using ##clone(). + * @param list a list containing text and/or nodes. May also contain nested lists with nodes or text.. + * @param factoryFunction a function(listItem, listIndex) that will be invoked for each list element to create the nodes: + *
listItem
The list element that will receive the new children.
+ *
listIndex
The index of the list element that will receive the new children.
+ *
(callback return value)
The node(s) to be added to the list element. + * Can be either a string for a text node, an HTML element or a list containing strings and/or DOM nodes. + * If a function is returned, it will be invoked recursively with the same arguments.
+ * @return the current list + * + * @see ##fill() works like add(), but deletes all children before adding the new nodes. + * @see ##addFront() adds nodes as first child, not as last. + * @see ##addAfter() adds nodes not as children but as siblings. + * @see ##addBefore() also adds nodes not as children but as siblings. + * @see ##replace() replaces existing nodes. + */ + 'add': function (children, addFunction) { + return this['each'](function(e, index) { + var lastAdded; + function appendChildren(c) { + if (isList(c)) + flexiEach(c, appendChildren); + else if (isFunction(c)) + appendChildren(c(e, index)); + else if (c != _null) { // must check null, as 0 is a valid parameter + var n = isNode(c) ? c : document.createTextNode(c); + if (lastAdded) + lastAdded['parentNode']['insertBefore'](n, lastAdded['nextSibling']); + else if (addFunction) + addFunction(n, e, e['parentNode']); + else + e.appendChild(n); + lastAdded = n; + } + } + appendChildren(index &&!isFunction(children) ? clone(children) : children); + }); + }, + + /*$ + * @id on + * @group EVENTS + * @requires dollar each + * @configurable default + * @name .on() + * @syntax list.on(names, eventHandler) + * @syntax list.on(selector, names, eventHandler) + * @syntax list.on(names, customFunc, args) + * @syntax list.on(selector, names, customFunc, args) + * @syntax list.on(names, eventHandler, bubbleSelector) + * @syntax list.on(names, customFunc, args, bubbleSelector) + * @module WEB + * Registers the function as event handler for all items in the list. + * + * By default, Minified cancels event propagation and disables element's default behavior for all elements that have an event handler. + * You can override this, either by prefixing the event name with a '|', or by prefixing them with '?' and returning a true + * in the handler. Both will reinstate the original JavaScript behavior. + * + * Handlers are called with the original event object as first argument, the index of the source element in the + * list as second argument and 'this' set to the source element of the event (e.g. the button that has been clicked). + * + * Instead of the event objects, you can also pass an array of arguments that will be passed instead of event object and index. + * + * Optionally you can specify two a selector strings to qualify only certain events. The first one is a selector + * that allows you to select only specific children of the list elements. This is mostly useful for adding events to DOM trees + * generated using ##HTML() or ##EE(). + * + * The second type of selector is the bubble selector that allows you to receive only events that bubbled up from + * elements matching the selector. The selector is executed in the context of the element you registered on to identify whether the + * original target of the event qualifies. If not, the handler is not called. + * + * Minified always registers event handlers with event bubbling enabled. Event capture is not supported. + * + * Event handlers can be unregistered using #off#$.off(). + * + * @example Adds a handler to all divs which paints the div background color to red when clicked. + *
+     * $('div').on('click', function() {
+     *    this.style.backgroundColor = 'red';    // 'this' contains the element that caused the event
+     * });
+     * 
+ * + * @example Registers a handler to call a method setStatus('running') using an inline function: + *
+     * $('#myButton').on('click', function() {
+     *    setStatus('running');
+     * });
+     * 
+ * The previous example can bere written like this, using on()'s args parameter: + *
+     * $('#myButton').on('click', setStatus, ['running']);
+     * 
+ * + * @example Adds two handlers on an input field. The event names are prefixed with '|' and thus keep their original behavior: + *
+     * $('#myInput').on('|keypress |keydown', function() {
+     *    // do something
+     * });
+     * 
+ * + * @example Adds a click handler that will abort the operation by returning false, unless the user confirms it: + *
+     * $('#myLink').on('?click', function() {
+     *    return window.confirm('Really leave?');
+     * });
+     * 
+ * + * @example Adds a button and registers a click handler for it using a sub-selector. + *
+     * $('#myForm').add(HTML("<li><button>click me</button></li>").on('button', 'click', myClickHandler));
+     * 
+ * + * @example Adds listeners for all clicks on a table's rows using the bubble selector 'tr'. + *
+     * $('#table').on('change', 'tr', function(event, index, selectedIndex) {
+     *    alert("Click on table row number: " + selectedIndex);
+     * }, 'tr');
+     * 
+ * Please note that bubble selectors will even listen to events for + * table rows that have been added after you registered for the events. + * + * @param selector optional a selector string for ##dollar#$()## to register the event only on those children of the list elements that + * match the selector. + * Supports all valid parameters for $() except functions. + * @param names the space-separated names of the events to register for, e.g. 'click'. Case-sensitive. The 'on' prefix in front of + * the name must not used. You can register the handler for more than one event by specifying several + * space-separated event names. If the name is prefixed + * with '|' (pipe), the event will be passed through and the event's default actions will be executed by the browser. + * If the name is prefixed with '?', the event will only be passed through if the handler returns true. + * @param eventHandler the callback function(event, index) to invoke when the event has been triggered: + *
+ *
event
The original DOM event object.
+ *
index
The index of the target object in the ##list#Minified list## .
+ *
this
A ##list#Minified list## containing the target element as only item (same as event.target).
+ *
(callback return value)
The return value will only be used if the event name prefix was '?'. + * Then, a return value false will stop all further processing of the event and disable event bubbling. + * true will keep the event alive.
+ *
+ * @param customFunc a function to be called instead of a regular event handler with the arguments given in args. + * 'this' will be a ##list#Minified list## containing the target element as only item (same element as event.target). + * @param args optional an array of arguments to pass to the custom callback function instead of the event objects. If omitted, the function is + * called as event handler with the event object as argument. + * @param bubbleSelector optional a selector string for ##dollar#$()## to receive only events that bubbled up from an + * element that matches this selector. + * Supports all valid parameters for $() except functions. Analog to ##is(), + * the selector is optimized for the simple patterns '.classname', 'tagname' and 'tagname.classname'. + * @return the list + * @see ##off() allows you to unregister an event handler. + * @see ##onClick() as a shortcut for 'click' events. + * @see ##onOver() to simplify mouseover/mouseout events. + * @see ##onFocus() as convenient way to register for focus events. + * @see ##onChange() to get notified when an input's content changes. + */ + 'on': on, + + /*$ + * @id trigger + * @group EVENTS + * @requires on each + * @configurable default + * @name .trigger() + * @syntax list.trigger(name) + * @syntax list.trigger(name, eventObject) + * @module WEB + * + * Triggers event handlers registered with ##on(). + * Any event that has been previously registered using ##on() can be invoked with trigger(). Please note that + * it will not simulate the default behavior on the elements, such as a form submit when you click on a submit button. Event bubbling + * is supported, thus unless there's an event handler that cancels the event, the event will be triggered on all parent elements. + * + * + * @example Simulates a 'click' event on the button. + *
+     * $('#myButton').trigger('click');
+     * 
+ * + * @param name a single event name to trigger + * @param eventObj optional an object to pass to the event handler, provided the handler does not have custom arguments. + * Anything you pass here will be directly given to event handlers as event object, so you need to know what + * they expect. + * @return the list + * @see ##on() registers events that can be triggered. + */ + 'trigger': function (eventName, eventObj) { + return this['each'](function(element, index) { + var bubbleOn = true, el = element; + while(el && bubbleOn) { + eachObj(el['M'], function(id, f) { + bubbleOn = bubbleOn && f(eventName, eventObj, element); + }); + el = el['parentNode']; + } + }); + } + + /*$ + * @stop + */ + // @cond !trigger dummyTrigger:0 + , + ///#/snippet webListFuncs + ///#snippet extrasListFuncs + + /*$ + * @id ht + * @group ELEMENT + * @requires set template + * @configurable default + * @name .ht() + * @syntax list.ht(templateString, object...) + * @syntax list.ht(templateFunction, object...) + * @syntax list.ht(idSelector, object...) + * @module WEB+UTIL + * Replaces the content of the list elements with the HTML generated using the given template. The template uses + * ##template() syntax and HTML-escaped its output using ##escapeHtml(). + * + * @example When you have a HTML snippet like this: + *
+     * <div id="price"></div>
+     * 
+ * Then you can format the price value like this: + *
+     * var price = 14.9;
+     * $('#price').ht('<b>${{::0.00}}</b>', price);
+     * 
+ * Results in: + *
+     * <div id="price"><b>$14.90</b></div>
+     * 
+ * + * @example Render a list of names: + *
+     * var names = [ {first: 'James', last: 'Sullivan'},
+     *               {first: 'Michael', last: 'Wazowski'} ];
+     * $('#list').ht('<h2>{{listName}}</h2>'+
+     *               '<ul>{{each n: names}}<li>{{n.first}} {{n.last}}</li>{{/each}}</ul>',
+     *               {listName: 'Guys', names: names});
+     * 
+ * The code creates this: + *
+     * <h2>Guys</h2>
+     * <ul><li>James Sullivan<li><li>Michael Wazowski</li></ul>
+     * 
+ * + * @example You can store templates in <script> tags. First you need to create a <script> tag with a type not + * supported by the browser and put your template in there, like this: + *
<script id="myTimeTpl" type="minified-template">The time is {{HH:mm:ss}}.</script>
+ * Then you can specify the tag's id directly to access it: + *
$('#timeDisplay').ht('#myTimeTpl', new Date());
+ * + * @param templateString the template using ##template() syntax. Please note, because this is a template, you should + * avoid creating the template itself dynamically, as compiling templates is expensive and + * Minified will cache only a limited number of templates. Exception: If the template string does not use + * any template functionality (no {{}}), it does not need to be compiled and won't be cached.
+ * The template will use ##escapeHtml() as escape function, so all template substitutions will be HTML-escaped, + * unless you use triple curly-braces. + * @param templateFunction instead of a HTML template, ht() can also use a template function, e.g. one + * created by ##template(). It will be invoked with the object as only argument. + * @param idSelector if you pass an ID CSS selector in the form "#myScript", Minified will recognize this and use the content + * of the specified <script> element as template. This allows you to put your template into + * a <script> tag with a non-JavaScript type (see example). Any string that starts with '#' and does not + * contain any spaces is used as selector. + * @param object optional one or more objects to pass to the template. If object is not set, the template is called with undefined + * as object. If exactly one object is given, it is passed directly to the template. If you specify more than one + * object, they are ##merge#merged##. + * @return the current list + * + * @see ##HTML() creates only the nodes and can be used with ##add() and other methods to add the nodes to the DOM, giving you more flexibility than ht(). + */ + 'ht': function(htmlTemplate, object) { + var o = arguments.length > 2 ? merge(sub(arguments, 1)) : object; + return this['set']('innerHTML', isFunction(htmlTemplate) ? htmlTemplate(o) : + /{{/.test(htmlTemplate) ? formatHtml(htmlTemplate, o) : + /^#\S+$/.test(htmlTemplate) ? formatHtml($$(htmlTemplate)['text'], o) : htmlTemplate); + } + /*$ + * @stop + */ + // @cond !ht dummyHt:0 + ///#/snippet extrasListFuncs + }, M.prototype); + + //// DOLLAR FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + copyObj({ + ///#snippet webDollarFuncs + /*$ + * @id request + * @group REQUEST + * @requires + * @configurable default + * @name $.request() + * @syntax $.request(method, url) + * @syntax $.request(method, url, data) + * @syntax $.request(method, url, data, settings) + * @module WEB + * Initiates a HTTP request to the given URL, using XMLHttpRequest. It returns a ##promiseClass#Promise## object that allows you to obtain the result. + * + * @example Invokes a REST web service and parses the resulting document using JSON: + *
+     * $.request('get', 'http://service.example.com/weather', {zipcode: 90210})
+     *    .then(function(txt) {
+     *         var json = $.parseJSON(txt);
+     *         $('#weatherResult').fill('Today's forecast is is: ' + json.today.forecast);
+     *    })
+     *    .error(function(status, statusText, responseText) {
+     *         $('#weatherResult').fill('The weather service was not available.');
+     *    });
+     * 
+ * + * @example Sending a JSON object to a REST web service: + *
+     * var myRequest = {         // create a request object that can be serialized via JSON
+     *      request: 'register',
+     *      entries: [
+     *        {name: 'Joe',
+     *      	    job: 'Plumber'
+     *        }
+     *      ]};
+     *
+     * function failureHandler() {
+     *   $('#registrationResult').fill('Registration failed');
+     * }
+     *
+     * $.request('post', 'http://service.example.com/directory', $.toJSON(myRequest))
+     *     .then(function(txt) {
+     *        if (txt == 'OK')
+     *             $('#registrationResult').fill('Registration succeeded');
+     *        else
+     *              failureHandler();
+     *        })
+     *     .error(failureHandler);
+     * 
+ * + * @example Using HTTP authentication and a custom XMLHttpRequest property. + *
var handler = $.request('get', 'http://service.example.com/userinfo', null, {xhr: {withCredentials: true}, user: 'me', pass: 'secret'});
+ * + * + * @param method the HTTP method, e.g. 'get', 'post' or 'head' (rule of thumb: use 'post' for requests that change data + * on the server, and 'get' to request data). Not case sensitive. + * @param url the server URL to request. May be a relative URL (relative to the document) or an absolute URL. Note that unless you do something + * fancy on the server (keyword to google: Access-Control-Allow-Origin), you can only call URLs on the server your script originates from. + * @param data optional data to send in the request, either as POST body or as URL parameters. It can be either a plain object as map of + * parameters (for all HTTP methods), a string (for all HTTP methods), a DOM document ('post' only) or a FormData object ('post' only). + * If the method is 'post', it will be sent as body, otherwise parameters are appended to the URL. In order to send several parameters with the + * same name, use an array of values in the map. Use null as value for a parameter without value. + * @param settings optional a map of additional parameters. Supports the following properties (all optional): + *
headers
a map of HTTP headers to add to the request. Note that you should use the proper capitalization for the + * header 'Content-Type', if you set it, because otherwise it may be overwritten.
+ *
xhr
a map of properties to set in the XMLHttpRequest object before the request is sent, for example {withCredentials: true}.
+ *
user
username for HTTP authentication, together with the pass parameter
+ *
pass
password for HTTP authentication, together with the user parameter
+ *
+ * @return a ##promiseClass#Promise## containing the request's status. If the request has successfully completed with a HTTP status 2xx, + * the promise's completion handler will be called as function(text, xhr): + *
text
The response sent by the server as text.
+ *
xhr
The XMLHttpRequest used for the request. This allows you to retrieve the response in different + * formats (e.g. responseXml for an XML document), to retrieve headers and more.
+ * The failure handler will be called as function(statusCode, statusText, text): + *
statusCode
The HTTP status (never 200; 0 if no HTTP request took place).
+ *
text
The response's body text, if there was any, or the exception as string if the browser threw one.
+ *
xhr
The XMLHttpRequest used for the request. This allows you to retrieve the response in different + * formats (e.g. responseXml for an XML document), to retrieve headers and more..
+ * The returned promise supports ##stop(). Calling stop() will invoke the XHR's abort() method. + * The underlying XmlHttpRequest can also be obtained from the promise's xhr property. + * + * @see ##values() serializes an HTML form in a format ready to be sent by $.request. + * @see ##$.parseJSON() can be used to parse JSON responses. + * @see ##$.toJSON() can create JSON messages. + * @see ##_.format() can be useful for creating REST-like URLs, if you use JavaScript's built-in escape() function. + */ + 'request': function (method, url, data, settings0) { + var settings = settings0 || {}; + var xhr, callbackCalled = 0, prom = promise(), dataIsMap = data && (data['constructor'] == settings['constructor']); + try { + prom['xhr'] = xhr = new XMLHttpRequest(); + + prom['stop0'] = function() { xhr['abort'](); }; + // @condend + + if (dataIsMap) { // if data is parameter map... + data = collector(eachObj, data, function processParam(paramName, paramValue) { + return collector(flexiEach, paramValue, function(v) { + return encodeURIComponent(paramName) + ((v != _null) ? '=' + encodeURIComponent(v) : ''); + }); + }).join('&'); + } + + if (data != _null && !/post/i.test(method)) { + url += '?' + data; + data = _null; + } + + xhr['open'](method, url, true, settings['user'], settings['pass']); + if (dataIsMap && /post/i.test(method)) + xhr['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded'); + + eachObj(settings['headers'], function(hdrName, hdrValue) { + xhr['setRequestHeader'](hdrName, hdrValue); + }); + eachObj(settings['xhr'], function(name, value) { + xhr[name] = value; + }); + + xhr['onreadystatechange'] = function() { + if (xhr['readyState'] == 4 && !callbackCalled++) { + if (xhr['status'] >= 200 && xhr['status'] < 300) + prom['fire'](true, [xhr['responseText'], xhr]); + else + prom['fire'](false, [xhr['status'], xhr['responseText'], xhr]); + } + }; + + xhr['send'](data); + } + catch (e) { + if (!callbackCalled) + prom['fire'](false, [0, _null, toString(e)]); + } + + return prom; + }, + + /* + * JSON Module. Uses browser built-ins or json.org implementation if available. Otherwise its own implementation, + * originally based on public domain implementation http://www.JSON.org/json2.js / http://www.JSON.org/js.html. + * Extremely simplified code, made variables local, removed all side-effects (especially new properties for String, Date and Number). + */ + + /*$ + * @id ready + * @group EVENTS + * @requires ready_vars ready_init + * @configurable default + * @name $.ready() + * @syntax $.ready(handler) + * @module WEB + * Registers a handler to be called as soon as the HTML has been fully loaded in the browser. Does not necessarily wait for images and other elements, + * only the main HTML document needs to be complete. On older browsers it is the same as window.onload. + * + * If you call ready() after the page is completed, the handler is scheduled for invocation in the event loop as soon as possible. + * + * A shortcut for ready() is to call ##dollar#$()## with the handler function. It does the same with fewer characters. + * + * @example Registers a handler that sets some text in an element: + *
+     * $.ready(function() {
+     *   $('#someElement').fill('ready() called');
+     * });
+     * 
+ * + * @param handler the function() to be called when the HTML is ready. + * @see ##dollar#$()## calls ready() when invoked with a function, offering a more convenient syntax. + */ + 'ready': ready, + + /*$ + * @id off + * @group EVENTS + * @requires on + * @configurable default + * @name $.off() + * @syntax $.off(handler) + * @module WEB + * Removes the given event handler. The call will be ignored if the given handler has not been registered using ##on(). + * If the handler has been registered for more than one element or event, it will be removed from all instances. + * + * Please note that you can not unregister event handlers registered using ##onOver() or ##onChange(). + * + * @example Adds a handler to an element: + *
+     * function myEventHandler() {
+     *    this.style.backgroundColor = 'red';        // 'this' contains the element that caused the event
+     * }
+     * $('#myElement').on('click', myEventHandler);  // add event handler
+     *
+     * window.setInterval(function() {               // after 5s, remove event handler
+     *    $.off(myEventHandler);
+     * }, 5000);
+     * 
+ * + * @param handler the handler to unregister, as given to ##on(). It must be a handler that has previously been registered using ##on(). + * If the handler is not registered as event handler, the function does nothing. + * + * @see ##on() registers an event handler. + */ + 'off': off + + /*$ + * @stop + */ + // @cond !off dummyOff:null + , + ///#/snippet webDollarFuncs + ///#snippet extrasDollarFuncs + + /*$ + * @id wait + * @group EVENTS + * @configurable default + * @requires promise + * @name $.wait() + * @syntax $.wait() + * @syntax $.wait(durationMs) + * @syntax $.wait(durationMs, args) + * @module WEB+UTIL + * + * Creates a new ##promise#Promise## that will be fulfilled as soon as the specified number of milliseconds have passed. This is mainly useful for animation, + * because it allows you to chain delays into your animation chain. + * + * The operation can be interrupted by calling the promise's ##stop() function. + * + * @example Chained animation using Promise callbacks. The element is first moved to the position 200/0, then to 200/200, waits for 50ms + * and finally moves to 100/100. + *
+     * var div = $('#myMovingDiv').set({$left: '0px', $top: '0px'});
+     * div.animate({$left: '200px', $top: '0px'}, 600, 0)
+     *    .then(function() {
+     *           div.animate({$left: '200px', $top: '200px'}, 800, 0);
+     *    }).then(function() {
+     *    	     return _.wait(50);
+     *    }).then(function() {
+     *           div.animate({$left: '100px', $top: '100px'}, 400);
+     *    });
+     * });
+     * 
+ * + * + * @param durationMs optional the number of milliseconds to wait. If omitted, the promise will be fulfilled as soon as the browser can run it + * from the event loop. + * @param args optional an array or list of arguments to pass to the promise handler + * @return a ##promise#Promise## object that will be fulfilled when the time is over, or fail when the promise's ##stop() has been called. + * The promise argument of a fulfilled promise is the args parameter as given to wait(). The returned promise supports ##stop() + * to interrupt the promise. + */ + 'wait': function(durationMs, args) { + var p = promise(); + var id = setTimeout(function() { + p['fire'](true, args); + }, durationMs); + p['stop0'] = function() { p['fire'](false); clearTimeout(id); }; + return p; + } + + /*$ + * @stop + */ + // @cond !wait dummyWait:0 + + ///#/snippet extrasDollarFuncs + }, $); + + //// UNDERSCORE FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + copyObj({ + ///#snippet utilUnderscoreFuncs + // @condblock filter + 'filter': funcArrayBind(filter), + // @condend + // @condblock map + 'map': funcArrayBind(map), + // @condend + // @condblock each + 'each': each, + // @condend + // @condblock each + 'toObject': toObject, + // @condend + // @condblock find + 'find': find, + // @condend + + /*$ + * @id extend + * @group OBJECT + * @requires + * @configurable default + * @name _.extend() + * @syntax _.extend(target, src...) + * @module UTIL + * Copies every property of the source objects into the first object. The source objects are specified using variable arguments. + * There can be more than one. + * The properties are copied as shallow-copies. + * + * Please note: Unlike jQuery, extend does not directly add a function to extend Minified, although + * you can use it to for this. To add a function to ##list#Minified lists##, add a property to + * ##M#MINI.M##. If you want to extend $ or _, just assign the new function(s) as property. + * + * @example Copying properties: + *
var target = {a:3, c: 3};
+     * _.extend(target, {a: 1, b: 2}); // target is now {a: 1, b: 2, c: 3}
+ * + * @example Using several source values: + *
var extend = _.extend({a: 1, b: 2}, {a:3, c: 3}, {d: 5}); // target is now {a: 1, b: 2, c: 3, d: 5}
+ * + * @param target the object to copy to + * @param src the object(s) to copy from. Variable argument, there can be any number of sources. Nulls and undefined + * parameters will be ignored. + * @return the target + * + * @see ##_.copyObj() is very similar to extend(), but with a slightly different and more straightforward syntax. + * @see ##_.merge() copies a list of objects into a new object. + */ + 'extend': function(target) { + return merge(sub(arguments, 1), target); + }, + + /*$ + * @id eachobj + * @group OBJECT + * @requires + * @configurable default + * @name _.eachObj() + * @syntax _.eachObj(obj, callback) + * @syntax _.eachObj(obj, callback, ctx) + * @module UTIL + * Invokes the given function once for each property of the given object. The callback is not invoked for inherited properties. + * + * @example Dumps all properties of an object. + *
+     * var s = '';
+     * _.eachObj({a: 1, b: 5, c: 2}, function(key, value) {
+     *     s += 'key=' + key + ' value=' + value + '\n';
+     * });
+     * 
+ * + * @param obj the object to use + * @param callback The callback function(key, value) to invoke for each property. + *
key
The name of the current property.
+ *
value
The value of the current property.
+ *
this
The given context. If not set, the object itself.
+ * The callback's return value will be ignored. + * @param ctx optional a context to pass to the callback as 'this'. + * @return the object + * + * @see ##_.each() iterates through a list. + */ + 'eachObj': eachObj, + + /*$ + * @id mapobj + * @group OBJECT + * @requires + * @configurable default + * @name _.mapObj() + * @syntax _.mapObj(obj, callback) + * @syntax _.mapObj(obj, callback, ctx) + * @module UTIL + * Creates a new object with the same properties but different values using the given callback function. The function is called + * for each property of the input object to provice a new value for the property. + * + * @example Increases the values of all properties. + *
+     * var r = _.mapObj({a: 1, b: 5, c: 2}, function(key, value) {
+     *     return value + 1;
+     * });
+     * // r is now {a: 2, b: 6, c: 2}
+     * 
+ * + * @param obj the object to use + * @param callback The callback function(key, value) to invoke for each property. + *
key
The name of the current property.
+ *
value
The value of the current property.
+ *
this
The given context. If not set, the object itself.
+ *
(callback return value)
This value will replace the original value in the new object.
+ * @param ctx optional a context to pass to the callback as 'this'. + * @return the new object + * + * @see ##_.filterObj() filters an object. + * @see ##map() maps a list. + */ + 'mapObj': function(obj, mapFunc, ctx) { + var result = {}; + eachObj(obj, function(key, value) { + result[key] = mapFunc.call(ctx || obj, key, value); + }); + return result; + }, + + /*$ + * @id isobject + * @group TYPE + * @requires + * @configurable default + * @name _.isObject() + * @syntax _.isObject(obj) + * @module UTIL + * Checks whether the given reference is an object as defined by typeof. + * + * @param obj the object to test + * @return true if the object is an object, false otherwise. + */ + 'isObject': isObject, + + /*$ + * @id format + * @group FORMAT + * @requires template + * @configurable default + * @name _.format() + * @syntax _.format() + * @syntax _.format(template, object) + * @syntax _.format(template, object, escapeFunction) + * @module UTIL + * Formats an object using a ##template#template##. The template syntax is shared with ##_.template(). The only difference is that + * format() frees you from the extra step of creating the template. In any case, whether you use + * format() or ##_.template(), the template will be cached. Be careful when you create templates dynamically, as + * every template is cached and consumes memory.
+ * If you only want to format a single value, use ##_.formatValue(). + * + * @example Format a name: + *
var s = _.formatHtml("{{first}} {{last}}", {first: 'Tim', last: 'Taylor'});
+ * + * @example Format a list of dates: + *
var s = _.format("{{each}}{{this :: yyyy-MM-dd}}{{/each}}", dateList);
+ * + * @param template The ##template#template## as a string. The template, once created, will be cached. + * @param object the object to format + * @param escapeFunction optional The callback function(inputString) that will be used + * to escape all output: + *
inputString
The string to escape.
+ *
(callback return value)
The escaped string.
+ * If no escapeFunction has been given, the output will not be escaped. + * ##_.escapeHtml() can be used as an escape function for HTML, and ##_.escapeRegExp() for regular expressions. + * JavaScript's built-in escape() function can escape URL components. + * See ##_.htmlFormat() for a version of format() that already includes HTML escaping. + * @return the string created by the template + * + * @see ##_.template() creates a template function, using the same syntax. + * @see ##_.formatHtml() is a variant of format() with HTML-escpaping built it. + * @see ##_.formatValue() formats a single number or date. + * @see ##_.escapeRegExp() can be used by format() to escape regular expressions. + */ + 'format': function(tpl, object, escapeFunction) { + return template(tpl, escapeFunction)(object); + }, + + /*$ + * @id template + * @group FORMAT + * @requires date_constants + * @configurable default + * @name _.template() + * @syntax _.template(template) + * @syntax _.template(template, escapeFunction) + * @module UTIL + * Parses a Handlebars-like template to create a reusable template function. + * + * The syntax of the template uses a syntax that superficially looks like + * Handlebars. Unlike Handlebars, it is based on raw JavaScript expressions and thus gives you + * complete freedom, but also offers you shortcuts for formatting, iteration and conditionals. + * + * Every template can receive exactly one object as input. If you need more than one value as input, put all required values + * into an object. + * + * Use double curly braces to embed a JavaScript expression and insert its result: + *
{{a}} plus {{b}} is {{a+b}}
+ * + * To use such a template, create it with template() and then execute the resulting function: + *
var myTemplate = _.template('{{a}} plus {{b}} is {{a+b}}');
+     * var result = myTemplate({a: 5, b: 7});
+ * If you pass an object as input, its properties will be mapped using JavaScript's with + * statement and are available as variables throughout the template. + * + * If you have only a simple value to render, you can pass it directly and access it through the pre-defined + * variable obj: + *
var myTemplate = _.template('The result is {{obj}}.');
+     * var result = myTemplate(17);
+ * Alternatively, you could also access the input as this, but be aware that JavaScript wraps simples types + * such as Number and Boolean. this is the default, so you can omit it to get the same result: + *
var myTemplate = _.template('The result is {{ }}.');
+     * var result = myTemplate(17);
+ * + * Minified templates can use ##_.formatValue() formats directly. Just separate them from the expression by + * a double-colon: + *
The price is {{obj::#.00}}.
+ * + * Conditions can be expressed using if and else: + *
Hello {{if visits==0}}New{{else if visits<10}}Returning{{else}}Regular{{/if}} Customer.
+ * You can use any JavaScript expression as condition. + * + * Use each to iterate through a list: + *
var myTemplate = _.template(
+     * 	   '{{each names}}{{this.firstName}} {{this.lastName}}{{/each}}');
+     * var result = myTemplate({names: [{firstName: 'Joe', lastName: 'Jones'},
+     *                                  {firstName: 'Marc', lastName: 'Meyer'}]});
+ * each will iterate through the members of the given object. It + * calls its body for each item and put a reference to the item into this. + * Optionally, you can specify up to two variables to store the value in and + * the zero-based index of the current item: + *
var myTemplate = _.template(
+     * 	   '{{each value, index: names}}{{index}}. {{value.firstName}} {{value.lastName}}{{/each}}');
+     * 
+ * + * If you do not pass an expression to each, it will take the list from this: + *
var myTemplate = _.template('{{each value:}}{{value}};{{/each}}');
+     * var result = myTemplate([1, 2, 3]);
+ * + * Beside lists, you can also iterate through the properties of an object. The property name will be stored + * in the first given parameter and the value in this and the second parameter: + *
var myTemplate = _.template('{{each key, value: nicknames}}{{key}}: {{value}}{{/each}}');
+     * var result = myTemplate({nicknames: {Matt: 'Matthew', John: 'Jonathan'} });
+ * + * Shorter version of the previous example that uses this for the value: + *
var myTemplate = _.template('{{each key: nicknames}}{{key}}: {{this}}{{/each}}');
+ * + * If you do not need the key, you can omit the variable specification: + *
var myTemplate = _.template('{{each nicknames}}{{this}}{{/each}}');
+ * + * You can define your own variables, using the regular JavaScript syntax, with 'var': + *
var myTemplate = _.template('{{var s=very.long.name, sum=a+b;}}{{s.desc}}, {{sum}}');
+ * + * In some situations, it may be inevitable to embed raw JavaScript in the template. + * To embed JavaScript code, prefix the code with a '#': + *
var myTemplate = _.template(
+     *     '{{each}}{{#var sum = 0; for (var i = 0; i < 3; i++) sum += this.numbers[i]; }}{{sum}}{{/each}}');
+     * var result = myTemplate([['Foreword', 'Intro'], ['Something', 'Something else']]);
+ * + * + * By default, all output will be escaped. You can prevent this by using triple-curly-braces: + *
Here's the original: {{{rawText}}}
. + * + * The template's JavaScript code is executed in a sandbox without access to global variables. Minified defines the + * following variables for you: + * + * + * + * + * + * + * + *
NameDesciption
thisThe template object outside of each. Inside eachs, the current value.
objThe parameter given to the template function.
_A reference to Minified Util.
escThe escape function given when the template has been defined. If no function has been given, + * a default function that returns the input unmodified.
printA function(text,...) that appends one or more strings to the template result.
eachA function(listOrObject, eachCallback) that can iterate over lists or object properties. + * The eachCallback is a function(key, value) for objects or function(value, index) + * for arrays that will be invoked for each item. + *
+ * + * Every template you create is already cached, so it not an expensive operation to call ##_.template() a second + * time with the same template. However, because of caching, you should be careful when creating templates + * dynamically, as this will fill the cache up quickly. + * + * @param template The template as a string using the syntax described below. + * @param escapeFunction optional The callback function(inputString) that will be used + * to escape all output: + *
inputString
The string to escape.
+ *
(callback return value)
The escaped string.
+ * If no escapeFunction has been given, the output will not be escaped. + * ##_.escapeHtml() can be used as an escape function for HTML, and ##_.escapeRegExp() for regular expressions. + * JavaScript's built-in escape() function can escape URL components. + * @return the value returned by the last invocation of func + * + * @see ##_.format() shares template()'s syntax but returns the result directly. + * @see ##_.formatHtml() is a variant of format() with HTML escaping. + * @see ##_.escapeHtml() can be used by template() to escape HTML. + * @see ##_.escapeRegExp() can be used by template() to escape regular expressions. + * @see ##HTML() creates a HTML element tree from a template. + */ + 'template': template, + + /*$ + * @id formathtml + * @group FORMAT + * @requires template + * @configurable default + * @name _.formatHtml() + * @syntax _.formatHtml() + * @syntax _.formatHtml(template, object) + * @module UTIL + * Formats an object using a ##template#template## with HTML escaping for the output. + * The template syntax is shared with ##_.template(). Output in double curly braces is automatically escaped using ##_.escapeHtml(). + * formatHtml() just creates a new template with HTML escaping and invokes it immediately. + * The template will be cached. Be careful when you create templates dynamically, as + * every template is cached and consumes memory.
+ * If you only want to format a single value, use ##_.formatValue(). + * + * @example Format a name: + *
var s = _.formatHtml("{{first}} {{last}}", {first: 'Tim', last: 'Taylor'});
+ * + * @example Format a list of dates: + *
var s = _.formatHtml("{{each}}{{::yyyy-MM-dd}}{{/each}}", dateList);
+ * + * @param template The ##template#template## as a string. The template, once created, will be cached. + * @param object the object to format + * @return the string created by the template + * + * @see ##ht() works uses formatHtml to set element's innerHTML. + * @see ##HTML() create HTML nodes using formatHtml. + * @see ##_.template() creates a template function, using the same syntax. + * @see ##_.format() allows you to specify alternative escape mechanisms. + */ + 'formatHtml': formatHtml + /*$ + * @stop + */ + + // @cond !format dummyFormatHtml:0 + , + + ///#/snippet utilUnderscoreFuncs + ///#snippet extrasUnderscoreFuncs + // @condblock promise + 'promise': promise + // @condend promise + + /*$ + * @stop + */ + // @cond !promise dummyPromise:0 + + ///#/snippet extrasUnderscoreFuncs + }, _); + + ////INITIALIZATION //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ///#snippet webInit + /*$ + * @id ready_init + * @dependency + */ + document.addEventListener("DOMContentLoaded", function() { + callList(DOMREADY_HANDLER); + DOMREADY_HANDLER = _null; + }, false); + /*$ + @stop + */ + + + ///#/snippet webInit + + return { + ///#snippet extrasExports + + /*$ + * @id html + * @group ELEMENT + * @requires template ht + * @configurable default + * @name HTML() + * @syntax HTML(templateString, object...) + * @syntax HTML(templateFunction, object...) + * @syntax HTML(idSelector, object...) + * @module WEB + * Creates a ##list#list## of HTML nodes from the given HTML template. The list is compatible with ##add(), ##fill() and related methods. + * The template uses the ##template() syntax with ##escapeHtml() escaping for values. + * + * Please note that the function HTML will not be automatically exported by Minified. You should always import it + * using the recommended import statement: + *
+     * var MINI = require('minified'), $ = MINI.$, $$ = MINI.$$, EE = MINI.EE, HTML = MINI.HTML;
+     * 
+ * + * @example Creating a HTML element showing a number: + *
+     * <div id="price">-</div>
+     * 
+ * Then the price can be set like this: + *
+     * var price = 14.9;
+     * $('#price').fill(HTML('<b>${{::0.99}}</b>', price));
+     * 
+ * Results in: + *
+     * <div id="price"><b>$14.90</b></div>
+     * 
+ * + * @example Adding elements to an existing list: + *
+     * var names = [ {first: 'James', last: 'Sullivan'},
+     *               {first: 'Michael', last: 'Wazowski'} ];
+     * $('#list').add(HTML('{{each}}<li>{{this.first}} {{this.last}}</li>{{/each}}', names);
+     * 
+ * The code adds this to #list: + *
+     * <li>James Sullivan<li><li>Michael Wazowski</li>
+     * 
+ * + * @example You can store templates in <script> tags. First you need to create a <script> tag with a type not + * supported by the browser and put your template in there, like this: + *
<script id="myTimeTpl" type="minified-template">The time is {{HH:mm:ss}}.</script>
+ * Then you can specify the tag's id directly to access it: + *
$('#timeDisplay').fill(HTML('#myTimeTpl', new Date()));
+ * + * @param templateString the template using ##template() syntax. Please note, because this is a template, you should + * avoid creating the template itself dynamically, as compiling templates is expensive and + * Minified will cache only a limited number of templates. Exception: If the template string does not use + * any template functionality (no {{}}), it does not need to be compiled and won't be cached. + * The template will use ##escapeHtml() as escape function, so all template substitutions will be HTML-escaped, + * unless you use triple curly-braces. + * @param templateFunction instead of a HTML template HTML() also accepts a template function, e.g. one + * created by ##template(). It will be invoked with the object as only argument. + * @param idSelector if you pass an ID CSS selector in the form "#myScript", Minified will recognize this and use the content + * of the specified <script> element as template. This allows you to put your template into + * a <script> tag with a non-JavaScript type (see example). Any string that starts with '#' and does not + * contain any spaces is used as selector. + * @param object optional one or more objects to pass to the template. If object is not set, the template is called with undefined + * as object. If exactly one object is given, it is passed directly to the template. If you specify more than one + * object, they are ##merge#merged##. + * @return the list containing the new HTML nodes + * + * @see ##ht() is a shortcut for fill(HTML()). + * @see ##EE() is a different way of creating HTML nodes. + */ + 'HTML': function () { + var div = EE('div'); + return _(call(div['ht'], div, arguments)[0].childNodes); + }, + /*$ + * @stop + */ + + ///#/snippet extrasExports + ///#snippet utilExports + /*$ + * @id underscore + * @group LIST + * @name _() + * @syntax _(item...) + * @configurable default + * @module UTIL + * Creates a new Minified list. Supports variable arguments so you can add items directly to the list. For arguments that are lists + * (as defined by ##_.isList()), the list content will be added to the new list. Unlike #dollar#$()#, this is not done recursively + * and thus you can create a list of lists by wrapping arguments in a list. Another difference between _() and $() + * is that $() will automatically remove null values while _() will keep them. + * + * @example Creating an empty list: + *
_()
+ * + * @example Creating a list with three items: + *
_(1, 2, 3)
+ * + * @example Creating the same list, but by passing an array. One array level will be flattened: + *
_([1, 2, 3])
+ * + * @example Creating a list containing the arrays [1, 2] and [3, 4]. + *
_([[1, 2], [3, 4]])
+ * + * @example Merging two lists: + *
var a = _("a", "b", "c");
+     * var b = _("x", "y", "z");
+     * var merged = _(a, b);    // contains _("a", "b", "c", "x", "y", "z")
+     * 
+ * + * @example Adding two elements to a list: + *
var a = _(1, 2, 3);
+     * var a4 = _(a, 4);       // contains _(1, 2, 3, 4)
+     * 
+ * + * @example Mixing different list types and single elements: + *
_(1, [], [2, 3], _(), _(4, 5)); // same content as _(1, 2, 3, 4, 5)
+ * + * @param item an item to add to the new list. If it is a list (as defined by ##_.isList()), its content will be to the new + * ##Minified list#list## (but NOT recursively). + */ + '_': _, + /*$ + * @stop + */ + ///#/snippet utilExports + ///#snippet webExports + + /*$ + * @id dollar + * @group SELECTORS + * @requires + * @dependency yes + * @name $() + * @syntax $() + * @syntax $(selector) + * @syntax $(selector, context) + * @syntax $(selector, context, childOnly) + * @syntax $(list) + * @syntax $(list, context) + * @syntax $(list, context, childOnly) + * @syntax $(object) + * @syntax $(object, context) + * @syntax $(object, context, childOnly) + * @syntax $(domreadyFunction) + * @module WEB + * Creates a new ##list#Minified list##, or register a DOMReady-handler. + * The most common usage is with a CSS-like selector. $() will then create a list containing all elements of the current HTML + * document that fulfill the filter conditions. Alternatively you can also specify a list of objects or a single object. + * Nested lists will automatically be flattened, and nulls will automatically be removed from the resulting list. + * If you call $() without any arguments, it will return an empty list. + * + * Additionally, you can specify a second argument to provide a context. Contexts only make sense if you selected + * HTML nodes with the first parameter. Then the context limits the resulting list to include only those nodes + * that are descendants of the context nodes. The context can be either a selector, a list or a single HTML node, and will be + * processed like the first argument. A third arguments allows you to limit the list to + * only those elements that are direct children of the context nodes (so a child of a child would be filtered out). + * + * The lists created by $() are the same type as the ##list#Minified lists## created by Util's #underscore#_() constructor and other + * Util methods. All Util methods work on lists created by $(). If you want to add your own methods to those lists, + * use ##M#MINI.M##. + * + * As a special shortcut, if you pass a function to $(), it will be registered using #ready#$.ready() to be executed + * when the DOM model is complete. + * + * @example A simple selector to find an element by id. + *
+     * var l0 = $('#myElementId');
+     * 
+ * + * @example You can pass an object reference to create a list containing only this element: + *
+     * var l1 = $(document.getElementById('myElementId'));
+     * 
+ * + * @example Lists and arrays will be copied: + *
+     * var l2 = $([elementA, elementB, elementC]);
+     * 
+ * + * @example Lists will be automatically flattened and nulls removed. So this list l3 has the same content as l2: + *
+     * var l3 = $([elementA, [elementB, null, elementC], null]);
+     * 
+ * + * @example This is a simple selector to find all elements with the given class. + *
+     * var l4 = $('.myClass');
+     * 
+ * + * @example A selector to find all elements of the given type. + *
+     * var l5 = $('input'); // finds all input elements
+     * 
+ * + * @example A selector to find all elements with the given type and class. + *
+     * var l6 = $('input.myRadio'); // finds all input elements with class 'myRadio'
+     * 
+ * + * @example A selector to find all elements that are descendants of the given element. + *
+     * var l7 = $('#myForm input'); // finds all input elements contained in the element myForm
+     * 
+ * + * @example A selector to find all elements that have either a CSS class 'a' or class 'b': + *
+     * var l8 = $('.a, .b'); // finds all elements that have class a or class b
+     * 
+ * + * @example A selector that finds all elements that are descendants of the element myDivision, are inside an element with the + * class .myForm and are input elements: + *
+     * var l9 = $('#myDivision .myForm input');
+     * 
+ * + * @example Contexts can make it easier to specify ancestors: + *
+     * var l10 = $('.myRadio', '#formA, #formB, #formC');
+     * 
+ * The result is identical to: + *
+     * var l10 = $('#formA .myRadio, #formB .myRadio, #formC .myRadio');
+     * 
+ * + * @example Using one of the list functions, ##set(), on the list, and setting the element's text color. '$' at the beginning of the property name sets a CSS value. + *
+     * $('#myElementId').set('$color', 'red');
+     * 
+ * + * @example Most list methods return the list you invoked them on, allowing you to chain them: + *
+     * $('#myForm .myRadio').addClass('uncheckedRadio')
+     *                      .set('checked', true)
+     *                      .on('click', function() {
+     *                             $(this).set({@: 'uncheckedRadio');
+     *                      });
+     * 
+ * + * @example Using $() as a #ready#$.ready() shortcut: + *
+     * $(function() {
+     *   // in here you can safely work with the HTML document
+     * });
+     * 
+ * + * @param selector a simple, CSS-like selector for HTML elements. It supports '#id' (lookup by id), '.class' (lookup by class), + * 'element' (lookup by elements) and 'element.class' (combined class and element). Use commas to combine several selectors. + * You can also join two or more selectors by space to find elements which are descendants of the previous selectors. + * For example, use 'div' to find all div elements, '.header' to find all elements containing a class name called 'header', and + * 'a.popup' for all a elements with the class 'popup'. To find all elements with 'header' or 'footer' class names, + * write '.header, .footer'. To find all divs elements below the element with the id 'main', use '#main div'. + * The selector "*" will return all elements. + * @param list a list to copy. It can be an array, another Minified list, a DOM nodelist or anything else that has a length property and + * allows read access by index. A shallow copy of the list will be returned. Nulls will be automatically removed from the copy. Nested lists + * will be flattened, so the result only contains nodes. + * @param object an object to create a single-element list containing only the object. If the argument is null, an empty list will be returned. + * @param domreadyFunction a function to be registered using #ready#$.ready(). + * @param context optional an optional selector, node or list of nodes which specifies one or more common ancestor nodes for the selection. The context can be specified as + * a selector, a list or using a single object, just like the first argument. + * The returned list will contain only descendants of the context nodes. All others will be filtered out. + * @param childOnly optional if set, only direct children of the context nodes are included in the list. Children of children will be filtered out. If omitted or not + * true, all descendants of the context will be included. + * @return the array-like ##list#Minified list## object containing the content specified by the selector. + * Please note that if the first argument was a list, the existing order will be kept. If the first argument was a simple selector, the nodes are in document order. + * If you combined several selectors using commas, only the individual results of the selectors will keep the document order, + * but will then be joined to form a single list. This list will + * not be in document order anymore, unless you use a build without legacy IE support. + * Duplicate nodes will be removed from selectors, but not from lists. + * + * @see #underscore#_() is Util's alternative constructor for ##list#Minified lists## + * @see ##dollardollar#$$()## works like $(), but returns the resulting list's first element. + */ + '$': $, + + /*$ + * @id dollardollar + * @group SELECTORS + * @requires + * @configurable default + * @name $$() + * @syntax $(selector) + * @syntax $(selector, context) + * @syntax $(selector, context, childOnly) + * @shortcut $$() - It is recommended that you assign MINI.$$ to a variable $$. + * @module WEB + * Returns a DOM object containing the first match of the given selector, or undefined if no match was found. + * $$ allows you to easily access an element directly. It is the equivalent to writing $(selector)[0]. + * + * Please note that the function $$ will not be automatically exported by Minified. You should always import it + * using the recommended import statement: + *
+     * var MINI = require('minified'), $ = MINI.$, $$ = MINI.$$, EE = MINI.EE;
+     * 
+ * + * @example Select the checkbox 'myCheckbox': + *
+     * $$('#myCheckbox').checked = true;
+     * 
+ * + * @param selector a simple, CSS-like selector for the element. Uses the same syntax as #dollar#$(). The most common + * parameter for this function is the id selector with the syntax "#id". + * @param context optional an optional selector, node or list of nodes which specifies one or more common ancestor nodes for the selection. The context can be specified as + * a selector, a list or using a single object, just like the first argument. + * The returned list will contain only descendants of the context nodes. All others will be filtered out. + * @param childOnly optional if set, only direct children of the context nodes are included in the list. Children of children will be filtered out. If omitted or not + * true, all descendants of the context will be included. + * @return a DOM object of the first match, or undefined if the selector did not return at least one match + * + * @see ##dollar#$()## creates a list using the selector, instead of returning only the first result. + */ + '$$': $$, + + /*$ + * @id M + * @name M + * @syntax MINI.M + * @module WEB, UTIL + * + * Exposes the internal class used by all ##list#Minified lists##. This is mainly intended to allow you adding your + * own functions. + * + * @example Adding a function printLength() to M: + *
+     * MINI.M.prototype.printLength = function() { console.log(this.length); };
+     * 
+ */ + 'M': M, + + /*$ + * @id getter + * @requires get + * @name MINI.getter + * @syntax MINI.getter + * @module WEB + * + * Exposes a map of prefix handlers used by ##get(). You can add support for a new prefix in get() + * by adding a function to this map. The prefix can be any string consisting solely of non-alphanumeric characters + * that's not already used by Minified. + * + * You must not replace getters by a new map, but must always modify the existing map. + * + * The function's signature is function(list, name) where + *
list
Is the Minified list to get the value from. By convention you should always use only the first element. The list is + * non-empty and the first elememt can't be null or undefined (get() automatically returns undefined in + * all other case).
+ *
name
The name of the property. That's the part AFTER the prefix.
+ *
(callback return value)
The value to return to the user.
+ * + * @example Adding a shortcut '||' for accessing border style properties: + *
+     * MINI.getter['||'] = function(list, name) {
+     * 	return list.get('$border' + name.replace(/^[a-z]/, function(a) { return a.toUpperCase()});
+     * };
+     *
+     * var borderColor = $('#box').get('||color'); // same as '$borderColor'
+     * var borderLeftRadius = $('#box').get('||leftRadius'); // same as '$borderLeftRadius'
+     * 
+ * + * @example Adding XLink attribute support to get(). This is useful if you work with SVG. The prefix is '>'. + *
+     * MINI.getter['>'] = function(list, name) {
+     * 	return list[0].getAttributeNS('http://www.w3.org/1999/xlink', name);
+     * };
+     *
+     * var xlinkHref = $('#svgLink').get('>href');
+     * 
+ */ + 'getter': getter, + + /*$ + * @id setter + * @requires set + * @name MINI.setter + * @syntax MINI.setter + * @module WEB + * + * Exposes a map of prefix handlers used by ##set(). You can add support for a new prefix in set() + * by adding a function to this map. The prefix can be any string consisting solely of non-alphanumeric characters + * that's not already used by Minified. + * + * You must not replace setters by a new map, but must always modify the existing map. + * + * The function's signature is function(list, name, value) where + *
list
Is the Minified list to use.
+ *
name
The name of the property. That's the part AFTER the prefix.
+ *
value
Either the value to set, or a callback function to create the value that you must call for each + * value (see ##set() ).
+ *
+ * + * If you provide complete ##get() and ##set() support for a prefix, you are also able to use it in other Minified + * function such as ##animate() and ##toggle(). + * + * @example Adding a shortcut '||' for accessing border style properties. As it's just calling ##set() for an existing + * property, it is not required to extra code for the callback. + *
+     * MINI.setter['||'] = function(list, name, value) {
+     * 	list.set('$border' + name.replace(/^[a-z]/, function(a) { return a.toUpperCase()}, value);
+     * };
+     *
+     * $('#box').set('||color', 'red');   // same as set('$borderColor', 'red')
+     * $('#box').set('||leftRadius', 4);  // same as set('$borderLeftRadius', 4)
+     * 
+ * + * @example Adding XLink attribute support to set(). This is useful if you work with SVG. The prefix is '>'. + *
+     * MINI.setter['>'] = function(list, name, value) {
+     * 	list.each(function(obj, index) {
+     * 		var v;
+     * 		if (_.isFunction(value))
+     * 			v = value(obj.getAttributeNS('http://www.w3.org/1999/xlink', name), index, obj);
+     * 		else
+     * 			v = value;
+     *
+     *		if (v == null)
+     *			obj.removeAttributeNS('http://www.w3.org/1999/xlink', name);
+     *		else
+     *			obj.setAttributeNS('http://www.w3.org/1999/xlink', name, v);
+     *	});
+     * };
+     *
+     * $('#svgLink').set('>href', 'http://minifiedjs.com/');
+     * 
+ */ + 'setter': setter + /*$ + * @stop + */ + ///#/snippet webExports + }; + + ///#snippet commonAmdEnd +}); +///#/snippet commonAmdEnd +///#snippet webDocs + +/*$ + * @id list + * @name Minified Lists + * @module WEB, UTIL + * + * Minified lists are Array-like objects provided by Minified. Like a regular JavaScript array, + * they provide a length property and you can access their content using the index operator (a[5]). + * However, they do not provide the same methods as JavaScript's native array and are designed to be immutable, so + * there is no direct way to add something to a Minified list. Instead Minified provides a number of functions and methods + * that take a list and create a modified copy which, for example, may contain additional elements. + * + * Minified lists are typically created either using the Web module's #dollar#$() function or with the Util module's + * #underscore#_() function, but many functions in the Util module also return a Minified list. + * + * The Util module provides a function ##_.array() that converts a Minified list to a regular JavaScript array. + */ + +/*$ + * @id promiseClass + * @name Promise + * @module WEB, UTIL + * + * Promises are objects that represent the future result of an asynchronous operation. When you start such an operation, using #request#$.request(), + * ##animate(), or ##wait(), you will get a Promise object that allows you to get the result as soon as the operation is finished. + * + * Minified's full distribution ships with a Promises/A+-compliant implementation of Promises that should + * be able to interoperate with most other Promises implementations. Minified's Web module in stand-alone distribution comes with a limited implementation. + * See below for details. + * + * What may be somewhat surprising about this Promises specification is that the only standard-compliant way to access the result is to + * register callbacks. They will be invoked as soon as the operation is finished. + * If the operation already ended when you register the callbacks, the callback will then just be called from the event loop as soon + * as possible (but never while the ##then() you register them with is still running).
+ * This design forces you to handle the operation result asynchronously and disencourages 'bad' techniques such as polling. + * + * The central method of a Promise, and indeed the only required function in Promises/A+, is ##then(). It allows you to register + * two callback methods, one for success (called 'fulfillment' in Promises/A+ terminology) and one for failures (called 'rejection' in Promises/A+). + * + * This example shows you how to use then(): + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  }, function error(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * What makes Promises so special is that ##then() itself returns a new Promise, which is based on the Promise then() was called on, but can be + * modified by the outcome of callbacks. Both arguments to then() are optional, and you can also write the code like this: + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  })
+ *  .then(null, function error(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * Because the first ##then() returns a new Promise based on the original Promise, the second then() will handle errors of the request just like + * the first one did. There is only one subtle difference in the second example: the error handler will not only be called if the request failed, + * but also when the request succeded but the success handler threw an exception. That's one of the two differences between the original Promise and + * the Promise returned by then(). Any exception thrown in a callback causes the new Promise to be in error state. + * + * Before I show you the second difference between the original Promise and the new Promise, let me make the example a bit more readable + * by using ##error(), which is not part of Promises/A+, but a simple extension by Minified. It just registers the failure callback without + * forcing you to specify null as first argument: + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  })
+ *  .error(function error(exception) {  // error(callback) is equivalent to then(null, callback)
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * A very powerful capability of Promises is that you can easily chain them. If a ##then() callback returns a value, the new Promise returned + * by then() will be marked as success (fulfilled) and this value is the result of the operation. If a callback returns a Promise, + * the new Promise will assume the state of the returned Promise. You can use the latter to create chains of asynchronous operations, + * but you still need only a single error handler for all of them and you do not need to nest functions to achieve this: + *
+ * $.request('get', 'http://example.com/zipcode?location=Beverly+Hills,+CA')
+ *  .then(function(resultZip) {
+ *      return $.request('get', 'http://example.com/weather', {zip: resultZip});
+ *  })
+ *  .then(function(resultWeather) {
+ *      alert('The weather in Beverly Hills is ' + resultWeather);
+ *  })
+ *  .error(function(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * Only the full Minified distribution allows you to create promises yourself, using the ##promise() function. The Promises/A+ + * specification does not specify how to fulfill a promise, but in Minified's implementation every Promise object has a function fire() + * that needs to be called when the promise result is ready. It requires two arguments. + * The first is a boolean, true for a successful operation and false for a failure. The second is an array or list containing the + * arguments to call the corresponding ##then() handler with. + * + * The following example is a function, similar to ##wait(), that returns a Promise which succeeds after the given amount + * of milliseconds has passed. + * It then fulfills the promise with the number of milliseconds as argument. + * + *
+ * function timeout(durationMs) {
+ *		var p = _.promise();
+ *		setTimeout(function() { p.fire(true, [durationMs]); }, durationMs);
+ *		return p;
+ * }
+ * 
+ * Call it like this: + *
+ * timeout(1000).then(function(ms) { window.alert(ms+ ' milliseconds have passed.'); });
+ * 
+ * + *

Limited Promises Implementation in Web module

+ * If you use only the Web module, instead of the full implementation, the promises implementation is not fully Promises/A+ compliant. + * One major difference is that it does not allow you create promises yourself. The only way to get a promise in the Web module + * is from functions like ##animate() and ##request(). The other difference is that the interoperability with other promises frameworks + * is limited, even though it should be good enough most of the time. + * + * There are two things you may run into when you use Web's simplified implementation with a complete implementation: + *
  1. The simplified implementation does not support recursive thenables. So when you register callbacks with ##then(), + * you can return a promise or a thenable, but only if that promise is not also returning a promise.
  2. + *
  3. Many corner cases required by the Promises/A+ specification are not handled. When interoperating using + * reasonable implementations, you may never run into this, but Promises/A+ has detailed rules for things like ##then() + * methods implemented as dynamic getter and returning a new value on each invocation or throwing exceptions. If you need + * a water-proof implementation, you need to use the complete implementation in Minified's full package.
+ */ +/*$ + * @stop + */ + +///#/snippet webDocs + diff --git a/src/scripts/vendor/minified/minified.min.js b/src/scripts/vendor/minified/minified.min.js new file mode 100644 index 0000000..584fc53 --- /dev/null +++ b/src/scripts/vendor/minified/minified.min.js @@ -0,0 +1,2923 @@ +// minified.js config start -- use this comment to re-create a configuration in the Builder +// - Only sections add, always, amdsupport, each, error, extend, +// - filter, find, map, on, ready, request, template, trigger, underscore, wait. + + +// WARNING! This file is autogenerated from minified-master.js and others. + +/* + * Minified.js - Lightweight Client-Side JavaScript Library (full package) + * Version: Version 2014 beta 5 b2 + * + * Public Domain. Use, modify and distribute it any way you like. No attribution required. + * To the extent possible under law, Tim Jansen has waived all copyright and related or neighboring rights to Minified. + * Please see http://creativecommons.org/publicdomain/zero/1.0/. + * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + * + * Contains code based on https://github.com/douglascrockford/JSON-js (also Public Domain). + * + * https://github.com/timjansen/minified.js + */ +// ==ClosureCompiler== +// @output_file_name minified.js +// @compilation_level ADVANCED_OPTIMIZATIONS +// ==/ClosureCompiler== + +/*$ + * @id ALL + * @doc no + * @required + * This id allows identifying whether both Web and Util are available. + */ + +///#snippet commonAmdStart + +/*$ + * @id require + * @name require() + * @syntax require(name) + * @group OPTIONS + * @module WEB, UTIL + * Returns a reference to a module. If you do not use an AMD loader to load Minified, just call require() with the + * argument 'minified' to get a reference to Minified. You can also access all modules defined using ##define(). + * + * If you do use an AMD loader, Minified will not define this function and you can use the AMD loader to obtain the + * reference to Minified. + * Minified's version of require is very simple and will only support Minified and other libraries designed + * for Minfied, but no real AMD libraries. If you need to work with libraries requiring AMD, you need a real AMD loader. + * + * @param name the name of the module to request. Minified is available as 'minified'. + * @return the reference to the module. Use the name 'minified' to get Minified. You can also access any modules defined using + * ##define(). If the name is unknown, it returns undefined. + * + * @see ##define() allows you to define modules that can be obtained using require(). + */ + +/*$ + * @id define + * @name define() + * @syntax define(name, factoryFunction) + * @group OPTIONS + * @module WEB, UTIL + * Defines a module that can be returned by ##require(), in case you don't have a AMD loader. If you have a AMD loader before you include Minified, + * define() will not be set and you can use the AMD loader's (more powerful) variant. + * + * Minified's versions of require() and define() are very simple and can not resolve things like circular references. + * Also, they are not AMD-compatible and only useful for simple modules. If you need to work with real AMD libraries that are not written + * for Minified, you need a real AMD loader. + * + * @example Creates a simple module and uses it: + *
+ * define('makeGreen', function(require) {
+ *     var MINI = require('minified'), $ = MINI.$; // obtain own ref to Minified
+ *     return function(list) {
+ *         $(list).set({$color: '#0f0', $backgroundColor: '#050'});
+ *     });
+ * });
+ *
+ * var makeGreen = require('makeGreen');
+ * makeGreen('.notGreenEnough');
+ * 
+ * + * @param name the name of the module to request. In Minified's implementation, only 'minified' is supported. + * @param factoryFunction is a function(require) will be called the first time the name is defined to obtain the module + * reference. It received a reference to ##require() (which is required for AMD backward-compatibility) and + * must return the value that is returned by ##require(). The function will only be called once, its result will + * be cached. + *
require
A reference to ##require(). While you could use require() from the global + * context, this would prevent backward compatibility with AMD.
+ *
(callback return value)
The reference to be returned by ##require().
+ * + * @see ##require() can be used to obtain references defined with ##define(). + */ + +/*$ + * @id amdsupport + * @name AMD stubs + * @configurable default + * @group OPTIONS + * @doc no + * @module WEB, UTIL + * If enabled, Minified will create stubs so you can use it without an AMD framework. + * It requires AMD's define() function. + */ +if (/^u/.test(typeof define)) { // no AMD support available ? define a minimal version + (function(def){ + var require = this['require'] = function(name) { return def[name]; }; + this['define'] = function(name, f) { def[name] = def[name] || f(require); }; + })({}); +} +/*$ + * @stop + */ + +define('minified', function() { + + ///#/snippet commonAmdStart + ///#snippet webVars + /*$ + * @id WEB + * @doc no + * @required + * This id allows identifying whether the Web module is available. + */ + + /** + * @const + */ + var _window = window; + + /** + * @const + * @type {!string} + */ + var MINIFIED_MAGIC_NODEID = 'Nia'; + + /** + * @const + * @type {!string} + */ + var MINIFIED_MAGIC_PREV = 'NiaP'; + + var setter = {}, getter = {}; + + var idSequence = 1; // used as node id to identify nodes, and as general id for other maps + + + /*$ + * @id ready_vars + * @dependency + */ + /** @type {!Array.} */ + var DOMREADY_HANDLER = /^[ic]/.test(document['readyState']) ? _null : []; // check for 'interactive' and 'complete' + /*$ + * @stop + */ + + ///#/snippet webVars + ///#snippet utilVars + /*$ + * @id UTIL + * @doc no + * @required + * This id allows identifying whether the Util module is available. + */ + + var _null = null; + + /** @const */ + var undef; + + /*$ + * @id date_constants + * @dependency + */ + function val3(v) {return v.substr(0,3);} + var MONTH_LONG_NAMES = split('January,February,March,April,May,June,July,August,September,October,November,December', /,/g); + var MONTH_SHORT_NAMES = map(MONTH_LONG_NAMES, val3); // ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; + var WEEK_LONG_NAMES = split('Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday', /,/g); + var WEEK_SHORT_NAMES = map(WEEK_LONG_NAMES, val3); + var MERIDIAN_NAMES = split('am,pm', /,/g); + var MERIDIAN_NAMES_FULL = split('am,am,am,am,am,am,am,am,am,am,am,am,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm,pm', /,/g); + + var FORMAT_DATE_MAP = { + 'y': ['FullYear', nonOp], + 'Y': ['FullYear', function(d) { return d % 100; }], + 'M': ['Month', plusOne], + 'n': ['Month', MONTH_SHORT_NAMES], + 'N': ['Month', MONTH_LONG_NAMES], + 'd': ['Date', nonOp], + 'm': ['Minutes', nonOp], + 'H': ['Hours', nonOp], + 'h': ['Hours', function(d) { return (d % 12) || 12; }], + 'k': ['Hours', plusOne], + 'K': ['Hours', function(d) { return d % 12; }], + 's': ['Seconds', nonOp], + 'S': ['Milliseconds', nonOp], + 'a': ['Hours', MERIDIAN_NAMES_FULL], + 'w': ['Day', WEEK_SHORT_NAMES], + 'W': ['Day', WEEK_LONG_NAMES], + 'z': ['TimezoneOffset', function(d, dummy, timezone) { + if (timezone) + return timezone; + + var sign = d > 0 ? '-' : '+'; + var off = d < 0 ? -d : d; + return sign + pad(2, Math.floor(off/60)) + pad(2, off%60); + }] + }; + + var PARSE_DATE_MAP = { + 'y': 0, // placeholder -> ctorIndex + 'Y': [0, -2000], + 'M': [1,1], // placeholder -> [ctorIndex, offset|value array] + 'n': [1, MONTH_SHORT_NAMES], + 'N': [1, MONTH_LONG_NAMES], + 'd': 2, + 'm': 4, + 'H': 3, + 'h': 3, + 'K': [3,1], + 'k': [3,1], + 's': 5, + 'S': 6, + 'a': [3, MERIDIAN_NAMES] + }; + + /*$ + * @stop + */ + + /** @const */ + var MAX_CACHED_TEMPLATES = 99; + var templateCache={}; // template -> function + var templates = []; // list of MAX_CACHED_TEMPLATES templates + + ///#/snippet utilVars + ///#snippet commonFunctions + + /** @param s {?} */ + function toString(s) { + return s!=_null ? ''+s : ''; + } + /** + * @param s {?} + * @param o {string} + */ + function isType(s,o) { + return typeof s == o; + } + /** @param s {?} */ + function isString(s) { + return isType(s, 'string'); + } + function isObject(f) { + return !!f && isType(f, 'object'); + } + function isNode(n) { + return n && n['nodeType']; + } + function isNumber(n) { + return isType(n, 'number'); + } + function isDate(n) { + return isObject(n) && !!n['getDay']; + } + function isBool(n) { + return n === true || n === false; + } + function isValue(n) { + var type = typeof n; + return type == 'object' ? !!(n && n['getDay']) : (type == 'string' || type == 'number' || isBool(n)); + } + function nonOp(v) { + return v; + } + function plusOne(d) { + return d+1; + } + function replace(s, regexp, sub) { + return toString(s).replace(regexp, sub != _null ? sub : ''); + } + function escapeRegExp(s) { + return replace(s, /[\\\[\]\/{}()*+?.$|^-]/g, "\\$&"); + } + function trim(s) { + return replace(s, /^\s+|\s+$/g); + } + function eachObj(obj, cb, ctx) { + for (var n in obj) + if (obj.hasOwnProperty(n)) + cb.call(ctx || obj, n, obj[n]); + return obj; + } + function each(list, cb, ctx) { + if (list) + for (var i = 0; i < list.length; i++) + cb.call(ctx || list, list[i], i); + return list; + } + function filter(list, filterFuncOrObject, ctx) { + var r = []; + var f = isFunction(filterFuncOrObject) ? filterFuncOrObject : function(value) { return filterFuncOrObject != value; }; + each(list, function(value, index) { + if (f.call(ctx || list, value, index)) + r.push(value); + }); + return r; + } + function collector(iterator, obj, collectFunc, ctx) { + var result = []; + iterator(obj, function (a, b) { + if (isList(a = collectFunc.call(ctx || obj, a, b))) // extreme variable reusing: a is now the callback result + each(a, function(rr) { result.push(rr); }); + else if (a != _null) + result.push(a); + }); + return result; + } + function collectObj(obj, collectFunc, ctx) { + return collector(eachObj, obj, collectFunc, ctx); + } + function collect(list, collectFunc, ctx) { + return collector(each, list, collectFunc, ctx); + } + function keyCount(obj) { + var c = 0; + eachObj(obj, function(key) { c++; }); + return c; + } + function keys(obj) { // use Object.keys? in IE>=9 + var list = []; + eachObj(obj, function(key) { list.push(key); }); + return list; + } + function map(list, mapFunc, ctx) { + var result = []; + each(list, function(item, index) { + result.push(mapFunc.call(ctx || list, item, index)); + }); + return result; + } + function startsWith(base, start) { + if (isList(base)) { + var s2 = _(start); // convert start as we don't know whether it is a list yet + return equals(sub(base, 0, s2.length), s2); + } + else + return start != _null && base.substr(0, start.length) == start; + } + function endsWith(base, end) { + if (isList(base)) { + var e2 = _(end); + return equals(sub(base, -e2.length), e2) || !e2.length; + } + else + return end != _null && base.substr(base.length - end.length) == end; + } + function reverse(list) { + var len = list.length; + if (isList(list)) + return new M(map(list, function() { return list[--len]; })); + else + return replace(list, /[\s\S]/g, function() { return list.charAt(--len); }); + } + function toObject(list, value) { + var obj = {}; + each(list, function(item, index) { + obj[item] = value; + }); + return obj; + } + function copyObj(from, to) { + var dest = to || {}; + for (var name in from) + dest[name] = from[name]; + return dest; + } + function merge(list, target) { + var o = target; + for (var i = 0; i < list.length; i++) + o = copyObj(list[i], o); + return o; + } + function getFindFunc(findFunc) { + return isFunction(findFunc) ? findFunc : function(obj, index) { if (findFunc === obj) return index; }; + } + function getFindIndex(list, index, defaultIndex) { + return index == _null ? defaultIndex : index < 0 ? Math.max(list.length+index, 0) : Math.min(list.length, index); + } + function find(list, findFunc, startIndex, endIndex) { + var f = getFindFunc(findFunc); + var e = getFindIndex(list, endIndex, list.length); + var r; + for (var i = getFindIndex(list, startIndex, 0); i < e; i++) + if ((r = f.call(list, list[i], i)) != _null) + return r; + } + function findLast(list, findFunc, startIndex, endIndex) { + var f = getFindFunc(findFunc); + var e = getFindIndex(list, endIndex, -1); + var r; + for (var i = getFindIndex(list, startIndex, list.length-1); i > e; i--) + if ((r = f.call(list, list[i], i)) != _null) + return r; + } + function sub(list, startIndex, endIndex) { + var r = []; + if (list) { + var e = getFindIndex(list, endIndex, list.length); + for (var i = getFindIndex(list, startIndex, 0); i < e; i++) + r.push(list[i]); + } + return r; + } + function array(list) { + return map(list, nonOp); + } + function unite(list) { + return function() { + return new M(callList(list, arguments)); + }; + } + function uniq(list) { + var found = {}; + return filter(list, function(item) { + if (found[item]) + return false; + else + return found[item] = 1; + }); + } + function intersection(list, otherList) { + var keys = toObject(otherList, 1); + return filter(list, function(item) { + var r = keys[item]; + keys[item] = 0; + return r; + }); + } + function contains(list, value) { // TODO: can Array.indexOf be used in >IE8? + for (var i = 0; i < list.length; i++) + if (list[i] == value) + return true; + return false; + } + // equals if a and b have the same elements and all are equal. Supports getters. + function equals(x, y) { + var a = isFunction(x) ? x() : x; + var b = isFunction(y) ? y() : y; + var aKeys; + if (a == b) + return true; + else if (a == _null || b == _null) + return false; + else if (isValue(a) || isValue(b)) + return isDate(a) && isDate(b) && +a==+b; + else if (isList(a)) { + return (a.length == b.length) && + !find(a, function(val, index) { + if (!equals(val, b[index])) + return true; + }); + } + else { + return !isList(b) && + ((aKeys = keys(a)).length == keyCount(b)) && + !find(aKeys, function(key) { + if (!equals(a[key],b[key])) + return true; + }); + } + } + + function call(f, fThisOrArgs, args) { + if (isFunction(f)) + return f.apply(args && fThisOrArgs, map(args || fThisOrArgs, nonOp)); + } + function callList(list, fThisOrArgs, args) { + return map(list, function(f) { return call(f, fThisOrArgs, args);}); + } + function bind(f, fThis, beforeArgs, afterArgs) { + return function() { + return call(f, fThis, collect([beforeArgs, arguments, afterArgs], nonOp)); + }; + } + function partial(f, beforeArgs, afterArgs) { + return bind(f, this, beforeArgs, afterArgs); + } + function pad(digits, number) { + var signed = number < 0 ? '-' : ''; + var preDecimal = (signed?-number:number).toFixed(0); + while (preDecimal.length < digits) + preDecimal = '0' + preDecimal; + return signed + preDecimal; + } + + function processNumCharTemplate(tpl, input, fwd) { + var inHash; + var inputPos = 0; + var rInput = fwd ? input : reverse(input); + var s = (fwd ? tpl : reverse(tpl)).replace(/./g, function(tplChar) { + if (tplChar == '0') { + inHash = false; + return rInput.charAt(inputPos++) || '0'; + } + else if (tplChar == '#') { + inHash = true; + return rInput.charAt(inputPos++) || ''; + } + else + return inHash && !rInput.charAt(inputPos) ? '' : tplChar; + }); + return fwd ? s : (input.substr(0, input.length - inputPos) + reverse(s)); + } + + function getTimezone(match, idx, refDate) { // internal helper, see below + if (idx == _null || !match) + return 0; + return parseFloat(match[idx]+match[idx+1])*60 + parseFloat(match[idx]+match[idx+2]) + refDate.getTimezoneOffset(); + } + + // formats number with format string (e.g. "#.000", "#,#", "00000", "000.00", "000.000.000,00", "000,000,000.##") + // choice syntax: :|:|... + // e.g. 0:no item|1:one item|>=2:# items + // ="null" used to compare with nulls. + // choice also works with strings or bools, e.g. ERR:error|WAR:warning|FAT:fatal|ok + function formatValue(fmt, value) { + var format = replace(fmt, /^\?/); + if (isDate(value)) { + var timezone, match; + + if (match = /^\[(([+-])(\d\d)(\d\d))\]\s*(.*)/.exec(format)) { + timezone = match[1]; + value = dateAdd(value, 'minutes', getTimezone(match, 2, value)); + format = match[5]; + } + + return replace(format, /(\w)(\1*)(?:\[([^\]]+)\])?/g, function(s, placeholderChar, placeholderDigits, params) { + var val = FORMAT_DATE_MAP[placeholderChar]; + if (val) { + var d = value['get' + val[0]](); + var optionArray = (params && params.split(',')); + + if (isList(val[1])) + d = (optionArray || val[1])[d]; + else + d = val[1](d, optionArray, timezone); + if (d != _null && !isString(d)) + d = pad(placeholderDigits.length+1, d); + return d; + } + else + return s; + }); + + } + else + return find(format.split(/\s*\|\s*/), function(fmtPart) { + var match, numFmtOrResult; + if (match = /^([<>]?)(=?)([^:]*?)\s*:\s*(.*)$/.exec(fmtPart)) { + var cmpVal1 = value, cmpVal2 = +(match[3]); + if (isNaN(cmpVal2) || !isNumber(cmpVal1)) { + cmpVal1 = (cmpVal1==_null) ? "null" : toString(cmpVal1); // not ""+value, because undefined is treated as null here + cmpVal2 = match[3]; + } + if (match[1]) { + if ((!match[2] && cmpVal1 == cmpVal2 ) || + (match[1] == '<' && cmpVal1 > cmpVal2) || + (match[1] == '>' && cmpVal1 < cmpVal2)) + return _null; + } + else if (cmpVal1 != cmpVal2) + return _null; + numFmtOrResult = match[4]; + } + else + numFmtOrResult = fmtPart; + + if (isNumber(value)) + return numFmtOrResult.replace(/[0#](.*[0#])?/, function(numFmt) { + var decimalFmt = /^([^.]+)(\.)([^.]+)$/.exec(numFmt) || /^([^,]+)(,)([^,]+)$/.exec(numFmt); + var signed = value < 0 ? '-' : ''; + var numData = /(\d+)(\.(\d+))?/.exec((signed?-value:value).toFixed(decimalFmt ? decimalFmt[3].length:0)); + var preDecimalFmt = decimalFmt ? decimalFmt[1] : numFmt; + var postDecimal = decimalFmt ? processNumCharTemplate(decimalFmt[3], replace(numData[3], /0+$/), true) : ''; + + return (signed ? '-' : '') + + (preDecimalFmt == '#' ? numData[1] : processNumCharTemplate(preDecimalFmt, numData[1])) + + (postDecimal.length ? decimalFmt[2] : '') + + postDecimal; + }); + else + return numFmtOrResult; + }); + } + // returns date; null if optional and not set; undefined if parsing failed + function parseDate(fmt, date) { + var indexMap = {}; // contains reGroupPosition -> typeLetter or [typeLetter, value array] + var reIndex = 1; + var timezoneOffsetMatch; + var timezoneIndex; + var match; + + var format = replace(fmt, /^\?/); + if (format!=fmt && !trim(date)) + return _null; + + if (match = /^\[([+-])(\d\d)(\d\d)\]\s*(.*)/.exec(format)) { + timezoneOffsetMatch = match; + format = match[4]; + } + + var parser = new RegExp(format.replace(/(.)(\1*)(?:\[([^\]]*)\])?/g, function(wholeMatch, placeholderChar, placeholderDigits, param) { + if (/[dmhkyhs]/i.test(placeholderChar)) { + indexMap[reIndex++] = placeholderChar; + var plen = placeholderDigits.length+1; + return "(\\d"+(plen<2?"+":("{1,"+plen+"}"))+")"; + } + else if (placeholderChar == 'z') { + timezoneIndex = reIndex; + reIndex += 3; + return "([+-])(\\d\\d)(\\d\\d)"; + } + else if (/[Nna]/.test(placeholderChar)) { + indexMap[reIndex++] = [placeholderChar, param && param.split(',')]; + return "([a-zA-Z\\u0080-\\u1fff]+)"; + } + else if (/w/i.test(placeholderChar)) + return "[a-zA-Z\\u0080-\\u1fff]+"; + else if (/\s/.test(placeholderChar)) + return "\\s+"; + else + return escapeRegExp(wholeMatch); + })); + + if (!(match = parser.exec(date))) + return undef; + + var ctorArgs = [0, 0, 0, 0, 0, 0, 0]; + for (var i = 1; i < reIndex; i++) { + var matchVal = match[i]; + var indexEntry = indexMap[i]; + if (isList(indexEntry)) { // for a, n or N + var placeholderChar = indexEntry[0]; + var mapEntry = PARSE_DATE_MAP[placeholderChar]; + var ctorIndex = mapEntry[0]; + var valList = indexEntry[1] || mapEntry[1]; + var listValue = find(valList, function(v, index) { if (startsWith(matchVal.toLowerCase(), v.toLowerCase())) return index; }); + if (listValue == _null) + return undef; + if (placeholderChar == 'a') + ctorArgs[ctorIndex] += listValue * 12; + else + ctorArgs[ctorIndex] = listValue; + } + else if (indexEntry) { // for numeric values (yHmMs) + var value = parseFloat(matchVal); + var mapEntry = PARSE_DATE_MAP[indexEntry]; + if (isList(mapEntry)) + ctorArgs[mapEntry[0]] += value - mapEntry[1]; + else + ctorArgs[mapEntry] += value; + } + } + var d = new Date(ctorArgs[0], ctorArgs[1], ctorArgs[2], ctorArgs[3], ctorArgs[4], ctorArgs[5], ctorArgs[6]); + return dateAdd(d, 'minutes', -getTimezone(timezoneOffsetMatch, 1, d) - getTimezone(match, timezoneIndex, d)); + } + // format ?##00,00## + // returns number; null if optional and not set; undefined if parsing failed + function parseNumber(fmt, value) { + var format = replace(fmt, /^\?/); + if (format!=fmt && !trim(value)) + return _null; + var decSep = (/(^|[^0#.,])(,|[0#.]*,[0#]+|[0#]+\.[0#]+\.[0#.,]*)($|[^0#.,])/.test(format)) ? ',' : '.'; + var r = parseFloat(replace(replace(replace(value, decSep == ',' ? /\./g : /,/g), decSep, '.'), /^[^\d-]*(-?\d)/, '$1')); + return isNaN(r) ? undef : r; + } + function now() { + return new Date(); + } + function dateClone(date) { + return new Date(+date); + } + function capWord(w) { + return w.charAt(0).toUpperCase() + w.substr(1); + } + function dateAddInline(d, cProp, value) { + d['set'+cProp](d['get'+cProp]() + value); + return d; + } + function dateAdd(date, property, value) { + if (value == _null) + return dateAdd(now(), date, property); + return dateAddInline(dateClone(date), capWord(property), value); + } + function dateMidnight(date) { + var od = date || now(); + return new Date(od.getFullYear(), od.getMonth(), od.getDate()); + } + function dateDiff(property, date1, date2) { + var d1t = +date1; + var d2t = +date2; + var dt = d2t - d1t; + if (dt < 0) + return -dateDiff(property, date2, date1); + + var propValues = {'milliseconds': 1, 'seconds': 1000, 'minutes': 60000, 'hours': 3600000}; + var ft = propValues[property]; + if (ft) + return dt / ft; + + var cProp = capWord(property); + var calApproxValues = {'fullYear': 8.64e7*365, 'month': 8.64e7*365/12, 'date': 8.64e7}; // minimum values, a little bit below avg values + var minimumResult = Math.floor((dt / calApproxValues[property])-2); // -2 to remove the imperfections caused by the values above + + var d = dateAddInline(new Date(d1t), cProp, minimumResult); + for (var i = minimumResult; i < minimumResult*1.2+4; i++) { // try out 20% more than needed, just to be sure + if (+dateAddInline(d, cProp, 1) > d2t) + return i; + } + // should never ever be reached + } + + function ucode(a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + } + + function escapeJavaScriptString(s) { + return replace(s, /[\x00-\x1f'"\u2028\u2029]/g, ucode); + } + + // reimplemented split for IE8 + function split(str, regexp) { + + return str.split(regexp); + } + + function template(template, escapeFunction) { + if (templateCache[template]) + return templateCache[template]; + else { + var funcBody = 'with(_.isObject(obj)?obj:{}){'+ + map(split(template, /{{|}}}?/g), function(chunk, index) { + var match, c1 = trim(chunk), c2 = replace(c1, /^{/), escapeSnippet = (c1==c2) ? 'esc(' : ''; + if (index%2) { // odd means JS code + if (match = /^each\b(\s+([\w_]+(\s*,\s*[\w_]+)?)\s*:)?(.*)/.exec(c2)) + return 'each('+(trim(match[4])?match[4]:'this')+', function('+match[2]+'){'; + else if (match = /^if\b(.*)/.exec(c2)) + return 'if('+match[1]+'){'; + else if (match = /^else\b\s*(if\b(.*))?/.exec(c2)) + return '}else ' + (match[1] ? 'if('+match[2] +')' : '')+'{'; + else if (match = /^\/(if)?/.exec(c2)) + return match[1] ? '}\n' : '});\n'; + else if (match = /^(var\s.*)/.exec(c2)) + return match[1]+';'; + else if (match = /^#(.*)/.exec(c2)) + return match[1]; + else if (match = /(.*)::\s*(.*)/.exec(c2)) + return 'print('+escapeSnippet+'_.formatValue("'+escapeJavaScriptString(match[2])+'",'+(trim(match[1])?match[1]:'this')+(escapeSnippet&&')')+'));\n'; + else + return 'print('+escapeSnippet+(trim(c2)?c2:'this')+(escapeSnippet&&')')+');\n'; + } + else if (chunk){ + return 'print("'+escapeJavaScriptString(chunk)+'");\n'; + } + }).join('')+'}'; + var f = (new Function('obj', 'each', 'esc', 'print', '_', funcBody)); + var t = function(obj, thisContext) { + var result = []; + f.call(thisContext || obj, obj, function(obj, func) { + if (isList(obj)) + each(obj, function(value, index) { func.call(value, value, index); }); + else + eachObj(obj, function(key, value) { func.call(value, key, value); }); + }, escapeFunction || nonOp, function() {call(result['push'], result, arguments);}, _); + return result.join(''); + }; + if (templates.push(t) > MAX_CACHED_TEMPLATES) + delete templateCache[templates.shift()]; + return templateCache[template] = t; + } + } + + function escapeHtml(s) { + return replace(s, /[<>'"&]/g, function(s) { + return '&#'+s.charCodeAt(0)+';'; + }); + } + + function formatHtml(tpl, obj) { + return template(tpl, escapeHtml)(obj); + } + + function listBindArray(func) { + return function(arg1, arg2) { + return new M(func(this, arg1, arg2)); + }; + } + function listBind(func) { + return function(arg1, arg2, arg3) { + return func(this, arg1, arg2, arg3); + }; + } + function funcArrayBind(func) { + return function(arg1, arg2, arg3) { + return new M(func(arg1, arg2, arg3)); + }; + } + + ///#/snippet commonFunctions + ///#snippet webFunctions + + // note: only the web version has the f.item check + function isFunction(f) { + return typeof f == 'function' && !f['item']; // item check as work-around for webkit bug 14547 + } + + function isList(v) { + return v && v.length != _null && !isString(v) && !isNode(v) && !isFunction(v) && v !== _window; + } + + // used by IE impl of on() only + function push(obj, prop, value) { + (obj[prop] = (obj[prop] || [])).push(value); + } + // used by IE impl of on()/off() only + function removeFromArray(array, value) { + for (var i = 0; array && i < array.length; i++) + if (array[i] === value) + array['splice'](i--, 1); + } + + function extractNumber(v) { + return parseFloat(replace(v, /^[^\d-]+/)); + } + + // retrieves the node id of the element, create one if needed. + function getNodeId(el) { + return (el[MINIFIED_MAGIC_NODEID] = (el[MINIFIED_MAGIC_NODEID] || ++idSequence)); + } + + // collect variant that filters out duplicate nodes from the given list, returns a new array + function collectUniqNodes(list, func) { + var result = []; + var nodeIds = {}; + var currentNodeId; + + flexiEach(list, function(value) { + flexiEach(func(value), function(node) { + if (!nodeIds[currentNodeId = getNodeId(node)]) { + result.push(node); + nodeIds[currentNodeId] = true; + } + }); + }); + return result; + } + + // finds out the 'natural' height of the first element, the one if $$slide=1 + function getNaturalHeight(elementList, factor) { + var q = {'$position': 'absolute', '$visibility': 'hidden', '$display': 'block', '$height': _null}; + var oldStyles = elementList['get'](q); + var h = elementList['set'](q)['get']('clientHeight'); + elementList['set'](oldStyles); + return h*factor + 'px'; + } + + + + + // @condblock !ie8compatibility + function on(subSelector, eventSpec, handler, args, bubbleSelector) { + if (isFunction(eventSpec)) + return this['on'](_null, subSelector, eventSpec, handler, args); + else if (isString(args)) + return this['on'](subSelector, eventSpec, handler, _null, args); + else + return this['each'](function(baseElement, index) { + flexiEach(subSelector ? dollarRaw(subSelector, baseElement) : baseElement, function(registeredOn) { + flexiEach(toString(eventSpec).split(/\s/), function(namePrefixed) { + var name = replace(namePrefixed, /[?|]/g); + var prefix = replace(namePrefixed, /[^?|]/g); + var capture = (name == 'blur' || name == 'focus') && !!bubbleSelector; // bubble selectors for 'blur' and 'focus' registered as capuring! + var triggerId = idSequence++; + + // returns true if processing should be continued + function triggerHandler(eventName, event, target) { + var match = !bubbleSelector; + var el = bubbleSelector ? target : registeredOn; + if (bubbleSelector) { + var selectorFilter = getFilterFunc(bubbleSelector, registeredOn); + while (el && el != registeredOn && !(match = selectorFilter(el))) + el = el['parentNode']; + } + return (!match) || (name != eventName) || ((handler.apply($(el), args || [event, index]) && prefix=='?') || prefix == '|'); + }; + + function eventHandler(event) { + if (!triggerHandler(name, event, event['target'])) { + event['preventDefault'](); + event['stopPropagation'](); + } + }; + + registeredOn.addEventListener(name, eventHandler, capture); + + if (!registeredOn['M']) + registeredOn['M'] = {}; + registeredOn['M'][triggerId] = triggerHandler; // to be called by trigger() + + handler['M'] = collector(flexiEach, [handler['M'], function () { // this function will be called by off() + registeredOn.removeEventListener(name, eventHandler, capture); + delete registeredOn['M'][triggerId]; + }], nonOp); + + }); + }); + }); + } + // @condend !ie8compatibility + + + // @condblock !ie8compatibility + function off(handler) { + callList(handler['M']); + handler['M'] = _null; + } + // @condend !ie8compatibility + + // for remove & window.unload, IE only + function detachHandlerList(dummy, handlerList) { + flexiEach(handlerList, function(h) { + h.element.detachEvent('on'+h.eventType, h.handlerFunc); + }); + } + + function ready(handler) { + if (DOMREADY_HANDLER) + DOMREADY_HANDLER.push(handler); + else + setTimeout(handler, 0); + } + + function $$(selector, context, childrenOnly) { + return dollarRaw(selector, context, childrenOnly)[0]; + } + + function EE(elementName, attributes, children) { + var e = $(document.createElement(elementName)); + // @condblock UTIL + // this attributes != null check is only required with Util's isObject() implementation. Web's isObject() is simpler. + return (isList(attributes) || (attributes != _null && !isObject(attributes)) ) ? e['add'](attributes) : e['set'](attributes)['add'](children); + // @condend UTIL + // @cond !UTIL return (isList(attributes) || (!isObject(attributes)) ) ? e['add'](attributes) : e['set'](attributes)['add'](children); + } + + function clone(listOrNode) { + return collector(flexiEach, listOrNode, function(e) { + var c; + if (isList(e)) + return clone(e); + else if (isNode(e)) { + c = e['cloneNode'](true); + c['removeAttribute'] && c['removeAttribute']('id'); + return c; + } + else + return e; + }); + } + + /*$ + * @stop + */ + + function $(selector, context, childOnly) { + // @condblock ready + return isFunction(selector) ? ready(selector) : new M(dollarRaw(selector, context, childOnly)); + // @condend + // @cond !ready return new M(dollarRaw(selector, context)); + } + + // implementation of $ that does not produce a Minified list, but just an array + + + + + + + + + + + // @condblock !ie7compatibility + function dollarRaw(selector, context, childOnly) { + function flatten(a) { // flatten list, keep non-lists, remove nulls + return isList(a) ? collector(flexiEach, a, flatten) : a; + } + function filterElements(list) { // converts into array, makes sure context is respected + return filter(collector(flexiEach, list, flatten), function(node) { + var a = node; + while (a = a['parentNode']) + if (a == context[0] || childOnly) + return a == context[0]; + // fall through to return undef + }); + } + + if (context) { + if ((context = dollarRaw(context)).length != 1) + return collectUniqNodes(context, function(ci) { return dollarRaw(selector, ci, childOnly);}); + else if (isString(selector)) { + if (isNode(context[0]) != 1) + return []; + else + return childOnly ? filterElements(context[0].querySelectorAll(selector)) : context[0].querySelectorAll(selector); + } + else + return filterElements(selector); + + } + else if (isString(selector)) + return document.querySelectorAll(selector); + else + return collector(flexiEach, selector, flatten); + }; + // @condend !ie7compatibility + + // If context is set, live updates will be possible. + // Please note that the context is not evaluated for the '*' and 'tagname.classname' patterns, because context is used only + // by on(), and in on() only nodes in the right context will be checked + function getFilterFunc(selector, context) { + function wordRegExpTester(name, prop) { + var re = RegExp('(^|\\s+)' + name + '(?=$|\\s)', 'i'); + return function(obj) {return name ? re.test(obj[prop]) : true;}; + } + + var nodeSet = {}; + var dotPos = nodeSet; + if (isFunction(selector)) + return selector; + else if (isNumber(selector)) + return function(v, index) { return index == selector; }; + else if (!selector || selector == '*' || + (isString(selector) && (dotPos = /^([\w-]*)\.?([\w-]*)$/.exec(selector)))) { + var nodeNameFilter = wordRegExpTester(dotPos[1], 'tagName'); + var classNameFilter = wordRegExpTester(dotPos[2], 'className'); + return function(v) { + return isNode(v) == 1 && nodeNameFilter(v) && classNameFilter(v); + }; + } + else if (context) + return function(v) { + return $(selector, context)['find'](v)!=_null; // live search instead of node set, for on() + }; + else { + $(selector)['each'](function(node) { + nodeSet[getNodeId(node)] = true; + }); + return function(v) { + return nodeSet[getNodeId(v)]; + }; + } + } + + function getInverseFilterFunc(selector) { + var f = getFilterFunc(selector); + return function(v) {return f(v) ? _null : true;}; + } + ///#/snippet webFunctions + + ///#snippet extrasFunctions + function flexiEach(list, cb) { + if (isList(list)) + each(list, cb); + else if (list != _null) + cb(list, 0); + return list; + } + + function Promise() { + this['state'] = null; + this['values'] = []; + this['parent'] = null; + } + + /*$ + * @id promise + * @name _.promise() + * @syntax _.promise() + * @syntax _.promise(otherPromises...) + * @module WEB+UTIL + * + * Creates a new ##promiseClass#Promise##, optionally assimilating other promises. If no other promise is given, + * a fresh new promise is returned. + * + * The returned promise provides the methods ##fulfill() and ##reject() that can be called directly to change the promise's state, + * as well as the more powerful ##fire(). + * + * If one promise is given as parameter, the new promise assimilates the given promise as-is, and just forwards + * fulfillment and rejection with the original values. + * + * If more than one promise are given, it will assimilate all of them with slightly different rules: + *
  • the new promise is fulfilled if all assimilated promises have been fulfilled. The fulfillment values + * of all assimilated promises are given to the handler as arguments. Note that the fulfillment values themselves are always + * arrays, as a promise can have several fulfillment values in Minified's implementation.
  • + *
  • when one of the promises is rejected, the new promise is rejected immediately. The rejection handler gets the + * promises rejection value (first argument if it got several) as first argument, an array of the result values + * of all promises as a second (that means one array of arguments for each promise), and the index of the failed + * promise as third. + *
+ * + * @example A simple promise that is fulfilled after 1 second, using Minified's invocation syntax: + *
var p = _.promise();
+   * setTimeout(function() {
+   *     p.fire(true);
+   * }, 1000);
+   * 
+ * + * @example Request three files in parallel. When all three have been downloaded, concatenate them into a single string. + *
+   * var files = _('fileA.txt', 'fileA.txt', 'fileC.txt');
+   * var content;
+   * _.promise(files.map(function(file) {
+   *      return $.request('get', '/txts/' + file);
+   * })).then(function(fileRslt1, fileRslt2, fileRslt3) {
+   *      content = _(fileRslt1, fileRslt2, fileRslt3).map( function(result) { return result[0]; }).join('');
+   * }).error(function(status, response, xhr, url) {
+   *    alert('failed to load file '+url);
+   * });
+   * 
+ * + * @param otherPromises one or more promises to assimilate (varargs). You can also pass lists of promises. + * @return the new promise. + */ + function promise() { + var deferred = []; // this function calls the functions supplied by then() + + var assimilatedPromises = arguments; + var assimilatedNum = assimilatedPromises.length; + var numCompleted = 0; // number of completed, assimilated promises + var rejectionHandlerNum = 0; + + var obj = new Promise(); + + obj['errHandled'] = function() { + rejectionHandlerNum++; + if (obj['parent']) + obj['parent']['errHandled'](); + }; + + /*$ + * @id fire + * @name promise.fire() + * @syntax _.fire(newState) + * @syntax _.fire(newState, values) + * @module WEB+UTIL + * + * Changes the state of the promise into either fulfilled or rejected. This will also notify all ##then() handlers. If the promise + * already has a state, the call will be ignored. + * + * fire() can be invoked as a function without context ('this'). Every promise has its own instance. + * + * @example A simple promise that is fulfilled after 1 second, using Minified's invocation syntax: + *
var p = _.promise();
+     * setTimeout(function() {
+     *     p.fire(true, []);
+     * }, 1000);
+     * 
+ * + * @example Call fire() without a context: + *
var p = _.promise(function(resolve, reject) {
+     *     setTimeout(resolve.fire, 1000);
+     * });
+     * 
+ * + * @param newState true to set the Promise to fulfilled, false to set the state as rejected. If you pass null or + * undefined, the promise's state does not change. + * @param values optional an array of values to pass to ##then() handlers as arguments. You can also pass a non-list argument, which will then + * be passed as only argument. + * @return the promise + */ + var fire = obj['fire'] = function(newState, newValues) { + if (obj['state'] == null && newState != null) { + obj['state'] = !!newState; + obj['values'] = isList(newValues) ? newValues : [newValues]; + setTimeout(function() { + each(deferred, function(f) {f();}); + }, 0); + } + return obj; + }; + + // use promise varargs + each(assimilatedPromises, function assimilate(promise, index) { + try { + if (promise['then']) + promise['then'](function(v) { + var then; + if ((isObject(v) || isFunction(v)) && isFunction(then = v['then'])) + assimilate(v, index); + else { + obj['values'][index] = array(arguments); + if (++numCompleted == assimilatedNum) + fire(true, assimilatedNum < 2 ? obj['values'][index] : obj['values']); + } + }, + function(e) { + obj['values'][index] = array(arguments); + fire(false, assimilatedNum < 2 ? obj['values'][index] : [obj['values'][index][0], obj['values'], index]); + }); + else + promise(function() {fire(true, array(arguments));}, function() {fire(false, array(arguments)); }); + } + catch (e) { + fire(false, [e, obj['values'], index]); + } + }); + + /*$ + * @id stop + * @name promise.stop() + * @syntax promise.stop() + * @module WEB+UTIL + * Stops an ongoing operation, if supported. Currently the only promises supporting this are those returned by ##request(), ##animate(), ##wait() and + * ##asyncEach(). + * stop() invocation will be propagated over promises returned by ##then() and promises assimilated by ##promise(). You only need to invoke stop + * with the last promise, and all dependent promises will automatically stop as well. + * + * stop() can be invoked as a function without context ('this'). Every promise has its own instance. + * + * @return In some cases, the stop() can return a value. This is currently only done by ##animate() and ##wait(), which will return the actual duration. + * ##asyncEach()'s promise will also return any value it got from the promise that it stopped. + * + * @example Animation chain that can be stopped. + *
+     * var div = $('#myMovingDiv').set({$left: '0px', $top: '0px'});
+     * var prom = div.animate({$left: '200px', $top: '0px'}, 600, 0)
+     *    .then(function() {
+     *           return _.promise(div.animate({$left: '200px', $top: '200px'}, 800, 0),
+     *                            div.animate({$backgroundColor: '#f00'}, 200));
+     *    }).then(function() {
+     *           return div.animate({$left: '100px', $top: '100px'}, 400);
+     *    });
+     *
+     * $('#stopButton').on('click', prom.stop);
+     * 
+ */ + obj['stop'] = function() { + each(assimilatedPromises, function(promise) { + if (promise['stop']) + promise['stop'](); + }); + + return obj['stop0'] && call(obj['stop0']); + }; + + /*$ + * @id then + * @name promise.then() + * @syntax promise.then() + * @syntax promise.then(onSuccess) + * @syntax promise.then(onSuccess, onError) + * + * @module WEB + * Registers two callbacks that will be invoked when the ##promise#Promise##'s asynchronous operation finished + * successfully (onSuccess) or an error occurred (onError). The callbacks will be called after + * then() returned, from the browser's event loop. + * You can chain then() invocations, as then() returns another Promise object that you can attach to. + * + * The full distribution of Minified implements the Promises/A+ specification, allowing interoperability with other Promises frameworks. + * + * Note: If you use the Web module, you will get a simplified Promises implementation that cuts some corners. The most notable + * difference is that when a then() handler throws an exception, this will not be caught and the promise returned by + * then will not be automatically rejected. + * + * @example Simple handler for an HTTP request. Handles only success and ignores errors. + *
+     * $.request('get', '/weather.html')
+     *     .then(function(txt) {
+     *        alert('Got response!');
+     *     });
+     * 
+ * + * @example Including an error handler. + *
+     * $.request('get', '/weather.html')
+     *     .then(function(txt) {
+     *        alert('Got response!');
+     *     }, function(err) {
+     *        alert('Error!');
+     *     }));
+     * 
+ * + * @example Chained handler. + *
+     * $.request('get', '/weather.do')
+     *     .then(function(txt) {
+     *        showWeather(txt);
+     *     }
+     *     .then(function() {
+     *        return $.request('get', '/traffic.do');
+     *     }
+     *     .then(function(txt) {
+     *        showTraffic(txt);
+     *     }
+     *     .then(function() {
+     *        alert('All result displayed');
+     *     }, function() {
+     *        alert('An error occurred');
+     *     });
+     * 
+ * + * @param onSuccess optional a callback function to be called when the operation has been completed successfully. The exact arguments it receives depend on the operation. + * If the function returns a ##promise#Promise##, that Promise will be evaluated to determine the state of the promise returned by then(). If it returns any other value, the + * returned Promise will also succeed. If the function throws an error, the returned Promise will be in error state. + * Pass null or undefined if you do not need the success handler. + * @param onError optional a callback function to be called when the operation failed. The exact arguments it receives depend on the operation. If the function returns a ##promise#Promise##, that promise will + * be evaluated to determine the state of the Promise returned by then(). If it returns anything else, the returned Promise will + * have success status. If the function throws an error, the returned Promise will be in the error state. + * You can pass null or undefined if you do not need the error handler. + * @return a new ##promise#Promise## object. If you specified a callback for success or error, the new Promises's state will be determined by that callback if it is called. + * If no callback has been provided and the original Promise changes to that state, the new Promise will change to that state as well. + */ + var then = obj['then'] = function (onFulfilled, onRejected) { + var promise2 = promise(); + var callCallbacks = function() { + try { + var f = (obj['state'] ? onFulfilled : onRejected); + if (isFunction(f)) { + (function resolve(x) { + try { + var then, cbCalled = 0; + if ((isObject(x) || isFunction(x)) && isFunction(then = x['then'])) { + if (x === promise2) + throw new TypeError(); + then.call(x, function(x) { if (!cbCalled++) resolve(x); }, function(value) { if (!cbCalled++) promise2['fire'](false, [value]);}); + promise2['stop0'] = x['stop']; + } + else + promise2['fire'](true, [x]); + } + catch(e) { + if (!(cbCalled++)) { + promise2['fire'](false, [e]); + if (!rejectionHandlerNum) + throw e; + } + } + })(call(f, undef, obj['values'])); + } + else + promise2['fire'](obj['state'], obj['values']); + } + catch (e) { + promise2['fire'](false, [e]); + if (!rejectionHandlerNum) + throw e; + } + }; + if (isFunction(onRejected)) + obj['errHandled'](); + promise2['stop0'] = obj['stop']; + promise2['parent'] = obj; + if (obj['state'] != null) + setTimeout(callCallbacks, 0); + else + deferred.push(callCallbacks); + return promise2; + }; + + /*$ + * @id always + * @group REQUEST + * @name promise.always() + * @syntax promise.always(callback) + * @configurable default + * @module WEB+UTIL + * Registers a callback that will always be called when the ##promise#Promise##'s operation ended, no matter whether the operation succeeded or not. + * This is a convenience function that will call ##then() with the same function for both arguments. It shares all of its semantics. + * + * @example Simple handler for a HTTP request. + *
+     * $.request('get', '/weather.html')
+     *     .always(function() {
+     *        alert('Got response or error!');
+     *     });
+     * 
+ * + * @param callback a function to be called when the operation has been finished, no matter what its result was. The exact arguments depend on the operation and may + * vary depending on whether it succeeded or not. If the function returns a ##promise#Promise##, that Promise will + * be evaluated to determine the state of the returned Promise. If provided and it returns regularly, the returned promise will + * have success status. If it throws an error, the returned Promise will be in the error state. + * @return a new ##promise#Promise## object. Its state is determined by the callback. + */ + obj['always'] = function(func) { return then(func, func); }; + + /*$ + * @id error + * @group REQUEST + * @name promise.error() + * @syntax promise.error(callback) + * @configurable default + * @module WEB, UTIL + * Registers a callback that will be called when the operation failed. + * This is a convenience function that will invoke ##then() with only the second argument set. It shares all of its semantics. + * + * @example Simple handler for a HTTP request. + *
+     * $.request('get', '/weather.html')
+     *     .error(function() {
+     *        alert('Got error!');
+     *     });
+     * 
+ * + * @param callback a function to be called when the operation has failed. The exact arguments depend on the operation. If the function returns a ##promise#Promise##, that Promise will + * be evaluated to determine the state of the returned Promise. If it returns regularly, the returned Promise will + * have success status. If it throws an error, the returned Promise will be in error state. + * @return a new ##promise#Promise## object. Its state is determined by the callback. + */ + obj['error'] = function(func) { return then(0, func); }; + + return obj; + } + + ///#/snippet extrasFunctions + ///#snippet extrasDocs + /*$ + * @id length + * @group SELECTORS + * @requires dollar + * @name list.length + * @syntax length + * @module WEB, UTIL + * + * Contains the number of elements in the ##list#Minified list##. + * + * @example With Web module: + *
+   * var list = $('input');
+   * var myValues = {};
+   * for (var i = 0; i < list.length; i++)
+   *    myValues[list[i].name] = list[i].value;
+   * 
+ * + * @example With Util module: + *
+   * var list = _(1, 2, 3);
+   * var sum = 0;
+   * for (var i = 0; i < list.length; i++)
+   *    sum += list[i];
+   * 
+ */ + /*$ + * @stop + */ + ///#/snippet extrasDocs + + ///#snippet utilM + + /* + * syntax: M(list, assimilateSublists) + * M(null, singleElement) + * + * + */ + /** @constructor */ + function M(list, assimilateSublists) { + var self = this, idx = 0; + if (list) + for (var i = 0, len = list.length; i < len; i++) { + var item = list[i]; + if (assimilateSublists && isList(item)) + for (var j = 0, len2 = item.length; j < len2; j++) + self[idx++] = item[j]; + else + self[idx++] = item; + } + else + self[idx++] = assimilateSublists; + + self['length'] = idx; + self['_'] = true; + } + + function _() { + return new M(arguments, true); + } + + ///#/snippet utilM + + //// LIST FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + copyObj({ + ///#snippet utilListFuncs + /*$ + * @id each + * @group LIST + * @requires + * @configurable default + * @name .each() + * @altname _.each() + * @syntax list.each(callback) + * @syntax list.each(callback, ctx) + * @syntax _.each(list, callback) + * @syntax _.each(list, callback, ctx) + * @module UTIL, WEB + * Invokes the given function once for each item in the list. The function will be called with the item as first parameter and + * the zero-based index as second. Unlike JavaScript's built-in forEach() it will be invoked for each item in the list, + * even if it is undefined. + * + * @example Creates the sum of all list entries. + *
+     * var sum = 0;
+     * _(17, 4, 22).each(function(item, index) {
+     *     sum += item;
+     * });
+     * 
+ * + * @example The previous example with a native array: + *
+     * var sum = 0;
+     * _.each([17, 4, 22], function(item, index) {
+     *     sum += item;
+     * });
+     * 
+ * + * @example This goes through all h2 elements of the class 'section' on a web page and changes their content: + *
+     * $('h2.section').each(function(item, index) {
+     *     item.innerHTML = 'Section ' + index + ': ' + item.innerHTML;
+     * });
+     * 
+ * + * @param list a list to iterate. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param callback The callback function(item, index) to invoke for each list element. + *
item
The current list element.
+ *
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ * The callback's return value will be ignored. + * @param ctx optional a context to pass to the callback as 'this'. Only supported in UTIL module. + * @return the list + * + * @see ##per() works like each(), but wraps the list elements in a list. + * @see ##find() can be used instead of each() if you need to abort the loop. + * @see ##eachObj() iterates through the properties of an object. + */ + 'each': listBind(each), + + /*$ + * @id filter + * @group LIST + * @requires + * @configurable default + * @name .filter() + * @altname _.filter() + * @syntax list.filter(filterFunc) + * @syntax list.filter(filterFunc, ctx) + * @syntax list.filter(value) + * @syntax _.filter(list, filterFunc) + * @syntax _.filter(list, filterFunc, ctx) + * @syntax _.filter(list, value) + * @module WEB, UTIL + * Creates a new ##list#Minified list## by taking an existing list and omitting certain elements from it. You + * can either specify a callback function to approve those items that will be in the new list (all modules), or + * you can pass a value to remove from the new list (Util module only). + * + * If the callback function returns true, the item is shallow-copied in the new list, otherwise it will be removed. + * For values, a simple equality operation (==) will be used. + * + * @example Removing all instances of the number 10 from a list: + *
+     * var list = _([4, 10, 22, 7, 2, 19, 10]).filter(10);
+     * 
+ * + * @example Removing all numbers over 10 from a list: + *
+     * var list = _([4, 22, 7, 2, 19]).filter(function(item, index) {
+     *     return item <= 10;
+     * });
+     * 
+ * + * @example The previous example with a native array is input. Note that the result is always a ##list#Minified list##: + *
+     * var list = _.filter([4, 22, 7, 2, 19], function(item, index) {
+     *     return item <= 10;
+     * });
+     * 
+ * + * @example Creates a list of all unchecked checkboxes on a web page: + *
+     * var list = $('input').filter(function(item, index) {
+     *     return item.getAttribute('type') == 'checkbox' && item.checked;
+     * });
+     * 
+ * + * @param list a list to filter. A list to use as input. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param filterFunc The filter callback function(item, index) that decides which elements to include: + *
item
The current list element.
+ *
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ *
(callback return value)
true to include the item in the new list, false to omit it.
+ * @param ctx optional a context to pass to the callback as 'this'. Only supported in UTIL module. + * @param value a value to remove from the list. It will be determined which elements to remove using ==. Must not + * be a function. Requires Util module. + * @return the new, filtered ##list#list## + * + * @see ##only() offers selector-based filtering. + */ + 'filter': listBindArray(filter), + + /*$ + * @id map + * @group LIST + * @requires + * @configurable default + * @name .map() + * @altname _.map() + * @syntax list.map(mapFunc) + * @syntax list.map(mapFunc, ctx) + * @syntax _.map(list, mapFunc) + * @syntax _.map(list, mapFunc, ctx) + * @module UTIL + * Creates a new ##list#Minified list## from the current list using the given callback function. + * The callback is invoked once for each element of the current list. The callback results will be added to the result list. + * + * map() is a simpler version of ##collect(). Unlike collect(), it always creates lists of the same size as the input list, but + * it is easier to use if the resulting list should contain nulls or nested list. + * + * @example Goes through a list of numbers and creates a new list with each value increased by 1: + *
+     * var inced = _(3, 7, 11, 5, 19, 3).map(function(number, index) {
+     *     return number + 1;
+     * });
+     * 
+ * + * @example The previous example with a native array is input. Note that the result is always a ##list#Minified list##: + *
+     * var inced = _.map([3, 7, 11, 5, 19, 3], function(number, index) {
+     *     return number + 1;
+     * });
+     * 
+ * + * @param list a list to transform. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param mapFunc The callback function(item, index) to invoke for each item: + *
item
The current list element.
index
The second the zero-based index of the current element.
+ *
this
The given context if not null. Otherwise the list.
+ *
(callback return value)
This value will replace the original value in the new list.
+ * @param ctx optional a context to pass to the callback as 'this'. + * @return the new ##list#list## + * + * @see ##collect() is a more powerful version of map(). + */ + 'map': listBindArray(map), + + /*$ + * @id find + * @group LIST + * @requires + * @configurable default + * @name .find() + * @altname _.find() + * @syntax list.find(findFunc) + * @syntax list.find(element) + * @syntax list.find(findFunc, startIndex) + * @syntax list.find(element, startIndex) + * @syntax _.find(list, findFunc) + * @syntax _.find(list, element) + * @syntax _.find(list, findFunc, startIndex) + * @syntax _.find(list, element, startIndex) + * @module WEB, UTIL + * Finds a specific value in the list. There are two ways of calling find(): + *
    + *
  1. With a value as argument. Then find() will search for the first occurrence of an identical value in the list, + * using the '===' operator for comparisons, and return the index. If it is not found, + * find() returns undefined.
  2. + *
  3. With a callback function. find() will then call the given function for each list element until the function + * returns a value that is not null or undefined. This value will be returned.
  4. + *
+ * + * find() can also be used as an alternative to ##each() if you need to abort the loop. + * + * @example Finds the first negative number in the list: + *
+     * var i = _(1, 2, -4, 5, 2, -1).find(function(value, index) { if (value < 0) return index; }); // returns 2
+     * 
+ + * @example Finds the index of the first 5 in the array: + *
+     * var i = _.find([3, 6, 7, 6, 5, 4, 5], 5); // returns 4 (index of first 5)
+     * 
+ * + * @example Determines the position of the element with the id '#wanted' among all li elements: + *
+     * var elementIndex = $('li').find($$('#wanted'));
+     * 
+ * + * @example Goes through the elements to find the first div that has the class 'myClass', and returns this element: + *
+     * var myClassElement = $('div').find(function(e) { if ($(e).is('.myClass')) return e; });
+     * 
+ * + * @param list A list to use as input. Can be an array, a ##list#Minified list## or any other array-like structure with + * length property. + * @param findFunc The callback function(item, index) that will be invoked for every list item until it returns a non-null value: + *
item
The current list element.
index
The second the zero-based index of the current element.
+ *
this
This list.
+ *
(callback return value)
If the callback returns something other than null or + * undefined, find() will return it directly. Otherwise it will continue.
+ * @param element the element to search for + * @param startIndex optional the 0-based index of the first element to search. + * @return if called with an element, either the element's index in the list or undefined if not found. If called with a callback function, + * it returns either the value returned by the callback or undefined. + * + * @see ##findLast() is the equivalent to find() for the list's end. + */ + 'find': listBind(find), + + /*$ + * @stop + */ + dummySort:0 + , + ///#/snippet utilListFuncs + ///#snippet webListFuncs + + /*$ + * @id add + * @group ELEMENT + * @requires dollar each + * @configurable default + * @name .add() + * @syntax list.add(text) + * @syntax list.add(node) + * @syntax list.add(list) + * @syntax list.add(factoryFunction) + * @module WEB + * Adds the given node(s) as children to the list's HTML elements. If a string has been given, it will be added as text node. + * DOM nodes will be added directly. If you pass a list, all its elements will be added using the rules above. + * + * When you pass a DOM node and the target list has more than one element, the original node will be added to the first list element, + * and ##clone#clones## to all following list elements. + * + * ##EE(), ##HTML() and ##clone() are compatible with add() and can help you create new HTML nodes. + * + * @example Using the following HTML: + *
+     * <div id="comments">Here is some text.<br/></div>
+     * 
+ * The next line appends a text node to the div: + *
+     * $('#comments').add('Some additional text.');
+     * 
+ * This results in: + *
+     * <div id="comments">Here is some text.<br/>Some additional text.</div>
+     * 
+ * + * @example Using the following HTML: + *
+     * <ul id="myList">
+     *   <li>First list entry</li>
+     *   <li>Second list entry</li>
+     * </ul>
+     * 
+ * The following Javascript adds an element to the list: + *
+     * $('#myList').add(EE('li', 'My extra point');
+     * 
+ * This results in + *
+     * <ul id="myList">
+     *   <li>First list entry</li>
+     *   <li>Second list entry</li>
+     *   <li>My extra point</li>
+     * </ul>
+     * 
+ * + * @example Use a list to add several elements at once: + *
+     * $('#comments').add([
+     *      EE('br'),
+     *     'Some text',
+     *     EE('span', {'className': 'highlight'}, 'Some highlighted text')
+     * ]);
+     * 
+ * + * @example If you need to customize the content, you can write a factory function: + *
+     * $('.chapter').add(function(parent, index) { return EE('h2', 'Chapter number ' + index); });
+     * 
+ * + * @param text a string or number to add as text node + * @param node a DOM node to add to the list. If the list has more than one element, the given node will be added to the first element. + * For all additional elements, the node will be cloned using ##clone(). + * @param list a list containing text and/or nodes. May also contain nested lists with nodes or text.. + * @param factoryFunction a function(listItem, listIndex) that will be invoked for each list element to create the nodes: + *
listItem
The list element that will receive the new children.
+ *
listIndex
The index of the list element that will receive the new children.
+ *
(callback return value)
The node(s) to be added to the list element. + * Can be either a string for a text node, an HTML element or a list containing strings and/or DOM nodes. + * If a function is returned, it will be invoked recursively with the same arguments.
+ * @return the current list + * + * @see ##fill() works like add(), but deletes all children before adding the new nodes. + * @see ##addFront() adds nodes as first child, not as last. + * @see ##addAfter() adds nodes not as children but as siblings. + * @see ##addBefore() also adds nodes not as children but as siblings. + * @see ##replace() replaces existing nodes. + */ + 'add': function (children, addFunction) { + return this['each'](function(e, index) { + var lastAdded; + function appendChildren(c) { + if (isList(c)) + flexiEach(c, appendChildren); + else if (isFunction(c)) + appendChildren(c(e, index)); + else if (c != _null) { // must check null, as 0 is a valid parameter + var n = isNode(c) ? c : document.createTextNode(c); + if (lastAdded) + lastAdded['parentNode']['insertBefore'](n, lastAdded['nextSibling']); + else if (addFunction) + addFunction(n, e, e['parentNode']); + else + e.appendChild(n); + lastAdded = n; + } + } + appendChildren(index &&!isFunction(children) ? clone(children) : children); + }); + }, + + /*$ + * @id on + * @group EVENTS + * @requires dollar each + * @configurable default + * @name .on() + * @syntax list.on(names, eventHandler) + * @syntax list.on(selector, names, eventHandler) + * @syntax list.on(names, customFunc, args) + * @syntax list.on(selector, names, customFunc, args) + * @syntax list.on(names, eventHandler, bubbleSelector) + * @syntax list.on(names, customFunc, args, bubbleSelector) + * @module WEB + * Registers the function as event handler for all items in the list. + * + * By default, Minified cancels event propagation and disables element's default behavior for all elements that have an event handler. + * You can override this, either by prefixing the event name with a '|', or by prefixing them with '?' and returning a true + * in the handler. Both will reinstate the original JavaScript behavior. + * + * Handlers are called with the original event object as first argument, the index of the source element in the + * list as second argument and 'this' set to the source element of the event (e.g. the button that has been clicked). + * + * Instead of the event objects, you can also pass an array of arguments that will be passed instead of event object and index. + * + * Optionally you can specify two a selector strings to qualify only certain events. The first one is a selector + * that allows you to select only specific children of the list elements. This is mostly useful for adding events to DOM trees + * generated using ##HTML() or ##EE(). + * + * The second type of selector is the bubble selector that allows you to receive only events that bubbled up from + * elements matching the selector. The selector is executed in the context of the element you registered on to identify whether the + * original target of the event qualifies. If not, the handler is not called. + * + * Minified always registers event handlers with event bubbling enabled. Event capture is not supported. + * + * Event handlers can be unregistered using #off#$.off(). + * + * @example Adds a handler to all divs which paints the div background color to red when clicked. + *
+     * $('div').on('click', function() {
+     *    this.style.backgroundColor = 'red';    // 'this' contains the element that caused the event
+     * });
+     * 
+ * + * @example Registers a handler to call a method setStatus('running') using an inline function: + *
+     * $('#myButton').on('click', function() {
+     *    setStatus('running');
+     * });
+     * 
+ * The previous example can bere written like this, using on()'s args parameter: + *
+     * $('#myButton').on('click', setStatus, ['running']);
+     * 
+ * + * @example Adds two handlers on an input field. The event names are prefixed with '|' and thus keep their original behavior: + *
+     * $('#myInput').on('|keypress |keydown', function() {
+     *    // do something
+     * });
+     * 
+ * + * @example Adds a click handler that will abort the operation by returning false, unless the user confirms it: + *
+     * $('#myLink').on('?click', function() {
+     *    return window.confirm('Really leave?');
+     * });
+     * 
+ * + * @example Adds a button and registers a click handler for it using a sub-selector. + *
+     * $('#myForm').add(HTML("<li><button>click me</button></li>").on('button', 'click', myClickHandler));
+     * 
+ * + * @example Adds listeners for all clicks on a table's rows using the bubble selector 'tr'. + *
+     * $('#table').on('change', 'tr', function(event, index, selectedIndex) {
+     *    alert("Click on table row number: " + selectedIndex);
+     * }, 'tr');
+     * 
+ * Please note that bubble selectors will even listen to events for + * table rows that have been added after you registered for the events. + * + * @param selector optional a selector string for ##dollar#$()## to register the event only on those children of the list elements that + * match the selector. + * Supports all valid parameters for $() except functions. + * @param names the space-separated names of the events to register for, e.g. 'click'. Case-sensitive. The 'on' prefix in front of + * the name must not used. You can register the handler for more than one event by specifying several + * space-separated event names. If the name is prefixed + * with '|' (pipe), the event will be passed through and the event's default actions will be executed by the browser. + * If the name is prefixed with '?', the event will only be passed through if the handler returns true. + * @param eventHandler the callback function(event, index) to invoke when the event has been triggered: + *
+ *
event
The original DOM event object.
+ *
index
The index of the target object in the ##list#Minified list## .
+ *
this
A ##list#Minified list## containing the target element as only item (same as event.target).
+ *
(callback return value)
The return value will only be used if the event name prefix was '?'. + * Then, a return value false will stop all further processing of the event and disable event bubbling. + * true will keep the event alive.
+ *
+ * @param customFunc a function to be called instead of a regular event handler with the arguments given in args. + * 'this' will be a ##list#Minified list## containing the target element as only item (same element as event.target). + * @param args optional an array of arguments to pass to the custom callback function instead of the event objects. If omitted, the function is + * called as event handler with the event object as argument. + * @param bubbleSelector optional a selector string for ##dollar#$()## to receive only events that bubbled up from an + * element that matches this selector. + * Supports all valid parameters for $() except functions. Analog to ##is(), + * the selector is optimized for the simple patterns '.classname', 'tagname' and 'tagname.classname'. + * @return the list + * @see ##off() allows you to unregister an event handler. + * @see ##onClick() as a shortcut for 'click' events. + * @see ##onOver() to simplify mouseover/mouseout events. + * @see ##onFocus() as convenient way to register for focus events. + * @see ##onChange() to get notified when an input's content changes. + */ + 'on': on, + + /*$ + * @id trigger + * @group EVENTS + * @requires on each + * @configurable default + * @name .trigger() + * @syntax list.trigger(name) + * @syntax list.trigger(name, eventObject) + * @module WEB + * + * Triggers event handlers registered with ##on(). + * Any event that has been previously registered using ##on() can be invoked with trigger(). Please note that + * it will not simulate the default behavior on the elements, such as a form submit when you click on a submit button. Event bubbling + * is supported, thus unless there's an event handler that cancels the event, the event will be triggered on all parent elements. + * + * + * @example Simulates a 'click' event on the button. + *
+     * $('#myButton').trigger('click');
+     * 
+ * + * @param name a single event name to trigger + * @param eventObj optional an object to pass to the event handler, provided the handler does not have custom arguments. + * Anything you pass here will be directly given to event handlers as event object, so you need to know what + * they expect. + * @return the list + * @see ##on() registers events that can be triggered. + */ + 'trigger': function (eventName, eventObj) { + return this['each'](function(element, index) { + var bubbleOn = true, el = element; + while(el && bubbleOn) { + eachObj(el['M'], function(id, f) { + bubbleOn = bubbleOn && f(eventName, eventObj, element); + }); + el = el['parentNode']; + } + }); + } + + /*$ + * @stop + */ + // @cond !trigger dummyTrigger:0 + , + ///#/snippet webListFuncs + ///#snippet extrasListFuncs + + /*$ + * @stop + */ + dummyHt:0 + ///#/snippet extrasListFuncs + }, M.prototype); + + //// DOLLAR FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + copyObj({ + ///#snippet webDollarFuncs + /*$ + * @id request + * @group REQUEST + * @requires + * @configurable default + * @name $.request() + * @syntax $.request(method, url) + * @syntax $.request(method, url, data) + * @syntax $.request(method, url, data, settings) + * @module WEB + * Initiates a HTTP request to the given URL, using XMLHttpRequest. It returns a ##promiseClass#Promise## object that allows you to obtain the result. + * + * @example Invokes a REST web service and parses the resulting document using JSON: + *
+     * $.request('get', 'http://service.example.com/weather', {zipcode: 90210})
+     *    .then(function(txt) {
+     *         var json = $.parseJSON(txt);
+     *         $('#weatherResult').fill('Today's forecast is is: ' + json.today.forecast);
+     *    })
+     *    .error(function(status, statusText, responseText) {
+     *         $('#weatherResult').fill('The weather service was not available.');
+     *    });
+     * 
+ * + * @example Sending a JSON object to a REST web service: + *
+     * var myRequest = {         // create a request object that can be serialized via JSON
+     *      request: 'register',
+     *      entries: [
+     *        {name: 'Joe',
+     *      	    job: 'Plumber'
+     *        }
+     *      ]};
+     *
+     * function failureHandler() {
+     *   $('#registrationResult').fill('Registration failed');
+     * }
+     *
+     * $.request('post', 'http://service.example.com/directory', $.toJSON(myRequest))
+     *     .then(function(txt) {
+     *        if (txt == 'OK')
+     *             $('#registrationResult').fill('Registration succeeded');
+     *        else
+     *              failureHandler();
+     *        })
+     *     .error(failureHandler);
+     * 
+ * + * @example Using HTTP authentication and a custom XMLHttpRequest property. + *
var handler = $.request('get', 'http://service.example.com/userinfo', null, {xhr: {withCredentials: true}, user: 'me', pass: 'secret'});
+ * + * + * @param method the HTTP method, e.g. 'get', 'post' or 'head' (rule of thumb: use 'post' for requests that change data + * on the server, and 'get' to request data). Not case sensitive. + * @param url the server URL to request. May be a relative URL (relative to the document) or an absolute URL. Note that unless you do something + * fancy on the server (keyword to google: Access-Control-Allow-Origin), you can only call URLs on the server your script originates from. + * @param data optional data to send in the request, either as POST body or as URL parameters. It can be either a plain object as map of + * parameters (for all HTTP methods), a string (for all HTTP methods), a DOM document ('post' only) or a FormData object ('post' only). + * If the method is 'post', it will be sent as body, otherwise parameters are appended to the URL. In order to send several parameters with the + * same name, use an array of values in the map. Use null as value for a parameter without value. + * @param settings optional a map of additional parameters. Supports the following properties (all optional): + *
headers
a map of HTTP headers to add to the request. Note that you should use the proper capitalization for the + * header 'Content-Type', if you set it, because otherwise it may be overwritten.
+ *
xhr
a map of properties to set in the XMLHttpRequest object before the request is sent, for example {withCredentials: true}.
+ *
user
username for HTTP authentication, together with the pass parameter
+ *
pass
password for HTTP authentication, together with the user parameter
+ *
+ * @return a ##promiseClass#Promise## containing the request's status. If the request has successfully completed with a HTTP status 2xx, + * the promise's completion handler will be called as function(text, xhr): + *
text
The response sent by the server as text.
+ *
xhr
The XMLHttpRequest used for the request. This allows you to retrieve the response in different + * formats (e.g. responseXml for an XML document), to retrieve headers and more.
+ * The failure handler will be called as function(statusCode, statusText, text): + *
statusCode
The HTTP status (never 200; 0 if no HTTP request took place).
+ *
text
The response's body text, if there was any, or the exception as string if the browser threw one.
+ *
xhr
The XMLHttpRequest used for the request. This allows you to retrieve the response in different + * formats (e.g. responseXml for an XML document), to retrieve headers and more..
+ * The returned promise supports ##stop(). Calling stop() will invoke the XHR's abort() method. + * The underlying XmlHttpRequest can also be obtained from the promise's xhr property. + * + * @see ##values() serializes an HTML form in a format ready to be sent by $.request. + * @see ##$.parseJSON() can be used to parse JSON responses. + * @see ##$.toJSON() can create JSON messages. + * @see ##_.format() can be useful for creating REST-like URLs, if you use JavaScript's built-in escape() function. + */ + 'request': function (method, url, data, settings0) { + var settings = settings0 || {}; + var xhr, callbackCalled = 0, prom = promise(), dataIsMap = data && (data['constructor'] == settings['constructor']); + try { + prom['xhr'] = xhr = new XMLHttpRequest(); + + prom['stop0'] = function() { xhr['abort'](); }; + // @condend + + if (dataIsMap) { // if data is parameter map... + data = collector(eachObj, data, function processParam(paramName, paramValue) { + return collector(flexiEach, paramValue, function(v) { + return encodeURIComponent(paramName) + ((v != _null) ? '=' + encodeURIComponent(v) : ''); + }); + }).join('&'); + } + + if (data != _null && !/post/i.test(method)) { + url += '?' + data; + data = _null; + } + + xhr['open'](method, url, true, settings['user'], settings['pass']); + if (dataIsMap && /post/i.test(method)) + xhr['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded'); + + eachObj(settings['headers'], function(hdrName, hdrValue) { + xhr['setRequestHeader'](hdrName, hdrValue); + }); + eachObj(settings['xhr'], function(name, value) { + xhr[name] = value; + }); + + xhr['onreadystatechange'] = function() { + if (xhr['readyState'] == 4 && !callbackCalled++) { + if (xhr['status'] >= 200 && xhr['status'] < 300) + prom['fire'](true, [xhr['responseText'], xhr]); + else + prom['fire'](false, [xhr['status'], xhr['responseText'], xhr]); + } + }; + + xhr['send'](data); + } + catch (e) { + if (!callbackCalled) + prom['fire'](false, [0, _null, toString(e)]); + } + + return prom; + }, + + /* + * JSON Module. Uses browser built-ins or json.org implementation if available. Otherwise its own implementation, + * originally based on public domain implementation http://www.JSON.org/json2.js / http://www.JSON.org/js.html. + * Extremely simplified code, made variables local, removed all side-effects (especially new properties for String, Date and Number). + */ + + /*$ + * @id ready + * @group EVENTS + * @requires ready_vars ready_init + * @configurable default + * @name $.ready() + * @syntax $.ready(handler) + * @module WEB + * Registers a handler to be called as soon as the HTML has been fully loaded in the browser. Does not necessarily wait for images and other elements, + * only the main HTML document needs to be complete. On older browsers it is the same as window.onload. + * + * If you call ready() after the page is completed, the handler is scheduled for invocation in the event loop as soon as possible. + * + * A shortcut for ready() is to call ##dollar#$()## with the handler function. It does the same with fewer characters. + * + * @example Registers a handler that sets some text in an element: + *
+     * $.ready(function() {
+     *   $('#someElement').fill('ready() called');
+     * });
+     * 
+ * + * @param handler the function() to be called when the HTML is ready. + * @see ##dollar#$()## calls ready() when invoked with a function, offering a more convenient syntax. + */ + 'ready': ready, + + /*$ + * @stop + */ + dummyOff:null + , + ///#/snippet webDollarFuncs + ///#snippet extrasDollarFuncs + + /*$ + * @id wait + * @group EVENTS + * @configurable default + * @requires promise + * @name $.wait() + * @syntax $.wait() + * @syntax $.wait(durationMs) + * @syntax $.wait(durationMs, args) + * @module WEB+UTIL + * + * Creates a new ##promise#Promise## that will be fulfilled as soon as the specified number of milliseconds have passed. This is mainly useful for animation, + * because it allows you to chain delays into your animation chain. + * + * The operation can be interrupted by calling the promise's ##stop() function. + * + * @example Chained animation using Promise callbacks. The element is first moved to the position 200/0, then to 200/200, waits for 50ms + * and finally moves to 100/100. + *
+     * var div = $('#myMovingDiv').set({$left: '0px', $top: '0px'});
+     * div.animate({$left: '200px', $top: '0px'}, 600, 0)
+     *    .then(function() {
+     *           div.animate({$left: '200px', $top: '200px'}, 800, 0);
+     *    }).then(function() {
+     *    	     return _.wait(50);
+     *    }).then(function() {
+     *           div.animate({$left: '100px', $top: '100px'}, 400);
+     *    });
+     * });
+     * 
+ * + * + * @param durationMs optional the number of milliseconds to wait. If omitted, the promise will be fulfilled as soon as the browser can run it + * from the event loop. + * @param args optional an array or list of arguments to pass to the promise handler + * @return a ##promise#Promise## object that will be fulfilled when the time is over, or fail when the promise's ##stop() has been called. + * The promise argument of a fulfilled promise is the args parameter as given to wait(). The returned promise supports ##stop() + * to interrupt the promise. + */ + 'wait': function(durationMs, args) { + var p = promise(); + var id = setTimeout(function() { + p['fire'](true, args); + }, durationMs); + p['stop0'] = function() { p['fire'](false); clearTimeout(id); }; + return p; + } + + /*$ + * @stop + */ + // @cond !wait dummyWait:0 + + ///#/snippet extrasDollarFuncs + }, $); + + //// UNDERSCORE FUNCTIONS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + copyObj({ + ///#snippet utilUnderscoreFuncs + // @condblock filter + 'filter': funcArrayBind(filter), + // @condend + // @condblock map + 'map': funcArrayBind(map), + // @condend + // @condblock each + 'each': each, + // @condend + // @condblock each + 'toObject': toObject, + // @condend + // @condblock find + 'find': find, + // @condend + + /*$ + * @id extend + * @group OBJECT + * @requires + * @configurable default + * @name _.extend() + * @syntax _.extend(target, src...) + * @module UTIL + * Copies every property of the source objects into the first object. The source objects are specified using variable arguments. + * There can be more than one. + * The properties are copied as shallow-copies. + * + * Please note: Unlike jQuery, extend does not directly add a function to extend Minified, although + * you can use it to for this. To add a function to ##list#Minified lists##, add a property to + * ##M#MINI.M##. If you want to extend $ or _, just assign the new function(s) as property. + * + * @example Copying properties: + *
var target = {a:3, c: 3};
+     * _.extend(target, {a: 1, b: 2}); // target is now {a: 1, b: 2, c: 3}
+ * + * @example Using several source values: + *
var extend = _.extend({a: 1, b: 2}, {a:3, c: 3}, {d: 5}); // target is now {a: 1, b: 2, c: 3, d: 5}
+ * + * @param target the object to copy to + * @param src the object(s) to copy from. Variable argument, there can be any number of sources. Nulls and undefined + * parameters will be ignored. + * @return the target + * + * @see ##_.copyObj() is very similar to extend(), but with a slightly different and more straightforward syntax. + * @see ##_.merge() copies a list of objects into a new object. + */ + 'extend': function(target) { + return merge(sub(arguments, 1), target); + }, + + /*$ + * @id template + * @group FORMAT + * @requires date_constants + * @configurable default + * @name _.template() + * @syntax _.template(template) + * @syntax _.template(template, escapeFunction) + * @module UTIL + * Parses a Handlebars-like template to create a reusable template function. + * + * The syntax of the template uses a syntax that superficially looks like + * Handlebars. Unlike Handlebars, it is based on raw JavaScript expressions and thus gives you + * complete freedom, but also offers you shortcuts for formatting, iteration and conditionals. + * + * Every template can receive exactly one object as input. If you need more than one value as input, put all required values + * into an object. + * + * Use double curly braces to embed a JavaScript expression and insert its result: + *
{{a}} plus {{b}} is {{a+b}}
+ * + * To use such a template, create it with template() and then execute the resulting function: + *
var myTemplate = _.template('{{a}} plus {{b}} is {{a+b}}');
+     * var result = myTemplate({a: 5, b: 7});
+ * If you pass an object as input, its properties will be mapped using JavaScript's with + * statement and are available as variables throughout the template. + * + * If you have only a simple value to render, you can pass it directly and access it through the pre-defined + * variable obj: + *
var myTemplate = _.template('The result is {{obj}}.');
+     * var result = myTemplate(17);
+ * Alternatively, you could also access the input as this, but be aware that JavaScript wraps simples types + * such as Number and Boolean. this is the default, so you can omit it to get the same result: + *
var myTemplate = _.template('The result is {{ }}.');
+     * var result = myTemplate(17);
+ * + * Minified templates can use ##_.formatValue() formats directly. Just separate them from the expression by + * a double-colon: + *
The price is {{obj::#.00}}.
+ * + * Conditions can be expressed using if and else: + *
Hello {{if visits==0}}New{{else if visits<10}}Returning{{else}}Regular{{/if}} Customer.
+ * You can use any JavaScript expression as condition. + * + * Use each to iterate through a list: + *
var myTemplate = _.template(
+     * 	   '{{each names}}{{this.firstName}} {{this.lastName}}{{/each}}');
+     * var result = myTemplate({names: [{firstName: 'Joe', lastName: 'Jones'},
+     *                                  {firstName: 'Marc', lastName: 'Meyer'}]});
+ * each will iterate through the members of the given object. It + * calls its body for each item and put a reference to the item into this. + * Optionally, you can specify up to two variables to store the value in and + * the zero-based index of the current item: + *
var myTemplate = _.template(
+     * 	   '{{each value, index: names}}{{index}}. {{value.firstName}} {{value.lastName}}{{/each}}');
+     * 
+ * + * If you do not pass an expression to each, it will take the list from this: + *
var myTemplate = _.template('{{each value:}}{{value}};{{/each}}');
+     * var result = myTemplate([1, 2, 3]);
+ * + * Beside lists, you can also iterate through the properties of an object. The property name will be stored + * in the first given parameter and the value in this and the second parameter: + *
var myTemplate = _.template('{{each key, value: nicknames}}{{key}}: {{value}}{{/each}}');
+     * var result = myTemplate({nicknames: {Matt: 'Matthew', John: 'Jonathan'} });
+ * + * Shorter version of the previous example that uses this for the value: + *
var myTemplate = _.template('{{each key: nicknames}}{{key}}: {{this}}{{/each}}');
+ * + * If you do not need the key, you can omit the variable specification: + *
var myTemplate = _.template('{{each nicknames}}{{this}}{{/each}}');
+ * + * You can define your own variables, using the regular JavaScript syntax, with 'var': + *
var myTemplate = _.template('{{var s=very.long.name, sum=a+b;}}{{s.desc}}, {{sum}}');
+ * + * In some situations, it may be inevitable to embed raw JavaScript in the template. + * To embed JavaScript code, prefix the code with a '#': + *
var myTemplate = _.template(
+     *     '{{each}}{{#var sum = 0; for (var i = 0; i < 3; i++) sum += this.numbers[i]; }}{{sum}}{{/each}}');
+     * var result = myTemplate([['Foreword', 'Intro'], ['Something', 'Something else']]);
+ * + * + * By default, all output will be escaped. You can prevent this by using triple-curly-braces: + *
Here's the original: {{{rawText}}}
. + * + * The template's JavaScript code is executed in a sandbox without access to global variables. Minified defines the + * following variables for you: + * + * + * + * + * + * + * + *
NameDesciption
thisThe template object outside of each. Inside eachs, the current value.
objThe parameter given to the template function.
_A reference to Minified Util.
escThe escape function given when the template has been defined. If no function has been given, + * a default function that returns the input unmodified.
printA function(text,...) that appends one or more strings to the template result.
eachA function(listOrObject, eachCallback) that can iterate over lists or object properties. + * The eachCallback is a function(key, value) for objects or function(value, index) + * for arrays that will be invoked for each item. + *
+ * + * Every template you create is already cached, so it not an expensive operation to call ##_.template() a second + * time with the same template. However, because of caching, you should be careful when creating templates + * dynamically, as this will fill the cache up quickly. + * + * @param template The template as a string using the syntax described below. + * @param escapeFunction optional The callback function(inputString) that will be used + * to escape all output: + *
inputString
The string to escape.
+ *
(callback return value)
The escaped string.
+ * If no escapeFunction has been given, the output will not be escaped. + * ##_.escapeHtml() can be used as an escape function for HTML, and ##_.escapeRegExp() for regular expressions. + * JavaScript's built-in escape() function can escape URL components. + * @return the value returned by the last invocation of func + * + * @see ##_.format() shares template()'s syntax but returns the result directly. + * @see ##_.formatHtml() is a variant of format() with HTML escaping. + * @see ##_.escapeHtml() can be used by template() to escape HTML. + * @see ##_.escapeRegExp() can be used by template() to escape regular expressions. + * @see ##HTML() creates a HTML element tree from a template. + */ + 'template': template, + + /*$ + * @stop + */ + + dummyFormatHtml:0 + , + + ///#/snippet utilUnderscoreFuncs + ///#snippet extrasUnderscoreFuncs + // @condblock promise + 'promise': promise + // @condend promise + + /*$ + * @stop + */ + // @cond !promise dummyPromise:0 + + ///#/snippet extrasUnderscoreFuncs + }, _); + + ////INITIALIZATION //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ///#snippet webInit + /*$ + * @id ready_init + * @dependency + */ + document.addEventListener("DOMContentLoaded", function() { + callList(DOMREADY_HANDLER); + DOMREADY_HANDLER = _null; + }, false); + /*$ + @stop + */ + + + ///#/snippet webInit + + return { + ///#snippet extrasExports + + /*$ + * @stop + */ + + ///#/snippet extrasExports + ///#snippet utilExports + /*$ + * @id underscore + * @group LIST + * @name _() + * @syntax _(item...) + * @configurable default + * @module UTIL + * Creates a new Minified list. Supports variable arguments so you can add items directly to the list. For arguments that are lists + * (as defined by ##_.isList()), the list content will be added to the new list. Unlike #dollar#$()#, this is not done recursively + * and thus you can create a list of lists by wrapping arguments in a list. Another difference between _() and $() + * is that $() will automatically remove null values while _() will keep them. + * + * @example Creating an empty list: + *
_()
+ * + * @example Creating a list with three items: + *
_(1, 2, 3)
+ * + * @example Creating the same list, but by passing an array. One array level will be flattened: + *
_([1, 2, 3])
+ * + * @example Creating a list containing the arrays [1, 2] and [3, 4]. + *
_([[1, 2], [3, 4]])
+ * + * @example Merging two lists: + *
var a = _("a", "b", "c");
+     * var b = _("x", "y", "z");
+     * var merged = _(a, b);    // contains _("a", "b", "c", "x", "y", "z")
+     * 
+ * + * @example Adding two elements to a list: + *
var a = _(1, 2, 3);
+     * var a4 = _(a, 4);       // contains _(1, 2, 3, 4)
+     * 
+ * + * @example Mixing different list types and single elements: + *
_(1, [], [2, 3], _(), _(4, 5)); // same content as _(1, 2, 3, 4, 5)
+ * + * @param item an item to add to the new list. If it is a list (as defined by ##_.isList()), its content will be to the new + * ##Minified list#list## (but NOT recursively). + */ + '_': _, + /*$ + * @stop + */ + ///#/snippet utilExports + ///#snippet webExports + + /*$ + * @id dollar + * @group SELECTORS + * @requires + * @dependency yes + * @name $() + * @syntax $() + * @syntax $(selector) + * @syntax $(selector, context) + * @syntax $(selector, context, childOnly) + * @syntax $(list) + * @syntax $(list, context) + * @syntax $(list, context, childOnly) + * @syntax $(object) + * @syntax $(object, context) + * @syntax $(object, context, childOnly) + * @syntax $(domreadyFunction) + * @module WEB + * Creates a new ##list#Minified list##, or register a DOMReady-handler. + * The most common usage is with a CSS-like selector. $() will then create a list containing all elements of the current HTML + * document that fulfill the filter conditions. Alternatively you can also specify a list of objects or a single object. + * Nested lists will automatically be flattened, and nulls will automatically be removed from the resulting list. + * If you call $() without any arguments, it will return an empty list. + * + * Additionally, you can specify a second argument to provide a context. Contexts only make sense if you selected + * HTML nodes with the first parameter. Then the context limits the resulting list to include only those nodes + * that are descendants of the context nodes. The context can be either a selector, a list or a single HTML node, and will be + * processed like the first argument. A third arguments allows you to limit the list to + * only those elements that are direct children of the context nodes (so a child of a child would be filtered out). + * + * The lists created by $() are the same type as the ##list#Minified lists## created by Util's #underscore#_() constructor and other + * Util methods. All Util methods work on lists created by $(). If you want to add your own methods to those lists, + * use ##M#MINI.M##. + * + * As a special shortcut, if you pass a function to $(), it will be registered using #ready#$.ready() to be executed + * when the DOM model is complete. + * + * @example A simple selector to find an element by id. + *
+     * var l0 = $('#myElementId');
+     * 
+ * + * @example You can pass an object reference to create a list containing only this element: + *
+     * var l1 = $(document.getElementById('myElementId'));
+     * 
+ * + * @example Lists and arrays will be copied: + *
+     * var l2 = $([elementA, elementB, elementC]);
+     * 
+ * + * @example Lists will be automatically flattened and nulls removed. So this list l3 has the same content as l2: + *
+     * var l3 = $([elementA, [elementB, null, elementC], null]);
+     * 
+ * + * @example This is a simple selector to find all elements with the given class. + *
+     * var l4 = $('.myClass');
+     * 
+ * + * @example A selector to find all elements of the given type. + *
+     * var l5 = $('input'); // finds all input elements
+     * 
+ * + * @example A selector to find all elements with the given type and class. + *
+     * var l6 = $('input.myRadio'); // finds all input elements with class 'myRadio'
+     * 
+ * + * @example A selector to find all elements that are descendants of the given element. + *
+     * var l7 = $('#myForm input'); // finds all input elements contained in the element myForm
+     * 
+ * + * @example A selector to find all elements that have either a CSS class 'a' or class 'b': + *
+     * var l8 = $('.a, .b'); // finds all elements that have class a or class b
+     * 
+ * + * @example A selector that finds all elements that are descendants of the element myDivision, are inside an element with the + * class .myForm and are input elements: + *
+     * var l9 = $('#myDivision .myForm input');
+     * 
+ * + * @example Contexts can make it easier to specify ancestors: + *
+     * var l10 = $('.myRadio', '#formA, #formB, #formC');
+     * 
+ * The result is identical to: + *
+     * var l10 = $('#formA .myRadio, #formB .myRadio, #formC .myRadio');
+     * 
+ * + * @example Using one of the list functions, ##set(), on the list, and setting the element's text color. '$' at the beginning of the property name sets a CSS value. + *
+     * $('#myElementId').set('$color', 'red');
+     * 
+ * + * @example Most list methods return the list you invoked them on, allowing you to chain them: + *
+     * $('#myForm .myRadio').addClass('uncheckedRadio')
+     *                      .set('checked', true)
+     *                      .on('click', function() {
+     *                             $(this).set({@: 'uncheckedRadio');
+     *                      });
+     * 
+ * + * @example Using $() as a #ready#$.ready() shortcut: + *
+     * $(function() {
+     *   // in here you can safely work with the HTML document
+     * });
+     * 
+ * + * @param selector a simple, CSS-like selector for HTML elements. It supports '#id' (lookup by id), '.class' (lookup by class), + * 'element' (lookup by elements) and 'element.class' (combined class and element). Use commas to combine several selectors. + * You can also join two or more selectors by space to find elements which are descendants of the previous selectors. + * For example, use 'div' to find all div elements, '.header' to find all elements containing a class name called 'header', and + * 'a.popup' for all a elements with the class 'popup'. To find all elements with 'header' or 'footer' class names, + * write '.header, .footer'. To find all divs elements below the element with the id 'main', use '#main div'. + * The selector "*" will return all elements. + * @param list a list to copy. It can be an array, another Minified list, a DOM nodelist or anything else that has a length property and + * allows read access by index. A shallow copy of the list will be returned. Nulls will be automatically removed from the copy. Nested lists + * will be flattened, so the result only contains nodes. + * @param object an object to create a single-element list containing only the object. If the argument is null, an empty list will be returned. + * @param domreadyFunction a function to be registered using #ready#$.ready(). + * @param context optional an optional selector, node or list of nodes which specifies one or more common ancestor nodes for the selection. The context can be specified as + * a selector, a list or using a single object, just like the first argument. + * The returned list will contain only descendants of the context nodes. All others will be filtered out. + * @param childOnly optional if set, only direct children of the context nodes are included in the list. Children of children will be filtered out. If omitted or not + * true, all descendants of the context will be included. + * @return the array-like ##list#Minified list## object containing the content specified by the selector. + * Please note that if the first argument was a list, the existing order will be kept. If the first argument was a simple selector, the nodes are in document order. + * If you combined several selectors using commas, only the individual results of the selectors will keep the document order, + * but will then be joined to form a single list. This list will + * not be in document order anymore, unless you use a build without legacy IE support. + * Duplicate nodes will be removed from selectors, but not from lists. + * + * @see #underscore#_() is Util's alternative constructor for ##list#Minified lists## + * @see ##dollardollar#$$()## works like $(), but returns the resulting list's first element. + */ + '$': $, + + /*$ + * @id M + * @name M + * @syntax MINI.M + * @module WEB, UTIL + * + * Exposes the internal class used by all ##list#Minified lists##. This is mainly intended to allow you adding your + * own functions. + * + * @example Adding a function printLength() to M: + *
+     * MINI.M.prototype.printLength = function() { console.log(this.length); };
+     * 
+ */ + 'M': M, + + /*$ + * @id getter + * @requires get + * @name MINI.getter + * @syntax MINI.getter + * @module WEB + * + * Exposes a map of prefix handlers used by ##get(). You can add support for a new prefix in get() + * by adding a function to this map. The prefix can be any string consisting solely of non-alphanumeric characters + * that's not already used by Minified. + * + * You must not replace getters by a new map, but must always modify the existing map. + * + * The function's signature is function(list, name) where + *
list
Is the Minified list to get the value from. By convention you should always use only the first element. The list is + * non-empty and the first elememt can't be null or undefined (get() automatically returns undefined in + * all other case).
+ *
name
The name of the property. That's the part AFTER the prefix.
+ *
(callback return value)
The value to return to the user.
+ * + * @example Adding a shortcut '||' for accessing border style properties: + *
+     * MINI.getter['||'] = function(list, name) {
+     * 	return list.get('$border' + name.replace(/^[a-z]/, function(a) { return a.toUpperCase()});
+     * };
+     *
+     * var borderColor = $('#box').get('||color'); // same as '$borderColor'
+     * var borderLeftRadius = $('#box').get('||leftRadius'); // same as '$borderLeftRadius'
+     * 
+ * + * @example Adding XLink attribute support to get(). This is useful if you work with SVG. The prefix is '>'. + *
+     * MINI.getter['>'] = function(list, name) {
+     * 	return list[0].getAttributeNS('http://www.w3.org/1999/xlink', name);
+     * };
+     *
+     * var xlinkHref = $('#svgLink').get('>href');
+     * 
+ */ + 'getter': getter, + + /*$ + * @id setter + * @requires set + * @name MINI.setter + * @syntax MINI.setter + * @module WEB + * + * Exposes a map of prefix handlers used by ##set(). You can add support for a new prefix in set() + * by adding a function to this map. The prefix can be any string consisting solely of non-alphanumeric characters + * that's not already used by Minified. + * + * You must not replace setters by a new map, but must always modify the existing map. + * + * The function's signature is function(list, name, value) where + *
list
Is the Minified list to use.
+ *
name
The name of the property. That's the part AFTER the prefix.
+ *
value
Either the value to set, or a callback function to create the value that you must call for each + * value (see ##set() ).
+ *
+ * + * If you provide complete ##get() and ##set() support for a prefix, you are also able to use it in other Minified + * function such as ##animate() and ##toggle(). + * + * @example Adding a shortcut '||' for accessing border style properties. As it's just calling ##set() for an existing + * property, it is not required to extra code for the callback. + *
+     * MINI.setter['||'] = function(list, name, value) {
+     * 	list.set('$border' + name.replace(/^[a-z]/, function(a) { return a.toUpperCase()}, value);
+     * };
+     *
+     * $('#box').set('||color', 'red');   // same as set('$borderColor', 'red')
+     * $('#box').set('||leftRadius', 4);  // same as set('$borderLeftRadius', 4)
+     * 
+ * + * @example Adding XLink attribute support to set(). This is useful if you work with SVG. The prefix is '>'. + *
+     * MINI.setter['>'] = function(list, name, value) {
+     * 	list.each(function(obj, index) {
+     * 		var v;
+     * 		if (_.isFunction(value))
+     * 			v = value(obj.getAttributeNS('http://www.w3.org/1999/xlink', name), index, obj);
+     * 		else
+     * 			v = value;
+     *
+     *		if (v == null)
+     *			obj.removeAttributeNS('http://www.w3.org/1999/xlink', name);
+     *		else
+     *			obj.setAttributeNS('http://www.w3.org/1999/xlink', name, v);
+     *	});
+     * };
+     *
+     * $('#svgLink').set('>href', 'http://minifiedjs.com/');
+     * 
+ */ + 'setter': setter + /*$ + * @stop + */ + ///#/snippet webExports + }; + + ///#snippet commonAmdEnd +}); +///#/snippet commonAmdEnd +///#snippet webDocs + +/*$ + * @id list + * @name Minified Lists + * @module WEB, UTIL + * + * Minified lists are Array-like objects provided by Minified. Like a regular JavaScript array, + * they provide a length property and you can access their content using the index operator (a[5]). + * However, they do not provide the same methods as JavaScript's native array and are designed to be immutable, so + * there is no direct way to add something to a Minified list. Instead Minified provides a number of functions and methods + * that take a list and create a modified copy which, for example, may contain additional elements. + * + * Minified lists are typically created either using the Web module's #dollar#$() function or with the Util module's + * #underscore#_() function, but many functions in the Util module also return a Minified list. + * + * The Util module provides a function ##_.array() that converts a Minified list to a regular JavaScript array. + */ + +/*$ + * @id promiseClass + * @name Promise + * @module WEB, UTIL + * + * Promises are objects that represent the future result of an asynchronous operation. When you start such an operation, using #request#$.request(), + * ##animate(), or ##wait(), you will get a Promise object that allows you to get the result as soon as the operation is finished. + * + * Minified's full distribution ships with a Promises/A+-compliant implementation of Promises that should + * be able to interoperate with most other Promises implementations. Minified's Web module in stand-alone distribution comes with a limited implementation. + * See below for details. + * + * What may be somewhat surprising about this Promises specification is that the only standard-compliant way to access the result is to + * register callbacks. They will be invoked as soon as the operation is finished. + * If the operation already ended when you register the callbacks, the callback will then just be called from the event loop as soon + * as possible (but never while the ##then() you register them with is still running).
+ * This design forces you to handle the operation result asynchronously and disencourages 'bad' techniques such as polling. + * + * The central method of a Promise, and indeed the only required function in Promises/A+, is ##then(). It allows you to register + * two callback methods, one for success (called 'fulfillment' in Promises/A+ terminology) and one for failures (called 'rejection' in Promises/A+). + * + * This example shows you how to use then(): + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  }, function error(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * What makes Promises so special is that ##then() itself returns a new Promise, which is based on the Promise then() was called on, but can be + * modified by the outcome of callbacks. Both arguments to then() are optional, and you can also write the code like this: + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  })
+ *  .then(null, function error(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * Because the first ##then() returns a new Promise based on the original Promise, the second then() will handle errors of the request just like + * the first one did. There is only one subtle difference in the second example: the error handler will not only be called if the request failed, + * but also when the request succeded but the success handler threw an exception. That's one of the two differences between the original Promise and + * the Promise returned by then(). Any exception thrown in a callback causes the new Promise to be in error state. + * + * Before I show you the second difference between the original Promise and the new Promise, let me make the example a bit more readable + * by using ##error(), which is not part of Promises/A+, but a simple extension by Minified. It just registers the failure callback without + * forcing you to specify null as first argument: + *
+ * $.request('get', 'http://example.com/weather?zip=90210')
+ *  .then(function success(result) {
+ *      alert('The weather is ' + result);
+ *  })
+ *  .error(function error(exception) {  // error(callback) is equivalent to then(null, callback)
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * A very powerful capability of Promises is that you can easily chain them. If a ##then() callback returns a value, the new Promise returned + * by then() will be marked as success (fulfilled) and this value is the result of the operation. If a callback returns a Promise, + * the new Promise will assume the state of the returned Promise. You can use the latter to create chains of asynchronous operations, + * but you still need only a single error handler for all of them and you do not need to nest functions to achieve this: + *
+ * $.request('get', 'http://example.com/zipcode?location=Beverly+Hills,+CA')
+ *  .then(function(resultZip) {
+ *      return $.request('get', 'http://example.com/weather', {zip: resultZip});
+ *  })
+ *  .then(function(resultWeather) {
+ *      alert('The weather in Beverly Hills is ' + resultWeather);
+ *  })
+ *  .error(function(exception) {
+ *  	alert('Something went wrong');
+ *  });
+ * 
+ * + * Only the full Minified distribution allows you to create promises yourself, using the ##promise() function. The Promises/A+ + * specification does not specify how to fulfill a promise, but in Minified's implementation every Promise object has a function fire() + * that needs to be called when the promise result is ready. It requires two arguments. + * The first is a boolean, true for a successful operation and false for a failure. The second is an array or list containing the + * arguments to call the corresponding ##then() handler with. + * + * The following example is a function, similar to ##wait(), that returns a Promise which succeeds after the given amount + * of milliseconds has passed. + * It then fulfills the promise with the number of milliseconds as argument. + * + *
+ * function timeout(durationMs) {
+ *		var p = _.promise();
+ *		setTimeout(function() { p.fire(true, [durationMs]); }, durationMs);
+ *		return p;
+ * }
+ * 
+ * Call it like this: + *
+ * timeout(1000).then(function(ms) { window.alert(ms+ ' milliseconds have passed.'); });
+ * 
+ * + *

Limited Promises Implementation in Web module

+ * If you use only the Web module, instead of the full implementation, the promises implementation is not fully Promises/A+ compliant. + * One major difference is that it does not allow you create promises yourself. The only way to get a promise in the Web module + * is from functions like ##animate() and ##request(). The other difference is that the interoperability with other promises frameworks + * is limited, even though it should be good enough most of the time. + * + * There are two things you may run into when you use Web's simplified implementation with a complete implementation: + *
  1. The simplified implementation does not support recursive thenables. So when you register callbacks with ##then(), + * you can return a promise or a thenable, but only if that promise is not also returning a promise.
  2. + *
  3. Many corner cases required by the Promises/A+ specification are not handled. When interoperating using + * reasonable implementations, you may never run into this, but Promises/A+ has detailed rules for things like ##then() + * methods implemented as dynamic getter and returning a new value on each invocation or throwing exceptions. If you need + * a water-proof implementation, you need to use the complete implementation in Minified's full package.
+ */ +/*$ + * @stop + */ + +///#/snippet webDocs + diff --git a/src/styles/base.scss b/src/styles/base.scss new file mode 100644 index 0000000..1170072 --- /dev/null +++ b/src/styles/base.scss @@ -0,0 +1,303 @@ +@import "vendor/bourbon/bourbon"; +@import "partials/vars"; +@import "partials/mixins"; + +html, body { + @include font-pfdin(regular); + font-size: $em-base; + height:100%; + color: $color-white; + + &.platform-ios { + font-size: 13px; + } + +} + +body { + background-color: $color-grey-darker; +} + +strong { + @include font-pfdin(medium); + color: $color-orange; +} + +button, +.button, +input[type="submit"] { + @include font-pfdin(medium); + text-transform: uppercase; + background-color: $color-grey-medium; + border-radius: rem($border-radius); + font-size: rem(18px); + line-height: rem($button-line-height); + border: none; + display: block; + + color: $color-white; + margin: 0 auto rem(12px); + width: 100%; + text-align: center; + @include user-select(none); + -webkit-tap-highlight-color: rgba(0,0,0,0); + + padding: rem($button-padding); + .platform-ios & { + padding: rem($button-padding-ios); + } + + &:disabled { + background-color: $color-grey-dark; + color: $color-grey-lighter; + } + + &:not(:disabled):active { + background-color: $color-grey-lighter; + } + + &.orange { + background-color: $color-orange; + + &:disabled { + background-color: darken($color-orange, 20%); + color: $color-grey-lighter; + } + + &:not(:disabled):active { + background-color: $color-red; + } + } + + &.light-grey { + background-color: $color-grey-light; + } + +} + +a.button { + text-decoration: none; + color: $color-white; +} + +a { + color: $color-grey-lighter; + + &:hover { + color: inherit; + } +} + +.inputs { + display: block; + width:100%; + border-collapse: collapse; + margin-bottom: rem(20px); + + @include font-pfdin(light); + + label { + display: table-row; + + .label, + .input { + display: table-cell; + padding: rem(13px) rem(10px) rem(13px) rem(5px); + font-size: rem(21px); + border-bottom: $border-standard; + position:relative; + + &.no-border { + border-bottom: none; + } + } + + .input { + width: 100%; + + input { + display:inline-block; + width: 100%; + background: transparent; + border: none; + padding: 0; + vertical-align: baseline; + font-size: rem(21px); + @include font-pfdin(light); + color: $color-white; + + @include placeholder { + color: $color-grey-lighter; + } + + &:focus { + @include placeholder { + color: $color-grey-dark; + } + border: none; + box-shadow: none ; + } + } + } + + &:last-child .label, + &:last-child .input { + border-bottom: none; + } + + &:first-child .label, + &:first-child .input { + padding-top: 0; + } + + &:only-child .label, + &:only-child .input { + border-bottom: $border-standard; + border-top: $border-standard; + padding-top: rem(13px); + } + + &.invalid { + .input:after { + content: "!"; + display: inline-block; + color: $color-white; + background: $color-orange; + border-radius: 0.6em; + width: 1.2em; + text-align: center; + height: 1.2em; + font-size: 1em; + vertical-align: middle; + line-height: 1.3em; + margin-left: -0.7em; + position:absolute; + @include font-pfdin(regular); + } + + .input input { + color: $color-orange; + padding-right: 1em; + + @include placeholder { + color: $color-orange; + } + + } + } + + } +} + +.view-inner-container { +// @include display(flex); +// @include flex-direction(column); +// @include flex-wrap(nowrap); +// @include align-content(stretch); + height:100%; + width:100%; + display: table; + table-layout: fixed; +} + +.form-container { +// @include flex-grow(1); +// @include display(flex); +// @include flex-direction(column); +// @include flex-wrap(nowrap); +// @include justify-content(center); + height: 100%; + display: table-row; + + form { + display: table-cell; + vertical-align: middle; + padding: rem($global-margin/2) rem($form-margin); + } + + .buttons { + padding: 0 rem($global-margin - $form-margin); + } + +} + + +footer { + + text-align: center; + font-size: rem(14px); + line-height: 1; + + .privacy-policy-link { + display: block; + } +} + +.caption { + + text-align: center; + margin: 0 auto rem(25px); + color: $color-grey-lightest; +} + + +// +// +//html, body { +// height: 100%; +// margin: 0; +//} +// +//.hide { +// display:none; +//} +//.item-styled-color .value { +// box-sizing: border-box; +// height: 26px; +//} +// +//.item-container { +// margin-top: 0; +// padding-top: 15px; +//} +// +//input[type="button"]:disabled { +// background-color: #ccc; +//} +// +//#cancel-btn { +// background-color: #444; +//} +// +//#cancel-btn, +//#save-btn { +// width: 45%; +//} +// +//#main-form { +// min-height: 100%; +// /* equal to footer height */ +// margin-bottom: -1.5rem; +//} +// +//#main-form:after { +// content: ""; +// display: block; +// padding-top: 2rem; +//} +// +//footer, #main-form:after { +// height: 1.5rem; +//} +// +//footer { +// display: block; +// text-align: center; +// width: 100%; +//} +// +//.item { +// display: table; +// width:100%; +// box-sizing: border-box; +//} diff --git a/src/styles/config-page.scss b/src/styles/config-page.scss index ed0a217..9f5e8dc 100755 --- a/src/styles/config-page.scss +++ b/src/styles/config-page.scss @@ -1,59 +1,6 @@ +@import "partials/vars"; +@import "partials/mixins"; +@import "partials/reset"; +@import "base"; -html, body { - height: 100%; - margin: 0; -} - -.hide { - display:none; -} -.item-styled-color .value { - box-sizing: border-box; - height: 26px; -} - -.item-container { - margin-top: 0; - padding-top: 15px; -} - -input[type="button"]:disabled { - background-color: #ccc; -} - -#cancel-btn { - background-color: #444; -} - -#cancel-btn, -#save-btn { - width: 45%; -} - -#main-form { - min-height: 100%; - /* equal to footer height */ - margin-bottom: -1.5rem; -} - -#main-form:after { - content: ""; - display: block; - padding-top: 2rem; -} - -footer, #main-form:after { - height: 1.5rem; -} - -footer { - display: block; - text-align: center; - width: 100%; -} - -.item { - display: table; - width:100%; - box-sizing: border-box; -} +@import "items/color"; diff --git a/src/styles/items/color.scss b/src/styles/items/color.scss new file mode 100644 index 0000000..06a7e7b --- /dev/null +++ b/src/styles/items/color.scss @@ -0,0 +1,58 @@ +@import "../partials/vars"; + +.item-color { + + .picker { + } + + .value { + width: rem(10px); + border-color: $color-grey-medium; + border-width: 1px; + border-style: solid; + } + + .color-box-wrap { + display:none; + box-sizing: border-box; + position: relative; + height: 0; + width: 100%; + padding: 0 0 100% 0; // overridden with inline style + margin: 0.6em 0 0em; + + &.show { + display: block; + } + + .color-box-container { + position: absolute; + height: 99.97%; + width: 100%; + left: 0; + top: 0; + + .color-box { + float:left; + cursor: pointer; + + &.rounded-tl { + border-top-left-radius: rem($border-radius); + } + + &.rounded-tr { + border-top-right-radius: rem($border-radius); + } + + &.rounded-bl { + border-bottom-left-radius: rem($border-radius); + } + + &.rounded-br { + border-bottom-right-radius: rem($border-radius); + } + } + + } + } +} diff --git a/src/styles/partials/_mixins.scss b/src/styles/partials/_mixins.scss new file mode 100644 index 0000000..178a0b7 --- /dev/null +++ b/src/styles/partials/_mixins.scss @@ -0,0 +1,22 @@ +@mixin font-pfdin($weight: normal) { + + font-weight: normal; + + @if $weight == light { + font-family: 'PFDinDisplayPro-Light', PFDinDisplayProLightWebfont, sans-serif; + } + + @if $weight == normal or $weight == regular { + font-family: 'PFDinDisplayPro-Regular', PFDinDisplayProRegularWebfont, sans-serif; + } + + @if $weight == medium { + font-family: 'PFDinDisplayPro-Medium', PFDinDisplayProRegularWebfont, sans-serif; + + .platform-android & { + font-family: PFDinDisplayProLightWebfont, sans-serif; + font-weight: bold; + letter-spacing: 0.03em; + } + } +} diff --git a/src/styles/partials/_reset.scss b/src/styles/partials/_reset.scss new file mode 100644 index 0000000..8cf8891 --- /dev/null +++ b/src/styles/partials/_reset.scss @@ -0,0 +1,60 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0b1 | 201101 + NOTE: WORK IN PROGRESS + USE WITH CAUTION AND TEST WITH ABANDON */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +input, textarea, button { + outline: none; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +body { + line-height: 1; +} + +ol, ul { + list-style: none; +} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* apply a natural box layout model to all elements, but allowing components to change */ +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, *:before, *:after { + box-sizing: inherit; + -webkit-box-sizing: inherit; +} diff --git a/src/styles/partials/_vars.scss b/src/styles/partials/_vars.scss new file mode 100644 index 0000000..1a058b8 --- /dev/null +++ b/src/styles/partials/_vars.scss @@ -0,0 +1,37 @@ +@import "../vendor/bourbon/bourbon"; + +// Bourbon settings +$em-base: 16px; + +// ---- Colors ------ +$color-orange: #ff4700; +$color-red: #ff0000; +$color-white: #ffffff; +$color-borders: #5c5c5c; + +// background color +$color-grey-darker: #333333; + +// secondary background +$color-grey-dark: #484848; + +//buttons +$color-grey-medium: #666666; +$color-grey-light: #767676; +$border-radius: 4px; + +// used for fonts +$color-grey-lighter: #848484; +$color-grey-lightest: #adadad; + + +// custom vars +$global-margin: 55px; +$form-margin: 25px; +$button-padding: 18px; +$button-padding-ios: 16px; +$button-line-height: 13px; +$footer-height-large: 90px; + +$border-standard: 1px solid $color-borders; + diff --git a/src/styles/vendor/bourbon/_bourbon-deprecated-upcoming.scss b/src/styles/vendor/bourbon/_bourbon-deprecated-upcoming.scss new file mode 100644 index 0000000..e6d1b8c --- /dev/null +++ b/src/styles/vendor/bourbon/_bourbon-deprecated-upcoming.scss @@ -0,0 +1,411 @@ +// The following features have been deprecated and will be removed in the next MAJOR version release + +@mixin inline-block { + display: inline-block; + + @warn "The inline-block mixin is deprecated and will be removed in the next major version release"; +} + +@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) { + + @if type-of($style) == string and type-of($base-color) == color { + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == string and type-of($base-color) == number { + $padding: $text-size; + $text-size: $base-color; + $base-color: #4294f0; + + @if $padding == inherit { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == color and type-of($base-color) == color { + $base-color: $style; + $style: simple; + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == color and type-of($base-color) == number { + $padding: $text-size; + $text-size: $base-color; + $base-color: $style; + $style: simple; + + @if $padding == inherit { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == number { + $padding: $base-color; + $text-size: $style; + $base-color: #4294f0; + $style: simple; + + @if $padding == #4294f0 { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + &:disabled { + cursor: not-allowed; + opacity: 0.5; + } + + @warn "The button mixin is deprecated and will be removed in the next major version release"; +} + +// Selector Style Button +@mixin buttonstyle($type, $b-color, $t-size, $pad) { + // Grayscale button + @if $type == simple and $b-color == grayscale($b-color) { + @include simple($b-color, true, $t-size, $pad); + } + + @if $type == shiny and $b-color == grayscale($b-color) { + @include shiny($b-color, true, $t-size, $pad); + } + + @if $type == pill and $b-color == grayscale($b-color) { + @include pill($b-color, true, $t-size, $pad); + } + + @if $type == flat and $b-color == grayscale($b-color) { + @include flat($b-color, true, $t-size, $pad); + } + + // Colored button + @if $type == simple { + @include simple($b-color, false, $t-size, $pad); + } + + @else if $type == shiny { + @include shiny($b-color, false, $t-size, $pad); + } + + @else if $type == pill { + @include pill($b-color, false, $t-size, $pad); + } + + @else if $type == flat { + @include flat($b-color, false, $t-size, $pad); + } +} + +// Simple Button +@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $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 is-light($base-color) { + $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: $textsize; + font-weight: bold; + @include linear-gradient ($base-color, $stop-gradient); + padding: $padding; + 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); + } + + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + + box-shadow: inset 0 1px 0 0 $inset-shadow-hover; + cursor: pointer; + } + + &:active:not(:disabled), + &:focus: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; + } +} + +// Shiny Button +@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $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 is-light($base-color) { + $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); + } + + @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); + + 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: $textsize; + font-weight: bold; + padding: $padding; + 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); + } + + @include linear-gradient(top, $first-stop-hover 0%, + $second-stop-hover 50%, + $third-stop-hover 50%, + $fourth-stop-hover 100%); + cursor: pointer; + } + + &:active:not(:disabled), + &:focus: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; + } +} + +// Pill Button +@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $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 is-light($base-color) { + $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; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: normal; + line-height: 1; + @include linear-gradient ($base-color, $stop-gradient); + padding: $padding; + 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); + } + + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + + background-clip: padding-box; + 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; + text-shadow: 0 -1px 1px $text-shadow-hover; + } + + &:active:not(:disabled), + &:focus: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; + text-shadow: 0 -1px 1px $text-shadow-active; + } +} + +// Flat Button +@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $color: hsl(0, 0, 100%); + + @if is-light($base-color) { + $color: hsl(0, 0, 20%); + } + + background-color: $base-color; + border-radius: 3px; + border: 0; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: bold; + padding: $padding; + text-decoration: none; + background-clip: padding-box; + + &:hover:not(:disabled){ + $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + } + + background-color: $base-color-hover; + cursor: pointer; + } + + &:active:not(:disabled), + &:focus:not(:disabled) { + $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%); + + @if $grayscale == true { + $base-color-active: grayscale($base-color-active); + } + + background-color: $base-color-active; + cursor: pointer; + } +} + +// 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); + + @warn "The flex-grid function is deprecated and will be removed in the next major version release"; +} + +// 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); + + @warn "The flex-gutter function is deprecated and will be removed in the next major version release"; +} + +@function grid-width($n) { + @return $n * $gw-column + ($n - 1) * $gw-gutter; + + @warn "The grid-width function is deprecated and will be removed in the next major version release"; +} + +@function golden-ratio($value, $increment) { + @return modular-scale($increment, $value, $ratio: $golden); + + @warn "The golden-ratio function is deprecated and will be removed in the next major version release. Please use the modular-scale function, instead."; +} + +@mixin box-sizing($box) { + @include prefixer(box-sizing, $box, webkit moz spec); + + @warn "The box-sizing mixin is deprecated and will be removed in the next major version release. This property can now be used un-prefixed."; +} diff --git a/src/styles/vendor/bourbon/_bourbon.scss b/src/styles/vendor/bourbon/_bourbon.scss new file mode 100644 index 0000000..509fcc1 --- /dev/null +++ b/src/styles/vendor/bourbon/_bourbon.scss @@ -0,0 +1,87 @@ +// Bourbon 4.2.6 +// http://bourbon.io +// Copyright 2011-2015 thoughtbot, inc. +// MIT License + +@import "settings/prefixer"; +@import "settings/px-to-em"; +@import "settings/asset-pipeline"; + +@import "functions/assign-inputs"; +@import "functions/contains"; +@import "functions/contains-falsy"; +@import "functions/is-length"; +@import "functions/is-light"; +@import "functions/is-number"; +@import "functions/is-size"; +@import "functions/px-to-em"; +@import "functions/px-to-rem"; +@import "functions/shade"; +@import "functions/strip-units"; +@import "functions/tint"; +@import "functions/transition-property-name"; +@import "functions/unpack"; +@import "functions/modular-scale"; + +@import "helpers/convert-units"; +@import "helpers/directional-values"; +@import "helpers/font-source-declaration"; +@import "helpers/gradient-positions-parser"; +@import "helpers/linear-angle-parser"; +@import "helpers/linear-gradient-parser"; +@import "helpers/linear-positions-parser"; +@import "helpers/linear-side-corner-parser"; +@import "helpers/radial-arg-parser"; +@import "helpers/radial-positions-parser"; +@import "helpers/radial-gradient-parser"; +@import "helpers/render-gradients"; +@import "helpers/shape-size-stripper"; +@import "helpers/str-to-num"; + +@import "css3/animation"; +@import "css3/appearance"; +@import "css3/backface-visibility"; +@import "css3/background"; +@import "css3/background-image"; +@import "css3/border-image"; +@import "css3/calc"; +@import "css3/columns"; +@import "css3/filter"; +@import "css3/flex-box"; +@import "css3/font-face"; +@import "css3/font-feature-settings"; +@import "css3/hidpi-media-query"; +@import "css3/hyphens"; +@import "css3/image-rendering"; +@import "css3/keyframes"; +@import "css3/linear-gradient"; +@import "css3/perspective"; +@import "css3/placeholder"; +@import "css3/radial-gradient"; +@import "css3/selection"; +@import "css3/text-decoration"; +@import "css3/transform"; +@import "css3/transition"; +@import "css3/user-select"; + +@import "addons/border-color"; +@import "addons/border-radius"; +@import "addons/border-style"; +@import "addons/border-width"; +@import "addons/buttons"; +@import "addons/clearfix"; +@import "addons/ellipsis"; +@import "addons/font-stacks"; +@import "addons/hide-text"; +@import "addons/margin"; +@import "addons/padding"; +@import "addons/position"; +@import "addons/prefixer"; +@import "addons/retina-image"; +@import "addons/size"; +@import "addons/text-inputs"; +@import "addons/timing-functions"; +@import "addons/triangle"; +@import "addons/word-wrap"; + +@import "bourbon-deprecated-upcoming"; diff --git a/src/styles/vendor/bourbon/addons/_border-color.scss b/src/styles/vendor/bourbon/addons/_border-color.scss new file mode 100644 index 0000000..6f6ab36 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_border-color.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-color` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-color(#a60b55 #76cd9c null #e8ae1a); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-left-color: #e8ae1a; +/// border-right-color: #76cd9c; +/// border-top-color: #a60b55; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-color` + +@mixin border-color($vals...) { + @include directional-property(border, color, $vals...); +} diff --git a/src/styles/vendor/bourbon/addons/_border-radius.scss b/src/styles/vendor/bourbon/addons/_border-radius.scss new file mode 100644 index 0000000..1f65863 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_border-radius.scss @@ -0,0 +1,48 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-radius` on both corners on the side of a box. +/// +/// @param {Number} $radii +/// List of arguments +/// +/// @example scss - Usage +/// .element-one { +/// @include border-top-radius(5px); +/// } +/// +/// .element-two { +/// @include border-left-radius(3px); +/// } +/// +/// @example css - CSS Output +/// .element-one { +/// border-top-left-radius: 5px; +/// border-top-right-radius: 5px; +/// } +/// +/// .element-two { +/// border-bottom-left-radius: 3px; +/// border-top-left-radius: 3px; +/// } +/// +/// @output `border-radius` + +@mixin border-top-radius($radii) { + border-top-left-radius: $radii; + border-top-right-radius: $radii; +} + +@mixin border-right-radius($radii) { + border-bottom-right-radius: $radii; + border-top-right-radius: $radii; +} + +@mixin border-bottom-radius($radii) { + border-bottom-left-radius: $radii; + border-bottom-right-radius: $radii; +} + +@mixin border-left-radius($radii) { + border-bottom-left-radius: $radii; + border-top-left-radius: $radii; +} diff --git a/src/styles/vendor/bourbon/addons/_border-style.scss b/src/styles/vendor/bourbon/addons/_border-style.scss new file mode 100644 index 0000000..d86ee79 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_border-style.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-style` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-style(dashed null solid); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-style: solid; +/// border-top-style: dashed; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-style` + +@mixin border-style($vals...) { + @include directional-property(border, style, $vals...); +} diff --git a/src/styles/vendor/bourbon/addons/_border-width.scss b/src/styles/vendor/bourbon/addons/_border-width.scss new file mode 100644 index 0000000..0ea2d4b --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_border-width.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-width` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-width(1em null 20px); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-width: 20px; +/// border-top-width: 1em; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-width` + +@mixin border-width($vals...) { + @include directional-property(border, width, $vals...); +} diff --git a/src/styles/vendor/bourbon/addons/_buttons.scss b/src/styles/vendor/bourbon/addons/_buttons.scss new file mode 100644 index 0000000..debeabc --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_buttons.scss @@ -0,0 +1,64 @@ +@charset "UTF-8"; + +/// Generates variables for all buttons. Please note that you must use interpolation on the variable: `#{$all-buttons}`. +/// +/// @example scss - Usage +/// #{$all-buttons} { +/// background-color: #f00; +/// } +/// +/// #{$all-buttons-focus}, +/// #{$all-buttons-hover} { +/// background-color: #0f0; +/// } +/// +/// #{$all-buttons-active} { +/// background-color: #00f; +/// } +/// +/// @example css - CSS Output +/// button, +/// input[type="button"], +/// input[type="reset"], +/// input[type="submit"] { +/// background-color: #f00; +/// } +/// +/// button:focus, +/// input[type="button"]:focus, +/// input[type="reset"]:focus, +/// input[type="submit"]:focus, +/// button:hover, +/// input[type="button"]:hover, +/// input[type="reset"]:hover, +/// input[type="submit"]:hover { +/// background-color: #0f0; +/// } +/// +/// button:active, +/// input[type="button"]:active, +/// input[type="reset"]:active, +/// input[type="submit"]:active { +/// background-color: #00f; +/// } +/// +/// @require assign-inputs +/// +/// @type List +/// +/// @todo Remove double assigned variables (Lines 59–62) in v5.0.0 + +$buttons-list: 'button', + 'input[type="button"]', + 'input[type="reset"]', + 'input[type="submit"]'; + +$all-buttons: assign-inputs($buttons-list); +$all-buttons-active: assign-inputs($buttons-list, active); +$all-buttons-focus: assign-inputs($buttons-list, focus); +$all-buttons-hover: assign-inputs($buttons-list, hover); + +$all-button-inputs: $all-buttons; +$all-button-inputs-active: $all-buttons-active; +$all-button-inputs-focus: $all-buttons-focus; +$all-button-inputs-hover: $all-buttons-hover; diff --git a/src/styles/vendor/bourbon/addons/_clearfix.scss b/src/styles/vendor/bourbon/addons/_clearfix.scss new file mode 100644 index 0000000..11313d6 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_clearfix.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides an easy way to include a clearfix for containing floats. +/// +/// @link http://cssmojo.com/latest_new_clearfix_so_far/ +/// +/// @example scss - Usage +/// .element { +/// @include clearfix; +/// } +/// +/// @example css - CSS Output +/// .element::after { +/// clear: both; +/// content: ""; +/// display: table; +/// } + +@mixin clearfix { + &::after { + clear: both; + content: ""; + display: table; + } +} diff --git a/src/styles/vendor/bourbon/addons/_ellipsis.scss b/src/styles/vendor/bourbon/addons/_ellipsis.scss new file mode 100644 index 0000000..a367f65 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_ellipsis.scss @@ -0,0 +1,30 @@ +@charset "UTF-8"; + +/// Truncates text and adds an ellipsis to represent overflow. +/// +/// @param {Number} $width [100%] +/// Max-width for the string to respect before being truncated +/// +/// @example scss - Usage +/// .element { +/// @include ellipsis; +/// } +/// +/// @example css - CSS Output +/// .element { +/// display: inline-block; +/// max-width: 100%; +/// overflow: hidden; +/// text-overflow: ellipsis; +/// white-space: nowrap; +/// word-wrap: normal; +/// } + +@mixin ellipsis($width: 100%) { + display: inline-block; + max-width: $width; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; +} diff --git a/src/styles/vendor/bourbon/addons/_font-stacks.scss b/src/styles/vendor/bourbon/addons/_font-stacks.scss new file mode 100644 index 0000000..57128f4 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_font-stacks.scss @@ -0,0 +1,31 @@ +@charset "UTF-8"; + +/// Georgia font stack. +/// +/// @type List + +$georgia: "Georgia", "Cambria", "Times New Roman", "Times", serif; + +/// Helvetica font stack. +/// +/// @type List + +$helvetica: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; + +/// Lucida Grande font stack. +/// +/// @type List + +$lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif; + +/// Monospace font stack. +/// +/// @type List + +$monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace; + +/// Verdana font stack. +/// +/// @type List + +$verdana: "Verdana", "Geneva", sans-serif; diff --git a/src/styles/vendor/bourbon/addons/_hide-text.scss b/src/styles/vendor/bourbon/addons/_hide-text.scss new file mode 100644 index 0000000..4caf20e --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_hide-text.scss @@ -0,0 +1,27 @@ +/// Hides the text in an element, commonly used to show an image. Some elements will need block-level styles applied. +/// +/// @link http://zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement +/// +/// @example scss - Usage +/// .element { +/// @include hide-text; +/// } +/// +/// @example css - CSS Output +/// .element { +/// overflow: hidden; +/// text-indent: 101%; +/// white-space: nowrap; +/// } +/// +/// @todo Remove height argument in v5.0.0 + +@mixin hide-text($height: null) { + overflow: hidden; + text-indent: 101%; + white-space: nowrap; + + @if $height { + @warn "The `hide-text` mixin has changed and no longer requires a height. The height argument will no longer be accepted in v5.0.0"; + } +} diff --git a/src/styles/vendor/bourbon/addons/_margin.scss b/src/styles/vendor/bourbon/addons/_margin.scss new file mode 100644 index 0000000..674f4e5 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_margin.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `margin` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include margin(null 10px 3em 20vh); +/// } +/// +/// @example css - CSS Output +/// .element { +/// margin-bottom: 3em; +/// margin-left: 20vh; +/// margin-right: 10px; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `margin` + +@mixin margin($vals...) { + @include directional-property(margin, false, $vals...); +} diff --git a/src/styles/vendor/bourbon/addons/_padding.scss b/src/styles/vendor/bourbon/addons/_padding.scss new file mode 100644 index 0000000..40a5f00 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_padding.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `padding` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include padding(12vh null 10px 5%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// padding-bottom: 10px; +/// padding-left: 5%; +/// padding-top: 12vh; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `padding` + +@mixin padding($vals...) { + @include directional-property(padding, false, $vals...); +} diff --git a/src/styles/vendor/bourbon/addons/_position.scss b/src/styles/vendor/bourbon/addons/_position.scss new file mode 100644 index 0000000..e460f3f --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_position.scss @@ -0,0 +1,48 @@ +@charset "UTF-8"; + +/// Provides a quick method for setting an element’s position. Use a `null` value to “skip” a side. +/// +/// @param {Position} $position [relative] +/// A CSS position value +/// +/// @param {Arglist} $coordinates [null null null null] +/// List of values that correspond to the 4-value syntax for the edges of a box +/// +/// @example scss - Usage +/// .element { +/// @include position(absolute, 0 null null 10em); +/// } +/// +/// @example css - CSS Output +/// .element { +/// left: 10em; +/// position: absolute; +/// top: 0; +/// } +/// +/// @require {function} is-length +/// @require {function} unpack + +@mixin position($position: relative, $coordinates: null null null null) { + @if type-of($position) == list { + $coordinates: $position; + $position: relative; + } + + $coordinates: unpack($coordinates); + + $offsets: ( + top: nth($coordinates, 1), + right: nth($coordinates, 2), + bottom: nth($coordinates, 3), + left: nth($coordinates, 4) + ); + + position: $position; + + @each $offset, $value in $offsets { + @if is-length($value) { + #{$offset}: $value; + } + } +} diff --git a/src/styles/vendor/bourbon/addons/_prefixer.scss b/src/styles/vendor/bourbon/addons/_prefixer.scss new file mode 100644 index 0000000..2b6f731 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_prefixer.scss @@ -0,0 +1,66 @@ +@charset "UTF-8"; + +/// A mixin for generating vendor prefixes on non-standardized properties. +/// +/// @param {String} $property +/// Property to prefix +/// +/// @param {*} $value +/// Value to use +/// +/// @param {List} $prefixes +/// Prefixes to define +/// +/// @example scss - Usage +/// .element { +/// @include prefixer(border-radius, 10px, webkit ms spec); +/// } +/// +/// @example css - CSS Output +/// .element { +/// -webkit-border-radius: 10px; +/// -moz-border-radius: 10px; +/// border-radius: 10px; +/// } +/// +/// @require {variable} $prefix-for-webkit +/// @require {variable} $prefix-for-mozilla +/// @require {variable} $prefix-for-microsoft +/// @require {variable} $prefix-for-opera +/// @require {variable} $prefix-for-spec + +@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 !global; + $prefix-for-mozilla: false !global; + $prefix-for-microsoft: false !global; + $prefix-for-opera: false !global; + $prefix-for-spec: false !global; +} diff --git a/src/styles/vendor/bourbon/addons/_retina-image.scss b/src/styles/vendor/bourbon/addons/_retina-image.scss new file mode 100644 index 0000000..7febbd7 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_retina-image.scss @@ -0,0 +1,25 @@ +@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { + @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}#{$retina-suffix}.#{$extension}"); + } + } @else { + @if $retina-filename { + background-image: url("#{$retina-filename}.#{$extension}"); + } @else { + background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); + } + } + + background-size: $background-size; + } +} diff --git a/src/styles/vendor/bourbon/addons/_size.scss b/src/styles/vendor/bourbon/addons/_size.scss new file mode 100644 index 0000000..a2992a3 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_size.scss @@ -0,0 +1,51 @@ +@charset "UTF-8"; + +/// Sets the `width` and `height` of the element. +/// +/// @param {List} $size +/// A list of at most 2 size values. +/// +/// If there is only a single value in `$size` it is used for both width and height. All units are supported. +/// +/// @example scss - Usage +/// .first-element { +/// @include size(2em); +/// } +/// +/// .second-element { +/// @include size(auto 10em); +/// } +/// +/// @example css - CSS Output +/// .first-element { +/// width: 2em; +/// height: 2em; +/// } +/// +/// .second-element { +/// width: auto; +/// height: 10em; +/// } +/// +/// @todo Refactor in 5.0.0 to use a comma-separated argument + +@mixin size($value) { + $width: nth($value, 1); + $height: $width; + + @if length($value) > 1 { + $height: nth($value, 2); + } + + @if is-size($height) { + height: $height; + } @else { + @warn "`#{$height}` is not a valid length for the `$height` parameter in the `size` mixin."; + } + + @if is-size($width) { + width: $width; + } @else { + @warn "`#{$width}` is not a valid length for the `$width` parameter in the `size` mixin."; + } +} diff --git a/src/styles/vendor/bourbon/addons/_text-inputs.scss b/src/styles/vendor/bourbon/addons/_text-inputs.scss new file mode 100644 index 0000000..1eb7a54 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_text-inputs.scss @@ -0,0 +1,113 @@ +@charset "UTF-8"; + +/// Generates variables for all text-based inputs. Please note that you must use interpolation on the variable: `#{$all-text-inputs}`. +/// +/// @example scss - Usage +/// #{$all-text-inputs} { +/// border: 1px solid #f00; +/// } +/// +/// #{$all-text-inputs-focus}, +/// #{$all-text-inputs-hover} { +/// border: 1px solid #0f0; +/// } +/// +/// #{$all-text-inputs-active} { +/// border: 1px solid #00f; +/// } +/// +/// @example css - CSS Output +/// input[type="color"], +/// input[type="date"], +/// input[type="datetime"], +/// input[type="datetime-local"], +/// input[type="email"], +/// input[type="month"], +/// input[type="number"], +/// input[type="password"], +/// input[type="search"], +/// input[type="tel"], +/// input[type="text"], +/// input[type="time"], +/// input[type="url"], +/// input[type="week"], +/// textarea { +/// border: 1px solid #f00; +/// } +/// +/// input[type="color"]:focus, +/// input[type="date"]:focus, +/// input[type="datetime"]:focus, +/// input[type="datetime-local"]:focus, +/// input[type="email"]:focus, +/// input[type="month"]:focus, +/// input[type="number"]:focus, +/// input[type="password"]:focus, +/// input[type="search"]:focus, +/// input[type="tel"]:focus, +/// input[type="text"]:focus, +/// input[type="time"]:focus, +/// input[type="url"]:focus, +/// input[type="week"]:focus, +/// textarea:focus, +/// input[type="color"]:hover, +/// input[type="date"]:hover, +/// input[type="datetime"]:hover, +/// input[type="datetime-local"]:hover, +/// input[type="email"]:hover, +/// input[type="month"]:hover, +/// input[type="number"]:hover, +/// input[type="password"]:hover, +/// input[type="search"]:hover, +/// input[type="tel"]:hover, +/// input[type="text"]:hover, +/// input[type="time"]:hover, +/// input[type="url"]:hover, +/// input[type="week"]:hover, +/// textarea:hover { +/// border: 1px solid #0f0; +/// } +/// +/// input[type="color"]:active, +/// input[type="date"]:active, +/// input[type="datetime"]:active, +/// input[type="datetime-local"]:active, +/// input[type="email"]:active, +/// input[type="month"]:active, +/// input[type="number"]:active, +/// input[type="password"]:active, +/// input[type="search"]:active, +/// input[type="tel"]:active, +/// input[type="text"]:active, +/// input[type="time"]:active, +/// input[type="url"]:active, +/// input[type="week"]:active, +/// textarea:active { +/// border: 1px solid #00f; +/// } +/// +/// @require assign-inputs +/// +/// @type List + +$text-inputs-list: 'input[type="color"]', + 'input[type="date"]', + 'input[type="datetime"]', + 'input[type="datetime-local"]', + 'input[type="email"]', + 'input[type="month"]', + 'input[type="number"]', + 'input[type="password"]', + 'input[type="search"]', + 'input[type="tel"]', + 'input[type="text"]', + 'input[type="time"]', + 'input[type="url"]', + 'input[type="week"]', + 'input:not([type])', + 'textarea'; + +$all-text-inputs: assign-inputs($text-inputs-list); +$all-text-inputs-active: assign-inputs($text-inputs-list, active); +$all-text-inputs-focus: assign-inputs($text-inputs-list, focus); +$all-text-inputs-hover: assign-inputs($text-inputs-list, hover); diff --git a/src/styles/vendor/bourbon/addons/_timing-functions.scss b/src/styles/vendor/bourbon/addons/_timing-functions.scss new file mode 100644 index 0000000..20e5f1d --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_timing-functions.scss @@ -0,0 +1,34 @@ +@charset "UTF-8"; + +/// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) +/// +/// Timing functions are the same as demoed here: http://jqueryui.com/resources/demos/effect/easing.html +/// +/// @type cubic-bezier + +$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-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-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/src/styles/vendor/bourbon/addons/_triangle.scss b/src/styles/vendor/bourbon/addons/_triangle.scss new file mode 100644 index 0000000..8a1ed9c --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_triangle.scss @@ -0,0 +1,63 @@ +@mixin triangle($size, $color, $direction) { + $width: nth($size, 1); + $height: nth($size, length($size)); + $foreground-color: nth($color, 1); + $background-color: if(length($color) == 2, nth($color, 2), transparent); + height: 0; + width: 0; + + @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { + $width: $width / 2; + $height: if(length($size) > 1, $height, $height/2); + + @if $direction == up { + border-bottom: $height solid $foreground-color; + border-left: $width solid $background-color; + border-right: $width solid $background-color; + } @else if $direction == right { + border-bottom: $width solid $background-color; + border-left: $height solid $foreground-color; + border-top: $width solid $background-color; + } @else if $direction == down { + border-left: $width solid $background-color; + border-right: $width solid $background-color; + border-top: $height solid $foreground-color; + } @else if $direction == left { + border-bottom: $width solid $background-color; + border-right: $height solid $foreground-color; + border-top: $width solid $background-color; + } + } @else if ($direction == up-right) or ($direction == up-left) { + border-top: $height solid $foreground-color; + + @if $direction == up-right { + border-left: $width solid $background-color; + } @else if $direction == up-left { + border-right: $width solid $background-color; + } + } @else if ($direction == down-right) or ($direction == down-left) { + border-bottom: $height solid $foreground-color; + + @if $direction == down-right { + border-left: $width solid $background-color; + } @else if $direction == down-left { + border-right: $width solid $background-color; + } + } @else if ($direction == inset-up) { + border-color: $background-color $background-color $foreground-color; + border-style: solid; + border-width: $height $width; + } @else if ($direction == inset-down) { + border-color: $foreground-color $background-color $background-color; + border-style: solid; + border-width: $height $width; + } @else if ($direction == inset-right) { + border-color: $background-color $background-color $background-color $foreground-color; + border-style: solid; + border-width: $width $height; + } @else if ($direction == inset-left) { + border-color: $background-color $foreground-color $background-color $background-color; + border-style: solid; + border-width: $width $height; + } +} diff --git a/src/styles/vendor/bourbon/addons/_word-wrap.scss b/src/styles/vendor/bourbon/addons/_word-wrap.scss new file mode 100644 index 0000000..64856a9 --- /dev/null +++ b/src/styles/vendor/bourbon/addons/_word-wrap.scss @@ -0,0 +1,29 @@ +@charset "UTF-8"; + +/// Provides an easy way to change the `word-wrap` property. +/// +/// @param {String} $wrap [break-word] +/// Value for the `word-break` property. +/// +/// @example scss - Usage +/// .wrapper { +/// @include word-wrap(break-word); +/// } +/// +/// @example css - CSS Output +/// .wrapper { +/// overflow-wrap: break-word; +/// word-break: break-all; +/// word-wrap: break-word; +/// } + +@mixin word-wrap($wrap: break-word) { + overflow-wrap: $wrap; + word-wrap: $wrap; + + @if $wrap == break-word { + word-break: break-all; + } @else { + word-break: $wrap; + } +} diff --git a/src/styles/vendor/bourbon/css3/_animation.scss b/src/styles/vendor/bourbon/css3/_animation.scss new file mode 100644 index 0000000..aac675f --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_animation.scss @@ -0,0 +1,43 @@ +// 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. + +@mixin animation($animations...) { + @include prefixer(animation, $animations, webkit moz spec); +} + +@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/src/styles/vendor/bourbon/css3/_appearance.scss b/src/styles/vendor/bourbon/css3/_appearance.scss new file mode 100644 index 0000000..abddc02 --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_appearance.scss @@ -0,0 +1,3 @@ +@mixin appearance($value) { + @include prefixer(appearance, $value, webkit moz ms o spec); +} diff --git a/src/styles/vendor/bourbon/css3/_backface-visibility.scss b/src/styles/vendor/bourbon/css3/_backface-visibility.scss new file mode 100644 index 0000000..fc68e2d --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_backface-visibility.scss @@ -0,0 +1,3 @@ +@mixin backface-visibility($visibility) { + @include prefixer(backface-visibility, $visibility, webkit spec); +} diff --git a/src/styles/vendor/bourbon/css3/_background-image.scss b/src/styles/vendor/bourbon/css3/_background-image.scss new file mode 100644 index 0000000..6ed19ab --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_background-image.scss @@ -0,0 +1,42 @@ +//************************************************************************// +// Background-image property for adding multiple background images with +// gradients, or for stringing multiple gradients together. +//************************************************************************// + +@mixin background-image($images...) { + $webkit-images: (); + $spec-images: (); + + @each $image in $images { + $webkit-image: (); + $spec-image: (); + + @if (type-of($image) == string) { + $url-str: str-slice($image, 1, 3); + $gradient-type: str-slice($image, 1, 6); + + @if $url-str == "url" { + $webkit-image: $image; + $spec-image: $image; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser($image); + $webkit-image: map-get($gradients, webkit-image); + $spec-image: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser($image); + $webkit-image: map-get($gradients, webkit-image); + $spec-image: map-get($gradients, spec-image); + } + } + + $webkit-images: append($webkit-images, $webkit-image, comma); + $spec-images: append($spec-images, $spec-image, comma); + } + + background-image: $webkit-images; + background-image: $spec-images; +} diff --git a/src/styles/vendor/bourbon/css3/_background.scss b/src/styles/vendor/bourbon/css3/_background.scss new file mode 100644 index 0000000..019db0e --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_background.scss @@ -0,0 +1,55 @@ +//************************************************************************// +// Background property for adding multiple backgrounds using shorthand +// notation. +//************************************************************************// + +@mixin background($backgrounds...) { + $webkit-backgrounds: (); + $spec-backgrounds: (); + + @each $background in $backgrounds { + $webkit-background: (); + $spec-background: (); + $background-type: type-of($background); + + @if $background-type == string or $background-type == list { + $background-str: if($background-type == list, nth($background, 1), $background); + + $url-str: str-slice($background-str, 1, 3); + $gradient-type: str-slice($background-str, 1, 6); + + @if $url-str == "url" { + $webkit-background: $background; + $spec-background: $background; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser("#{$background}"); + $webkit-background: map-get($gradients, webkit-image); + $spec-background: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser("#{$background}"); + $webkit-background: map-get($gradients, webkit-image); + $spec-background: map-get($gradients, spec-image); + } + + @else { + $webkit-background: $background; + $spec-background: $background; + } + } + + @else { + $webkit-background: $background; + $spec-background: $background; + } + + $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); + $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); + } + + background: $webkit-backgrounds; + background: $spec-backgrounds; +} diff --git a/src/styles/vendor/bourbon/css3/_border-image.scss b/src/styles/vendor/bourbon/css3/_border-image.scss new file mode 100644 index 0000000..cf568ce --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_border-image.scss @@ -0,0 +1,59 @@ +@mixin border-image($borders...) { + $webkit-borders: (); + $spec-borders: (); + + @each $border in $borders { + $webkit-border: (); + $spec-border: (); + $border-type: type-of($border); + + @if $border-type == string or list { + $border-str: if($border-type == list, nth($border, 1), $border); + + $url-str: str-slice($border-str, 1, 3); + $gradient-type: str-slice($border-str, 1, 6); + + @if $url-str == "url" { + $webkit-border: $border; + $spec-border: $border; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser("#{$border}"); + $webkit-border: map-get($gradients, webkit-image); + $spec-border: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser("#{$border}"); + $webkit-border: map-get($gradients, webkit-image); + $spec-border: map-get($gradients, spec-image); + } + + @else { + $webkit-border: $border; + $spec-border: $border; + } + } + + @else { + $webkit-border: $border; + $spec-border: $border; + } + + $webkit-borders: append($webkit-borders, $webkit-border, comma); + $spec-borders: append($spec-borders, $spec-border, comma); + } + + -webkit-border-image: $webkit-borders; + border-image: $spec-borders; + border-style: solid; +} + +//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/src/styles/vendor/bourbon/css3/_calc.scss b/src/styles/vendor/bourbon/css3/_calc.scss new file mode 100644 index 0000000..0bfc738 --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_calc.scss @@ -0,0 +1,4 @@ +@mixin calc($property, $value) { + #{$property}: -webkit-calc(#{$value}); + #{$property}: calc(#{$value}); +} diff --git a/src/styles/vendor/bourbon/css3/_columns.scss b/src/styles/vendor/bourbon/css3/_columns.scss new file mode 100644 index 0000000..9611767 --- /dev/null +++ b/src/styles/vendor/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(column-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/src/styles/vendor/bourbon/css3/_filter.scss b/src/styles/vendor/bourbon/css3/_filter.scss new file mode 100644 index 0000000..b8f8ffb --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_filter.scss @@ -0,0 +1,4 @@ +@mixin filter($function: 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/src/styles/vendor/bourbon/css3/_placeholder.scss b/src/styles/vendor/bourbon/css3/_placeholder.scss new file mode 100644 index 0000000..5682fd0 --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_placeholder.scss @@ -0,0 +1,8 @@ +@mixin placeholder { + $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; + @each $placeholder in $placeholders { + &:#{$placeholder}-placeholder { + @content; + } + } +} diff --git a/src/styles/vendor/bourbon/css3/_radial-gradient.scss b/src/styles/vendor/bourbon/css3/_radial-gradient.scss new file mode 100644 index 0000000..8da076e --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_radial-gradient.scss @@ -0,0 +1,39 @@ +// Requires Sass 3.1+ +@mixin radial-gradient($g1, $g2, + $g3: null, $g4: null, + $g5: null, $g6: null, + $g7: null, $g8: null, + $g9: null, $g10: null, + $pos: null, + $shape-size: null, + $fallback: 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); + + $full: $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: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); + background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); +} diff --git a/src/styles/vendor/bourbon/css3/_selection.scss b/src/styles/vendor/bourbon/css3/_selection.scss new file mode 100644 index 0000000..23303ab --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_selection.scss @@ -0,0 +1,42 @@ +@charset "UTF-8"; + +/// Outputs the spec and prefixed versions of the `::selection` pseudo-element. +/// +/// @param {Bool} $current-selector [false] +/// If set to `true`, it takes the current element into consideration. +/// +/// @example scss - Usage +/// .element { +/// @include selection(true) { +/// background-color: #ffbb52; +/// } +/// } +/// +/// @example css - CSS Output +/// .element::-moz-selection { +/// background-color: #ffbb52; +/// } +/// +/// .element::selection { +/// background-color: #ffbb52; +/// } + +@mixin selection($current-selector: false) { + @if $current-selector { + &::-moz-selection { + @content; + } + + &::selection { + @content; + } + } @else { + ::-moz-selection { + @content; + } + + ::selection { + @content; + } + } +} diff --git a/src/styles/vendor/bourbon/css3/_text-decoration.scss b/src/styles/vendor/bourbon/css3/_text-decoration.scss new file mode 100644 index 0000000..9222746 --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_text-decoration.scss @@ -0,0 +1,19 @@ +@mixin text-decoration($value) { +// || || + @include prefixer(text-decoration, $value, moz); +} + +@mixin text-decoration-line($line: none) { +// none || underline || overline || line-through + @include prefixer(text-decoration-line, $line, moz); +} + +@mixin text-decoration-style($style: solid) { +// solid || double || dotted || dashed || wavy + @include prefixer(text-decoration-style, $style, moz webkit); +} + +@mixin text-decoration-color($color: currentColor) { +// currentColor || + @include prefixer(text-decoration-color, $color, moz); +} diff --git a/src/styles/vendor/bourbon/css3/_transform.scss b/src/styles/vendor/bourbon/css3/_transform.scss new file mode 100644 index 0000000..8ee6509 --- /dev/null +++ b/src/styles/vendor/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/src/styles/vendor/bourbon/css3/_transition.scss b/src/styles/vendor/bourbon/css3/_transition.scss new file mode 100644 index 0000000..3c785ed --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_transition.scss @@ -0,0 +1,71 @@ +// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. +// Example: @include transition (all 2s ease-in-out); +// @include transition (opacity 1s ease-in 2s, width 2s ease-out); +// @include transition-property (transform, opacity); + +@mixin transition($properties...) { + // Fix for vendor-prefix transform property + $needs-prefixes: false; + $webkit: (); + $moz: (); + $spec: (); + + // Create lists for vendor-prefixed transform + @each $list in $properties { + @if nth($list, 1) == "transform" { + $needs-prefixes: true; + $list1: -webkit-transform; + $list2: -moz-transform; + $list3: (); + + @each $var in $list { + $list3: join($list3, $var); + + @if $var != "transform" { + $list1: join($list1, $var); + $list2: join($list2, $var); + } + } + + $webkit: append($webkit, $list1); + $moz: append($moz, $list2); + $spec: append($spec, $list3); + } @else { + $webkit: append($webkit, $list, comma); + $moz: append($moz, $list, comma); + $spec: append($spec, $list, comma); + } + } + + @if $needs-prefixes { + -webkit-transition: $webkit; + -moz-transition: $moz; + transition: $spec; + } @else { + @if length($properties) >= 1 { + @include prefixer(transition, $properties, webkit moz spec); + } @else { + $properties: all 0.15s ease-out 0s; + @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/src/styles/vendor/bourbon/css3/_user-select.scss b/src/styles/vendor/bourbon/css3/_user-select.scss new file mode 100644 index 0000000..d4e5551 --- /dev/null +++ b/src/styles/vendor/bourbon/css3/_user-select.scss @@ -0,0 +1,3 @@ +@mixin user-select($value: none) { + @include prefixer(user-select, $value, webkit moz ms spec); +} diff --git a/src/styles/vendor/bourbon/functions/_assign-inputs.scss b/src/styles/vendor/bourbon/functions/_assign-inputs.scss new file mode 100644 index 0000000..f8aba96 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_assign-inputs.scss @@ -0,0 +1,11 @@ +@function assign-inputs($inputs, $pseudo: null) { + $list: (); + + @each $input in $inputs { + $input: unquote($input); + $input: if($pseudo, $input + ":" + $pseudo, $input); + $list: append($list, $input, comma); + } + + @return $list; +} diff --git a/src/styles/vendor/bourbon/functions/_contains-falsy.scss b/src/styles/vendor/bourbon/functions/_contains-falsy.scss new file mode 100644 index 0000000..c096fdb --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_contains-falsy.scss @@ -0,0 +1,20 @@ +@charset "UTF-8"; + +/// Checks if a list does not contains a value. +/// +/// @access private +/// +/// @param {List} $list +/// The list to check against. +/// +/// @return {Bool} + +@function contains-falsy($list) { + @each $item in $list { + @if not $item { + @return true; + } + } + + @return false; +} diff --git a/src/styles/vendor/bourbon/functions/_contains.scss b/src/styles/vendor/bourbon/functions/_contains.scss new file mode 100644 index 0000000..3dec27d --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_contains.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Checks if a list contains a value(s). +/// +/// @access private +/// +/// @param {List} $list +/// The list to check against. +/// +/// @param {List} $values +/// A single value or list of values to check for. +/// +/// @example scss - Usage +/// contains($list, $value) +/// +/// @return {Bool} + +@function contains($list, $values...) { + @each $value in $values { + @if type-of(index($list, $value)) != "number" { + @return false; + } + } + + @return true; +} diff --git a/src/styles/vendor/bourbon/functions/_is-length.scss b/src/styles/vendor/bourbon/functions/_is-length.scss new file mode 100644 index 0000000..5826e78 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_is-length.scss @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/// Checks for a valid CSS length. +/// +/// @param {String} $value + +@function is-length($value) { + @return type-of($value) != "null" and (str-slice($value + "", 1, 4) == "calc" + or index(auto inherit initial 0, $value) + or (type-of($value) == "number" and not(unitless($value)))); +} diff --git a/src/styles/vendor/bourbon/functions/_is-light.scss b/src/styles/vendor/bourbon/functions/_is-light.scss new file mode 100644 index 0000000..92d90ac --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_is-light.scss @@ -0,0 +1,21 @@ +@charset "UTF-8"; + +/// Programatically determines whether a color is light or dark. +/// +/// @link http://robots.thoughtbot.com/closer-look-color-lightness +/// +/// @param {Color (Hex)} $color +/// +/// @example scss - Usage +/// is-light($color) +/// +/// @return {Bool} + +@function is-light($hex-color) { + $-local-red: red(rgba($hex-color, 1)); + $-local-green: green(rgba($hex-color, 1)); + $-local-blue: blue(rgba($hex-color, 1)); + $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; + + @return $-local-lightness > 0.6; +} diff --git a/src/styles/vendor/bourbon/functions/_is-number.scss b/src/styles/vendor/bourbon/functions/_is-number.scss new file mode 100644 index 0000000..a64e0bf --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_is-number.scss @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/// Checks for a valid number. +/// +/// @param {Number} $value +/// +/// @require {function} contains + +@function is-number($value) { + @return contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value); +} diff --git a/src/styles/vendor/bourbon/functions/_is-size.scss b/src/styles/vendor/bourbon/functions/_is-size.scss new file mode 100644 index 0000000..661789a --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_is-size.scss @@ -0,0 +1,13 @@ +@charset "UTF-8"; + +/// Checks for a valid CSS size. +/// +/// @param {String} $value +/// +/// @require {function} contains +/// @require {function} is-length + +@function is-size($value) { + @return is-length($value) + or contains("fill" "fit-content" "min-content" "max-content", $value); +} diff --git a/src/styles/vendor/bourbon/functions/_modular-scale.scss b/src/styles/vendor/bourbon/functions/_modular-scale.scss new file mode 100644 index 0000000..20fa388 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_modular-scale.scss @@ -0,0 +1,69 @@ +// Scaling Variables +$golden: 1.618; +$minor-second: 1.067; +$major-second: 1.125; +$minor-third: 1.2; +$major-third: 1.25; +$perfect-fourth: 1.333; +$augmented-fourth: 1.414; +$perfect-fifth: 1.5; +$minor-sixth: 1.6; +$major-sixth: 1.667; +$minor-seventh: 1.778; +$major-seventh: 1.875; +$octave: 2; +$major-tenth: 2.5; +$major-eleventh: 2.667; +$major-twelfth: 3; +$double-octave: 4; + +$modular-scale-ratio: $perfect-fourth !default; +$modular-scale-base: em($em-base) !default; + +@function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) { + $v1: nth($value, 1); + $v2: nth($value, length($value)); + $value: $v1; + + // scale $v2 to just above $v1 + @while $v2 > $v1 { + $v2: ($v2 / $ratio); // will be off-by-1 + } + @while $v2 < $v1 { + $v2: ($v2 * $ratio); // will fix off-by-1 + } + + // check AFTER scaling $v2 to prevent double-counting corner-case + $double-stranded: $v2 > $v1; + + @if $increment > 0 { + @for $i from 1 through $increment { + @if $double-stranded and ($v1 * $ratio) > $v2 { + $value: $v2; + $v2: ($v2 * $ratio); + } @else { + $v1: ($v1 * $ratio); + $value: $v1; + } + } + } + + @if $increment < 0 { + // adjust $v2 to just below $v1 + @if $double-stranded { + $v2: ($v2 / $ratio); + } + + @for $i from $increment through -1 { + @if $double-stranded and ($v1 / $ratio) < $v2 { + $value: $v2; + $v2: ($v2 / $ratio); + } @else { + $v1: ($v1 / $ratio); + $value: $v1; + } + } + } + + @return $value; +} diff --git a/src/styles/vendor/bourbon/functions/_px-to-em.scss b/src/styles/vendor/bourbon/functions/_px-to-em.scss new file mode 100644 index 0000000..ae81a44 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_px-to-em.scss @@ -0,0 +1,13 @@ +// 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: $em-base) { + @if not unitless($pxval) { + $pxval: strip-units($pxval); + } + @if not unitless($base) { + $base: strip-units($base); + } + @return ($pxval / $base) * 1em; +} diff --git a/src/styles/vendor/bourbon/functions/_px-to-rem.scss b/src/styles/vendor/bourbon/functions/_px-to-rem.scss new file mode 100644 index 0000000..0ac941e --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_px-to-rem.scss @@ -0,0 +1,15 @@ +// Convert pixels to rems +// eg. for a relational value of 12px write rem(12) +// Assumes $em-base is the font-size of + +@function rem($pxval) { + @if not unitless($pxval) { + $pxval: strip-units($pxval); + } + + $base: $em-base; + @if not unitless($base) { + $base: strip-units($base); + } + @return ($pxval / $base) * 1rem; +} diff --git a/src/styles/vendor/bourbon/functions/_shade.scss b/src/styles/vendor/bourbon/functions/_shade.scss new file mode 100644 index 0000000..8aaf2c6 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_shade.scss @@ -0,0 +1,24 @@ +@charset "UTF-8"; + +/// Mixes a color with black. +/// +/// @param {Color} $color +/// +/// @param {Number (Percentage)} $percent +/// The amount of black to be mixed in. +/// +/// @example scss - Usage +/// .element { +/// background-color: shade(#ffbb52, 60%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// background-color: #664a20; +/// } +/// +/// @return {Color} + +@function shade($color, $percent) { + @return mix(#000, $color, $percent); +} diff --git a/src/styles/vendor/bourbon/functions/_strip-units.scss b/src/styles/vendor/bourbon/functions/_strip-units.scss new file mode 100644 index 0000000..6c5f3e8 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_strip-units.scss @@ -0,0 +1,17 @@ +@charset "UTF-8"; + +/// Strips the unit from a number. +/// +/// @param {Number (With Unit)} $value +/// +/// @example scss - Usage +/// $dimension: strip-units(10em); +/// +/// @example css - CSS Output +/// $dimension: 10; +/// +/// @return {Number (Unitless)} + +@function strip-units($value) { + @return ($value / ($value * 0 + 1)); +} diff --git a/src/styles/vendor/bourbon/functions/_tint.scss b/src/styles/vendor/bourbon/functions/_tint.scss new file mode 100644 index 0000000..2e33814 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_tint.scss @@ -0,0 +1,24 @@ +@charset "UTF-8"; + +/// Mixes a color with white. +/// +/// @param {Color} $color +/// +/// @param {Number (Percentage)} $percent +/// The amount of white to be mixed in. +/// +/// @example scss - Usage +/// .element { +/// background-color: tint(#6ecaa6, 40%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// background-color: #a8dfc9; +/// } +/// +/// @return {Color} + +@function tint($color, $percent) { + @return mix(#fff, $color, $percent); +} diff --git a/src/styles/vendor/bourbon/functions/_transition-property-name.scss b/src/styles/vendor/bourbon/functions/_transition-property-name.scss new file mode 100644 index 0000000..18348b9 --- /dev/null +++ b/src/styles/vendor/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; + } +} diff --git a/src/styles/vendor/bourbon/functions/_unpack.scss b/src/styles/vendor/bourbon/functions/_unpack.scss new file mode 100644 index 0000000..4367935 --- /dev/null +++ b/src/styles/vendor/bourbon/functions/_unpack.scss @@ -0,0 +1,27 @@ +@charset "UTF-8"; + +/// Converts shorthand to the 4-value syntax. +/// +/// @param {List} $shorthand +/// +/// @example scss - Usage +/// .element { +/// margin: unpack(1em 2em); +/// } +/// +/// @example css - CSS Output +/// .element { +/// margin: 1em 2em 1em 2em; +/// } + +@function unpack($shorthand) { + @if length($shorthand) == 1 { + @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); + } @else if length($shorthand) == 2 { + @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); + } @else if length($shorthand) == 3 { + @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); + } @else { + @return $shorthand; + } +} diff --git a/src/styles/vendor/bourbon/helpers/_convert-units.scss b/src/styles/vendor/bourbon/helpers/_convert-units.scss new file mode 100644 index 0000000..e0a65a0 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_convert-units.scss @@ -0,0 +1,21 @@ +//************************************************************************// +// Helper function for str-to-num fn. +// Source: http://sassmeister.com/gist/9647408 +//************************************************************************// +@function _convert-units($number, $unit) { + $strings: "px", "cm", "mm", "%", "ch", "pica", "in", "em", "rem", "pt", "pc", "ex", "vw", "vh", "vmin", "vmax", "deg", "rad", "grad", "turn"; + $units: 1px, 1cm, 1mm, 1%, 1ch, 1pica, 1in, 1em, 1rem, 1pt, 1pc, 1ex, 1vw, 1vh, 1vmin, 1vmax, 1deg, 1rad, 1grad, 1turn; + $index: index($strings, $unit); + + @if not $index { + @warn "Unknown unit `#{$unit}`."; + @return false; + } + + @if type-of($number) != "number" { + @warn "`#{$number} is not a number`"; + @return false; + } + + @return $number * nth($units, $index); +} diff --git a/src/styles/vendor/bourbon/helpers/_directional-values.scss b/src/styles/vendor/bourbon/helpers/_directional-values.scss new file mode 100644 index 0000000..6ee538d --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_directional-values.scss @@ -0,0 +1,96 @@ +@charset "UTF-8"; + +/// Directional-property mixins are shorthands for writing properties like the following +/// +/// @ignore You can also use `false` instead of `null`. +/// +/// @param {List} $vals +/// List of directional values +/// +/// @example scss - Usage +/// .element { +/// @include border-style(dotted null); +/// @include margin(null 0 10px); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-style: dotted; +/// border-top-style: dotted; +/// margin-bottom: 10px; +/// margin-left: 0; +/// margin-right: 0; +/// } +/// +/// @require {function} contains-falsy +/// +/// @return {List} + +@function collapse-directionals($vals) { + $output: null; + + $a: nth($vals, 1); + $b: if(length($vals) < 2, $a, nth($vals, 2)); + $c: if(length($vals) < 3, $a, nth($vals, 3)); + $d: if(length($vals) < 2, $a, nth($vals, if(length($vals) < 4, 2, 4))); + + @if $a == 0 { $a: 0; } + @if $b == 0 { $b: 0; } + @if $c == 0 { $c: 0; } + @if $d == 0 { $d: 0; } + + @if $a == $b and $a == $c and $a == $d { $output: $a; } + @else if $a == $c and $b == $d { $output: $a $b; } + @else if $b == $d { $output: $a $b $c; } + @else { $output: $a $b $c $d; } + + @return $output; +} + +/// Output directional properties, for instance `margin`. +/// +/// @access private +/// +/// @param {String} $pre +/// Prefix to use +/// @param {String} $suf +/// Suffix to use +/// @param {List} $vals +/// List of values +/// +/// @require {function} collapse-directionals +/// @require {function} contains-falsy + +@mixin directional-property($pre, $suf, $vals) { + // Property Names + $top: $pre + "-top" + if($suf, "-#{$suf}", ""); + $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); + $left: $pre + "-left" + if($suf, "-#{$suf}", ""); + $right: $pre + "-right" + if($suf, "-#{$suf}", ""); + $all: $pre + if($suf, "-#{$suf}", ""); + + $vals: collapse-directionals($vals); + + @if contains-falsy($vals) { + @if nth($vals, 1) { #{$top}: nth($vals, 1); } + + @if length($vals) == 1 { + @if nth($vals, 1) { #{$right}: nth($vals, 1); } + } @else { + @if nth($vals, 2) { #{$right}: nth($vals, 2); } + } + + @if length($vals) == 2 { + @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } + @if nth($vals, 2) { #{$left}: nth($vals, 2); } + } @else if length($vals) == 3 { + @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } + @if nth($vals, 2) { #{$left}: nth($vals, 2); } + } @else if length($vals) == 4 { + @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } + @if nth($vals, 4) { #{$left}: nth($vals, 4); } + } + } @else { + #{$all}: $vals; + } +} diff --git a/src/styles/vendor/bourbon/helpers/_font-source-declaration.scss b/src/styles/vendor/bourbon/helpers/_font-source-declaration.scss new file mode 100644 index 0000000..7f17586 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_font-source-declaration.scss @@ -0,0 +1,43 @@ +// Used for creating the source string for fonts using @font-face +// Reference: http://goo.gl/Ru1bKP + +@function font-url-prefixer($asset-pipeline) { + @if $asset-pipeline == true { + @return font-url; + } @else { + @return url; + } +} + +@function font-source-declaration( + $font-family, + $file-path, + $asset-pipeline, + $file-formats, + $font-url) { + + $src: (); + + $formats-map: ( + eot: "#{$file-path}.eot?#iefix" format("embedded-opentype"), + woff2: "#{$file-path}.woff2" format("woff2"), + woff: "#{$file-path}.woff" format("woff"), + ttf: "#{$file-path}.ttf" format("truetype"), + svg: "#{$file-path}.svg##{$font-family}" format("svg") + ); + + @each $key, $values in $formats-map { + @if contains($file-formats, $key) { + $file-path: nth($values, 1); + $font-format: nth($values, 2); + + @if $asset-pipeline == true { + $src: append($src, font-url($file-path) $font-format, comma); + } @else { + $src: append($src, url($file-path) $font-format, comma); + } + } + } + + @return $src; +} diff --git a/src/styles/vendor/bourbon/helpers/_gradient-positions-parser.scss b/src/styles/vendor/bourbon/helpers/_gradient-positions-parser.scss new file mode 100644 index 0000000..07d30b6 --- /dev/null +++ b/src/styles/vendor/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/src/styles/vendor/bourbon/helpers/_linear-angle-parser.scss b/src/styles/vendor/bourbon/helpers/_linear-angle-parser.scss new file mode 100644 index 0000000..e0401ed --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_linear-angle-parser.scss @@ -0,0 +1,25 @@ +// Private function for linear-gradient-parser +@function _linear-angle-parser($image, $first-val, $prefix, $suffix) { + $offset: null; + $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); + $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); + + @if ($unit-long == "grad") or + ($unit-long == "turn") { + $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); + } + + @else if ($unit-short == "deg") or + ($unit-short == "rad") { + $offset: if($unit-short == "deg", -90 * 3, 1.6rad); + } + + @if $offset { + $num: _str-to-num($first-val); + + @return ( + webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, + spec-image: $image + ); + } +} diff --git a/src/styles/vendor/bourbon/helpers/_linear-gradient-parser.scss b/src/styles/vendor/bourbon/helpers/_linear-gradient-parser.scss new file mode 100644 index 0000000..48a8f77 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_linear-gradient-parser.scss @@ -0,0 +1,41 @@ +@function _linear-gradient-parser($image) { + $image: unquote($image); + $gradients: (); + $start: str-index($image, "("); + $end: str-index($image, ","); + $first-val: str-slice($image, $start + 1, $end - 1); + + $prefix: str-slice($image, 1, $start); + $suffix: str-slice($image, $end, str-length($image)); + + $has-multiple-vals: str-index($first-val, " "); + $has-single-position: unquote(_position-flipper($first-val) + ""); + $has-angle: is-number(str-slice($first-val, 1, 1)); + + @if $has-multiple-vals { + $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); + } + + @else if $has-single-position != "" { + $pos: unquote($has-single-position + ""); + + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $prefix + "to " + $pos + $suffix + ); + } + + @else if $has-angle { + // Rotate degree for webkit + $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); + } + + @else { + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $image + ); + } + + @return $gradients; +} diff --git a/src/styles/vendor/bourbon/helpers/_linear-positions-parser.scss b/src/styles/vendor/bourbon/helpers/_linear-positions-parser.scss new file mode 100644 index 0000000..96d6a6d --- /dev/null +++ b/src/styles/vendor/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 compatibility + $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 compatibility + @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/src/styles/vendor/bourbon/helpers/_linear-side-corner-parser.scss b/src/styles/vendor/bourbon/helpers/_linear-side-corner-parser.scss new file mode 100644 index 0000000..7a69125 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_linear-side-corner-parser.scss @@ -0,0 +1,31 @@ +// Private function for linear-gradient-parser +@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { + $val-1: str-slice($first-val, 1, $has-multiple-vals - 1); + $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); + $val-3: null; + $has-val-3: str-index($val-2, " "); + + @if $has-val-3 { + $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); + $val-2: str-slice($val-2, 1, $has-val-3 - 1); + } + + $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); + $pos: unquote($pos + ""); + + // Use old spec for webkit + @if $val-1 == "to" { + @return ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + // Bring the code up to spec + @else { + @return ( + webkit-image: -webkit- + $image, + spec-image: $prefix + "to " + $pos + $suffix + ); + } +} diff --git a/src/styles/vendor/bourbon/helpers/_radial-arg-parser.scss b/src/styles/vendor/bourbon/helpers/_radial-arg-parser.scss new file mode 100644 index 0000000..56c6030 --- /dev/null +++ b/src/styles/vendor/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: null; + } + + // 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: null; + } + } + + @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: null; + } + + @else if $value == $g2 { + $g2: null; + } + } + } + } + } + @return $g1, $g2, $pos, $shape-size; +} diff --git a/src/styles/vendor/bourbon/helpers/_radial-gradient-parser.scss b/src/styles/vendor/bourbon/helpers/_radial-gradient-parser.scss new file mode 100644 index 0000000..5444d80 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_radial-gradient-parser.scss @@ -0,0 +1,50 @@ +@function _radial-gradient-parser($image) { + $image: unquote($image); + $gradients: (); + $start: str-index($image, "("); + $end: str-index($image, ","); + $first-val: str-slice($image, $start + 1, $end - 1); + + $prefix: str-slice($image, 1, $start); + $suffix: str-slice($image, $end, str-length($image)); + + $is-spec-syntax: str-index($first-val, "at"); + + @if $is-spec-syntax and $is-spec-syntax > 1 { + $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); + $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); + $pos: append($pos, $keyword, comma); + + $gradients: ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + @else if $is-spec-syntax == 1 { + $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); + + $gradients: ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + @else if str-index($image, "cover") or str-index($image, "contain") { + @warn "Radial-gradient needs to be updated to conform to latest spec."; + + $gradients: ( + webkit-image: null, + spec-image: $image + ); + } + + @else { + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $image + ); + } + + @return $gradients; +} diff --git a/src/styles/vendor/bourbon/helpers/_radial-positions-parser.scss b/src/styles/vendor/bourbon/helpers/_radial-positions-parser.scss new file mode 100644 index 0000000..3c552ad --- /dev/null +++ b/src/styles/vendor/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/src/styles/vendor/bourbon/helpers/_render-gradients.scss b/src/styles/vendor/bourbon/helpers/_render-gradients.scss new file mode 100644 index 0000000..5765676 --- /dev/null +++ b/src/styles/vendor/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/src/styles/vendor/bourbon/helpers/_shape-size-stripper.scss b/src/styles/vendor/bourbon/helpers/_shape-size-stripper.scss new file mode 100644 index 0000000..ee5eda4 --- /dev/null +++ b/src/styles/vendor/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/src/styles/vendor/bourbon/helpers/_str-to-num.scss b/src/styles/vendor/bourbon/helpers/_str-to-num.scss new file mode 100644 index 0000000..3ef1d87 --- /dev/null +++ b/src/styles/vendor/bourbon/helpers/_str-to-num.scss @@ -0,0 +1,50 @@ +//************************************************************************// +// Helper function for linear/radial-gradient-parsers. +// Source: http://sassmeister.com/gist/9647408 +//************************************************************************// +@function _str-to-num($string) { + // Matrices + $strings: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"; + $numbers: 0 1 2 3 4 5 6 7 8 9; + + // Result + $result: 0; + $divider: 0; + $minus: false; + + // Looping through all characters + @for $i from 1 through str-length($string) { + $character: str-slice($string, $i, $i); + $index: index($strings, $character); + + @if $character == "-" { + $minus: true; + } + + @else if $character == "." { + $divider: 1; + } + + @else { + @if not $index { + $result: if($minus, $result * -1, $result); + @return _convert-units($result, str-slice($string, $i)); + } + + $number: nth($numbers, $index); + + @if $divider == 0 { + $result: $result * 10; + } + + @else { + // Move the decimal dot to the left + $divider: $divider * 10; + $number: $number / $divider; + } + + $result: $result + $number; + } + } + @return if($minus, $result * -1, $result); +} diff --git a/src/styles/vendor/bourbon/settings/_asset-pipeline.scss b/src/styles/vendor/bourbon/settings/_asset-pipeline.scss new file mode 100644 index 0000000..4c6afc5 --- /dev/null +++ b/src/styles/vendor/bourbon/settings/_asset-pipeline.scss @@ -0,0 +1,7 @@ +@charset "UTF-8"; + +/// A global setting to enable or disable the `$asset-pipeline` variable for all functions that accept it. +/// +/// @type Bool + +$asset-pipeline: false !default; diff --git a/src/styles/vendor/bourbon/settings/_prefixer.scss b/src/styles/vendor/bourbon/settings/_prefixer.scss new file mode 100644 index 0000000..8c39051 --- /dev/null +++ b/src/styles/vendor/bourbon/settings/_prefixer.scss @@ -0,0 +1,9 @@ +@charset "UTF-8"; + +/// Global variables to enable or disable vendor prefixes + +$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; diff --git a/src/styles/vendor/bourbon/settings/_px-to-em.scss b/src/styles/vendor/bourbon/settings/_px-to-em.scss new file mode 100644 index 0000000..f2f9a3e --- /dev/null +++ b/src/styles/vendor/bourbon/settings/_px-to-em.scss @@ -0,0 +1 @@ +$em-base: 16px !default; diff --git a/src/templates/components/color.mustache b/src/templates/components/color.mustache deleted file mode 100755 index f6e5564..0000000 --- a/src/templates/components/color.mustache +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/src/templates/components/footer.mustache b/src/templates/components/footer.mustache deleted file mode 100755 index 6c4787d..0000000 --- a/src/templates/components/footer.mustache +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/templates/components/heading.mustache b/src/templates/components/heading.mustache deleted file mode 100755 index 3872b02..0000000 --- a/src/templates/components/heading.mustache +++ /dev/null @@ -1,3 +0,0 @@ -
-

-
diff --git a/src/templates/components/input.mustache b/src/templates/components/input.mustache deleted file mode 100755 index 574a949..0000000 --- a/src/templates/components/input.mustache +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/src/templates/components/radiogroup.mustache b/src/templates/components/radiogroup.mustache deleted file mode 100644 index 1bb44e2..0000000 --- a/src/templates/components/radiogroup.mustache +++ /dev/null @@ -1,15 +0,0 @@ -
- {{label}} -
- {{#options}} - - {{/options}} -
-
diff --git a/src/templates/components/select.mustache b/src/templates/components/select.mustache deleted file mode 100755 index 2e6e3ff..0000000 --- a/src/templates/components/select.mustache +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/src/templates/components/subheading.mustache b/src/templates/components/subheading.mustache deleted file mode 100755 index ec02c20..0000000 --- a/src/templates/components/subheading.mustache +++ /dev/null @@ -1,3 +0,0 @@ -
-

-
diff --git a/src/templates/components/submit.mustache b/src/templates/components/submit.mustache deleted file mode 100755 index 27eb81d..0000000 --- a/src/templates/components/submit.mustache +++ /dev/null @@ -1,3 +0,0 @@ -
- -
diff --git a/src/templates/components/toggle.mustache b/src/templates/components/toggle.mustache deleted file mode 100755 index ba7f734..0000000 --- a/src/templates/components/toggle.mustache +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/src/templates/items/color.tpl b/src/templates/items/color.tpl new file mode 100755 index 0000000..5b67f22 --- /dev/null +++ b/src/templates/items/color.tpl @@ -0,0 +1,13 @@ + diff --git a/src/templates/items/footer.tpl b/src/templates/items/footer.tpl new file mode 100755 index 0000000..3724a0d --- /dev/null +++ b/src/templates/items/footer.tpl @@ -0,0 +1,6 @@ + diff --git a/src/templates/items/heading.tpl b/src/templates/items/heading.tpl new file mode 100755 index 0000000..1df869e --- /dev/null +++ b/src/templates/items/heading.tpl @@ -0,0 +1,3 @@ +
+

+
diff --git a/src/templates/items/input.tpl b/src/templates/items/input.tpl new file mode 100755 index 0000000..62215df --- /dev/null +++ b/src/templates/items/input.tpl @@ -0,0 +1,10 @@ + diff --git a/src/templates/items/radiogroup.tpl b/src/templates/items/radiogroup.tpl new file mode 100644 index 0000000..9e3f4a5 --- /dev/null +++ b/src/templates/items/radiogroup.tpl @@ -0,0 +1,16 @@ +
+ {{{label}}} +
+ {{each options}} + + {{/each}} +
+
diff --git a/src/templates/items/select.tpl b/src/templates/items/select.tpl new file mode 100755 index 0000000..593cc99 --- /dev/null +++ b/src/templates/items/select.tpl @@ -0,0 +1,8 @@ + diff --git a/src/templates/items/subheading.tpl b/src/templates/items/subheading.tpl new file mode 100755 index 0000000..07e4778 --- /dev/null +++ b/src/templates/items/subheading.tpl @@ -0,0 +1,3 @@ +
+

+
diff --git a/src/templates/items/submit.tpl b/src/templates/items/submit.tpl new file mode 100755 index 0000000..a6e9d2b --- /dev/null +++ b/src/templates/items/submit.tpl @@ -0,0 +1,9 @@ +
+ +
diff --git a/src/templates/items/toggle.tpl b/src/templates/items/toggle.tpl new file mode 100755 index 0000000..8183cde --- /dev/null +++ b/src/templates/items/toggle.tpl @@ -0,0 +1,10 @@ + From 04273ed8d5a9f7e9c763331b1209e2d14d7f8efc Mon Sep 17 00:00:00 2001 From: Keegan Date: Mon, 18 Jan 2016 15:47:36 -0800 Subject: [PATCH 12/68] styling for input, toggle, color, select and button. --- dev/config.js | 94 +++--- dev/dev.html | 3 - dev/dev.js | 11 + dev/text.html | 57 ++++ gulpfile.js | 5 + index.js | 17 +- package.json | 1 + src/config-page.html | 2 - src/scripts/config-page.js | 15 +- src/scripts/lib/items.js | 2 +- src/scripts/lib/items/color.js | 17 +- src/scripts/lib/items/select.js | 12 +- .../lib/items/{subheading.js => text.js} | 2 +- src/styles/_base.scss | 197 ++++++++++++ src/styles/_fonts.scss | 6 + src/styles/base.scss | 303 ------------------ src/styles/config-page.scss | 5 + src/styles/items/_button.scss | 61 ++++ src/styles/items/_color.scss | 86 +++++ src/styles/items/_input.scss | 47 +++ src/styles/items/_select.scss | 36 +++ src/styles/items/_toggle.scss | 51 +++ src/styles/items/color.scss | 58 ---- src/styles/partials/_mixins.scss | 17 +- src/styles/partials/_reset.scss | 2 - src/styles/partials/_vars.scss | 43 +-- src/templates/items/color.tpl | 12 +- src/templates/items/heading.tpl | 4 +- src/templates/items/input.tpl | 3 +- src/templates/items/select.tpl | 7 +- src/templates/items/subheading.tpl | 3 - src/templates/items/submit.tpl | 8 +- src/templates/items/text.tpl | 3 + src/templates/items/toggle.tpl | 6 +- 34 files changed, 711 insertions(+), 485 deletions(-) create mode 100644 dev/text.html rename src/scripts/lib/items/{subheading.js => text.js} (56%) create mode 100644 src/styles/_base.scss create mode 100644 src/styles/_fonts.scss delete mode 100644 src/styles/base.scss create mode 100644 src/styles/items/_button.scss create mode 100644 src/styles/items/_color.scss create mode 100644 src/styles/items/_input.scss create mode 100644 src/styles/items/_select.scss create mode 100644 src/styles/items/_toggle.scss delete mode 100644 src/styles/items/color.scss delete mode 100755 src/templates/items/subheading.tpl create mode 100644 src/templates/items/text.tpl diff --git a/dev/config.js b/dev/config.js index f9d1e42..8a51cb4 100644 --- a/dev/config.js +++ b/dev/config.js @@ -2,17 +2,46 @@ /* eslint-disable quotes */ module.exports = [ + { + "type": "heading", + "id": "main-heading", + "value": "My Cool App", + "size": 1 + }, + { + "type": "text", + "value": "By Keegan Lillo - Lillo.me" + }, { "type": "section", "items": [ { "type": "heading", - "id": "main-heading", - "value": "My Cool App" + "value": "Settings" }, { - "type": "footer", - "value": "By Keegan Lillo - Lillo.me" + "type": "input", + "app_key": "email", + "value": "", + "label": "Email", + "attributes": { + "placeholder": "eg: name@domain.com", + "limit": 10, + "required": "required", + type: "email" + } + }, + { + "type": "toggle", + "app_key": "like_stuff", + "label": "Enable Cool Stuff", + "value": false + }, + { + "type": "color", + "app_key": "background", + "value": "0xFF0000", + "label": "Background Color" } ] }, @@ -20,58 +49,25 @@ module.exports = [ "type": "section", "items": [ { - "type": "subheading", + "type": "heading", "value": "Settings" }, { - "type": "block", - "items": [ - { - "type": "input", - "app_key": "greeting", - "value": "Hello", - "label": "Greeting", - "attributes": { - "placeholder": "Enter a \"greeting\" >", - "limit": 10, - "required": "required" - } - }, - { - "type": "toggle", - "app_key": "like_stuff", - "label": "Enable Cool Stuff", - "value": true - }, - { - "id": "flavor", - "type": "select", - "app_key": "flavor", - "value": "grape", - "label": "Favorite Flavor", - "options": [ - { "label": "Berry", "value": "berry" }, - { "label": "Grape", "value": "grape" }, - { "label": "Banana", "value": "banana" } - ] - }, - { - "type": "color", - "app_key": "background", - "value": "0xFF0000", - "label": "Background Color" - } + "id": "flavor", + "type": "select", + "app_key": "flavor", + "value": "grape", + "label": "Favorite Flavor", + "options": [ + { "label": "Berry things", "value": "berry" }, + { "label": "Grape", "value": "grape" }, + { "label": "Banana", "value": "banana" } ] } ] }, { - "type": "section", - "items": [ - { - "type": "submit", - "value": "Save" - } - ] + "type": "submit", + "label": "Save" } ]; diff --git a/dev/dev.html b/dev/dev.html index b5f6387..cea3ed0 100644 --- a/dev/dev.html +++ b/dev/dev.html @@ -4,14 +4,11 @@ Pebble Clay Development Page -
- - diff --git a/dev/dev.js b/dev/dev.js index 2612208..97c4b1d 100644 --- a/dev/dev.js +++ b/dev/dev.js @@ -4,3 +4,14 @@ window.returnTo = '$$RETURN_TO$$'; window.clayConfig = require('./config.js'); window.claySettings = {}; window.customFn = require('./custom-fn.js'); + +var platform = window.navigator.userAgent.match('Android') ? 'android' : 'ios'; +document.documentElement.classList.add('platform-' + platform); + +window.expand = function(obj) { + obj.size = 5; +}; + +function unexpand(obj) { + obj.size = 1; +} diff --git a/dev/text.html b/dev/text.html new file mode 100644 index 0000000..6e2e3f2 --- /dev/null +++ b/dev/text.html @@ -0,0 +1,57 @@ + + + + Pebble Clay Development Page + + + + + + + diff --git a/gulpfile.js b/gulpfile.js index 0021387..98b48b7 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,6 +10,7 @@ var minifyInline = require('gulp-minify-inline'); var minifyHTML = require('gulp-minify-html'); var sass = require('gulp-sass'); var sourceMaps = require('gulp-sourcemaps'); +var autoprefixer = require('gulp-autoprefixer'); gulp.task('clean-js', function() { return del(['tmp/config-page.js']); @@ -31,6 +32,10 @@ gulp.task('sass', ['clean-sass'], function() { gulp.src('./src/styles/config-page.scss') .pipe(sourceMaps.init()) .pipe(sass().on('error', sass.logError)) + .pipe(autoprefixer({ + browsers: ['Android 4', 'iOS 8'], + cascade: false + })) .pipe(sourceMaps.write('./')) .pipe(gulp.dest('tmp')); }); diff --git a/index.js b/index.js index f9bda32..8ee7be3 100755 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ 'use strict'; var configPageHtml = require('./tmp/config-page.html'); +//var errorPageHtml = require('./tmp/error-page.html'); function encodeDataUri(input) { if (window.btoa) { @@ -74,12 +75,20 @@ Clay.prototype.generateUrl = function(returnTo) { console.error(e); settings = {}; } + + var strings = { + customFn: this.customFn.toString().replace(/^.*?\{/, '{'), + returnTo: returnTo || 'pebblejs://close#', + config: JSON.stringify(this.config), + settings: JSON.stringify(settings) + }; + // Show config page return encodeDataUri(configPageHtml - .replace('$$CUSTOM_FN$$', this.customFn.toString().replace(/^.*?\{/, '{')) - .replace('$$RETURN_TO$$', returnTo || 'pebblejs://close#') - .replace('$$CONFIG$$', JSON.stringify(this.config)) - .replace('$$SETTINGS$$', JSON.stringify(settings)) + .replace('$$CUSTOM_FN$$', strings.customFn) + .replace('$$RETURN_TO$$', strings.returnTo) + .replace('$$CONFIG$$', strings.config) + .replace('$$SETTINGS$$', strings.settings) ); }; diff --git a/package.json b/package.json index efe3afd..1bef320 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "eslint": "^1.5.1", "eslint-config-pebble": "^1.2.0", "eslint-plugin-standard": "^1.3.1", + "gulp-autoprefixer": "^3.1.0", "gulp-sass": "^2.1.1", "gulp-sourcemaps": "^1.6.0" }, diff --git a/src/config-page.html b/src/config-page.html index 3349c98..63e641b 100755 --- a/src/config-page.html +++ b/src/config-page.html @@ -2,7 +2,6 @@ - diff --git a/src/scripts/config-page.js b/src/scripts/config-page.js index 9ef80d8..3344cec 100755 --- a/src/scripts/config-page.js +++ b/src/scripts/config-page.js @@ -60,15 +60,9 @@ function processConfigItem(item, $parent) { processConfigItem(item, $parent); }); } else if (item.type === 'section') { - processConfigItem( - item.items, - $parent.add(HTML('
')) - ); - } else if (item.type === 'block') { - processConfigItem( - item.items, - $parent.add(HTML('
')) - ); + var $container = HTML('
'); + $parent.add($container); + processConfigItem(item.items, $container); } else { console.debug('KEEGAN: itemType', item.type); var apiItem = {}; @@ -76,7 +70,8 @@ function processConfigItem(item, $parent) { var templateData = { label: '', options: [], - attributes: {} + attributes: {}, + size: 4 }; console.debug('KEEGAN: templateData', templateData); diff --git a/src/scripts/lib/items.js b/src/scripts/lib/items.js index ae96c67..5d9cee8 100755 --- a/src/scripts/lib/items.js +++ b/src/scripts/lib/items.js @@ -2,7 +2,7 @@ module.exports = { heading: require('./items/heading'), - subheading: require('./items/subheading'), + text: require('./items/text'), footer: require('./items/footer'), input: require('./items/input'), color: require('./items/color'), diff --git a/src/scripts/lib/items/color.js b/src/scripts/lib/items/color.js index 1c56496..b61cf2b 100644 --- a/src/scripts/lib/items/color.js +++ b/src/scripts/lib/items/color.js @@ -60,7 +60,7 @@ module.exports = { grid += '{{{label}}} -
- -
-
+ +
+
+
+
+
diff --git a/src/templates/items/heading.tpl b/src/templates/items/heading.tpl index 1df869e..932cdc1 100755 --- a/src/templates/items/heading.tpl +++ b/src/templates/items/heading.tpl @@ -1,3 +1,3 @@ -
-

+
+
diff --git a/src/templates/items/input.tpl b/src/templates/items/input.tpl index 62215df..42b2eca 100755 --- a/src/templates/items/input.tpl +++ b/src/templates/items/input.tpl @@ -1,9 +1,8 @@ -