diff --git a/.gitignore b/.gitignore index 87b83ff..527e7da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -dist -vendor node_modules .DS_Store diff --git a/dist/app.js b/dist/app.js new file mode 100644 index 0000000..f582441 --- /dev/null +++ b/dist/app.js @@ -0,0 +1,80 @@ +'use strict'; + +Array.prototype.random = function () { + return this[Math.floor(Math.random() * this.length)]; +}; + +var wordThemes = ['candy', 'beer', 'coffee', 'car', 'liquor', 'mustache']; +var suffixes = ['', 'JS', 'Script', '.js', '.io', 'DB']; +var wordsToUse = 3; + +var stackPhrases = { + intros: ['My prefered tech stack is a', 'I feel the best way to build ambitious apps is with a', 'An ideal stack would be a', 'I start off with a'], + toolVarieties: ['', 'engine', 'generator', 'framework', 'setup', 'frontend', 'backend', 'library', 'plugin'], + toolConnections: ['powered by a', 'controlling a', 'alongside a', 'integrated with a', 'plugged into a', 'synced to a'], + outros: ['to build ambitious web apps.', 'to innovate to the best of my ability.', 'to inspire the Open Source community of makers.'] +}; + +var app = new Vue({ + el: '#app', + data: { + loading: true, + stack: '' + }, + methods: { + newStack: function newStack() { + var _this = this; + + this.loading = true; + this.stack = generateStack().then(function (stack) { + _this.loading = false; + _this.stack = stack; + }).catch(function (e) { + _this.loading = false; + _this.stack = 'Uhoh! There was a problem generating a silly tech stack. Most likely we have hit our API limit for the month. Hang in there!'; + }); + } + } +}); + +// Fire off a new stack request on load +app.newStack(); + +function generateStack() { + return Promise.all(wordThemes.map(function (w) { + return getWordsRelatedTo(w); + })).then(function (data) { + return data.reduce(function (prev, cur) { + return [].concat(prev.length ? prev : [], cur.hasTypes); + }); + }).then(wordsToStack); +} + +function getWordsRelatedTo(word) { + return fetch('https://wt-sharpshark28-gmail_com-0.run.webtask.io/oh-i-use-backend?word=' + word).then(function (r) { + return r.json(); + }); +} + +function wordsToStack(allWords) { + var stack = stackPhrases.intros.random(); + + for (var i = 1; i <= wordsToUse; i++) { + var techWord = wordToTechTerm(allWords.random()); + var variety = stackPhrases.toolVarieties.random(); + var connection = stackPhrases.toolConnections.random(); + var outro = stackPhrases.outros.random(); + var end = i < wordsToUse ? connection : outro; + stack += ' ' + techWord + ' ' + variety + ' ' + end; + } + + return stack; +} + +function wordToTechTerm(word) { + word = word.split(' ').map(function (word) { + return word.charAt(0).toUpperCase() + word.slice(1); + }); // Capitalize each word + return word.join('') + suffixes.random(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHAuanMiXSwibmFtZXMiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJyYW5kb20iLCJNYXRoIiwiZmxvb3IiLCJsZW5ndGgiLCJ3b3JkVGhlbWVzIiwic3VmZml4ZXMiLCJ3b3Jkc1RvVXNlIiwic3RhY2tQaHJhc2VzIiwiaW50cm9zIiwidG9vbFZhcmlldGllcyIsInRvb2xDb25uZWN0aW9ucyIsIm91dHJvcyIsImFwcCIsIlZ1ZSIsImVsIiwiZGF0YSIsImxvYWRpbmciLCJzdGFjayIsIm1ldGhvZHMiLCJuZXdTdGFjayIsImdlbmVyYXRlU3RhY2siLCJ0aGVuIiwiY2F0Y2giLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiZ2V0V29yZHNSZWxhdGVkVG8iLCJ3IiwicmVkdWNlIiwicHJldiIsImN1ciIsImNvbmNhdCIsImhhc1R5cGVzIiwid29yZHNUb1N0YWNrIiwid29yZCIsImZldGNoIiwiciIsImpzb24iLCJhbGxXb3JkcyIsImkiLCJ0ZWNoV29yZCIsIndvcmRUb1RlY2hUZXJtIiwidmFyaWV0eSIsImNvbm5lY3Rpb24iLCJvdXRybyIsImVuZCIsInNwbGl0IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImpvaW4iXSwibWFwcGluZ3MiOiI7O0FBQUFBLE1BQU1DLFNBQU4sQ0FBZ0JDLE1BQWhCLEdBQXlCLFlBQVc7QUFDbEMsU0FBTyxLQUFLQyxLQUFLQyxLQUFMLENBQVdELEtBQUtELE1BQUwsS0FBZ0IsS0FBS0csTUFBaEMsQ0FBTCxDQUFQO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJQyxhQUFhLENBQUMsT0FBRCxFQUFVLE1BQVYsRUFBa0IsUUFBbEIsRUFBNEIsS0FBNUIsRUFBbUMsUUFBbkMsRUFBNkMsVUFBN0MsQ0FBakI7QUFDQSxJQUFJQyxXQUFXLENBQUMsRUFBRCxFQUFLLElBQUwsRUFBVyxRQUFYLEVBQXFCLEtBQXJCLEVBQTRCLEtBQTVCLEVBQW1DLElBQW5DLENBQWY7QUFDQSxJQUFJQyxhQUFhLENBQWpCOztBQUVB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QUFLZSxLQUFMLENBQVcsQ0FBWCxDQUF2QztBQUFBLEdBQXBCLENBQVAsQ0FENEIsQ0FDc0Q7QUFDbEYsU0FBT2YsS0FBS2dCLElBQUwsQ0FBVSxFQUFWLElBQWdCN0MsU0FBU0wsTUFBVCxFQUF2QjtBQUNEIiwiZmlsZSI6ImFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIkFycmF5LnByb3RvdHlwZS5yYW5kb20gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5sZW5ndGgpXTtcbn1cblxubGV0IHdvcmRUaGVtZXMgPSBbJ2NhbmR5JywgJ2JlZXInLCAnY29mZmVlJywgJ2NhcicsICdsaXF1b3InLCAnbXVzdGFjaGUnXTtcbmxldCBzdWZmaXhlcyA9IFsnJywgJ0pTJywgJ1NjcmlwdCcsICcuanMnLCAnLmlvJywgJ0RCJ107XG5sZXQgd29yZHNUb1VzZSA9IDM7XG5cbmxldCBzdGFja1BocmFzZXMgPSB7XG4gIGludHJvczogW1xuICAgICdNeSBwcmVmZXJlZCB0ZWNoIHN0YWNrIGlzIGEnLFxuICAgICdJIGZlZWwgdGhlIGJlc3Qgd2F5IHRvIGJ1aWxkIGFtYml0aW91cyBhcHBzIGlzIHdpdGggYScsXG4gICAgJ0FuIGlkZWFsIHN0YWNrIHdvdWxkIGJlIGEnLFxuICAgICdJIHN0YXJ0IG9mZiB3aXRoIGEnXG4gIF0sXG4gIHRvb2xWYXJpZXRpZXM6IFtcbiAgICAnJyxcbiAgICAnZW5naW5lJyxcbiAgICAnZ2VuZXJhdG9yJyxcbiAgICAnZnJhbWV3b3JrJyxcbiAgICAnc2V0dXAnLFxuICAgICdmcm9udGVuZCcsXG4gICAgJ2JhY2tlbmQnLFxuICAgICdsaWJyYXJ5JyxcbiAgICAncGx1Z2luJ1xuICBdLFxuICB0b29sQ29ubmVjdGlvbnM6IFtcbiAgICAncG93ZXJlZCBieSBhJyxcbiAgICAnY29udHJvbGxpbmcgYScsXG4gICAgJ2Fsb25nc2lkZSBhJyxcbiAgICAnaW50ZWdyYXRlZCB3aXRoIGEnLFxuICAgICdwbHVnZ2VkIGludG8gYScsXG4gICAgJ3N5bmNlZCB0byBhJ1xuICBdLFxuICBvdXRyb3M6IFtcbiAgICAndG8gYnVpbGQgYW1iaXRpb3VzIHdlYiBhcHBzLicsXG4gICAgJ3RvIGlubm92YXRlIHRvIHRoZSBiZXN0IG9mIG15IGFiaWxpdHkuJyxcbiAgICAndG8gaW5zcGlyZSB0aGUgT3BlbiBTb3VyY2UgY29tbXVuaXR5IG9mIG1ha2Vycy4nXG4gIF1cbn07XG5cbmxldCBhcHAgPSBuZXcgVnVlKHtcbiAgZWw6ICcjYXBwJyxcbiAgZGF0YToge1xuICAgIGxvYWRpbmc6IHRydWUsXG4gICAgc3RhY2s6ICcnXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBuZXdTdGFjaygpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnN0YWNrID0gZ2VuZXJhdGVTdGFjaygpXG4gICAgICAgIC50aGVuKHN0YWNrID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0YWNrID0gJ1Vob2ghIFRoZXJlIHdhcyBhIHByb2JsZW0gZ2VuZXJhdGluZyBhIHNpbGx5IHRlY2ggc3RhY2suIE1vc3QgbGlrZWx5IHdlIGhhdmUgaGl0IG91ciBBUEkgbGltaXQgZm9yIHRoZSBtb250aC4gSGFuZyBpbiB0aGVyZSEnO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBGaXJlIG9mZiBhIG5ldyBzdGFjayByZXF1ZXN0IG9uIGxvYWRcbmFwcC5uZXdTdGFjaygpO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0YWNrKCkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwod29yZFRoZW1lcy5tYXAodyA9PiBnZXRXb3Jkc1JlbGF0ZWRUbyh3KSkpXG4gICAgLnRoZW4oZGF0YSA9PiBkYXRhLnJlZHVjZSgocHJldiwgY3VyKSA9PiBbXS5jb25jYXQocHJldi5sZW5ndGggPyBwcmV2IDogW10sIGN1ci5oYXNUeXBlcykpKVxuICAgIC50aGVuKHdvcmRzVG9TdGFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFdvcmRzUmVsYXRlZFRvKHdvcmQpIHtcbiAgcmV0dXJuIGZldGNoKCdodHRwczovL3d0LXNoYXJwc2hhcmsyOC1nbWFpbF9jb20tMC5ydW4ud2VidGFzay5pby9vaC1pLXVzZS1iYWNrZW5kP3dvcmQ9JyArIHdvcmQpXG4gICAgLnRoZW4ociA9PiByLmpzb24oKSk7XG59XG5cbmZ1bmN0aW9uIHdvcmRzVG9TdGFjayhhbGxXb3Jkcykge1xuICBsZXQgc3RhY2sgPSBzdGFja1BocmFzZXMuaW50cm9zLnJhbmRvbSgpO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IHdvcmRzVG9Vc2U7IGkrKykge1xuICAgIGxldCB0ZWNoV29yZCA9IHdvcmRUb1RlY2hUZXJtKGFsbFdvcmRzLnJhbmRvbSgpKTtcbiAgICBsZXQgdmFyaWV0eSA9IHN0YWNrUGhyYXNlcy50b29sVmFyaWV0aWVzLnJhbmRvbSgpO1xuICAgIGxldCBjb25uZWN0aW9uID0gc3RhY2tQaHJhc2VzLnRvb2xDb25uZWN0aW9ucy5yYW5kb20oKTtcbiAgICBsZXQgb3V0cm8gPSBzdGFja1BocmFzZXMub3V0cm9zLnJhbmRvbSgpO1xuICAgIGxldCBlbmQgPSBpIDwgd29yZHNUb1VzZSA/IGNvbm5lY3Rpb24gOiBvdXRybztcbiAgICBzdGFjayArPSBgICR7dGVjaFdvcmR9ICR7dmFyaWV0eX0gJHtlbmR9YDtcbiAgfVxuXG4gIHJldHVybiBzdGFjaztcbn1cblxuZnVuY3Rpb24gd29yZFRvVGVjaFRlcm0od29yZCkge1xuICB3b3JkID0gd29yZC5zcGxpdCgnICcpLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKTsgLy8gQ2FwaXRhbGl6ZSBlYWNoIHdvcmRcbiAgcmV0dXJuIHdvcmQuam9pbignJykgKyBzdWZmaXhlcy5yYW5kb20oKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/favicon/android-icon-144x144.png b/dist/favicon/android-icon-144x144.png new file mode 100644 index 0000000..c6c90cd Binary files /dev/null and b/dist/favicon/android-icon-144x144.png differ diff --git a/dist/favicon/android-icon-192x192.png b/dist/favicon/android-icon-192x192.png new file mode 100644 index 0000000..c4be4b6 Binary files /dev/null and b/dist/favicon/android-icon-192x192.png differ diff --git a/dist/favicon/android-icon-36x36.png b/dist/favicon/android-icon-36x36.png new file mode 100644 index 0000000..9836289 Binary files /dev/null and b/dist/favicon/android-icon-36x36.png differ diff --git a/dist/favicon/android-icon-48x48.png b/dist/favicon/android-icon-48x48.png new file mode 100644 index 0000000..dae27c0 Binary files /dev/null and b/dist/favicon/android-icon-48x48.png differ diff --git a/dist/favicon/android-icon-72x72.png b/dist/favicon/android-icon-72x72.png new file mode 100644 index 0000000..962e839 Binary files /dev/null and b/dist/favicon/android-icon-72x72.png differ diff --git a/dist/favicon/android-icon-96x96.png b/dist/favicon/android-icon-96x96.png new file mode 100644 index 0000000..6de66d1 Binary files /dev/null and b/dist/favicon/android-icon-96x96.png differ diff --git a/dist/favicon/apple-icon-114x114.png b/dist/favicon/apple-icon-114x114.png new file mode 100644 index 0000000..fb497d2 Binary files /dev/null and b/dist/favicon/apple-icon-114x114.png differ diff --git a/dist/favicon/apple-icon-120x120.png b/dist/favicon/apple-icon-120x120.png new file mode 100644 index 0000000..39f0e06 Binary files /dev/null and b/dist/favicon/apple-icon-120x120.png differ diff --git a/dist/favicon/apple-icon-144x144.png b/dist/favicon/apple-icon-144x144.png new file mode 100644 index 0000000..c6c90cd Binary files /dev/null and b/dist/favicon/apple-icon-144x144.png differ diff --git a/dist/favicon/apple-icon-152x152.png b/dist/favicon/apple-icon-152x152.png new file mode 100644 index 0000000..0f63340 Binary files /dev/null and b/dist/favicon/apple-icon-152x152.png differ diff --git a/dist/favicon/apple-icon-180x180.png b/dist/favicon/apple-icon-180x180.png new file mode 100644 index 0000000..2b94363 Binary files /dev/null and b/dist/favicon/apple-icon-180x180.png differ diff --git a/dist/favicon/apple-icon-57x57.png b/dist/favicon/apple-icon-57x57.png new file mode 100644 index 0000000..0aeb442 Binary files /dev/null and b/dist/favicon/apple-icon-57x57.png differ diff --git a/dist/favicon/apple-icon-60x60.png b/dist/favicon/apple-icon-60x60.png new file mode 100644 index 0000000..590903a Binary files /dev/null and b/dist/favicon/apple-icon-60x60.png differ diff --git a/dist/favicon/apple-icon-72x72.png b/dist/favicon/apple-icon-72x72.png new file mode 100644 index 0000000..962e839 Binary files /dev/null and b/dist/favicon/apple-icon-72x72.png differ diff --git a/dist/favicon/apple-icon-76x76.png b/dist/favicon/apple-icon-76x76.png new file mode 100644 index 0000000..abdc6cf Binary files /dev/null and b/dist/favicon/apple-icon-76x76.png differ diff --git a/dist/favicon/apple-icon-precomposed.png b/dist/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000..df400d7 Binary files /dev/null and b/dist/favicon/apple-icon-precomposed.png differ diff --git a/dist/favicon/apple-icon.png b/dist/favicon/apple-icon.png new file mode 100644 index 0000000..df400d7 Binary files /dev/null and b/dist/favicon/apple-icon.png differ diff --git a/dist/favicon/browserconfig.xml b/dist/favicon/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/dist/favicon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/dist/favicon/favicon-16x16.png b/dist/favicon/favicon-16x16.png new file mode 100644 index 0000000..a800f80 Binary files /dev/null and b/dist/favicon/favicon-16x16.png differ diff --git a/dist/favicon/favicon-32x32.png b/dist/favicon/favicon-32x32.png new file mode 100644 index 0000000..e9d9481 Binary files /dev/null and b/dist/favicon/favicon-32x32.png differ diff --git a/dist/favicon/favicon-96x96.png b/dist/favicon/favicon-96x96.png new file mode 100644 index 0000000..6de66d1 Binary files /dev/null and b/dist/favicon/favicon-96x96.png differ diff --git a/dist/favicon/favicon.ico b/dist/favicon/favicon.ico new file mode 100644 index 0000000..9fdf4da Binary files /dev/null and b/dist/favicon/favicon.ico differ diff --git a/dist/favicon/manifest.json b/dist/favicon/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/dist/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/dist/favicon/ms-icon-144x144.png b/dist/favicon/ms-icon-144x144.png new file mode 100644 index 0000000..c6c90cd Binary files /dev/null and b/dist/favicon/ms-icon-144x144.png differ diff --git a/dist/favicon/ms-icon-150x150.png b/dist/favicon/ms-icon-150x150.png new file mode 100644 index 0000000..65c9526 Binary files /dev/null and b/dist/favicon/ms-icon-150x150.png differ diff --git a/dist/favicon/ms-icon-310x310.png b/dist/favicon/ms-icon-310x310.png new file mode 100644 index 0000000..a1c3511 Binary files /dev/null and b/dist/favicon/ms-icon-310x310.png differ diff --git a/dist/favicon/ms-icon-70x70.png b/dist/favicon/ms-icon-70x70.png new file mode 100644 index 0000000..4638978 Binary files /dev/null and b/dist/favicon/ms-icon-70x70.png differ diff --git a/package.json b/package.json index 52fb971..a3e8212 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "build": "npm run vendor && babel src --out-dir dist", "watch": "npm run vendor && babel src --watch --out-dir dist --source-maps inline", - "vendor": "mkdir -p vendor vendor/css vendor/js && cp -R ./src/favicon ./dist/favicon && cp -R ./node_modules/skeleton-css/css/ ./vendor/css && cp ./node_modules/vue/dist/vue.min.js ./vendor/js/vue.min.js && cp ./node_modules/whatwg-fetch/fetch.js ./vendor/js/fetch.js" + "vendor": "mkdir -p vendor vendor/css vendor/js && cp -R ./src/favicon ./dist/favicon && cp -R ./node_modules/skeleton-css/css/ ./vendor/css && cp ./node_modules/vue/dist/vue.min.js ./vendor/js/vue.min.js && cp ./node_modules/whatwg-fetch/fetch.js ./vendor/js/fetch.js", + "clean": "rm -rf ./vendor ./dist" }, "author": "Joe Wroten ", "license": "ISC", diff --git a/vendor/css/normalize.css b/vendor/css/normalize.css new file mode 100644 index 0000000..81c6f31 --- /dev/null +++ b/vendor/css/normalize.css @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} \ No newline at end of file diff --git a/vendor/css/skeleton.css b/vendor/css/skeleton.css new file mode 100644 index 0000000..f28bf6c --- /dev/null +++ b/vendor/css/skeleton.css @@ -0,0 +1,418 @@ +/* +* Skeleton V2.0.4 +* Copyright 2014, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 12/29/2014 +*/ + + +/* Table of contents +–––––––––––––––––––––––––––––––––––––––––––––––––– +- Grid +- Base Styles +- Typography +- Links +- Buttons +- Forms +- Lists +- Code +- Tables +- Spacing +- Utilities +- Clearing +- Media Queries +*/ + + +/* Grid +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container { + position: relative; + width: 100%; + max-width: 960px; + margin: 0 auto; + padding: 0 20px; + box-sizing: border-box; } +.column, +.columns { + width: 100%; + float: left; + box-sizing: border-box; } + +/* For devices larger than 400px */ +@media (min-width: 400px) { + .container { + width: 85%; + padding: 0; } +} + +/* For devices larger than 550px */ +@media (min-width: 550px) { + .container { + width: 80%; } + .column, + .columns { + margin-left: 4%; } + .column:first-child, + .columns:first-child { + margin-left: 0; } + + .one.column, + .one.columns { width: 4.66666666667%; } + .two.columns { width: 13.3333333333%; } + .three.columns { width: 22%; } + .four.columns { width: 30.6666666667%; } + .five.columns { width: 39.3333333333%; } + .six.columns { width: 48%; } + .seven.columns { width: 56.6666666667%; } + .eight.columns { width: 65.3333333333%; } + .nine.columns { width: 74.0%; } + .ten.columns { width: 82.6666666667%; } + .eleven.columns { width: 91.3333333333%; } + .twelve.columns { width: 100%; margin-left: 0; } + + .one-third.column { width: 30.6666666667%; } + .two-thirds.column { width: 65.3333333333%; } + + .one-half.column { width: 48%; } + + /* Offsets */ + .offset-by-one.column, + .offset-by-one.columns { margin-left: 8.66666666667%; } + .offset-by-two.column, + .offset-by-two.columns { margin-left: 17.3333333333%; } + .offset-by-three.column, + .offset-by-three.columns { margin-left: 26%; } + .offset-by-four.column, + .offset-by-four.columns { margin-left: 34.6666666667%; } + .offset-by-five.column, + .offset-by-five.columns { margin-left: 43.3333333333%; } + .offset-by-six.column, + .offset-by-six.columns { margin-left: 52%; } + .offset-by-seven.column, + .offset-by-seven.columns { margin-left: 60.6666666667%; } + .offset-by-eight.column, + .offset-by-eight.columns { margin-left: 69.3333333333%; } + .offset-by-nine.column, + .offset-by-nine.columns { margin-left: 78.0%; } + .offset-by-ten.column, + .offset-by-ten.columns { margin-left: 86.6666666667%; } + .offset-by-eleven.column, + .offset-by-eleven.columns { margin-left: 95.3333333333%; } + + .offset-by-one-third.column, + .offset-by-one-third.columns { margin-left: 34.6666666667%; } + .offset-by-two-thirds.column, + .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } + + .offset-by-one-half.column, + .offset-by-one-half.columns { margin-left: 52%; } + +} + + +/* Base Styles +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* NOTE +html is set to 62.5% so that all the REM measurements throughout Skeleton +are based on 10px sizing. So basically 1.5rem = 15px :) */ +html { + font-size: 62.5%; } +body { + font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ + line-height: 1.6; + font-weight: 400; + font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #222; } + + +/* Typography +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 2rem; + font-weight: 300; } +h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} +h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } +h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } +h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } +h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } +h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } + +/* Larger than phablet */ +@media (min-width: 550px) { + h1 { font-size: 5.0rem; } + h2 { font-size: 4.2rem; } + h3 { font-size: 3.6rem; } + h4 { font-size: 3.0rem; } + h5 { font-size: 2.4rem; } + h6 { font-size: 1.5rem; } +} + +p { + margin-top: 0; } + + +/* Links +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +a { + color: #1EAEDB; } +a:hover { + color: #0FA0CE; } + + +/* Buttons +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.button, +button, +input[type="submit"], +input[type="reset"], +input[type="button"] { + display: inline-block; + height: 38px; + padding: 0 30px; + color: #555; + text-align: center; + font-size: 11px; + font-weight: 600; + line-height: 38px; + letter-spacing: .1rem; + text-transform: uppercase; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border-radius: 4px; + border: 1px solid #bbb; + cursor: pointer; + box-sizing: border-box; } +.button:hover, +button:hover, +input[type="submit"]:hover, +input[type="reset"]:hover, +input[type="button"]:hover, +.button:focus, +button:focus, +input[type="submit"]:focus, +input[type="reset"]:focus, +input[type="button"]:focus { + color: #333; + border-color: #888; + outline: 0; } +.button.button-primary, +button.button-primary, +input[type="submit"].button-primary, +input[type="reset"].button-primary, +input[type="button"].button-primary { + color: #FFF; + background-color: #33C3F0; + border-color: #33C3F0; } +.button.button-primary:hover, +button.button-primary:hover, +input[type="submit"].button-primary:hover, +input[type="reset"].button-primary:hover, +input[type="button"].button-primary:hover, +.button.button-primary:focus, +button.button-primary:focus, +input[type="submit"].button-primary:focus, +input[type="reset"].button-primary:focus, +input[type="button"].button-primary:focus { + color: #FFF; + background-color: #1EAEDB; + border-color: #1EAEDB; } + + +/* Forms +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea, +select { + height: 38px; + padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ + background-color: #fff; + border: 1px solid #D1D1D1; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; } +/* Removes awkward default styles on some inputs for iOS */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } +textarea { + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px; } +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="text"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + border: 1px solid #33C3F0; + outline: 0; } +label, +legend { + display: block; + margin-bottom: .5rem; + font-weight: 600; } +fieldset { + padding: 0; + border-width: 0; } +input[type="checkbox"], +input[type="radio"] { + display: inline; } +label > .label-body { + display: inline-block; + margin-left: .5rem; + font-weight: normal; } + + +/* Lists +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul { + list-style: circle inside; } +ol { + list-style: decimal inside; } +ol, ul { + padding-left: 0; + margin-top: 0; } +ul ul, +ul ol, +ol ol, +ol ul { + margin: 1.5rem 0 1.5rem 3rem; + font-size: 90%; } +li { + margin-bottom: 1rem; } + + +/* Code +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +code { + padding: .2rem .5rem; + margin: 0 .2rem; + font-size: 90%; + white-space: nowrap; + background: #F1F1F1; + border: 1px solid #E1E1E1; + border-radius: 4px; } +pre > code { + display: block; + padding: 1rem 1.5rem; + white-space: pre; } + + +/* Tables +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +th, +td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #E1E1E1; } +th:first-child, +td:first-child { + padding-left: 0; } +th:last-child, +td:last-child { + padding-right: 0; } + + +/* Spacing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +button, +.button { + margin-bottom: 1rem; } +input, +textarea, +select, +fieldset { + margin-bottom: 1.5rem; } +pre, +blockquote, +dl, +figure, +table, +p, +ul, +ol, +form { + margin-bottom: 2.5rem; } + + +/* Utilities +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.u-full-width { + width: 100%; + box-sizing: border-box; } +.u-max-full-width { + max-width: 100%; + box-sizing: border-box; } +.u-pull-right { + float: right; } +.u-pull-left { + float: left; } + + +/* Misc +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +hr { + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #E1E1E1; } + + +/* Clearing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +/* Self Clearing Goodness */ +.container:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both; } + + +/* Media Queries +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* +Note: The best way to structure the use of media queries is to create the queries +near the relevant code. For example, if you wanted to change the styles for buttons +on small devices, paste the mobile query code up in the buttons section and style it +there. +*/ + + +/* Larger than mobile */ +@media (min-width: 400px) {} + +/* Larger than phablet (also point when grid becomes active) */ +@media (min-width: 550px) {} + +/* Larger than tablet */ +@media (min-width: 750px) {} + +/* Larger than desktop */ +@media (min-width: 1000px) {} + +/* Larger than Desktop HD */ +@media (min-width: 1200px) {} diff --git a/vendor/js/fetch.js b/vendor/js/fetch.js new file mode 100644 index 0000000..d0652de --- /dev/null +++ b/vendor/js/fetch.js @@ -0,0 +1,433 @@ +(function(self) { + 'use strict'; + + if (self.fetch) { + return + } + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: 'FileReader' in self && 'Blob' in self && (function() { + try { + new Blob() + return true + } catch(e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator + } + + function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var list = this.map[name] + if (!list) { + list = [] + this.map[name] = list + } + list.push(value) + } + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] + } + + Headers.prototype.get = function(name) { + var values = this.map[normalizeName(name)] + return values ? values[0] : null + } + + Headers.prototype.getAll = function(name) { + return this.map[normalizeName(name)] || [] + } + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + } + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = [normalizeValue(value)] + } + + Headers.prototype.forEach = function(callback, thisArg) { + Object.getOwnPropertyNames(this.map).forEach(function(name) { + this.map[name].forEach(function(value) { + callback.call(thisArg, value, name, this) + }, this) + }, this) + } + + Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { items.push(name) }) + return iteratorFor(items) + } + + Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { items.push(value) }) + return iteratorFor(items) + } + + Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { items.push([name, value]) }) + return iteratorFor(items) + } + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + reader.readAsArrayBuffer(blob) + return fileReaderReady(reader) + } + + function readBlobAsText(blob) { + var reader = new FileReader() + reader.readAsText(blob) + return fileReaderReady(reader) + } + + function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + this._bodyInit = body + if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (!body) { + this._bodyText = '' + } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) { + // Only support ArrayBuffers for POST method. + // Receiving ArrayBuffers happens via Blobs, instead. + } else { + throw new Error('unsupported BodyInit type') + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + + this.arrayBuffer = function() { + return this.blob().then(readBlobAsArrayBuffer) + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + } else { + this.text = function() { + var rejected = consumed(this) + return rejected ? rejected : Promise.resolve(this._bodyText) + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + + function normalizeMethod(method) { + var upcased = method.toUpperCase() + return (methods.indexOf(upcased) > -1) ? upcased : method + } + + function Request(input, options) { + options = options || {} + var body = options.body + if (Request.prototype.isPrototypeOf(input)) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + if (!body) { + body = input._bodyInit + input.bodyUsed = true + } + } else { + this.url = input + } + + this.credentials = options.credentials || this.credentials || 'omit' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + } + + Request.prototype.clone = function() { + return new Request(this) + } + + function decode(body) { + var form = new FormData() + body.trim().split('&').forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form + } + + function headers(xhr) { + var head = new Headers() + var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\n') + pairs.forEach(function(header) { + var split = header.trim().split(':') + var key = split.shift().trim() + var value = split.join(':').trim() + head.append(key, value) + }) + return head + } + + Body.call(Request.prototype) + + function Response(bodyInit, options) { + if (!options) { + options = {} + } + + this.type = 'default' + this.status = options.status + this.ok = this.status >= 200 && this.status < 300 + this.statusText = options.statusText + this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) + } + + Body.call(Response.prototype) + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + } + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response + } + + var redirectStatuses = [301, 302, 303, 307, 308] + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + } + + self.Headers = Headers + self.Request = Request + self.Response = Response + + self.fetch = function(input, init) { + return new Promise(function(resolve, reject) { + var request + if (Request.prototype.isPrototypeOf(input) && !init) { + request = input + } else { + request = new Request(input, init) + } + + var xhr = new XMLHttpRequest() + + function responseURL() { + if ('responseURL' in xhr) { + return xhr.responseURL + } + + // Avoid security warnings on getResponseHeader when not allowed by CORS + if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) { + return xhr.getResponseHeader('X-Request-URL') + } + + return + } + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: headers(xhr), + url: responseURL() + } + var body = 'response' in xhr ? xhr.response : xhr.responseText + resolve(new Response(body, options)) + } + + xhr.onerror = function() { + reject(new TypeError('Network request failed')) + } + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')) + } + + xhr.open(request.method, request.url, true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob' + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) + } + self.fetch.polyfill = true +})(typeof self !== 'undefined' ? self : this); diff --git a/vendor/js/vue.min.js b/vendor/js/vue.min.js new file mode 100644 index 0000000..53f825c --- /dev/null +++ b/vendor/js/vue.min.js @@ -0,0 +1,7 @@ +/*! + * Vue.js v2.0.1 + * (c) 2014-2016 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function t(e){var t=parseFloat(e,10);return t||0===t?t:e}function n(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}function i(e,t){return hr.call(e,t)}function o(e){return"string"==typeof e||"number"==typeof e}function a(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function s(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function c(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function u(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return null!==e&&"object"==typeof e}function f(e){return $r.call(e)===wr}function d(e){for(var t={},n=0;n=0&&Fr[n].id>e.id;)n--;Fr.splice(Math.max(n,zr)+1,0,e)}else Fr.push(e);Hr||(Hr=!0,Mr(x))}}function A(e,t){var n,r;t||(t=qr,t.clear());var i=Array.isArray(e),o=l(e);if((i||o)&&Object.isExtensible(e)){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(i)for(n=e.length;n--;)A(e[n],t);else if(o)for(r=Object.keys(e),n=r.length;n--;)A(e[r[n]],t)}}function O(e,t){e.__proto__=t}function T(e,t,n){for(var r=0,i=n.length;r1?c(n):n;for(var r=c(arguments,1),i=0,o=n.length;i-1?Ti[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Ti[e]=/HTMLUnknownElement/.test(t.toString())}function qe(e){if("string"==typeof e){if(e=document.querySelector(e),!e)return document.createElement("div")}return e}function Ke(e){return document.createElement(e)}function We(e,t){return document.createElementNS(bi[e],t)}function Ze(e){return document.createTextNode(e)}function Ge(e){return document.createComment(e)}function Ye(e,t,n){e.insertBefore(t,n)}function Qe(e,t){e.removeChild(t)}function Xe(e,t){e.appendChild(t)}function et(e){return e.parentNode}function tt(e){return e.nextSibling}function nt(e){return e.tagName}function rt(e,t){e.textContent=t}function it(e){return e.childNodes}function ot(e,t,n){e.setAttribute(t,n)}function at(e,t){var n=e.data.ref;if(n){var i=e.context,o=e.child||e.elm,a=i.$refs;t?Array.isArray(a[n])?r(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].push(o):a[n]=[o]:a[n]=o}}function st(e){return null==e}function ct(e){return null!=e}function ut(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function lt(e,t,n){var r,i,o={};for(r=t;r<=n;++r)i=e[r].key,ct(i)&&(o[i]=r);return o}function ft(e){function t(e){return new Xr(C.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=C.parentNode(e);C.removeChild(t,e)}function i(e,t,n){var r,i=e.data;if(e.isRootInsert=!n,ct(i)&&(ct(r=i.hook)&&ct(r=r.init)&&r(e),ct(r=e.child)))return u(e,t),e.elm;var o=e.children,s=e.tag;return ct(s)?(e.elm=e.ns?C.createElementNS(e.ns,s):C.createElement(s),l(e),a(e,o,t),ct(i)&&c(e,t)):e.isComment?e.elm=C.createComment(e.text):e.elm=C.createTextNode(e.text),e.elm}function a(e,t,n){if(Array.isArray(t))for(var r=0;rv?(u=st(n[y+1])?null:n[y+1].elm,f(e,u,n,d,y,r)):d>y&&p(e,t,l,v)}function m(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&t.isCloned)return void(t.elm=e.elm);var i,o,a=ct(i=t.data);a&&ct(o=i.hook)&&ct(i=o.prepatch)&&i(e,t);var c=t.elm=e.elm,u=e.children,l=t.children;if(a&&s(t)){for(i=0;i<$.update.length;++i)$.update[i](e,t);ct(o)&&ct(i=o.update)&&i(e,t)}if(st(t.text)?ct(u)&&ct(l)?u!==l&&h(c,u,l,n,r):ct(l)?(ct(e.text)&&C.setTextContent(c,""),f(c,null,l,0,l.length-1,n)):ct(u)?p(c,u,0,u.length-1):ct(e.text)&&C.setTextContent(c,""):e.text!==t.text&&C.setTextContent(c,t.text),a){for(i=0;i<$.postpatch.length;++i)$.postpatch[i](e,t);ct(o)&&ct(i=o.postpatch)&&i(e,t)}}}function g(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+e.getAttribute("class")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function wt(e,t){if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+e.getAttribute("class")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Ct(e){Yi(function(){Yi(e)})}function xt(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),$t(e,t)}function kt(e,t){e._transitionClasses&&r(e._transitionClasses,t),wt(e,t)}function At(e,t,n){var r=Ot(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ji?Wi:Gi,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ji,l=a,f=o.length):t===qi?u>0&&(n=qi,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?Ji:qi:null,f=n?n===Ji?o.length:c.length:0);var d=n===Ji&&Qi.test(r[Ki+"Property"]);return{type:n,timeout:l,propCount:f,hasTransform:d}}function Tt(e,t){return Math.max.apply(null,t.map(function(t,n){return St(t)+St(e[n])}))}function St(e){return 1e3*Number(e.slice(0,-1))}function Et(e){var t=e.elm;t._leaveCb&&(t._leaveCb.cancelled=!0,t._leaveCb());var n=Lt(e.data.transition);if(n&&!t._enterCb&&1===t.nodeType){var r=n.css,i=n.type,o=n.enterClass,a=n.enterActiveClass,s=n.appearClass,c=n.appearActiveClass,u=n.beforeEnter,l=n.enter,f=n.afterEnter,d=n.enterCancelled,p=n.beforeAppear,v=n.appear,h=n.afterAppear,m=n.appearCancelled,g=ti.$vnode,y=g&&g.parent?g.parent.context:ti,_=!y._isMounted||!e.isRootInsert;if(!_||v||""===v){var b=_?s:o,$=_?c:a,w=_?p||u:u,C=_&&"function"==typeof v?v:l,x=_?h||f:f,k=_?m||d:d,A=r!==!1&&!Er,O=C&&(C._length||C.length)>1,T=t._enterCb=Dt(function(){A&&kt(t,$),T.cancelled?(A&&kt(t,b),k&&k(t)):x&&x(t),t._enterCb=null});e.data.show||Z(e.data.hook||(e.data.hook={}),"insert",function(){var n=t.parentNode,r=n&&n._pending&&n._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),C&&C(t,T)}),w&&w(t),A&&(xt(t,b),xt(t,$),Ct(function(){kt(t,b),T.cancelled||O||At(t,i,T)})),e.data.show&&C&&C(t,T),A||O||T()}}}function jt(e,t){function n(){m.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),u&&u(r),v&&(xt(r,s),xt(r,c),Ct(function(){kt(r,s),m.cancelled||h||At(r,a,m)})),l&&l(r,m),v||h||m())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var i=Lt(e.data.transition);if(!i)return t();if(!r._leaveCb&&1===r.nodeType){var o=i.css,a=i.type,s=i.leaveClass,c=i.leaveActiveClass,u=i.beforeLeave,l=i.leave,f=i.afterLeave,d=i.leaveCancelled,p=i.delayLeave,v=o!==!1&&!Er,h=l&&(l._length||l.length)>1,m=r._leaveCb=Dt(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),v&&kt(r,c),m.cancelled?(v&&kt(r,s),d&&d(r)):(t(),f&&f(r)),r._leaveCb=null});p?p(n):n()}}function Lt(e){if(e){if("object"==typeof e){var t={};return e.css!==!1&&u(t,Xi(e.name||"v")),u(t,e),t}return"string"==typeof e?Xi(e):void 0}}function Dt(e){var t=!1;return function(){t||(t=!0,e())}}function Nt(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(h(Pt(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Mt(e,t){for(var n=0,r=t.length;n',n.innerHTML.indexOf(t)>0}function Zt(e){return ho.innerHTML=e,ho.textContent}function Gt(e,t,n){return t&&(e=e.replace(qo,"<").replace(Ko,">")),n&&(e=e.replace(Wo,"\n")),e.replace(Zo,"&").replace(Go,'"')}function Yt(e,t){function n(t){d+=t,e=e.substring(t)}function r(){var t=e.match(wo);if(t){var r={tagName:t[1],attrs:[],start:d};n(t[0].length);for(var i,o;!(i=e.match(Co))&&(o=e.match(_o));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=d,r}}function i(e){var n=e.tagName,r=e.unarySlash;u&&("p"===s&&xi(n)&&o("",s),Ci(n)&&s===n&&o("",n));for(var i=l(n)||"html"===n&&"head"===s||!!r,a=e.attrs.length,d=new Array(a),p=0;p=0&&c[o].tag.toLowerCase()!==a;o--);}else o=0;if(o>=0){for(var u=c.length-1;u>=o;u--)t.end&&t.end(c[u].tag,r,i);c.length=o,s=o&&c[o-1].tag}else"br"===n.toLowerCase()?t.start&&t.start(n,[],!0,r,i):"p"===n.toLowerCase()&&(t.start&&t.start(n,[],!1,r,i),t.end&&t.end(n,r,i))}for(var a,s,c=[],u=t.expectHTML,l=t.isUnaryTag||Cr,f=t.isFromDOM,d=0;e;){if(a=e,s&&Vo(s)){var p=s.toLowerCase(),v=Jo[p]||(Jo[p]=new RegExp("([\\s\\S]*?)(]*>)","i")),h=0,m=e.replace(v,function(e,n,r){return h=r.length,"script"!==p&&"style"!==p&&"noscript"!==p&&(n=n.replace(//g,"$1").replace(//g,"$1")),t.chars&&t.chars(n),""});d+=e.length-m.length,e=m,o("",p,d-h,d)}else{var g=e.indexOf("<");if(0===g){if(/^");if(y>=0){n(y+3);continue}}if(/^");if(_>=0){n(_+2);continue}}var b=e.match(ko);if(b){n(b[0].length);continue}var $=e.match(xo);if($){var w=d;n($[0].length),o($[0],$[1],w,d);continue}var C=r();if(C){i(C);continue}}var x=void 0;g>=0?(x=e.substring(0,g),n(g)):(x=e,e=""),t.chars&&t.chars(x)}if(e===a)throw new Error("Error parsing template:\n\n"+e)}o()}function Qt(e){function t(){(a||(a=[])).push(e.slice(d,i).trim()),d=i+1}var n,r,i,o,a,s=!1,c=!1,u=0,l=0,f=0,d=0;for(i=0;ia&&o.push(JSON.stringify(e.slice(a,i)));var s=Qt(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a-1:_q("+t+","+r+")"),sn(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+r+"):("+i+");if(Array.isArray($$a)){var $$v="+n+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+t+"=$$c}",null,!0)}function ir(e,t){var n=cn(e,"value")||"null";rn(e,"checked","_q("+t+","+n+")"),sn(e,"change",t+"="+n,null,!0)}function or(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=o||Sr&&"range"===r?"change":"input",u=!o&&"range"!==r,l="input"===e.tag||"textarea"===e.tag,f=l?"$event.target.value"+(s?".trim()":""):"$event",d=a||"number"===r?t+"=_n("+f+")":t+"="+f;if(l&&u&&(d="if($event.target.composing)return;"+d),rn(e,"value",l?"_s("+t+")":"("+t+")"),sn(e,c,d,null,!0),u)return!0}function ar(e,t){var n=t+'=Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){return "_value" in o ? o._value : o.value})'+(null==e.attrsMap.multiple?"[0]":"");return sn(e,"change",n,null,!0),!0}function sr(e,t){t.value&&rn(e,"textContent","_s("+t.value+")")}function cr(e,t){t.value&&rn(e,"innerHTML","_s("+t.value+")")}function ur(e,t){return t=t?u(u({},ba),t):ba,Yn(e,t)}function lr(e,t,n){var r=(t&&t.warn||ai,t&&t.delimiters?String(t.delimiters)+e:e);if(_a[r])return _a[r];var i={},o=ur(e,t);i.render=fr(o.render);var a=o.staticRenderFns.length;i.staticRenderFns=new Array(a);for(var s=0;s0,jr=Tr&&Tr.indexOf("edge/")>0,Lr=Tr&&Tr.indexOf("android")>0,Dr=Tr&&/iphone|ipad|ipod|ios/.test(Tr),Nr=Or&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Mr=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t",">"),vo=!!Or&&Wt("\n"," "),ho=document.createElement("div"),mo=/([^\s"'<>\/=]+)/,go=/(?:=)/,yo=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],_o=new RegExp("^\\s*"+mo.source+"(?:\\s*("+go.source+")\\s*(?:"+yo.join("|")+"))?"),bo="[a-zA-Z_][\\w\\-\\.]*",$o="((?:"+bo+"\\:)?"+bo+")",wo=new RegExp("^<"+$o),Co=/^\s*(\/?)>/,xo=new RegExp("^<\\/"+$o+"[^>]*>"),ko=/^]+>/i,Ao=!1;"x".replace(/x(.)?/g,function(e,t){Ao=""===t});var Oo,To,So,Eo,jo,Lo,Do,No,Mo,Po,Ro,Io,Fo,Bo,Ho,Uo,zo,Vo=n("script,style",!0),Jo={},qo=/</g,Ko=/>/g,Wo=/ /g,Zo=/&/g,Go=/"/g,Yo=/\{\{((?:.|\n)+?)\}\}/g,Qo=/[-.*+?^${}()|[\]\/\\]/g,Xo=a(function(e){var t=e[0].replace(Qo,"\\$&"),n=e[1].replace(Qo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}),ea=/^v-|^@|^:/,ta=/(.*)\s+(?:in|of)\s+(.*)/,na=/\(([^,]*),([^,]*)(?:,([^,]*))?\)/,ra=/^:|^v-bind:/,ia=/^@|^v-on:/,oa=/:(.*)$/,aa=/\.[^\.]+/g,sa=a(Zt),ca=/^xmlns:NS\d+/,ua=/^NS\d+:/,la=a(Sn),fa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/,da={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},pa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:"if($event.target !== $event.currentTarget)return;"},va={bind:Rn,cloak:p},ha=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),{staticKeys:["staticClass"],transformNode:Qn,genData:Xn}),ma={transformNode:er,genData:tr},ga=[ha,ma],ya={model:nr,text:sr,html:cr},_a=Object.create(null),ba={isIE:Sr,expectHTML:!0,modules:ga,staticKeys:v(ga),directives:ya,isReservedTag:Oi,isUnaryTag:wi,mustUseProp:pi,getTagNamespace:Ve,isPreTag:Ai},$a=a(function(e){var t=qe(e);return t&&t.innerHTML}),wa=we.prototype.$mount;return we.prototype.$mount=function(e,t){if(e=e&&qe(e),e===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template,i=!1;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(i=!0,r=$a(r));else{if(!r.nodeType)return this;i=!0,r=r.innerHTML}else e&&(i=!0,r=dr(e));if(r){var o=lr(r,{warn:ai,isFromDOM:i,shouldDecodeTags:po,shouldDecodeNewlines:vo,delimiters:n.delimiters},this),a=o.render,s=o.staticRenderFns;n.render=a,n.staticRenderFns=s}}return wa.call(this,e,t)},we.compile=lr,we}); \ No newline at end of file