diff --git a/CHANGE LOG.md b/CHANGE LOG.md
index 0e06c714..0f1f7bf5 100644
--- a/CHANGE LOG.md
+++ b/CHANGE LOG.md
@@ -1,5 +1,32 @@
# FlipClock.js
+#### 0.8.0
+##### 01/09/2014
+
+*This update is a major refactor and contains a few breaking API changes.*
+
+- (API) Added new Flipclock.Uuid generator classes which is used for "cid", a unique id assigned to all objects created by FlipClock
+- (API) Added FlipClock.Translator classes to provide an abstraction for translating strings in FlipClock
+- (API) Added FlipClock.NumericList for numeric based clocks
+- (API) Added new FlipClock.ListItem class handle all the list items instead of using jQuery and strings
+- (API) Drastically simplified the FlipClock.Factory object. No longer passing the object to child classes as a property
+- (API) Added new FlipClock.Event classes to facilitate event handling
+- (API) Added new EnglishAlphaFace to handle alphabetical clocks
+- (API) Added FlipClock.Divider class to handle the dividers instead of using strings and jQuery
+- (API) Added new event handling to all application objects instead of using callbacks in properties
+- (API) Added new event handling to all application objects instead of using callbacks in properties
+- (API) Renamed Twenty Four Hour Clock source file
+- (API) Renamed Twelve Hour Clock file
+- (API) Renamed Minute Counter Face file
+- (API) Renamed Hourly Clock Face file
+- (API) Renamed Daily Counter File
+- (Bug Fix) Removed leaky abstractions in FlipClock.Timer
+- (Bug Fix) Removed leaky abstractions in FlipClock.Time
+- (Bug Fix) Removed leaky abstractions in FlipClock.List
+- (Bug Fix) Removed leaky abstractions in FlipClock.Face
+- (Examples) Updated example to match all the new code changes
+
+
#### 0.7.8
##### 12/12/2014
diff --git a/Gruntfile.js b/Gruntfile.js
index 1c34978e..59b2f7fa 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -8,18 +8,22 @@ module.exports = function(grunt) {
src: [
'src/flipclock/css/flipclock.css'
],
- dest: 'compiled/flipclock.css',
+ dest: 'dist/flipclock.css',
},
js: {
src: [
'src/flipclock/js/vendor/*.js',
- 'src/flipclock/js/libs/core.js',
+ 'src/flipclock/js/libs/Base.js',
+ 'src/flipclock/js/libs/Plugins.js',
+ 'src/flipclock/js/libs/List.js',
+ 'src/flipclock/js/libs/ListItem.js',
+ 'src/flipclock/js/libs/EnglishAlphaList.js',
'src/flipclock/js/libs/*.js',
- 'src/flipclock/js/faces/twentyfourhourclock.js',
+ 'src/flipclock/js/faces/TwentyFourHourClockFace.js',
'src/flipclock/js/faces/*.js',
'src/flipclock/js/lang/*.js',
],
- dest: 'compiled/flipclock.js',
+ dest: 'dist/flipclock.js',
}
},
uglify: {
@@ -28,7 +32,7 @@ module.exports = function(grunt) {
},
dist: {
files: {
- 'compiled/flipclock.min.js': ['<%= concat.js.dest %>']
+ 'dist/flipclock.min.js': ['<%= concat.js.dest %>']
}
}
},
@@ -43,14 +47,37 @@ module.exports = function(grunt) {
css: {
files: ['<%= concat.css.src %>'],
tasks: ['concat'],
+ },
+ docs: {
+ files: ['<%= concat.js.src %>'],
+ tasks: ['jsdoc']
}
},
+ jsdoc : {
+ dist : {
+ src: ['src/flipclock/js/libs/Divider.js'],
+ options: {
+ destination: 'docs'
+ }
+ }
+ }
+ /*
+ jsdoc2md : {
+ separateOutputFilePerInput: {
+ files: [
+ { src: "src/flipclock/js/libs/Base.js", dest: "docs/Base.md" },
+ { src: "src/flipclock/js/libs/Divider.js", dest: "docs/Divider.md" },
+ ]
+ },
+ }
+ */
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-jsdoc');
// Default task(s).
- grunt.registerTask('default', ['concat', 'uglify', 'watch']);
+ grunt.registerTask('default', ['concat', 'uglify', 'watch', 'jsdoc']);
};
\ No newline at end of file
diff --git a/README.md b/README.md
index 8b3baf2d..54f225d3 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,12 @@ Website and documentation at http://flipclockjs.com/
---
+### Development
+
+All files are compiled with Gulp. Once you are in the FlipClock directory, run the command `npm install` followed by the command `gulp dev` which will compile all source. Additionally, BrowserSync will launch a directory of all examples. Editing anything in the examples or src directory will cause the browser to automatically reload or inject style changes.
+
+---
+
### License
Copyright (c) 2013 Objective HTML, LCC shared under MIT LICENSE
diff --git a/bower.json b/bower.json
index cf588af3..2fbfa611 100644
--- a/bower.json
+++ b/bower.json
@@ -8,8 +8,8 @@
],
"description": "FlipClock.js is a proper abstract object oriented clock and counter library with a realistic flip effect.",
"main": [
- "compiled/flipclock.js",
- "compiled/flipclock.css"
+ "dist/flipclock.js",
+ "dist/flipclock.css"
],
"license": "MIT",
"ignore": [
diff --git a/compiled/flipclock.css b/compiled/flipclock.css
deleted file mode 100644
index 2914ce08..00000000
--- a/compiled/flipclock.css
+++ /dev/null
@@ -1,431 +0,0 @@
-/* Get the bourbon mixin from http://bourbon.io */
-/* Reset */
-.flip-clock-wrapper * {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- -o-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- -o-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-
-.flip-clock-wrapper a {
- cursor: pointer;
- text-decoration: none;
- color: #ccc; }
-
-.flip-clock-wrapper a:hover {
- color: #fff; }
-
-.flip-clock-wrapper ul {
- list-style: none; }
-
-.flip-clock-wrapper.clearfix:before,
-.flip-clock-wrapper.clearfix:after {
- content: " ";
- display: table; }
-
-.flip-clock-wrapper.clearfix:after {
- clear: both; }
-
-.flip-clock-wrapper.clearfix {
- *zoom: 1; }
-
-/* Main */
-.flip-clock-wrapper {
- font: normal 11px "Helvetica Neue", Helvetica, sans-serif;
- -webkit-user-select: none; }
-
-.flip-clock-meridium {
- background: none !important;
- box-shadow: 0 0 0 !important;
- font-size: 36px !important; }
-
-.flip-clock-meridium a { color: #313333; }
-
-.flip-clock-wrapper {
- text-align: center;
- position: relative;
- width: 100%;
- margin: 1em;
-}
-
-.flip-clock-wrapper:before,
-.flip-clock-wrapper:after {
- content: " "; /* 1 */
- display: table; /* 2 */
-}
-.flip-clock-wrapper:after {
- clear: both;
-}
-
-/* Skeleton */
-.flip-clock-wrapper ul {
- position: relative;
- float: left;
- margin: 5px;
- width: 60px;
- height: 90px;
- font-size: 80px;
- font-weight: bold;
- line-height: 87px;
- border-radius: 6px;
- background: #000;
-}
-
-.flip-clock-wrapper ul li {
- z-index: 1;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- line-height: 87px;
- text-decoration: none !important;
-}
-
-.flip-clock-wrapper ul li:first-child {
- z-index: 2; }
-
-.flip-clock-wrapper ul li a {
- display: block;
- height: 100%;
- -webkit-perspective: 200px;
- -moz-perspective: 200px;
- perspective: 200px;
- margin: 0 !important;
- overflow: visible !important;
- cursor: default !important; }
-
-.flip-clock-wrapper ul li a div {
- z-index: 1;
- position: absolute;
- left: 0;
- width: 100%;
- height: 50%;
- font-size: 80px;
- overflow: hidden;
- outline: 1px solid transparent; }
-
-.flip-clock-wrapper ul li a div .shadow {
- position: absolute;
- width: 100%;
- height: 100%;
- z-index: 2; }
-
-.flip-clock-wrapper ul li a div.up {
- -webkit-transform-origin: 50% 100%;
- -moz-transform-origin: 50% 100%;
- -ms-transform-origin: 50% 100%;
- -o-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- top: 0; }
-
-.flip-clock-wrapper ul li a div.up:after {
- content: "";
- position: absolute;
- top: 44px;
- left: 0;
- z-index: 5;
- width: 100%;
- height: 3px;
- background-color: #000;
- background-color: rgba(0, 0, 0, 0.4); }
-
-.flip-clock-wrapper ul li a div.down {
- -webkit-transform-origin: 50% 0;
- -moz-transform-origin: 50% 0;
- -ms-transform-origin: 50% 0;
- -o-transform-origin: 50% 0;
- transform-origin: 50% 0;
- bottom: 0;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.flip-clock-wrapper ul li a div div.inn {
- position: absolute;
- left: 0;
- z-index: 1;
- width: 100%;
- height: 200%;
- color: #ccc;
- text-shadow: 0 1px 2px #000;
- text-align: center;
- background-color: #333;
- border-radius: 6px;
- font-size: 70px; }
-
-.flip-clock-wrapper ul li a div.up div.inn {
- top: 0; }
-
-.flip-clock-wrapper ul li a div.down div.inn {
- bottom: 0; }
-
-/* PLAY */
-.flip-clock-wrapper ul.play li.flip-clock-before {
- z-index: 3; }
-
-.flip-clock-wrapper .flip { box-shadow: 0 2px 5px rgba(0, 0, 0, 0.7); }
-
-.flip-clock-wrapper ul.play li.flip-clock-active {
- -webkit-animation: asd 0.5s 0.5s linear both;
- -moz-animation: asd 0.5s 0.5s linear both;
- animation: asd 0.5s 0.5s linear both;
- z-index: 5; }
-
-.flip-clock-divider {
- float: left;
- display: inline-block;
- position: relative;
- width: 20px;
- height: 100px; }
-
-.flip-clock-divider:first-child {
- width: 0; }
-
-.flip-clock-dot {
- display: block;
- background: #323434;
- width: 10px;
- height: 10px;
- position: absolute;
- border-radius: 50%;
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
- left: 5px; }
-
-.flip-clock-divider .flip-clock-label {
- position: absolute;
- top: -1.5em;
- right: -86px;
- color: black;
- text-shadow: none; }
-
-.flip-clock-divider.minutes .flip-clock-label {
- right: -88px; }
-
-.flip-clock-divider.seconds .flip-clock-label {
- right: -91px; }
-
-.flip-clock-dot.top {
- top: 30px; }
-
-.flip-clock-dot.bottom {
- bottom: 30px; }
-
-@-webkit-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@-moz-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@-o-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down {
- z-index: 2;
- -webkit-animation: turn 0.5s 0.5s linear both;
- -moz-animation: turn 0.5s 0.5s linear both;
- animation: turn 0.5s 0.5s linear both; }
-
-@-webkit-keyframes turn {
- 0% {
- -webkit-transform: rotateX(90deg); }
-
- 100% {
- -webkit-transform: rotateX(0deg); } }
-
-@-moz-keyframes turn {
- 0% {
- -moz-transform: rotateX(90deg); }
-
- 100% {
- -moz-transform: rotateX(0deg); } }
-
-@-o-keyframes turn {
- 0% {
- -o-transform: rotateX(90deg); }
-
- 100% {
- -o-transform: rotateX(0deg); } }
-
-@keyframes turn {
- 0% {
- transform: rotateX(90deg); }
-
- 100% {
- transform: rotateX(0deg); } }
-
-.flip-clock-wrapper ul.play li.flip-clock-before .up {
- z-index: 2;
- -webkit-animation: turn2 0.5s linear both;
- -moz-animation: turn2 0.5s linear both;
- animation: turn2 0.5s linear both; }
-
-@-webkit-keyframes turn2 {
- 0% {
- -webkit-transform: rotateX(0deg); }
-
- 100% {
- -webkit-transform: rotateX(-90deg); } }
-
-@-moz-keyframes turn2 {
- 0% {
- -moz-transform: rotateX(0deg); }
-
- 100% {
- -moz-transform: rotateX(-90deg); } }
-
-@-o-keyframes turn2 {
- 0% {
- -o-transform: rotateX(0deg); }
-
- 100% {
- -o-transform: rotateX(-90deg); } }
-
-@keyframes turn2 {
- 0% {
- transform: rotateX(0deg); }
-
- 100% {
- transform: rotateX(-90deg); } }
-
-.flip-clock-wrapper ul li.flip-clock-active {
- z-index: 3; }
-
-/* SHADOW */
-.flip-clock-wrapper ul.play li.flip-clock-before .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
- background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
- background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
- -webkit-animation: show 0.5s linear both;
- -moz-animation: show 0.5s linear both;
- animation: show 0.5s linear both; }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
- background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
- background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
- -webkit-animation: hide 0.5s 0.3s linear both;
- -moz-animation: hide 0.5s 0.3s linear both;
- animation: hide 0.5s 0.3s linear both; }
-
-/*DOWN*/
-.flip-clock-wrapper ul.play li.flip-clock-before .down .shadow {
- background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
- background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
- background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
- -webkit-animation: show 0.5s linear both;
- -moz-animation: show 0.5s linear both;
- animation: show 0.5s linear both; }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down .shadow {
- background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
- background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
- background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
- -webkit-animation: hide 0.5s 0.3s linear both;
- -moz-animation: hide 0.5s 0.3s linear both;
- animation: hide 0.5s 0.2s linear both; }
-
-@-webkit-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-moz-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-o-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-webkit-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@-moz-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@-o-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
diff --git a/compiled/flipclock.js b/compiled/flipclock.js
deleted file mode 100644
index 8d97c49f..00000000
--- a/compiled/flipclock.js
+++ /dev/null
@@ -1,2782 +0,0 @@
-/*
- Base.js, version 1.1a
- Copyright 2006-2010, Dean Edwards
- License: http://www.opensource.org/licenses/mit-license.php
-*/
-
-var Base = function() {
- // dummy
-};
-
-Base.extend = function(_instance, _static) { // subclass
-
- "use strict";
-
- var extend = Base.prototype.extend;
-
- // build the prototype
- Base._prototyping = true;
-
- var proto = new this();
-
- extend.call(proto, _instance);
-
- proto.base = function() {
- // call this method from any other method to invoke that method's ancestor
- };
-
- delete Base._prototyping;
-
- // create the wrapper for the constructor function
- //var constructor = proto.constructor.valueOf(); //-dean
- var constructor = proto.constructor;
- var klass = proto.constructor = function() {
- if (!Base._prototyping) {
- if (this._constructing || this.constructor == klass) { // instantiation
- this._constructing = true;
- constructor.apply(this, arguments);
- delete this._constructing;
- } else if (arguments[0] !== null) { // casting
- return (arguments[0].extend || extend).call(arguments[0], proto);
- }
- }
- };
-
- // build the class interface
- klass.ancestor = this;
- klass.extend = this.extend;
- klass.forEach = this.forEach;
- klass.implement = this.implement;
- klass.prototype = proto;
- klass.toString = this.toString;
- klass.valueOf = function(type) {
- //return (type == "object") ? klass : constructor; //-dean
- return (type == "object") ? klass : constructor.valueOf();
- };
- extend.call(klass, _static);
- // class initialisation
- if (typeof klass.init == "function") klass.init();
- return klass;
-};
-
-Base.prototype = {
- extend: function(source, value) {
- if (arguments.length > 1) { // extending with a name/value pair
- var ancestor = this[source];
- if (ancestor && (typeof value == "function") && // overriding a method?
- // the valueOf() comparison is to avoid circular references
- (!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&
- /\bbase\b/.test(value)) {
- // get the underlying method
- var method = value.valueOf();
- // override
- value = function() {
- var previous = this.base || Base.prototype.base;
- this.base = ancestor;
- var returnValue = method.apply(this, arguments);
- this.base = previous;
- return returnValue;
- };
- // point to the underlying method
- value.valueOf = function(type) {
- return (type == "object") ? value : method;
- };
- value.toString = Base.toString;
- }
- this[source] = value;
- } else if (source) { // extending with an object literal
- var extend = Base.prototype.extend;
- // if this object has a customised extend method then use it
- if (!Base._prototyping && typeof this != "function") {
- extend = this.extend || extend;
- }
- var proto = {toSource: null};
- // do the "toString" and other methods manually
- var hidden = ["constructor", "toString", "valueOf"];
- // if we are prototyping then include the constructor
- var i = Base._prototyping ? 0 : 1;
- while (key = hidden[i++]) {
- if (source[key] != proto[key]) {
- extend.call(this, key, source[key]);
-
- }
- }
- // copy each of the source object's properties to this object
- for (var key in source) {
- if (!proto[key]) extend.call(this, key, source[key]);
- }
- }
- return this;
- }
-};
-
-// initialise
-Base = Base.extend({
- constructor: function() {
- this.extend(arguments[0]);
- }
-}, {
- ancestor: Object,
- version: "1.1",
-
- forEach: function(object, block, context) {
- for (var key in object) {
- if (this.prototype[key] === undefined) {
- block.call(context, object[key], key, object);
- }
- }
- },
-
- implement: function() {
- for (var i = 0; i < arguments.length; i++) {
- if (typeof arguments[i] == "function") {
- // if it's a function, call it
- arguments[i](this.prototype);
- } else {
- // add the interface using the extend method
- this.prototype.extend(arguments[i]);
- }
- }
- return this;
- },
-
- toString: function() {
- return String(this.valueOf());
- }
-});
-/*jshint smarttabs:true */
-
-var FlipClock;
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * FlipFlock Helper
- *
- * @param object A jQuery object or CSS select
- * @param int An integer used to start the clock (no. seconds)
- * @param object An object of properties to override the default
- */
-
- FlipClock = function(obj, digit, options) {
- if(digit instanceof Object && digit instanceof Date === false) {
- options = digit;
- digit = 0;
- }
-
- return new FlipClock.Factory(obj, digit, options);
- };
-
- /**
- * The global FlipClock.Lang object
- */
-
- FlipClock.Lang = {};
-
- /**
- * The Base FlipClock class is used to extend all other FlipFlock
- * classes. It handles the callbacks and the basic setters/getters
- *
- * @param object An object of the default properties
- * @param object An object of properties to override the default
- */
-
- FlipClock.Base = Base.extend({
-
- /**
- * Build Date
- */
-
- buildDate: '2014-12-12',
-
- /**
- * Version
- */
-
- version: '0.7.7',
-
- /**
- * Sets the default options
- *
- * @param object The default options
- * @param object The override options
- */
-
- constructor: function(_default, options) {
- if(typeof _default !== "object") {
- _default = {};
- }
- if(typeof options !== "object") {
- options = {};
- }
- this.setOptions($.extend(true, {}, _default, options));
- },
-
- /**
- * Delegates the callback to the defined method
- *
- * @param object The default options
- * @param object The override options
- */
-
- callback: function(method) {
- if(typeof method === "function") {
- var args = [];
-
- for(var x = 1; x <= arguments.length; x++) {
- if(arguments[x]) {
- args.push(arguments[x]);
- }
- }
-
- method.apply(this, args);
- }
- },
-
- /**
- * Log a string into the console if it exists
- *
- * @param string The name of the option
- * @return mixed
- */
-
- log: function(str) {
- if(window.console && console.log) {
- console.log(str);
- }
- },
-
- /**
- * Get an single option value. Returns false if option does not exist
- *
- * @param string The name of the option
- * @return mixed
- */
-
- getOption: function(index) {
- if(this[index]) {
- return this[index];
- }
- return false;
- },
-
- /**
- * Get all options
- *
- * @return bool
- */
-
- getOptions: function() {
- return this;
- },
-
- /**
- * Set a single option value
- *
- * @param string The name of the option
- * @param mixed The value of the option
- */
-
- setOption: function(index, value) {
- this[index] = value;
- },
-
- /**
- * Set a multiple options by passing a JSON object
- *
- * @param object The object with the options
- * @param mixed The value of the option
- */
-
- setOptions: function(options) {
- for(var key in options) {
- if(typeof options[key] !== "undefined") {
- this.setOption(key, options[key]);
- }
- }
- }
-
- });
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock Face class is the base class in which to extend
- * all other FlockClock.Face classes.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.Face = FlipClock.Base.extend({
-
- /**
- * Sets whether or not the clock should start upon instantiation
- */
-
- autoStart: true,
-
- /**
- * An array of jQuery objects used for the dividers (the colons)
- */
-
- dividers: [],
-
- /**
- * An array of FlipClock.List objects
- */
-
- factory: false,
-
- /**
- * An array of FlipClock.List objects
- */
-
- lists: [],
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.dividers = [];
- this.lists = [];
- this.base(options);
- this.factory = factory;
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- if(this.autoStart) {
- this.start();
- }
- },
-
- /**
- * Creates a jQuery object used for the digit divider
- *
- * @param mixed The divider label text
- * @param mixed Set true to exclude the dots in the divider.
- * If not set, is false.
- */
-
- createDivider: function(label, css, excludeDots) {
- if(typeof css == "boolean" || !css) {
- excludeDots = css;
- css = label;
- }
-
- var dots = [
- ' ',
- ' '
- ].join('');
-
- if(excludeDots) {
- dots = '';
- }
-
- label = this.factory.localize(label);
-
- var html = [
- '',
- ''+(label ? label : '')+' ',
- dots,
- ' '
- ];
-
- var $html = $(html.join(''));
-
- this.dividers.push($html);
-
- return $html;
- },
-
- /**
- * Creates a FlipClock.List object and appends it to the DOM
- *
- * @param mixed The digit to select in the list
- * @param object An object to override the default properties
- */
-
- createList: function(digit, options) {
- if(typeof digit === "object") {
- options = digit;
- digit = 0;
- }
-
- var obj = new FlipClock.List(this.factory, digit, options);
-
- this.lists.push(obj);
-
- return obj;
- },
-
- /**
- * Triggers when the clock is reset
- */
-
- reset: function() {
- this.factory.time = new FlipClock.Time(
- this.factory,
- this.factory.original ? Math.round(this.factory.original) : 0,
- {
- minimumDigits: this.factory.minimumDigits
- }
- );
-
- this.flip(this.factory.original, false);
- },
-
- /**
- * Append a newly created list to the clock
- */
-
- appendDigitToClock: function(obj) {
- obj.$el.append(false);
- },
-
- /**
- * Add a digit to the clock face
- */
-
- addDigit: function(digit) {
- var obj = this.createList(digit, {
- classes: {
- active: this.factory.classes.active,
- before: this.factory.classes.before,
- flip: this.factory.classes.flip
- }
- });
-
- this.appendDigitToClock(obj);
- },
-
- /**
- * Triggers when the clock is started
- */
-
- start: function() {},
-
- /**
- * Triggers when the time on the clock stops
- */
-
- stop: function() {},
-
- /**
- * Auto increments/decrements the value of the clock face
- */
-
- autoIncrement: function() {
- if(!this.factory.countdown) {
- this.increment();
- }
- else {
- this.decrement();
- }
- },
-
- /**
- * Increments the value of the clock face
- */
-
- increment: function() {
- this.factory.time.addSecond();
- },
-
- /**
- * Decrements the value of the clock face
- */
-
- decrement: function() {
- if(this.factory.time.getTimeSeconds() == 0) {
- this.factory.stop()
- }
- else {
- this.factory.time.subSecond();
- }
- },
-
- /**
- * Triggers when the numbers on the clock flip
- */
-
- flip: function(time, doNotAddPlayClass) {
- var t = this;
-
- $.each(time, function(i, digit) {
- var list = t.lists[i];
-
- if(list) {
- if(!doNotAddPlayClass && digit != list.digit) {
- list.play();
- }
-
- list.select(digit);
- }
- else {
- t.addDigit(digit);
- }
- });
- }
-
- });
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock Factory class is used to build the clock and manage
- * all the public methods.
- *
- * @param object A jQuery object or CSS selector used to fetch
- the wrapping DOM nodes
- * @param mixed This is the digit used to set the clock. If an
- object is passed, 0 will be used.
- * @param object An object of properties to override the default
- */
-
- FlipClock.Factory = FlipClock.Base.extend({
-
- /**
- * The clock's animation rate.
- *
- * Note, currently this property doesn't do anything.
- * This property is here to be used in the future to
- * programmaticaly set the clock's animation speed
- */
-
- animationRate: 1000,
-
- /**
- * Auto start the clock on page load (True|False)
- */
-
- autoStart: true,
-
- /**
- * The callback methods
- */
-
- callbacks: {
- destroy: false,
- create: false,
- init: false,
- interval: false,
- start: false,
- stop: false,
- reset: false
- },
-
- /**
- * The CSS classes
- */
-
- classes: {
- active: 'flip-clock-active',
- before: 'flip-clock-before',
- divider: 'flip-clock-divider',
- dot: 'flip-clock-dot',
- label: 'flip-clock-label',
- flip: 'flip',
- play: 'play',
- wrapper: 'flip-clock-wrapper'
- },
-
- /**
- * The name of the clock face class in use
- */
-
- clockFace: 'HourlyCounter',
-
- /**
- * The name of the clock face class in use
- */
-
- countdown: false,
-
- /**
- * The name of the default clock face class to use if the defined
- * clockFace variable is not a valid FlipClock.Face object
- */
-
- defaultClockFace: 'HourlyCounter',
-
- /**
- * The default language
- */
-
- defaultLanguage: 'english',
-
- /**
- * The jQuery object
- */
-
- $el: false,
-
- /**
- * The FlipClock.Face object
- */
-
- face: true,
-
- /**
- * The language object after it has been loaded
- */
-
- lang: false,
-
- /**
- * The language being used to display labels (string)
- */
-
- language: 'english',
-
- /**
- * The minimum digits the clock must have
- */
-
- minimumDigits: 0,
-
- /**
- * The original starting value of the clock. Used for the reset method.
- */
-
- original: false,
-
- /**
- * Is the clock running? (True|False)
- */
-
- running: false,
-
- /**
- * The FlipClock.Time object
- */
-
- time: false,
-
- /**
- * The FlipClock.Timer object
- */
-
- timer: false,
-
- /**
- * The jQuery object (depcrecated)
- */
-
- $wrapper: false,
-
- /**
- * Constructor
- *
- * @param object The wrapping jQuery object
- * @param object Number of seconds used to start the clock
- * @param object An object override options
- */
-
- constructor: function(obj, digit, options) {
-
- if(!options) {
- options = {};
- }
-
- this.lists = [];
- this.running = false;
- this.base(options);
-
- this.$el = $(obj).addClass(this.classes.wrapper);
-
- // Depcrated support of the $wrapper property.
- this.$wrapper = this.$el;
-
- this.original = (digit instanceof Date) ? digit : (digit ? Math.round(digit) : 0);
-
- this.time = new FlipClock.Time(this, this.original, {
- minimumDigits: this.minimumDigits,
- animationRate: this.animationRate
- });
-
- this.timer = new FlipClock.Timer(this, options);
-
- this.loadLanguage(this.language);
-
- this.loadClockFace(this.clockFace, options);
-
- if(this.autoStart) {
- this.start();
- }
-
- },
-
- /**
- * Load the FlipClock.Face object
- *
- * @param object The name of the FlickClock.Face class
- * @param object An object override options
- */
-
- loadClockFace: function(name, options) {
- var face, suffix = 'Face', hasStopped = false;
-
- name = name.ucfirst()+suffix;
-
- if(this.face.stop) {
- this.stop();
- hasStopped = true;
- }
-
- this.$el.html('');
-
- this.time.minimumDigits = this.minimumDigits;
-
- if(FlipClock[name]) {
- face = new FlipClock[name](this, options);
- }
- else {
- face = new FlipClock[this.defaultClockFace+suffix](this, options);
- }
-
- face.build();
-
- this.face = face
-
- if(hasStopped) {
- this.start();
- }
-
- return this.face;
- },
-
- /**
- * Load the FlipClock.Lang object
- *
- * @param object The name of the language to load
- */
-
- loadLanguage: function(name) {
- var lang;
-
- if(FlipClock.Lang[name.ucfirst()]) {
- lang = FlipClock.Lang[name.ucfirst()];
- }
- else if(FlipClock.Lang[name]) {
- lang = FlipClock.Lang[name];
- }
- else {
- lang = FlipClock.Lang[this.defaultLanguage];
- }
-
- return this.lang = lang;
- },
-
- /**
- * Localize strings into various languages
- *
- * @param string The index of the localized string
- * @param object Optionally pass a lang object
- */
-
- localize: function(index, obj) {
- var lang = this.lang;
-
- if(!index) {
- return null;
- }
-
- var lindex = index.toLowerCase();
-
- if(typeof obj == "object") {
- lang = obj;
- }
-
- if(lang && lang[lindex]) {
- return lang[lindex];
- }
-
- return index;
- },
-
-
- /**
- * Starts the clock
- */
-
- start: function(callback) {
- var t = this;
-
- if(!t.running && (!t.countdown || t.countdown && t.time.time > 0)) {
- t.face.start(t.time);
- t.timer.start(function() {
- t.flip();
-
- if(typeof callback === "function") {
- callback();
- }
- });
- }
- else {
- t.log('Trying to start timer when countdown already at 0');
- }
- },
-
- /**
- * Stops the clock
- */
-
- stop: function(callback) {
- this.face.stop();
- this.timer.stop(callback);
-
- for(var x in this.lists) {
- if (this.lists.hasOwnProperty(x)) {
- this.lists[x].stop();
- }
- }
- },
-
- /**
- * Reset the clock
- */
-
- reset: function(callback) {
- this.timer.reset(callback);
- this.face.reset();
- },
-
- /**
- * Sets the clock time
- */
-
- setTime: function(time) {
- this.time.time = time;
- this.flip(true);
- },
-
- /**
- * Get the clock time
- *
- * @return object Returns a FlipClock.Time object
- */
-
- getTime: function(time) {
- return this.time;
- },
-
- /**
- * Changes the increment of time to up or down (add/sub)
- */
-
- setCountdown: function(value) {
- var running = this.running;
-
- this.countdown = value ? true : false;
-
- if(running) {
- this.stop();
- this.start();
- }
- },
-
- /**
- * Flip the digits on the clock
- *
- * @param array An array of digits
- */
- flip: function(doNotAddPlayClass) {
- this.face.flip(false, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock List class is used to build the list used to create
- * the card flip effect. This object fascilates selecting the correct
- * node by passing a specific digit.
- *
- * @param object A FlipClock.Factory object
- * @param mixed This is the digit used to set the clock. If an
- * object is passed, 0 will be used.
- * @param object An object of properties to override the default
- */
-
- FlipClock.List = FlipClock.Base.extend({
-
- /**
- * The digit (0-9)
- */
-
- digit: 0,
-
- /**
- * The CSS classes
- */
-
- classes: {
- active: 'flip-clock-active',
- before: 'flip-clock-before',
- flip: 'flip'
- },
-
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
- /**
- * The jQuery object
- */
-
- $el: false,
-
- /**
- * The jQuery object (deprecated)
- */
-
- $obj: false,
-
- /**
- * The items in the list
- */
-
- items: [],
-
- /**
- * The last digit
- */
-
- lastDigit: 0,
-
- /**
- * Constructor
- *
- * @param object A FlipClock.Factory object
- * @param int An integer use to select the correct digit
- * @param object An object to override the default properties
- */
-
- constructor: function(factory, digit, options) {
- this.factory = factory;
- this.digit = digit;
- this.lastDigit = digit;
- this.$el = this.createList();
-
- // Depcrated support of the $obj property.
- this.$obj = this.$el;
-
- if(digit > 0) {
- this.select(digit);
- }
-
- this.factory.$el.append(this.$el);
- },
-
- /**
- * Select the digit in the list
- *
- * @param int A digit 0-9
- */
-
- select: function(digit) {
- if(typeof digit === "undefined") {
- digit = this.digit;
- }
- else {
- this.digit = digit;
- }
-
- if(this.digit != this.lastDigit) {
- var $delete = this.$el.find('.'+this.classes.before).removeClass(this.classes.before);
-
- this.$el.find('.'+this.classes.active).removeClass(this.classes.active)
- .addClass(this.classes.before);
-
- this.appendListItem(this.classes.active, this.digit);
-
- $delete.remove();
-
- this.lastDigit = this.digit;
- }
- },
-
- /**
- * Adds the play class to the DOM object
- */
-
- play: function() {
- this.$el.addClass(this.factory.classes.play);
- },
-
- /**
- * Removes the play class to the DOM object
- */
-
- stop: function() {
- var t = this;
-
- setTimeout(function() {
- t.$el.removeClass(t.factory.classes.play);
- }, this.factory.timer.interval);
- },
-
- /**
- * Creates the list item HTML and returns as a string
- */
-
- createListItem: function(css, value) {
- return [
- '
',
- '',
- '',
- '
',
- '
'+(value ? value : '')+'
',
- '
',
- '',
- '
',
- '
'+(value ? value : '')+'
',
- '
',
- ' ',
- ' '
- ].join('');
- },
-
- /**
- * Append the list item to the parent DOM node
- */
-
- appendListItem: function(css, value) {
- var html = this.createListItem(css, value);
-
- this.$el.append(html);
- },
-
- /**
- * Create the list of digits and appends it to the DOM object
- */
-
- createList: function() {
-
- var lastDigit = this.getPrevDigit() ? this.getPrevDigit() : this.digit;
-
- var html = $([
- '',
- this.createListItem(this.classes.before, lastDigit),
- this.createListItem(this.classes.active, this.digit),
- ' '
- ].join(''));
-
- return html;
- },
-
- getNextDigit: function() {
- return this.digit == 9 ? 0 : this.digit + 1;
- },
-
- getPrevDigit: function() {
- return this.digit == 0 ? 9 : this.digit - 1;
- }
-
- });
-
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * Capitalize the first letter in a string
- *
- * @return string
- */
-
- String.prototype.ucfirst = function() {
- return this.substr(0, 1).toUpperCase() + this.substr(1);
- };
-
- /**
- * jQuery helper method
- *
- * @param int An integer used to start the clock (no. seconds)
- * @param object An object of properties to override the default
- */
-
- $.fn.FlipClock = function(digit, options) {
- return new FlipClock($(this), digit, options);
- };
-
- /**
- * jQuery helper method
- *
- * @param int An integer used to start the clock (no. seconds)
- * @param object An object of properties to override the default
- */
-
- $.fn.flipClock = function(digit, options) {
- return $.fn.FlipClock(digit, options);
- };
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock Time class is used to manage all the time
- * calculations.
- *
- * @param object A FlipClock.Factory object
- * @param mixed This is the digit used to set the clock. If an
- * object is passed, 0 will be used.
- * @param object An object of properties to override the default
- */
-
- FlipClock.Time = FlipClock.Base.extend({
-
- /**
- * The time (in seconds) or a date object
- */
-
- time: 0,
-
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
- /**
- * The minimum number of digits the clock face must have
- */
-
- minimumDigits: 0,
-
- /**
- * Constructor
- *
- * @param object A FlipClock.Factory object
- * @param int An integer use to select the correct digit
- * @param object An object to override the default properties
- */
-
- constructor: function(factory, time, options) {
- if(typeof options != "object") {
- options = {};
- }
-
- if(!options.minimumDigits) {
- options.minimumDigits = factory.minimumDigits;
- }
-
- this.base(options);
- this.factory = factory;
-
- if(time) {
- this.time = time;
- }
- },
-
- /**
- * Convert a string or integer to an array of digits
- *
- * @param mixed String or Integer of digits
- * @return array An array of digits
- */
-
- convertDigitsToArray: function(str) {
- var data = [];
-
- str = str.toString();
-
- for(var x = 0;x < str.length; x++) {
- if(str[x].match(/^\d*$/g)) {
- data.push(str[x]);
- }
- }
-
- return data;
- },
-
- /**
- * Get a specific digit from the time integer
- *
- * @param int The specific digit to select from the time
- * @return mixed Returns FALSE if no digit is found, otherwise
- * the method returns the defined digit
- */
-
- digit: function(i) {
- var timeStr = this.toString();
- var length = timeStr.length;
-
- if(timeStr[length - i]) {
- return timeStr[length - i];
- }
-
- return false;
- },
-
- /**
- * Formats any array of digits into a valid array of digits
- *
- * @param mixed An array of digits
- * @return array An array of digits
- */
-
- digitize: function(obj) {
- var data = [];
-
- $.each(obj, function(i, value) {
- value = value.toString();
-
- if(value.length == 1) {
- value = '0'+value;
- }
-
- for(var x = 0; x < value.length; x++) {
- data.push(value.charAt(x));
- }
- });
-
- if(data.length > this.minimumDigits) {
- this.minimumDigits = data.length;
- }
-
- if(this.minimumDigits > data.length) {
- for(var x = data.length; x < this.minimumDigits; x++) {
- data.unshift('0');
- }
- }
-
- return data;
- },
-
- /**
- * Gets a new Date object for the current time
- *
- * @return array Returns a Date object
- */
-
- getDateObject: function() {
- if(this.time instanceof Date) {
- return this.time;
- }
-
- return new Date((new Date()).getTime() + this.getTimeSeconds() * 1000);
- },
-
- /**
- * Gets a digitized daily counter
- *
- * @return object Returns a digitized object
- */
-
- getDayCounter: function(includeSeconds) {
- var digits = [
- this.getDays(),
- this.getHours(true),
- this.getMinutes(true)
- ];
-
- if(includeSeconds) {
- digits.push(this.getSeconds(true));
- }
-
- return this.digitize(digits);
- },
-
- /**
- * Gets number of days
- *
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a floored integer
- */
-
- getDays: function(mod) {
- var days = this.getTimeSeconds() / 60 / 60 / 24;
-
- if(mod) {
- days = days % 7;
- }
-
- return Math.floor(days);
- },
-
- /**
- * Gets an hourly breakdown
- *
- * @return object Returns a digitized object
- */
-
- getHourCounter: function() {
- var obj = this.digitize([
- this.getHours(),
- this.getMinutes(true),
- this.getSeconds(true)
- ]);
-
- return obj;
- },
-
- /**
- * Gets an hourly breakdown
- *
- * @return object Returns a digitized object
- */
-
- getHourly: function() {
- return this.getHourCounter();
- },
-
- /**
- * Gets number of hours
- *
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a floored integer
- */
-
- getHours: function(mod) {
- var hours = this.getTimeSeconds() / 60 / 60;
-
- if(mod) {
- hours = hours % 24;
- }
-
- return Math.floor(hours);
- },
-
- /**
- * Gets the twenty-four hour time
- *
- * @return object returns a digitized object
- */
-
- getMilitaryTime: function(date, showSeconds) {
- if(typeof showSeconds === "undefined") {
- showSeconds = true;
- }
-
- if(!date) {
- date = this.getDateObject();
- }
-
- var data = [
- date.getHours(),
- date.getMinutes()
- ];
-
- if(showSeconds === true) {
- data.push(date.getSeconds());
- }
-
- return this.digitize(data);
- },
-
- /**
- * Gets number of minutes
- *
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a floored integer
- */
-
- getMinutes: function(mod) {
- var minutes = this.getTimeSeconds() / 60;
-
- if(mod) {
- minutes = minutes % 60;
- }
-
- return Math.floor(minutes);
- },
-
- /**
- * Gets a minute breakdown
- */
-
- getMinuteCounter: function() {
- var obj = this.digitize([
- this.getMinutes(),
- this.getSeconds(true)
- ]);
-
- return obj;
- },
-
- /**
- * Gets time count in seconds regardless of if targetting date or not.
- *
- * @return int Returns a floored integer
- */
-
- getTimeSeconds: function(date) {
- if(!date) {
- date = new Date();
- }
-
- if (this.time instanceof Date) {
- if (this.factory.countdown) {
- return Math.max(this.time.getTime()/1000 - date.getTime()/1000,0);
- } else {
- return date.getTime()/1000 - this.time.getTime()/1000 ;
- }
- } else {
- return this.time;
- }
- },
-
- /**
- * Gets the current twelve hour time
- *
- * @return object Returns a digitized object
- */
-
- getTime: function(date, showSeconds) {
- if(typeof showSeconds === "undefined") {
- showSeconds = true;
- }
-
- if(!date) {
- date = this.getDateObject();
- }
-
- console.log(date);
-
-
- var hours = date.getHours();
- var merid = hours > 12 ? 'PM' : 'AM';
- var data = [
- hours > 12 ? hours - 12 : (hours === 0 ? 12 : hours),
- date.getMinutes()
- ];
-
- if(showSeconds === true) {
- data.push(date.getSeconds());
- }
-
- return this.digitize(data);
- },
-
- /**
- * Gets number of seconds
- *
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a ceiled integer
- */
-
- getSeconds: function(mod) {
- var seconds = this.getTimeSeconds();
-
- if(mod) {
- if(seconds == 60) {
- seconds = 0;
- }
- else {
- seconds = seconds % 60;
- }
- }
-
- return Math.ceil(seconds);
- },
-
- /**
- * Gets number of weeks
- *
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a floored integer
- */
-
- getWeeks: function(mod) {
- var weeks = this.getTimeSeconds() / 60 / 60 / 24 / 7;
-
- if(mod) {
- weeks = weeks % 52;
- }
-
- return Math.floor(weeks);
- },
-
- /**
- * Removes a specific number of leading zeros from the array.
- * This method prevents you from removing too many digits, even
- * if you try.
- *
- * @param int Total number of digits to remove
- * @return array An array of digits
- */
-
- removeLeadingZeros: function(totalDigits, digits) {
- var total = 0;
- var newArray = [];
-
- $.each(digits, function(i, digit) {
- if(i < totalDigits) {
- total += parseInt(digits[i], 10);
- }
- else {
- newArray.push(digits[i]);
- }
- });
-
- if(total === 0) {
- return newArray;
- }
-
- return digits;
- },
-
- /**
- * Adds X second to the current time
- */
-
- addSeconds: function(x) {
- if(this.time instanceof Date) {
- this.time.setSeconds(this.time.getSeconds() + x);
- }
- else {
- this.time += x;
- }
- },
-
- /**
- * Adds 1 second to the current time
- */
-
- addSecond: function() {
- this.addSeconds(1);
- },
-
- /**
- * Substracts X seconds from the current time
- */
-
- subSeconds: function(x) {
- if(this.time instanceof Date) {
- this.time.setSeconds(this.time.getSeconds() - x);
- }
- else {
- this.time -= x;
- }
- },
-
- /**
- * Substracts 1 second from the current time
- */
-
- subSecond: function() {
- this.subSeconds(1);
- },
-
- /**
- * Converts the object to a human readable string
- */
-
- toString: function() {
- return this.getTimeSeconds().toString();
- }
-
- /*
- getYears: function() {
- return Math.floor(this.time / 60 / 60 / 24 / 7 / 52);
- },
-
- getDecades: function() {
- return Math.floor(this.getWeeks() / 10);
- }*/
- });
-
-}(jQuery));
-
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock.Timer object managers the JS timers
- *
- * @param object The parent FlipClock.Factory object
- * @param object Override the default options
- */
-
- FlipClock.Timer = FlipClock.Base.extend({
-
- /**
- * Callbacks
- */
-
- callbacks: {
- destroy: false,
- create: false,
- init: false,
- interval: false,
- start: false,
- stop: false,
- reset: false
- },
-
- /**
- * FlipClock timer count (how many intervals have passed)
- */
-
- count: 0,
-
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
- /**
- * Timer interval (1 second by default)
- */
-
- interval: 1000,
-
- /**
- * The rate of the animation in milliseconds (not currently in use)
- */
-
- animationRate: 1000,
-
- /**
- * Constructor
- *
- * @return void
- */
-
- constructor: function(factory, options) {
- this.base(options);
- this.factory = factory;
- this.callback(this.callbacks.init);
- this.callback(this.callbacks.create);
- },
-
- /**
- * This method gets the elapsed the time as an interger
- *
- * @return void
- */
-
- getElapsed: function() {
- return this.count * this.interval;
- },
-
- /**
- * This method gets the elapsed the time as a Date object
- *
- * @return void
- */
-
- getElapsedTime: function() {
- return new Date(this.time + this.getElapsed());
- },
-
- /**
- * This method is resets the timer
- *
- * @param callback This method resets the timer back to 0
- * @return void
- */
-
- reset: function(callback) {
- clearInterval(this.timer);
- this.count = 0;
- this._setInterval(callback);
- this.callback(this.callbacks.reset);
- },
-
- /**
- * This method is starts the timer
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- start: function(callback) {
- this.factory.running = true;
- this._createTimer(callback);
- this.callback(this.callbacks.start);
- },
-
- /**
- * This method is stops the timer
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- stop: function(callback) {
- this.factory.running = false;
- this._clearInterval(callback);
- this.callback(this.callbacks.stop);
- this.callback(callback);
- },
-
- /**
- * Clear the timer interval
- *
- * @return void
- */
-
- _clearInterval: function() {
- clearInterval(this.timer);
- },
-
- /**
- * Create the timer object
- *
- * @param callback A function that is called once the timer is created
- * @return void
- */
-
- _createTimer: function(callback) {
- this._setInterval(callback);
- },
-
- /**
- * Destroy the timer object
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _destroyTimer: function(callback) {
- this._clearInterval();
- this.timer = false;
- this.callback(callback);
- this.callback(this.callbacks.destroy);
- },
-
- /**
- * This method is called each time the timer interval is ran
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _interval: function(callback) {
- this.callback(this.callbacks.interval);
- this.callback(callback);
- this.count++;
- },
-
- /**
- * This sets the timer interval
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _setInterval: function(callback) {
- var t = this;
-
- t._interval(callback);
-
- t.timer = setInterval(function() {
- t._interval(callback);
- }, this.interval);
- }
-
- });
-
-}(jQuery));
-
-(function($) {
-
- /**
- * Twenty-Four Hour Clock Face
- *
- * This class will generate a twenty-four our clock for FlipClock.js
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.TwentyFourHourClockFace = FlipClock.Face.extend({
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- *
- * @param object Pass the time that should be used to display on the clock.
- */
-
- build: function(time) {
- var t = this;
- var children = this.factory.$el.find('ul');
-
- if(!this.factory.time.time) {
- this.factory.original = new Date();
-
- this.factory.time = new FlipClock.Time(this.factory, this.factory.original);
- }
-
- var time = time ? time : this.factory.time.getMilitaryTime(false, this.showSeconds);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- this.createDivider();
- this.createDivider();
-
- $(this.dividers[0]).insertBefore(this.lists[this.lists.length - 2].$el);
- $(this.dividers[1]).insertBefore(this.lists[this.lists.length - 4].$el);
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- this.autoIncrement();
-
- time = time ? time : this.factory.time.getMilitaryTime(false, this.showSeconds);
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * Counter Clock Face
- *
- * This class will generate a generice flip counter. The timer has been
- * disabled. clock.increment() and clock.decrement() have been added.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.CounterFace = FlipClock.Face.extend({
-
- /**
- * Tells the counter clock face if it should auto-increment
- */
-
- shouldAutoIncrement: false,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
-
- if(typeof options != "object") {
- options = {};
- }
-
- factory.autoStart = options.autoStart ? true : false;
-
- if(options.autoStart) {
- this.shouldAutoIncrement = true;
- }
-
- factory.increment = function() {
- factory.countdown = false;
- factory.setTime(factory.getTime().getTimeSeconds() + 1);
- };
-
- factory.decrement = function() {
- factory.countdown = true;
- var time = factory.getTime().getTimeSeconds();
- if(time > 0) {
- factory.setTime(time - 1);
- }
- };
-
- factory.setValue = function(digits) {
- factory.setTime(digits);
- };
-
- factory.setCounter = function(digits) {
- factory.setTime(digits);
- };
-
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- var t = this;
- var children = this.factory.$el.find('ul');
- var time = this.factory.getTime().digitize([this.factory.getTime().time]);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- var list = t.createList(digit);
-
- list.select(digit);
- });
-
- }
-
- $.each(this.lists, function(i, list) {
- list.play();
- });
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(this.shouldAutoIncrement) {
- this.autoIncrement();
- }
-
- if(!time) {
- time = this.factory.getTime().digitize([this.factory.getTime().time]);
- }
-
- this.base(time, doNotAddPlayClass);
- },
-
- /**
- * Reset the clock face
- */
-
- reset: function() {
- this.factory.time = new FlipClock.Time(
- this.factory,
- this.factory.original ? Math.round(this.factory.original) : 0
- );
-
- this.flip();
- }
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * Daily Counter Clock Face
- *
- * This class will generate a daily counter for FlipClock.js. A
- * daily counter will track days, hours, minutes, and seconds. If
- * the number of available digits is exceeded in the count, a new
- * digit will be created.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.DailyCounterFace = FlipClock.Face.extend({
-
- showSeconds: true,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function(time) {
- var t = this;
- var children = this.factory.$el.find('ul');
- var offset = 0;
-
- time = time ? time : this.factory.time.getDayCounter(this.showSeconds);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- if(this.showSeconds) {
- $(this.createDivider('Seconds')).insertBefore(this.lists[this.lists.length - 2].$el);
- }
- else
- {
- offset = 2;
- }
-
- $(this.createDivider('Minutes')).insertBefore(this.lists[this.lists.length - 4 + offset].$el);
- $(this.createDivider('Hours')).insertBefore(this.lists[this.lists.length - 6 + offset].$el);
- $(this.createDivider('Days', true)).insertBefore(this.lists[0].$el);
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getDayCounter(this.showSeconds);
- }
-
- this.autoIncrement();
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * Hourly Counter Clock Face
- *
- * This class will generate an hourly counter for FlipClock.js. An
- * hour counter will track hours, minutes, and seconds. If number of
- * available digits is exceeded in the count, a new digit will be
- * created.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.HourlyCounterFace = FlipClock.Face.extend({
-
- // clearExcessDigits: true,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function(excludeHours, time) {
- var t = this;
- var children = this.factory.$el.find('ul');
-
- time = time ? time : this.factory.time.getHourCounter();
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- $(this.createDivider('Seconds')).insertBefore(this.lists[this.lists.length - 2].$el);
- $(this.createDivider('Minutes')).insertBefore(this.lists[this.lists.length - 4].$el);
-
- if(!excludeHours) {
- $(this.createDivider('Hours', true)).insertBefore(this.lists[0].$el);
- }
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getHourCounter();
- }
-
- this.autoIncrement();
-
- this.base(time, doNotAddPlayClass);
- },
-
- /**
- * Append a newly created list to the clock
- */
-
- appendDigitToClock: function(obj) {
- this.base(obj);
-
- this.dividers[0].insertAfter(this.dividers[0].next());
- }
-
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * Minute Counter Clock Face
- *
- * This class will generate a minute counter for FlipClock.js. A
- * minute counter will track minutes and seconds. If an hour is
- * reached, the counter will reset back to 0. (4 digits max)
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.MinuteCounterFace = FlipClock.HourlyCounterFace.extend({
-
- clearExcessDigits: false,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- this.base(true, this.factory.time.getMinuteCounter());
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getMinuteCounter();
- }
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * Twelve Hour Clock Face
- *
- * This class will generate a twelve hour clock for FlipClock.js
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.TwelveHourClockFace = FlipClock.TwentyFourHourClockFace.extend({
-
- /**
- * The meridium jQuery DOM object
- */
-
- meridium: false,
-
- /**
- * The meridium text as string for easy access
- */
-
- meridiumText: 'AM',
-
- /**
- * Build the clock face
- *
- * @param object Pass the time that should be used to display on the clock.
- */
-
- build: function() {
- var t = this;
-
- var time = this.factory.time.getTime(false, this.showSeconds);
-
- this.base(time);
- this.meridiumText = this.getMeridium();
- this.meridium = $([
- ''
- ].join(''));
-
- this.meridium.insertAfter(this.lists[this.lists.length-1].$el);
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(this.meridiumText != this.getMeridium()) {
- this.meridiumText = this.getMeridium();
- this.meridium.find('a').html(this.meridiumText);
- }
- this.base(this.factory.time.getTime(false, this.showSeconds), doNotAddPlayClass);
- },
-
- /**
- * Get the current meridium
- *
- * @return string Returns the meridium (AM|PM)
- */
-
- getMeridium: function() {
- return new Date().getHours() >= 12 ? 'PM' : 'AM';
- },
-
- /**
- * Is it currently in the post-medirium?
- *
- * @return bool Returns true or false
- */
-
- isPM: function() {
- return this.getMeridium() == 'PM' ? true : false;
- },
-
- /**
- * Is it currently before the post-medirium?
- *
- * @return bool Returns true or false
- */
-
- isAM: function() {
- return this.getMeridium() == 'AM' ? true : false;
- }
-
- });
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Arabic Language Pack
- *
- * This class will be used to translate tokens into the Arabic language.
- *
- */
-
- FlipClock.Lang.Arabic = {
-
- 'years' : 'سنوات',
- 'months' : 'شهور',
- 'days' : 'أيام',
- 'hours' : 'ساعات',
- 'minutes' : 'دقائق',
- 'seconds' : 'ثواني'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['ar'] = FlipClock.Lang.Arabic;
- FlipClock.Lang['ar-ar'] = FlipClock.Lang.Arabic;
- FlipClock.Lang['arabic'] = FlipClock.Lang.Arabic;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Danish Language Pack
- *
- * This class will used to translate tokens into the Danish language.
- *
- */
-
- FlipClock.Lang.Danish = {
-
- 'years' : 'År',
- 'months' : 'Måneder',
- 'days' : 'Dage',
- 'hours' : 'Timer',
- 'minutes' : 'Minutter',
- 'seconds' : 'Sekunder'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['da'] = FlipClock.Lang.Danish;
- FlipClock.Lang['da-dk'] = FlipClock.Lang.Danish;
- FlipClock.Lang['danish'] = FlipClock.Lang.Danish;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock German Language Pack
- *
- * This class will used to translate tokens into the German language.
- *
- */
-
- FlipClock.Lang.German = {
-
- 'years' : 'Jahre',
- 'months' : 'Monate',
- 'days' : 'Tage',
- 'hours' : 'Stunden',
- 'minutes' : 'Minuten',
- 'seconds' : 'Sekunden'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['de'] = FlipClock.Lang.German;
- FlipClock.Lang['de-de'] = FlipClock.Lang.German;
- FlipClock.Lang['german'] = FlipClock.Lang.German;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock English Language Pack
- *
- * This class will used to translate tokens into the English language.
- *
- */
-
- FlipClock.Lang.English = {
-
- 'years' : 'Years',
- 'months' : 'Months',
- 'days' : 'Days',
- 'hours' : 'Hours',
- 'minutes' : 'Minutes',
- 'seconds' : 'Seconds'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['en'] = FlipClock.Lang.English;
- FlipClock.Lang['en-us'] = FlipClock.Lang.English;
- FlipClock.Lang['english'] = FlipClock.Lang.English;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Spanish Language Pack
- *
- * This class will used to translate tokens into the Spanish language.
- *
- */
-
- FlipClock.Lang.Spanish = {
-
- 'years' : 'Años',
- 'months' : 'Meses',
- 'days' : 'Días',
- 'hours' : 'Horas',
- 'minutes' : 'Minutos',
- 'seconds' : 'Segundos'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['es'] = FlipClock.Lang.Spanish;
- FlipClock.Lang['es-es'] = FlipClock.Lang.Spanish;
- FlipClock.Lang['spanish'] = FlipClock.Lang.Spanish;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Finnish Language Pack
- *
- * This class will used to translate tokens into the Finnish language.
- *
- */
-
- FlipClock.Lang.Finnish = {
-
- 'years' : 'Vuotta',
- 'months' : 'Kuukautta',
- 'days' : 'Päivää',
- 'hours' : 'Tuntia',
- 'minutes' : 'Minuuttia',
- 'seconds' : 'Sekuntia'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['fi'] = FlipClock.Lang.Finnish;
- FlipClock.Lang['fi-fi'] = FlipClock.Lang.Finnish;
- FlipClock.Lang['finnish'] = FlipClock.Lang.Finnish;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Canadian French Language Pack
- *
- * This class will used to translate tokens into the Canadian French language.
- *
- */
-
- FlipClock.Lang.French = {
-
- 'years' : 'Ans',
- 'months' : 'Mois',
- 'days' : 'Jours',
- 'hours' : 'Heures',
- 'minutes' : 'Minutes',
- 'seconds' : 'Secondes'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['fr'] = FlipClock.Lang.French;
- FlipClock.Lang['fr-ca'] = FlipClock.Lang.French;
- FlipClock.Lang['french'] = FlipClock.Lang.French;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Italian Language Pack
- *
- * This class will used to translate tokens into the Italian language.
- *
- */
-
- FlipClock.Lang.Italian = {
-
- 'years' : 'Anni',
- 'months' : 'Mesi',
- 'days' : 'Giorni',
- 'hours' : 'Ore',
- 'minutes' : 'Minuti',
- 'seconds' : 'Secondi'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['it'] = FlipClock.Lang.Italian;
- FlipClock.Lang['it-it'] = FlipClock.Lang.Italian;
- FlipClock.Lang['italian'] = FlipClock.Lang.Italian;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Latvian Language Pack
- *
- * This class will used to translate tokens into the Latvian language.
- *
- */
-
- FlipClock.Lang.Latvian = {
-
- 'years' : 'Gadi',
- 'months' : 'Mēneši',
- 'days' : 'Dienas',
- 'hours' : 'Stundas',
- 'minutes' : 'Minūtes',
- 'seconds' : 'Sekundes'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['lv'] = FlipClock.Lang.Latvian;
- FlipClock.Lang['lv-lv'] = FlipClock.Lang.Latvian;
- FlipClock.Lang['latvian'] = FlipClock.Lang.Latvian;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Dutch Language Pack
- *
- * This class will used to translate tokens into the Dutch language.
- */
-
- FlipClock.Lang.Dutch = {
-
- 'years' : 'Jaren',
- 'months' : 'Maanden',
- 'days' : 'Dagen',
- 'hours' : 'Uren',
- 'minutes' : 'Minuten',
- 'seconds' : 'Seconden'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['nl'] = FlipClock.Lang.Dutch;
- FlipClock.Lang['nl-be'] = FlipClock.Lang.Dutch;
- FlipClock.Lang['dutch'] = FlipClock.Lang.Dutch;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Norwegian-Bokmål Language Pack
- *
- * This class will used to translate tokens into the Norwegian language.
- *
- */
-
- FlipClock.Lang.Norwegian = {
-
- 'years' : 'År',
- 'months' : 'Måneder',
- 'days' : 'Dager',
- 'hours' : 'Timer',
- 'minutes' : 'Minutter',
- 'seconds' : 'Sekunder'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['no'] = FlipClock.Lang.Norwegian;
- FlipClock.Lang['nb'] = FlipClock.Lang.Norwegian;
- FlipClock.Lang['no-nb'] = FlipClock.Lang.Norwegian;
- FlipClock.Lang['norwegian'] = FlipClock.Lang.Norwegian;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Portuguese Language Pack
- *
- * This class will used to translate tokens into the Portuguese language.
- *
- */
-
- FlipClock.Lang.Portuguese = {
-
- 'years' : 'Anos',
- 'months' : 'Meses',
- 'days' : 'Dias',
- 'hours' : 'Horas',
- 'minutes' : 'Minutos',
- 'seconds' : 'Segundos'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['pt'] = FlipClock.Lang.Portuguese;
- FlipClock.Lang['pt-br'] = FlipClock.Lang.Portuguese;
- FlipClock.Lang['portuguese'] = FlipClock.Lang.Portuguese;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Russian Language Pack
- *
- * This class will used to translate tokens into the Russian language.
- *
- */
-
- FlipClock.Lang.Russian = {
-
- 'years' : 'лет',
- 'months' : 'месяцев',
- 'days' : 'дней',
- 'hours' : 'часов',
- 'minutes' : 'минут',
- 'seconds' : 'секунд'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['ru'] = FlipClock.Lang.Russian;
- FlipClock.Lang['ru-ru'] = FlipClock.Lang.Russian;
- FlipClock.Lang['russian'] = FlipClock.Lang.Russian;
-
-}(jQuery));
-(function($) {
-
- /**
- * FlipClock Swedish Language Pack
- *
- * This class will used to translate tokens into the Swedish language.
- *
- */
-
- FlipClock.Lang.Swedish = {
-
- 'years' : 'År',
- 'months' : 'Månader',
- 'days' : 'Dagar',
- 'hours' : 'Timmar',
- 'minutes' : 'Minuter',
- 'seconds' : 'Sekunder'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['sv'] = FlipClock.Lang.Swedish;
- FlipClock.Lang['sv-se'] = FlipClock.Lang.Swedish;
- FlipClock.Lang['swedish'] = FlipClock.Lang.Swedish;
-
-}(jQuery));
-
-(function($) {
-
- /**
- * FlipClock Chinese Language Pack
- *
- * This class will used to translate tokens into the Chinese language.
- *
- */
-
- FlipClock.Lang.Chinese = {
-
- 'years' : '年',
- 'months' : '月',
- 'days' : '日',
- 'hours' : '时',
- 'minutes' : '分',
- 'seconds' : '秒'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['zh'] = FlipClock.Lang.Chinese;
- FlipClock.Lang['zh-cn'] = FlipClock.Lang.Chinese;
- FlipClock.Lang['chinese'] = FlipClock.Lang.Chinese;
-
-}(jQuery));
\ No newline at end of file
diff --git a/compiled/flipclock.min.js b/compiled/flipclock.min.js
deleted file mode 100644
index 7c2ca7e2..00000000
--- a/compiled/flipclock.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! flipclock 2015-08-31 */
-var Base=function(){};Base.extend=function(a,b){"use strict";var c=Base.prototype.extend;Base._prototyping=!0;var d=new this;c.call(d,a),d.base=function(){},delete Base._prototyping;var e=d.constructor,f=d.constructor=function(){if(!Base._prototyping)if(this._constructing||this.constructor==f)this._constructing=!0,e.apply(this,arguments),delete this._constructing;else if(null!==arguments[0])return(arguments[0].extend||c).call(arguments[0],d)};return f.ancestor=this,f.extend=this.extend,f.forEach=this.forEach,f.implement=this.implement,f.prototype=d,f.toString=this.toString,f.valueOf=function(a){return"object"==a?f:e.valueOf()},c.call(f,b),"function"==typeof f.init&&f.init(),f},Base.prototype={extend:function(a,b){if(arguments.length>1){var c=this[a];if(c&&"function"==typeof b&&(!c.valueOf||c.valueOf()!=b.valueOf())&&/\bbase\b/.test(b)){var d=b.valueOf();b=function(){var a=this.base||Base.prototype.base;this.base=c;var b=d.apply(this,arguments);return this.base=a,b},b.valueOf=function(a){return"object"==a?b:d},b.toString=Base.toString}this[a]=b}else if(a){var e=Base.prototype.extend;Base._prototyping||"function"==typeof this||(e=this.extend||e);for(var f={toSource:null},g=["constructor","toString","valueOf"],h=Base._prototyping?0:1;i=g[h++];)a[i]!=f[i]&&e.call(this,i,a[i]);for(var i in a)f[i]||e.call(this,i,a[i])}return this}},Base=Base.extend({constructor:function(){this.extend(arguments[0])}},{ancestor:Object,version:"1.1",forEach:function(a,b,c){for(var d in a)void 0===this.prototype[d]&&b.call(c,a[d],d,a)},implement:function(){for(var a=0;a',' '].join("");d&&(e=""),b=this.factory.localize(b);var f=['',''+(b?b:"")+" ",e," "],g=a(f.join(""));return this.dividers.push(g),g},createList:function(a,b){"object"==typeof a&&(b=a,a=0);var c=new FlipClock.List(this.factory,a,b);return this.lists.push(c),c},reset:function(){this.factory.time=new FlipClock.Time(this.factory,this.factory.original?Math.round(this.factory.original):0,{minimumDigits:this.factory.minimumDigits}),this.flip(this.factory.original,!1)},appendDigitToClock:function(a){a.$el.append(!1)},addDigit:function(a){var b=this.createList(a,{classes:{active:this.factory.classes.active,before:this.factory.classes.before,flip:this.factory.classes.flip}});this.appendDigitToClock(b)},start:function(){},stop:function(){},autoIncrement:function(){this.factory.countdown?this.decrement():this.increment()},increment:function(){this.factory.time.addSecond()},decrement:function(){0==this.factory.time.getTimeSeconds()?this.factory.stop():this.factory.time.subSecond()},flip:function(b,c){var d=this;a.each(b,function(a,b){var e=d.lists[a];e?(c||b==e.digit||e.play(),e.select(b)):d.addDigit(b)})}})}(jQuery),function(a){"use strict";FlipClock.Factory=FlipClock.Base.extend({animationRate:1e3,autoStart:!0,callbacks:{destroy:!1,create:!1,init:!1,interval:!1,start:!1,stop:!1,reset:!1},classes:{active:"flip-clock-active",before:"flip-clock-before",divider:"flip-clock-divider",dot:"flip-clock-dot",label:"flip-clock-label",flip:"flip",play:"play",wrapper:"flip-clock-wrapper"},clockFace:"HourlyCounter",countdown:!1,defaultClockFace:"HourlyCounter",defaultLanguage:"english",$el:!1,face:!0,lang:!1,language:"english",minimumDigits:0,original:!1,running:!1,time:!1,timer:!1,$wrapper:!1,constructor:function(b,c,d){d||(d={}),this.lists=[],this.running=!1,this.base(d),this.$el=a(b).addClass(this.classes.wrapper),this.$wrapper=this.$el,this.original=c instanceof Date?c:c?Math.round(c):0,this.time=new FlipClock.Time(this,this.original,{minimumDigits:this.minimumDigits,animationRate:this.animationRate}),this.timer=new FlipClock.Timer(this,d),this.loadLanguage(this.language),this.loadClockFace(this.clockFace,d),this.autoStart&&this.start()},loadClockFace:function(a,b){var c,d="Face",e=!1;return a=a.ucfirst()+d,this.face.stop&&(this.stop(),e=!0),this.$el.html(""),this.time.minimumDigits=this.minimumDigits,c=FlipClock[a]?new FlipClock[a](this,b):new FlipClock[this.defaultClockFace+d](this,b),c.build(),this.face=c,e&&this.start(),this.face},loadLanguage:function(a){var b;return b=FlipClock.Lang[a.ucfirst()]?FlipClock.Lang[a.ucfirst()]:FlipClock.Lang[a]?FlipClock.Lang[a]:FlipClock.Lang[this.defaultLanguage],this.lang=b},localize:function(a,b){var c=this.lang;if(!a)return null;var d=a.toLowerCase();return"object"==typeof b&&(c=b),c&&c[d]?c[d]:a},start:function(a){var b=this;b.running||b.countdown&&!(b.countdown&&b.time.time>0)?b.log("Trying to start timer when countdown already at 0"):(b.face.start(b.time),b.timer.start(function(){b.flip(),"function"==typeof a&&a()}))},stop:function(a){this.face.stop(),this.timer.stop(a);for(var b in this.lists)this.lists.hasOwnProperty(b)&&this.lists[b].stop()},reset:function(a){this.timer.reset(a),this.face.reset()},setTime:function(a){this.time.time=a,this.flip(!0)},getTime:function(a){return this.time},setCountdown:function(a){var b=this.running;this.countdown=a?!0:!1,b&&(this.stop(),this.start())},flip:function(a){this.face.flip(!1,a)}})}(jQuery),function(a){"use strict";FlipClock.List=FlipClock.Base.extend({digit:0,classes:{active:"flip-clock-active",before:"flip-clock-before",flip:"flip"},factory:!1,$el:!1,$obj:!1,items:[],lastDigit:0,constructor:function(a,b,c){this.factory=a,this.digit=b,this.lastDigit=b,this.$el=this.createList(),this.$obj=this.$el,b>0&&this.select(b),this.factory.$el.append(this.$el)},select:function(a){if("undefined"==typeof a?a=this.digit:this.digit=a,this.digit!=this.lastDigit){var b=this.$el.find("."+this.classes.before).removeClass(this.classes.before);this.$el.find("."+this.classes.active).removeClass(this.classes.active).addClass(this.classes.before),this.appendListItem(this.classes.active,this.digit),b.remove(),this.lastDigit=this.digit}},play:function(){this.$el.addClass(this.factory.classes.play)},stop:function(){var a=this;setTimeout(function(){a.$el.removeClass(a.factory.classes.play)},this.factory.timer.interval)},createListItem:function(a,b){return['','','",'"," "," "].join("")},appendListItem:function(a,b){var c=this.createListItem(a,b);this.$el.append(c)},createList:function(){var b=this.getPrevDigit()?this.getPrevDigit():this.digit,c=a(['',this.createListItem(this.classes.before,b),this.createListItem(this.classes.active,this.digit)," "].join(""));return c},getNextDigit:function(){return 9==this.digit?0:this.digit+1},getPrevDigit:function(){return 0==this.digit?9:this.digit-1}})}(jQuery),function(a){"use strict";String.prototype.ucfirst=function(){return this.substr(0,1).toUpperCase()+this.substr(1)},a.fn.FlipClock=function(b,c){return new FlipClock(a(this),b,c)},a.fn.flipClock=function(b,c){return a.fn.FlipClock(b,c)}}(jQuery),function(a){"use strict";FlipClock.Time=FlipClock.Base.extend({time:0,factory:!1,minimumDigits:0,constructor:function(a,b,c){"object"!=typeof c&&(c={}),c.minimumDigits||(c.minimumDigits=a.minimumDigits),this.base(c),this.factory=a,b&&(this.time=b)},convertDigitsToArray:function(a){var b=[];a=a.toString();for(var c=0;cthis.minimumDigits&&(this.minimumDigits=c.length),this.minimumDigits>c.length)for(var d=c.length;d12?c-12:0===c?12:c,a.getMinutes()];return b===!0&&d.push(a.getSeconds()),this.digitize(d)},getSeconds:function(a){var b=this.getTimeSeconds();return a&&(60==b?b=0:b%=60),Math.ceil(b)},getWeeks:function(a){var b=this.getTimeSeconds()/60/60/24/7;return a&&(b%=52),Math.floor(b)},removeLeadingZeros:function(b,c){var d=0,e=[];return a.each(c,function(a,f){b>a?d+=parseInt(c[a],10):e.push(c[a])}),0===d?e:c},addSeconds:function(a){this.time instanceof Date?this.time.setSeconds(this.time.getSeconds()+a):this.time+=a},addSecond:function(){this.addSeconds(1)},subSeconds:function(a){this.time instanceof Date?this.time.setSeconds(this.time.getSeconds()-a):this.time-=a},subSecond:function(){this.subSeconds(1)},toString:function(){return this.getTimeSeconds().toString()}})}(jQuery),function(a){"use strict";FlipClock.Timer=FlipClock.Base.extend({callbacks:{destroy:!1,create:!1,init:!1,interval:!1,start:!1,stop:!1,reset:!1},count:0,factory:!1,interval:1e3,animationRate:1e3,constructor:function(a,b){this.base(b),this.factory=a,this.callback(this.callbacks.init),this.callback(this.callbacks.create)},getElapsed:function(){return this.count*this.interval},getElapsedTime:function(){return new Date(this.time+this.getElapsed())},reset:function(a){clearInterval(this.timer),this.count=0,this._setInterval(a),this.callback(this.callbacks.reset)},start:function(a){this.factory.running=!0,this._createTimer(a),this.callback(this.callbacks.start)},stop:function(a){this.factory.running=!1,this._clearInterval(a),this.callback(this.callbacks.stop),this.callback(a)},_clearInterval:function(){clearInterval(this.timer)},_createTimer:function(a){this._setInterval(a)},_destroyTimer:function(a){this._clearInterval(),this.timer=!1,this.callback(a),this.callback(this.callbacks.destroy)},_interval:function(a){this.callback(this.callbacks.interval),this.callback(a),this.count++},_setInterval:function(a){var b=this;b._interval(a),b.timer=setInterval(function(){b._interval(a)},this.interval)}})}(jQuery),function(a){FlipClock.TwentyFourHourClockFace=FlipClock.Face.extend({constructor:function(a,b){this.base(a,b)},build:function(b){var c=this,d=this.factory.$el.find("ul");this.factory.time.time||(this.factory.original=new Date,this.factory.time=new FlipClock.Time(this.factory,this.factory.original));var b=b?b:this.factory.time.getMilitaryTime(!1,this.showSeconds);b.length>d.length&&a.each(b,function(a,b){c.createList(b)}),this.createDivider(),this.createDivider(),a(this.dividers[0]).insertBefore(this.lists[this.lists.length-2].$el),a(this.dividers[1]).insertBefore(this.lists[this.lists.length-4].$el),this.base()},flip:function(a,b){this.autoIncrement(),a=a?a:this.factory.time.getMilitaryTime(!1,this.showSeconds),this.base(a,b)}})}(jQuery),function(a){FlipClock.CounterFace=FlipClock.Face.extend({shouldAutoIncrement:!1,constructor:function(a,b){"object"!=typeof b&&(b={}),a.autoStart=b.autoStart?!0:!1,b.autoStart&&(this.shouldAutoIncrement=!0),a.increment=function(){a.countdown=!1,a.setTime(a.getTime().getTimeSeconds()+1)},a.decrement=function(){a.countdown=!0;var b=a.getTime().getTimeSeconds();b>0&&a.setTime(b-1)},a.setValue=function(b){a.setTime(b)},a.setCounter=function(b){a.setTime(b)},this.base(a,b)},build:function(){var b=this,c=this.factory.$el.find("ul"),d=this.factory.getTime().digitize([this.factory.getTime().time]);d.length>c.length&&a.each(d,function(a,c){var d=b.createList(c);d.select(c)}),a.each(this.lists,function(a,b){b.play()}),this.base()},flip:function(a,b){this.shouldAutoIncrement&&this.autoIncrement(),a||(a=this.factory.getTime().digitize([this.factory.getTime().time])),this.base(a,b)},reset:function(){this.factory.time=new FlipClock.Time(this.factory,this.factory.original?Math.round(this.factory.original):0),this.flip()}})}(jQuery),function(a){FlipClock.DailyCounterFace=FlipClock.Face.extend({showSeconds:!0,constructor:function(a,b){this.base(a,b)},build:function(b){var c=this,d=this.factory.$el.find("ul"),e=0;b=b?b:this.factory.time.getDayCounter(this.showSeconds),b.length>d.length&&a.each(b,function(a,b){c.createList(b)}),this.showSeconds?a(this.createDivider("Seconds")).insertBefore(this.lists[this.lists.length-2].$el):e=2,a(this.createDivider("Minutes")).insertBefore(this.lists[this.lists.length-4+e].$el),a(this.createDivider("Hours")).insertBefore(this.lists[this.lists.length-6+e].$el),a(this.createDivider("Days",!0)).insertBefore(this.lists[0].$el),this.base()},flip:function(a,b){a||(a=this.factory.time.getDayCounter(this.showSeconds)),this.autoIncrement(),this.base(a,b)}})}(jQuery),function(a){FlipClock.HourlyCounterFace=FlipClock.Face.extend({constructor:function(a,b){this.base(a,b)},build:function(b,c){var d=this,e=this.factory.$el.find("ul");c=c?c:this.factory.time.getHourCounter(),c.length>e.length&&a.each(c,function(a,b){d.createList(b)}),a(this.createDivider("Seconds")).insertBefore(this.lists[this.lists.length-2].$el),a(this.createDivider("Minutes")).insertBefore(this.lists[this.lists.length-4].$el),b||a(this.createDivider("Hours",!0)).insertBefore(this.lists[0].$el),this.base()},flip:function(a,b){a||(a=this.factory.time.getHourCounter()),this.autoIncrement(),this.base(a,b)},appendDigitToClock:function(a){this.base(a),this.dividers[0].insertAfter(this.dividers[0].next())}})}(jQuery),function(a){FlipClock.MinuteCounterFace=FlipClock.HourlyCounterFace.extend({clearExcessDigits:!1,constructor:function(a,b){this.base(a,b)},build:function(){this.base(!0,this.factory.time.getMinuteCounter())},flip:function(a,b){a||(a=this.factory.time.getMinuteCounter()),this.base(a,b)}})}(jQuery),function(a){FlipClock.TwelveHourClockFace=FlipClock.TwentyFourHourClockFace.extend({meridium:!1,meridiumText:"AM",build:function(){var b=this.factory.time.getTime(!1,this.showSeconds);this.base(b),this.meridiumText=this.getMeridium(),this.meridium=a(['"].join("")),this.meridium.insertAfter(this.lists[this.lists.length-1].$el)},flip:function(a,b){this.meridiumText!=this.getMeridium()&&(this.meridiumText=this.getMeridium(),this.meridium.find("a").html(this.meridiumText)),this.base(this.factory.time.getTime(!1,this.showSeconds),b)},getMeridium:function(){return(new Date).getHours()>=12?"PM":"AM"},isPM:function(){return"PM"==this.getMeridium()?!0:!1},isAM:function(){return"AM"==this.getMeridium()?!0:!1}})}(jQuery),function(a){FlipClock.Lang.Arabic={years:"سنوات",months:"شهور",days:"أيام",hours:"ساعات",minutes:"دقائق",seconds:"ثواني"},FlipClock.Lang.ar=FlipClock.Lang.Arabic,FlipClock.Lang["ar-ar"]=FlipClock.Lang.Arabic,FlipClock.Lang.arabic=FlipClock.Lang.Arabic}(jQuery),function(a){FlipClock.Lang.Danish={years:"År",months:"Måneder",days:"Dage",hours:"Timer",minutes:"Minutter",seconds:"Sekunder"},FlipClock.Lang.da=FlipClock.Lang.Danish,FlipClock.Lang["da-dk"]=FlipClock.Lang.Danish,FlipClock.Lang.danish=FlipClock.Lang.Danish}(jQuery),function(a){FlipClock.Lang.German={years:"Jahre",months:"Monate",days:"Tage",hours:"Stunden",minutes:"Minuten",seconds:"Sekunden"},FlipClock.Lang.de=FlipClock.Lang.German,FlipClock.Lang["de-de"]=FlipClock.Lang.German,FlipClock.Lang.german=FlipClock.Lang.German}(jQuery),function(a){FlipClock.Lang.English={years:"Years",months:"Months",days:"Days",hours:"Hours",minutes:"Minutes",seconds:"Seconds"},FlipClock.Lang.en=FlipClock.Lang.English,FlipClock.Lang["en-us"]=FlipClock.Lang.English,FlipClock.Lang.english=FlipClock.Lang.English}(jQuery),function(a){FlipClock.Lang.Spanish={years:"Años",months:"Meses",days:"Días",hours:"Horas",minutes:"Minutos",seconds:"Segundos"},FlipClock.Lang.es=FlipClock.Lang.Spanish,FlipClock.Lang["es-es"]=FlipClock.Lang.Spanish,FlipClock.Lang.spanish=FlipClock.Lang.Spanish}(jQuery),function(a){FlipClock.Lang.Finnish={years:"Vuotta",months:"Kuukautta",days:"Päivää",hours:"Tuntia",minutes:"Minuuttia",seconds:"Sekuntia"},FlipClock.Lang.fi=FlipClock.Lang.Finnish,FlipClock.Lang["fi-fi"]=FlipClock.Lang.Finnish,FlipClock.Lang.finnish=FlipClock.Lang.Finnish}(jQuery),function(a){FlipClock.Lang.French={years:"Ans",months:"Mois",days:"Jours",hours:"Heures",minutes:"Minutes",seconds:"Secondes"},FlipClock.Lang.fr=FlipClock.Lang.French,FlipClock.Lang["fr-ca"]=FlipClock.Lang.French,FlipClock.Lang.french=FlipClock.Lang.French}(jQuery),function(a){FlipClock.Lang.Italian={years:"Anni",months:"Mesi",days:"Giorni",hours:"Ore",minutes:"Minuti",seconds:"Secondi"},FlipClock.Lang.it=FlipClock.Lang.Italian,FlipClock.Lang["it-it"]=FlipClock.Lang.Italian,FlipClock.Lang.italian=FlipClock.Lang.Italian}(jQuery),function(a){FlipClock.Lang.Latvian={years:"Gadi",months:"Mēneši",days:"Dienas",hours:"Stundas",minutes:"Minūtes",seconds:"Sekundes"},FlipClock.Lang.lv=FlipClock.Lang.Latvian,FlipClock.Lang["lv-lv"]=FlipClock.Lang.Latvian,FlipClock.Lang.latvian=FlipClock.Lang.Latvian}(jQuery),function(a){FlipClock.Lang.Dutch={years:"Jaren",months:"Maanden",days:"Dagen",hours:"Uren",minutes:"Minuten",seconds:"Seconden"},FlipClock.Lang.nl=FlipClock.Lang.Dutch,FlipClock.Lang["nl-be"]=FlipClock.Lang.Dutch,FlipClock.Lang.dutch=FlipClock.Lang.Dutch}(jQuery),function(a){FlipClock.Lang.Norwegian={years:"År",months:"Måneder",days:"Dager",hours:"Timer",minutes:"Minutter",seconds:"Sekunder"},FlipClock.Lang.no=FlipClock.Lang.Norwegian,FlipClock.Lang.nb=FlipClock.Lang.Norwegian,FlipClock.Lang["no-nb"]=FlipClock.Lang.Norwegian,FlipClock.Lang.norwegian=FlipClock.Lang.Norwegian}(jQuery),function(a){FlipClock.Lang.Portuguese={years:"Anos",months:"Meses",days:"Dias",hours:"Horas",minutes:"Minutos",seconds:"Segundos"},FlipClock.Lang.pt=FlipClock.Lang.Portuguese,FlipClock.Lang["pt-br"]=FlipClock.Lang.Portuguese,FlipClock.Lang.portuguese=FlipClock.Lang.Portuguese}(jQuery),function(a){FlipClock.Lang.Russian={years:"лет",months:"месяцев",days:"дней",hours:"часов",minutes:"минут",seconds:"секунд"},FlipClock.Lang.ru=FlipClock.Lang.Russian,FlipClock.Lang["ru-ru"]=FlipClock.Lang.Russian,FlipClock.Lang.russian=FlipClock.Lang.Russian}(jQuery),function(a){FlipClock.Lang.Swedish={years:"År",months:"Månader",days:"Dagar",hours:"Timmar",minutes:"Minuter",seconds:"Sekunder"},FlipClock.Lang.sv=FlipClock.Lang.Swedish,FlipClock.Lang["sv-se"]=FlipClock.Lang.Swedish,FlipClock.Lang.swedish=FlipClock.Lang.Swedish}(jQuery),function(a){FlipClock.Lang.Chinese={years:"年",months:"月",days:"日",hours:"时",minutes:"分",seconds:"秒"},FlipClock.Lang.zh=FlipClock.Lang.Chinese,FlipClock.Lang["zh-cn"]=FlipClock.Lang.Chinese,FlipClock.Lang.chinese=FlipClock.Lang.Chinese}(jQuery);
\ No newline at end of file
diff --git a/dist/flipclock.css b/dist/flipclock.css
new file mode 100644
index 00000000..f97ebeb5
--- /dev/null
+++ b/dist/flipclock.css
@@ -0,0 +1,3 @@
+.flipclock-wrapper{background:red;font-family:"Helvetica Neue",Helvetica,sans-serif;font-size:16px;-webkit-user-select:none;text-align:center;position:relative;width:100%;margin:1em}.flipclock-wrapper *{box-sizing:border-box;backface-visibility:hidden}.flipclock-wrapper ul{position:relative;float:left;margin:5px;width:60px;height:90px;font-size:80px;font-weight:bold;line-height:87px;border-radius:6px;background:#000}.flipclock-wrapper .flipclock-label{font-size:.75em}.flipclock-wrapper.clearfix:after,.flipclock-wrapper .clearfix:after{content:" ";display:table;clear:both}.flipclock-wrapper ul{list-style:none}.flipclock-meridium{background:none !important;box-shadow:0 0 0 !important;font-size:36px !important}.flipclock-meridium a{color:#313333}.flipclock-wrapper ul li{z-index:1;position:absolute;left:0;top:0;margin:0;width:100%;height:100%;line-height:87px;text-decoration:none !important}.flipclock-wrapper ul li:first-child{z-index:2}.flipclock-wrapper ul li a{display:block;height:100%;perspective:200px;margin:0 !important;overflow:visible !important;cursor:default !important}.flipclock-wrapper ul li a div{z-index:1;position:absolute;left:0;width:100%;height:50%;font-size:80px;overflow:hidden;outline:1px solid transparent}.flipclock-wrapper ul li a div .shadow{position:absolute;width:100%;height:100%;z-index:2}.flipclock-wrapper ul li a div.up{transform-origin:50% 100%;top:0}.flipclock-wrapper ul li a div.up:after{content:"";position:absolute;top:44px;left:0;z-index:5;width:100%;height:3px;background-color:#000;background-color:rgba(0,0,0,0.4)}.flipclock-wrapper ul li a div.down{transform-origin:50% 0;bottom:0;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.flipclock-wrapper ul li a div div.inn{position:absolute;left:0;z-index:1;width:100%;height:200%;color:#ccc;text-shadow:0 1px 2px #000;text-align:center;background-color:#333;border-radius:6px;font-size:70px}.flipclock-wrapper ul li a div.up div.inn{top:0}.flipclock-wrapper ul li a div.down div.inn{bottom:0}.flipclock-wrapper ul.play li.flipclock-before{z-index:3}.flipclock-wrapper .flip{box-shadow:0 2px 5px rgba(0,0,0,0.7)}.flipclock-wrapper ul.play li.flipclock-active{animation:asd 0.5s 0.5s linear both;z-index:5}.flipclock-divider{float:left;display:inline-block;position:relative;width:20px;height:100px}.flipclock-divider:first-child{width:0}.flipclock-dot{display:block;background:#323434;width:10px;height:10px;position:absolute;border-radius:50%;box-shadow:0 0 5px rgba(0,0,0,0.5);left:5px}.flipclock-divider .flipclock-label{position:absolute;top:-1.5em;right:-86px;color:black;text-shadow:none}.flipclock-divider.minutes .flipclock-label{right:-88px}.flipclock-divider.seconds .flipclock-label{right:-91px}.flipclock-dot.top{top:30px}.flipclock-dot.bottom{bottom:30px}@keyframes asd{0%{z-index:2}20%{z-index:4}100%{z-index:4}}.flipclock-wrapper ul.play li.flipclock-active .down{animation:turn 0.5s 0.5s linear both}@keyframes turn{0%{transform:rotateX(90deg)}100%{transform:rotateX(0deg)}}.flipclock-wrapper ul.play li.flipclock-before .up{z-index:2;animation:turn2 0.5s linear both}@keyframes turn2{0%{transform:rotateX(0deg)}100%{transform:rotateX(-90deg)}}.flipclock-wrapper ul li.flipclock-active{z-index:3}.flipclock-wrapper ul.play li.flipclock-before .up .shadow{background:-moz-linear-gradient(top, rgba(0,0,0,0.1) 0%, #000 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0.1)), color-stop(100%, #000));background:linear,top,rgba(0,0,0,0.1) 0%,#000 100%;background:-ms-linear-gradient(top, rgba(0,0,0,0.1) 0%, #000 100%);background:linear,to bottom,rgba(0,0,0,0.1) 0%,#000 100%;animation:show 0.5s linear both}.flipclock-wrapper ul.play li.flipclock-active .up .shadow{background:-moz-linear-gradient(top, rgba(0,0,0,0.1) 0%, #000 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0.1)), color-stop(100%, #000));background:linear,top,rgba(0,0,0,0.1) 0%,#000 100%;background:-ms-linear-gradient(top, rgba(0,0,0,0.1) 0%, #000 100%);background:linear,to bottom,rgba(0,0,0,0.1) 0%,#000 100%;animation:hide 0.5s 0.3s linear both}.flipclock-wrapper ul.play li.flipclock-before .down .shadow{background:-moz-linear-gradient(top, #000 0%, rgba(0,0,0,0.1) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #000), color-stop(100%, rgba(0,0,0,0.1)));background:linear,top,#000 0%,rgba(0,0,0,0.1) 100%;background:-ms-linear-gradient(top, #000 0%, rgba(0,0,0,0.1) 100%);background:linear,to bottom,#000 0%,rgba(0,0,0,0.1) 100%;animation:show 0.5s linear both}.flipclock-wrapper ul.play li.flipclock-active .down .shadow{background:-moz-linear-gradient(top, #000 0%, rgba(0,0,0,0.1) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #000), color-stop(100%, rgba(0,0,0,0.1)));background:linear,top,#000 0%,rgba(0,0,0,0.1) 100%;background:-ms-linear-gradient(top, #000 0%, rgba(0,0,0,0.1) 100%);background:linear,to bottom,#000 0%,rgba(0,0,0,0.1) 100%;animation:hide 0.5s 0.2s linear both}@keyframes show{0%{opacity:0}100%{opacity:1}}@keyframes hide{0%{opacity:1}100%{opacity:0}}.fc-wrapper{display:-ms-inline-flexbox;display:inline-flex;font-size:1vw;font-family:"Helvetica Neue", Helvetica, sans-serif;box-sizing:border-box;-ms-flex-align:end;align-items:flex-end}.fc-wrapper .fc-group .fc-label{font-size:.875em;height:2em;line-height:2em}.fc-wrapper .fc-group .fc-face{float:left;width:4em;height:6em;background:#333;position:relative;border-radius:.75rem;margin:0 .125em;box-shadow:0 1.5px 3px rgba(0,0,0,0.24),0 3px 8px rgba(0,0,0,0.05);font-weight:bold;color:#ccc}.fc-wrapper .fc-group .fc-face .fc-number{position:absolute;width:100%;height:100%;perspective:15em}.fc-wrapper .fc-group .fc-face .fc-number:first-child{z-index:2}.fc-wrapper .fc-group .fc-face .fc-number.before{z-index:3}.fc-wrapper .fc-group .fc-face .fc-number.before .top{z-index:2;animation:flip-top .5s linear both;transform-origin:bottom center}.fc-wrapper .fc-group .fc-face .fc-number.before .top:after{background:linear-gradient(to bottom, rgba(0,0,0,0.1) 0%, #000 100%);animation:show-shadow .5s linear both}.fc-wrapper .fc-group .fc-face .fc-number.before .bottom:after{background:linear-gradient(to bottom, #000 0%, rgba(0,0,0,0.1) 100%);animation:show-shadow .5s linear both}.fc-wrapper .fc-group .fc-face .fc-number.active{animation:indexing .5s .5s linear both;z-index:2}.fc-wrapper .fc-group .fc-face .fc-number.active .top:after{background:linear-gradient(to bottom, rgba(0,0,0,0.1) 0%, #000 100%);animation:hide-shadow .5s .3s linear both}.fc-wrapper .fc-group .fc-face .fc-number.active .bottom{z-index:2;animation:flip-bottom .5s .5s linear both;transform-origin:top center}.fc-wrapper .fc-group .fc-face .fc-number.active .bottom:after{background:linear-gradient(to bottom, #000 0%, rgba(0,0,0,0.1) 100%);animation:hide-shadow .5s .3s linear both}.fc-wrapper .fc-group .fc-face .fc-number>.top,.fc-wrapper .fc-group .fc-face .fc-number>.bottom{background:#333;width:100%;height:50%;font-size:4.5em;overflow:hidden;backface-visibility:hidden;position:relative;box-shadow:inset 0 0 0.2em rgba(0,0,0,0.5)}.fc-wrapper .fc-group .fc-face .fc-number>.top:after,.fc-wrapper .fc-group .fc-face .fc-number>.bottom:after{content:" ";display:block;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.fc-wrapper .fc-group .fc-face .fc-number>.top:before,.fc-wrapper .fc-group .fc-face .fc-number>.bottom:before{content:" ";display:block;width:100%;height:1px;position:absolute}.fc-wrapper .fc-group .fc-face .fc-number .top{border-radius:.75rem .75rem 0 0;line-height:1.33333}.fc-wrapper .fc-group .fc-face .fc-number .top:after{border-radius:.75rem .75rem 0 0}.fc-wrapper .fc-group .fc-face .fc-number .top:before{background:#333;opacity:.4;bottom:0}.fc-wrapper .fc-group .fc-face .fc-number .bottom{border-radius:0 0 .75rem .75rem;line-height:0}.fc-wrapper .fc-group .fc-face .fc-number .bottom:after{border-radius:0 0 .75rem .75rem}.fc-wrapper .fc-group .fc-face .fc-number .bottom:before{background:#ccc;opacity:.1}.fc-wrapper .fc-divider{position:relative;width:1.5em;height:6em}.fc-wrapper .fc-divider:before,.fc-wrapper .fc-divider:after{content:" ";display:block;width:.75em;height:.75em;background:#333;border-radius:50%;position:absolute;top:50%;left:50%}.fc-wrapper .fc-divider:before{transform:translate(-50%, 75%)}.fc-wrapper .fc-divider:after{transform:translate(-50%, -175%)}@keyframes indexing{0%{z-index:2}1%{z-index:4}100%{z-index:4}}@keyframes flip-bottom{0%{transform:rotateX(90deg)}100%{transform:rotateX(0deg)}}@keyframes flip-top{0%{transform:rotateX(0deg)}100%{transform:rotateX(-90deg)}}@keyframes show-shadow{0%{opacity:0}100%{opacity:1}}@keyframes hide-shadow{0%{opacity:1}100%{opacity:0}}
+
+/*# sourceMappingURL=flipclock.css.map */
diff --git a/dist/flipclock.css.map b/dist/flipclock.css.map
new file mode 100644
index 00000000..fadd501c
--- /dev/null
+++ b/dist/flipclock.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["_fc-base.scss","flipclock.scss","_mixins.scss"],"names":[],"mappings":"AASA,mBACE,eACA,kDACA,eACA,yBAEA,kBACA,kBACA,WACA,UAAY,CAkCb,qBA/BG,sBACA,0BAA4B,CAC7B,sBAGC,kBACA,WACA,WACA,WACA,YACA,eACA,iBACA,iBACA,kBACA,eAAiB,CA1BrB,oCA8BI,eAAiB,CA9BrB,qEAqCM,YACA,cACA,UAAY,CASlB,sBACI,eAAiB,CAIrB,oBACI,2BACA,4BACA,yBAA2B,CAE/B,sBACI,aAAe,CAQG,yBAClB,UACA,kBACA,OACA,MACA,SACA,WACA,YACA,iBACA,+BAAiC,CAErC,qCACI,SAAW,CAEU,2BACrB,cACA,YACA,AAEA,kBACA,oBACA,4BACA,yBAA2B,CAE/B,+BACI,UACA,kBACA,OACA,WACA,WACA,eACA,gBACA,6BAA+B,CAEJ,uCAC3B,kBACA,WACA,YACA,SAAW,CAEf,kCACI,0BACA,KAAO,CACV,wCAEG,WACA,kBACA,SACA,OACA,UACA,WACA,WACA,sBACA,gCAAsB,CAE1B,oCACI,uBACA,SACA,8BACA,8BAAgC,CACnC,uCAEG,kBACA,OACA,UACA,WACA,YACA,WACA,2BACA,kBACA,sBACA,kBACA,cAAgB,CAEpB,0CACI,KAAO,CACV,4CAEG,QAAU,CAMd,+CACI,SAAW,CACd,yBAEG,oCAA0B,CAE9B,+CACI,oCACA,SAAW,CAEf,mBACI,WACA,qBACA,kBACA,WACA,YAAc,CAElB,+BACI,OAAS,CAEb,eACI,cACA,mBACA,WACA,YACA,kBACA,kBACA,mCACA,QAAU,CAEd,oCACI,kBACA,WACA,YACA,YACA,gBAAkB,CACrB,4CAEG,WAAa,CAEjB,4CACI,WAAa,CAEH,mBACV,QAAU,CAEd,sBACI,WAAa,CAChB,eAEG,GACI,SAAW,CAEf,IACI,SAAW,CAEf,KACI,SAAW,CAAA,CAGnB,qDACI,oCAAsC,CACzC,gBAEG,GACI,wBAAkB,CAEtB,KACI,uBAAkB,CAAA,CAGqB,mDAC3C,UACA,gCAAkC,CAEtC,iBACI,GACI,uBAAkB,CAEtB,KACI,yBAAkB,CAAA,CAG1B,0CACI,SAAW,CAIoC,2DAC/C,oEACA,oHACA,mDACA,AACA,mEACA,yDACA,+BAAiC,CAErC,2DACI,oEACA,oHACA,mDACA,AACA,mEACA,yDACA,oCAAsC,CACzC,6DAIG,oEACA,oHACA,mDACA,AACA,mEACA,yDACA,+BAAiC,CAErC,6DACI,oEACA,oHACA,mDACA,AACA,mEACA,yDACA,oCAAsC,CACzC,gBAEG,GACI,SAAW,CAEf,KACI,SAAW,CAAA,CAGnB,gBACI,GACI,SAAW,CAEf,KACI,SAAW,CAAA,CCrRnB,YAEE,2BAAA,AACA,oBAAA,cACA,oDACA,sBACA,mBAAA,AAAsB,oBAAA,CAIpB,gCACE,iBACA,WACA,eAAiB,CAbvB,+BAiBM,WACA,UACA,WACA,gBACA,kBACA,qBACA,gBClCF,mEDqCE,iBACA,UD3CoB,CC6CpB,0CACE,kBACA,WACA,YACA,gBAAkB,CAiHnB,sDA9GG,SAAW,CAPf,iDAWI,SAAW,CAxCrB,sDA2CY,UACA,mCACA,8BAAgC,CAHlC,4DAMI,qEACA,qCAAuC,CAjDrD,+DAwDc,qEACA,qCAAuC,CA5B/C,iDAkCI,uCACA,SAAW,CAoBZ,4DAfK,qEACA,yCAA2C,CAC5C,yDAID,UACA,0CACA,2BAA6B,CAM9B,+DAHG,qEACA,yCAA2C,CAC5C,iGAMH,gBACA,WACA,WACA,gBACA,gBACA,2BACA,kBAEA,0CAAoC,CAVpC,6GAaE,YACA,cACA,kBACA,MACA,QACA,SACA,OACA,eAAiB,CApBnB,+GAwBE,YACA,cACA,WACA,WACA,iBAAmB,CACpB,+CAID,gCACA,mBAA4B,CAxHtC,qDA2HY,+BAAiC,CALrC,sDASI,gBACA,WACA,QAAU,CAId,kDACE,gCACA,aAAe,CAFjB,wDAKI,+BAAiC,CAClC,yDAGC,gBACA,UAAY,CACb,wBAOP,kBACA,YACA,UA7JyB,CAI7B,6DA6JM,YACA,cACA,YACA,aACA,gBACA,kBACA,kBACA,QACA,QAAU,CArKhB,+BAyKM,8BAAoB,CAnBxB,8BAuBI,gCAAoB,CACrB,oBAOH,GACE,SAAW,CAEb,GACE,SAAW,CAEb,KACE,SAAW,CAAA,CAIf,uBACE,GACE,wBAAkB,CAEpB,KACE,uBAAkB,CAAA,CAItB,oBACE,GACE,uBAAkB,CAEpB,KACE,yBAAkB,CAAA,CAItB,uBACE,GACE,SAAW,CAEb,KACE,SAAW,CAAA,CAIf,uBACE,GACE,SAAW,CAEb,KACE,SAAW,CAAA,CAAA","file":"flipclock.css","sourcesContent":["//\n// Flipclock Base Styles\n//\n\n$fc-font-family: \"Helvetica Neue\", Helvetica, sans-serif !default;\n\n$fc-face-color: #ccc !default;\n$fc-face-background: #333 !default;\n\n.flipclock-wrapper {\n background: red;\n font-family: $fc-font-family;\n font-size: 16px;\n -webkit-user-select: none;\n\n text-align: center;\n position: relative;\n width: 100%;\n margin: 1em;\n\n * {\n box-sizing: border-box;\n backface-visibility: hidden;\n }\n\n ul {\n position: relative;\n float: left;\n margin: 5px;\n width: 60px;\n height: 90px;\n font-size: 80px;\n font-weight: bold;\n line-height: 87px;\n border-radius: 6px;\n background: #000;\n }\n\n .flipclock-label {\n font-size: .75em;\n }\n\n // clearfix IE8 and up\n &.clearfix,\n .clearfix {\n &:after {\n content: \" \";\n display: table;\n clear: both;\n }\n }\n\n}\n\n\n\n\n.flipclock-wrapper ul {\n list-style: none;\n}\n/* Main */\n\n.flipclock-meridium {\n background: none !important;\n box-shadow: 0 0 0 !important;\n font-size: 36px !important;\n}\n.flipclock-meridium a {\n color: #313333;\n}\n\n/* Skeleton */\n\n.flipclock-wrapper ul {\n\n}\n.flipclock-wrapper ul li {\n z-index: 1;\n position: absolute;\n left: 0;\n top: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n line-height: 87px;\n text-decoration: none !important;\n}\n.flipclock-wrapper ul li:first-child {\n z-index: 2;\n}\n.flipclock-wrapper ul li a {\n display: block;\n height: 100%;\n -webkit-perspective: 200px;\n -moz-perspective: 200px;\n perspective: 200px;\n margin: 0 !important;\n overflow: visible !important;\n cursor: default !important;\n}\n.flipclock-wrapper ul li a div {\n z-index: 1;\n position: absolute;\n left: 0;\n width: 100%;\n height: 50%;\n font-size: 80px;\n overflow: hidden;\n outline: 1px solid transparent;\n}\n.flipclock-wrapper ul li a div .shadow {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 2;\n}\n.flipclock-wrapper ul li a div.up {\n transform-origin: 50% 100%;\n top: 0;\n}\n.flipclock-wrapper ul li a div.up:after {\n content: \"\";\n position: absolute;\n top: 44px;\n left: 0;\n z-index: 5;\n width: 100%;\n height: 3px;\n background-color: #000;\n background-color: rgba(0, 0, 0, 0.4);\n}\n.flipclock-wrapper ul li a div.down {\n transform-origin: 50% 0;\n bottom: 0;\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.flipclock-wrapper ul li a div div.inn {\n position: absolute;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 200%;\n color: #ccc;\n text-shadow: 0 1px 2px #000;\n text-align: center;\n background-color: #333;\n border-radius: 6px;\n font-size: 70px;\n}\n.flipclock-wrapper ul li a div.up div.inn {\n top: 0;\n}\n.flipclock-wrapper ul li a div.down div.inn {\n bottom: 0;\n}\n\n\n/* PLAY */\n\n.flipclock-wrapper ul.play li.flipclock-before {\n z-index: 3;\n}\n.flipclock-wrapper .flip {\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.7);\n}\n.flipclock-wrapper ul.play li.flipclock-active {\n animation: asd 0.5s 0.5s linear both;\n z-index: 5;\n}\n.flipclock-divider {\n float: left;\n display: inline-block;\n position: relative;\n width: 20px;\n height: 100px;\n}\n.flipclock-divider:first-child {\n width: 0;\n}\n.flipclock-dot {\n display: block;\n background: #323434;\n width: 10px;\n height: 10px;\n position: absolute;\n border-radius: 50%;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);\n left: 5px;\n}\n.flipclock-divider .flipclock-label {\n position: absolute;\n top: -1.5em;\n right: -86px;\n color: black;\n text-shadow: none;\n}\n.flipclock-divider.minutes .flipclock-label {\n right: -88px;\n}\n.flipclock-divider.seconds .flipclock-label {\n right: -91px;\n}\n.flipclock-dot.top {\n top: 30px;\n}\n.flipclock-dot.bottom {\n bottom: 30px;\n}\n@keyframes asd {\n 0% {\n z-index: 2;\n }\n 20% {\n z-index: 4;\n }\n 100% {\n z-index: 4;\n }\n}\n.flipclock-wrapper ul.play li.flipclock-active .down {\n animation: turn 0.5s 0.5s linear both;\n}\n@keyframes turn {\n 0% {\n transform: rotateX(90deg);\n }\n 100% {\n transform: rotateX(0deg);\n }\n}\n.flipclock-wrapper ul.play li.flipclock-before .up {\n z-index: 2;\n animation: turn2 0.5s linear both;\n}\n@keyframes turn2 {\n 0% {\n transform: rotateX(0deg);\n }\n 100% {\n transform: rotateX(-90deg);\n }\n}\n.flipclock-wrapper ul li.flipclock-active {\n z-index: 3;\n}\n/* SHADOW */\n\n.flipclock-wrapper ul.play li.flipclock-before .up .shadow {\n background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));\n background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;\n background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;\n animation: show 0.5s linear both;\n}\n.flipclock-wrapper ul.play li.flipclock-active .up .shadow {\n background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));\n background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;\n background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);\n background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;\n animation: hide 0.5s 0.3s linear both;\n}\n/*DOWN*/\n\n.flipclock-wrapper ul.play li.flipclock-before .down .shadow {\n background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));\n background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;\n background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;\n animation: show 0.5s linear both;\n}\n.flipclock-wrapper ul.play li.flipclock-active .down .shadow {\n background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));\n background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;\n background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);\n background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;\n animation: hide 0.5s 0.2s linear both;\n}\n@keyframes show {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes hide {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n","//\n// Imports\n//\n\n// Project Variables\n@import \"fc-variables\";\n\n// Project Mixins\n@import \"mixins\";\n\n// Flipclock Base Styles\n@import \"fc-base\";\n\n// Theme Styles\n@import \"theme-default\";\n\n$fc-face-font-size: 4.5em !default;\n$fc-face-width: 4em !default;\n$fc-face-height: 6em !default;\n\n$fc-flip-shadow-color: #000 !default;\n\n.fc-wrapper {\n// background: red;\n display: inline-flex;\n font-size: 1vw;\n font-family: \"Helvetica Neue\", Helvetica, sans-serif;\n box-sizing: border-box;\n align-items: flex-end;\n \n .fc-group {\n \n .fc-label {\n font-size: .875em;\n height: 2em;\n line-height: 2em;\n }\n \n .fc-face {\n float: left;\n width: $fc-face-width;\n height: $fc-face-height;\n background: $fc-face-background;\n position: relative;\n border-radius: .75rem;\n margin: 0 .125em;\n @include material-shadow(1);\n \n font-weight: bold;\n color: $fc-face-color;\n \n .fc-number {\n position: absolute;\n width: 100%;\n height: 100%;\n perspective: 15em;\n \n &:first-child {\n z-index: 2;\n }\n \n &.before {\n z-index: 3;\n \n .top {\n z-index: 2;\n animation: flip-top .5s linear both;\n transform-origin: bottom center;\n \n &:after {\n background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,.1) 0%, rgba($fc-flip-shadow-color,1) 100%);\n animation: show-shadow .5s linear both;\n }\n }\n \n .bottom {\n \n &:after {\n background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,1) 0%, rgba($fc-flip-shadow-color,.1) 100%);\n animation: show-shadow .5s linear both;\n }\n }\n }\n \n &.active {\n animation: indexing .5s .5s linear both;\n z-index: 2;\n \n .top {\n \n &:after {\n background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,.1) 0%, rgba($fc-flip-shadow-color,1) 100%);\n animation: hide-shadow .5s .3s linear both;\n }\n }\n \n .bottom {\n z-index: 2;\n animation: flip-bottom .5s .5s linear both;\n transform-origin: top center;\n \n &:after {\n background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,1) 0%, rgba($fc-flip-shadow-color,.1) 100%);\n animation: hide-shadow .5s .3s linear both;\n }\n }\n }\n \n > .top,\n > .bottom {\n background: $fc-face-background;\n width: 100%;\n height: 50%;\n font-size: $fc-face-font-size;\n overflow: hidden;\n backface-visibility: hidden;\n position: relative;\n \n box-shadow: inset 0 0 .2em rgba(#000,.5);\n \n &:after {\n content: \" \";\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n }\n \n &:before {\n content: \" \";\n display: block;\n width: 100%;\n height: 1px;\n position: absolute;\n }\n }\n \n .top {\n border-radius: .75rem .75rem 0 0;\n line-height: $fc-face-height/$fc-face-font-size;\n \n &:after {\n border-radius: .75rem .75rem 0 0;\n }\n \n &:before {\n background: $fc-face-background;\n opacity: .4;\n bottom: 0;\n }\n }\n \n .bottom {\n border-radius: 0 0 .75rem .75rem;\n line-height: 0;\n \n &:after {\n border-radius: 0 0 .75rem .75rem;\n }\n \n &:before {\n background: $fc-face-color;\n opacity: .1;\n }\n }\n }\n }\n }\n \n .fc-divider {\n position: relative;\n width: 1.5em;\n height: $fc-face-height;\n \n &:before,\n &:after {\n content: \" \";\n display: block;\n width: .75em;\n height: .75em;\n background: $fc-face-background;\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n }\n \n &:before {\n transform: translate(-50%, 75%);\n }\n \n &:after {\n transform: translate(-50%, -175%);\n }\n \n }\n \n}\n\n@keyframes indexing {\n 0% {\n z-index: 2;\n }\n 1% {\n z-index: 4;\n }\n 100% {\n z-index: 4;\n }\n}\n\n@keyframes flip-bottom {\n 0% {\n transform: rotateX(90deg);\n }\n 100% {\n transform: rotateX(0deg);\n }\n}\n\n@keyframes flip-top {\n 0% {\n transform: rotateX(0deg);\n }\n 100% {\n transform: rotateX(-90deg);\n }\n}\n\n@keyframes show-shadow {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes hide-shadow {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}","//\n// Material Shadow Mixin\n// Brian Espinosa \n//\n// Based on http://www.google.com/design/spec/what-is-material/elevation-shadows.html\n//\n\n$material-shadow-color: #000 !default;\n\n@mixin material-shadow($z-height) {\n @if $z-height == 1 {\n box-shadow: 0 1.5px 3px rgba($material-shadow-color, 0.24),\n 0 3px 8px rgba($material-shadow-color, 0.05);\n }\n @if $z-height == 2 {\n box-shadow: 0 4px 7px rgba($material-shadow-color, 0.23),\n 0 8px 25px rgba($material-shadow-color, 0.05);\n }\n @if $z-height == 3 {\n box-shadow: 0 7px 10px rgba($material-shadow-color, 0.30),\n 0 10px 50px rgba($material-shadow-color, 0.12);\n }\n @if $z-height == 4 {\n box-shadow: 0 10px 15px rgba($material-shadow-color, 0.28),\n 0 15px 60px rgba($material-shadow-color, 0.18);\n }\n @if $z-height == 5 {\n box-shadow: 0 16px 20px rgba($material-shadow-color, 0.29),\n 0 20px 65px rgba($material-shadow-color, 0.18);\n }\n}"]}
\ No newline at end of file
diff --git a/dist/flipclock.js b/dist/flipclock.js
new file mode 100644
index 00000000..901759cf
--- /dev/null
+++ b/dist/flipclock.js
@@ -0,0 +1,4510 @@
+/*
+ Base.js, version 1.1a
+ Copyright 2006-2010, Dean Edwards
+ License: http://www.opensource.org/licenses/mit-license.php
+*/
+
+var Base = function() {
+ // dummy
+};
+
+Base.extend = function(_instance, _static) { // subclass
+
+ "use strict";
+
+ var extend = Base.prototype.extend;
+
+ // build the prototype
+ Base._prototyping = true;
+
+ var proto = new this();
+
+ extend.call(proto, _instance);
+
+ proto.base = function() {
+ // call this method from any other method to invoke that method's ancestor
+ };
+
+ delete Base._prototyping;
+
+ // create the wrapper for the constructor function
+ //var constructor = proto.constructor.valueOf(); //-dean
+ var constructor = proto.constructor;
+ var klass = proto.constructor = function() {
+ if (!Base._prototyping) {
+ if (this._constructing || this.constructor == klass) { // instantiation
+ this._constructing = true;
+ constructor.apply(this, arguments);
+ delete this._constructing;
+ } else if (arguments[0] !== null) { // casting
+ return (arguments[0].extend || extend).call(arguments[0], proto);
+ }
+ }
+ };
+
+ // build the class interface
+ klass.ancestor = this;
+ klass.extend = this.extend;
+ klass.forEach = this.forEach;
+ klass.implement = this.implement;
+ klass.prototype = proto;
+ klass.toString = this.toString;
+ klass.valueOf = function(type) {
+ //return (type == "object") ? klass : constructor; //-dean
+ return (type == "object") ? klass : constructor.valueOf();
+ };
+ extend.call(klass, _static);
+ // class initialisation
+ if (typeof klass.init == "function") klass.init();
+ return klass;
+};
+
+Base.prototype = {
+ extend: function(source, value) {
+ if (arguments.length > 1) { // extending with a name/value pair
+ var ancestor = this[source];
+ if (ancestor && (typeof value == "function") && // overriding a method?
+ // the valueOf() comparison is to avoid circular references
+ (!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&
+ /\bbase\b/.test(value)) {
+ // get the underlying method
+ var method = value.valueOf();
+ // override
+ value = function() {
+ var previous = this.base || Base.prototype.base;
+ this.base = ancestor;
+ var returnValue = method.apply(this, arguments);
+ this.base = previous;
+ return returnValue;
+ };
+ // point to the underlying method
+ value.valueOf = function(type) {
+ return (type == "object") ? value : method;
+ };
+ value.toString = Base.toString;
+ }
+ this[source] = value;
+ } else if (source) { // extending with an object literal
+ var extend = Base.prototype.extend;
+ // if this object has a customised extend method then use it
+ if (!Base._prototyping && typeof this != "function") {
+ extend = this.extend || extend;
+ }
+ var proto = {toSource: null};
+ // do the "toString" and other methods manually
+ var hidden = ["constructor", "toString", "valueOf"];
+ // if we are prototyping then include the constructor
+ var i = Base._prototyping ? 0 : 1;
+ while (key = hidden[i++]) {
+ if (source[key] != proto[key]) {
+ extend.call(this, key, source[key]);
+
+ }
+ }
+ // copy each of the source object's properties to this object
+ for (var key in source) {
+ if (!proto[key]) extend.call(this, key, source[key]);
+ }
+ }
+ return this;
+ }
+};
+
+// initialise
+Base = Base.extend({
+ constructor: function() {
+ this.extend(arguments[0]);
+ }
+}, {
+ ancestor: Object,
+ version: "1.1",
+
+ forEach: function(object, block, context) {
+ for (var key in object) {
+ if (this.prototype[key] === undefined) {
+ block.call(context, object[key], key, object);
+ }
+ }
+ },
+
+ implement: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ if (typeof arguments[i] == "function") {
+ // if it's a function, call it
+ arguments[i](this.prototype);
+ } else {
+ // add the interface using the extend method
+ this.prototype.extend(arguments[i]);
+ }
+ }
+ return this;
+ },
+
+ toString: function() {
+ return String(this.valueOf());
+ }
+});
+/*jshint smarttabs:true */
+
+var FlipClock;
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * FlipFlock Helper
+ *
+ * @param {object} obj - A jQuery object or CSS select
+ * @param {int} digit - An integer used to start the clock (no. seconds)
+ * @param {object} options - An object of properties to override the default
+ */
+
+ FlipClock = function(obj, digit, options) {
+ if(digit instanceof Object && digit instanceof Date === false) {
+ options = digit;
+ digit = 0;
+ }
+
+ return new FlipClock.Factory(obj, digit, options);
+ };
+
+ /**
+ * The global FlipClock.Lang object
+ */
+
+ FlipClock.Lang = {};
+
+ /**
+ * The Base FlipClock class is used to extend all other FlipFlock
+ * classes. It handles the callbacks and the basic setters/getters
+ */
+
+ FlipClock.Base = Base.extend({
+
+ /**
+ * @param {string} buildDate - The last official build date
+ */
+
+ buildDate: '2016-04-01',
+
+ /**
+ * @param {string} version - The current version
+ */
+
+ version: '1.0.0',
+
+ /**
+ * @param {object} options - The available options for this class
+ */
+
+ options: {},
+
+ /**
+ * @param {object} _events - The bound events to this object
+ */
+
+ _events: {},
+
+ /**
+ * @param {object} _uid - The Flipclock.Uuid object instance
+ */
+
+ _uid: false,
+
+ /**
+ * Sets the default options
+ *
+ * @param {mixed} options - The default options
+ */
+
+ constructor: function(options) {
+ if(typeof options !== "object") {
+ options = {};
+ }
+ this._events = {};
+ this._uid = (new FlipClock.Uuid()).toString();
+ this.options = this.getDefaultOptions();
+ this.setOptions(options);
+ },
+
+ /**
+ * Delegates the callback to the defined method
+ *
+ * @param {function} method - The callback function
+ * @return object
+ */
+
+ callback: function(method) {
+ if(typeof method === "function") {
+ var args = [];
+
+ for(var x = 1; x <= arguments.length; x++) {
+ if(arguments[x]) {
+ args.push(arguments[x]);
+ }
+ }
+
+ method.apply(this, args);
+ }
+
+ return this;
+ },
+
+ /**
+ * Log a string into the console if it exists
+ *
+ * @param {string} str - The string to log
+ * @return mixed
+ */
+
+ log: function(str) {
+ if(window.console && console.log) {
+ console.log(str);
+ }
+
+ return this;
+ },
+
+ /**
+ * Get an single option value. Returns false if option does not exist
+ *
+ * @param {string} index - The name of the option
+ * @return mixed
+ */
+
+ getOption: function(index) {
+ if(this.options.hasOwnProperty(index)) {
+ return this.options[index];
+ }
+ return null;
+ },
+
+ /**
+ * Get all options
+ *
+ * @return bool
+ */
+
+ getOptions: function() {
+ return this.options;
+ },
+
+ /**
+ * Set a single option value
+ *
+ * @param {string} index - The name of the option
+ * @param {string} value - The value of the option
+ * @return object
+ */
+
+ setOption: function(index, value) {
+ if( this.hasOwnProperty(index) ||
+ typeof this[index] === "function" ||
+ index in this
+ ) {
+ this[index] = value;
+ }
+ else {
+ this.options[index] = value;
+ }
+
+ return this;
+ },
+
+ /**
+ * Set a multiple options by passing a JSON object
+ *
+ * @param {object} options - An object of options to set
+ * @return object
+ */
+
+ setOptions: function(options) {
+ for(var key in options) {
+ if(typeof options[key] !== "undefined") {
+ this.setOption(key, options[key]);
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {};
+ },
+
+ /*
+ * Bind an event
+ *
+ * @param {string} name - The name of the event
+ * @param {function} callback - The event callback function or method
+ * @return object
+ */
+
+ on: function(name, callback) {
+ if(!this._events[name]) {
+ this._events[name] = [];
+ }
+
+ var event = new FlipClock.Event(name, callback);
+
+ this._events[name].push(event);
+
+ return event;
+ },
+
+ /*
+ * Bind an event to be called once
+ *
+ * @param {string} name - The name of the event
+ * @param {function} callback - The event callback function or method
+ * @return object
+ */
+
+ once: function(name, callback) {
+ var event = this.on(name, callback);
+
+ event.setFireOnce(true);
+
+ return event;
+ },
+
+ /*
+ * Remove all bound events for a specific trigger
+ *
+ * @param {string} name - The name of the event
+ * @return object
+ */
+
+ off: function(name) {
+ if(this._events[name]) {
+ delete this._events[name];
+ }
+
+ return this;
+ },
+
+ /*
+ * Remove all bound events for a specific trigger
+ *
+ * @param {string} name - The name of the event
+ * @return object
+ */
+
+ trigger: function(name) {
+ if(this._events[name]) {
+ var params = [];
+
+ for(var x in arguments) {
+ if(x > 0) {
+ params.push(arguments[x]);
+ }
+ }
+
+ for(var i in this._events[name]) {
+ this._events[name][i].fire(this, params);
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Translate a string to the localized locale
+ *
+ * @param {string} name - The name of the string to localize
+ * @return string
+ */
+
+ localize: function(name) {
+ if(this.translator) {
+ return this.translator.localize(name);
+ }
+
+ return name;
+ },
+
+ /*
+ * Helper method for localize. t() is just short.
+ *
+ * @param {string} name - The name of the string to localize
+ * @return string
+ */
+
+ t: function(name) {
+ return this.localize(name);
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * Capitalize the first letter in a string
+ *
+ * @return string
+ */
+
+ String.prototype.ucfirst = function() {
+ return this.substr(0, 1).toUpperCase() + this.substr(1);
+ };
+
+ /**
+ * jQuery helper method
+ *
+ * @param int An integer used to start the clock (no. seconds)
+ * @param object An object of properties to override the default
+ */
+
+ $.fn.FlipClock = function(digit, options) {
+ return new FlipClock($(this), digit, options);
+ };
+
+ /**
+ * jQuery helper method
+ *
+ * @param int An integer used to start the clock (no. seconds)
+ * @param object An object of properties to override the default
+ */
+
+ $.fn.flipClock = function(digit, options) {
+ return $.fn.FlipClock(digit, options);
+ };
+
+}(jQuery));
+
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.List class is used to build the list used to create
+ * the card flip effect. This object fascilates selecting the correct
+ * node by passing a specific value.
+ */
+
+ FlipClock.List = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The items in the list
+ */
+
+ items: [],
+
+ /**
+ * The selected value in the list
+ */
+
+ value: 0,
+
+ /**
+ * Constructor
+ *
+ * @param object A FlipClock.Factory object
+ * @param int An string or integer use to select the correct value
+ * @param object An object to override the default properties
+ */
+
+ constructor: function(value, options) {
+ this.items = [];
+ this.value = value;
+ this.$el = false;
+
+ this.base(options);
+ this.createList();
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The CSS classes
+ */
+
+ classes: {
+ active: 'flipclock-active',
+ before: 'flipclock-before',
+ flip: 'flip',
+ play: 'play'
+ },
+
+ /**
+ * The last value selected in the list
+ */
+
+ lastValue: 0
+ };
+ },
+
+ /**
+ * Select the value in the list
+ *
+ * @param int value
+ * @return object
+ */
+
+ select: function(value) {
+ var _afterListItem = this._afterListItem;
+
+ this.setOption('lastValue', this.value);
+
+ if(typeof value === "undefined") {
+ value = this.value;
+ }
+ else {
+ this.value = value;
+ }
+
+ if(this.value != this.getOption('lastValue')) {
+ this._beforeListItem.$el.removeClass(this.getOption('classes').before);
+
+ this.$el.find('.'+this.getOption('classes').active)
+ .removeClass(this.getOption('classes').active)
+ .addClass(this.getOption('classes').before);
+
+ this.items.splice(0, 1);
+
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
+
+ this._beforeListItem.$el.remove();
+ this._beforeListItem = _afterListItem;
+
+ this.trigger('select', this.value);
+ }
+
+ return this;
+ },
+
+ /*
+ * Add the play class to the list
+ *
+ * @return object
+ */
+
+ addPlayClass: function() {
+ this.$el.addClass(this.getOption('classes').play);
+
+ return this;
+ },
+
+ /*
+ * Remove the play class to the list
+ *
+ * @return object
+ */
+
+ removePlayClass: function() {
+ this.$el.removeClass(this.getOption('classes').play);
+
+ return this;
+ },
+
+ /**
+ * Creates the list item HTML and returns as a string
+ *
+ * @param mixed value
+ * @param string css
+ * @return object
+ */
+
+ createListItem: function(value, css) {
+ var item = new FlipClock.ListItem(value, {
+ className: css
+ });
+
+ this.items.push(item);
+
+ this.$el.append(item.$el);
+
+ this.trigger('create:item', item);
+
+ return item;
+ },
+
+ /**
+ * Create the list of values and appends it to the DOM object
+ *
+ * @return object
+ */
+
+ createList: function() {
+ var $el = this.$el = $('');
+
+ this._beforeListItem = this.createListItem(this.getPrevValue(), this.getOption('classes').before);
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
+
+ $el.append(this._beforeListItem.el);
+ $el.append(this._afterListItem.el);
+
+ this.trigger('create:list', $el);
+
+ return $el;
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.ListItem object generates and maintains a list item
+ * in FlipClock.List objets.
+ */
+
+ FlipClock.ListItem = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The list item value
+ */
+
+ value: null,
+
+ /*
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.base(options);
+ this.value = value;
+
+ this.$el = $([
+ '',
+ '',
+ '',
+ '
',
+ '
'+value+'
',
+ '
',
+ '',
+ '
',
+ '
'+value+'
',
+ '
',
+ ' ',
+ ' '
+ ].join(''));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ down: 'down',
+ inn: 'inn',
+ shadow: 'shadow',
+ up: 'up'
+ },
+
+ /**
+ * The css class appended to the parent DOM node
+ */
+
+ className: null
+ };
+ },
+
+ /*
+ * Output the object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.$el.html();
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.EnglishAlphaList class is a specific class to create
+ * lists that alphabetical values
+ */
+
+ FlipClock.EnglishAlphaList = FlipClock.List.extend({
+
+ /*
+ * Constructor
+ *
+ * @param string
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.options = this.getDefaultOptions();
+ this.setOptions(options);
+
+ if(!value) {
+ value = String.fromCharCode(this.getMinCharCode());
+ }
+
+ this.base(value, options);
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ var options = this.base();
+
+ /**
+ * Tells the list to use capital letters if true
+ */
+ options.capitalLetters = true;
+
+ return options;
+ },
+
+ /*
+ * Get the maximum character code in the list
+ *
+ * @return int
+ */
+
+ getMaxCharCode: function() {
+ return this.getOption('capitalLetters') ? 90 : 122;
+ },
+
+ /*
+ * Get the minimum character code in the list
+ *
+ * @return int
+ */
+
+ getMinCharCode: function() {
+ return this.getOption('capitalLetters') ? 65 : 96;
+ },
+
+ /*
+ * Get the char code of the current list value
+ *
+ * @return int
+ */
+
+ getCharCode: function() {
+ return this.value.charCodeAt(0);
+ },
+
+ /*
+ * Get the previous value in the list
+ *
+ * @return int
+ */
+
+ getPrevValue: function() {
+ var charCode = this.value.charCodeAt(0) - 1;
+ var minCode = this.getMinCharCode(), maxCode = this.getMaxCharCode();
+
+ if(charCode < minCode) {
+ charCode = maxCode;
+ }
+
+ return String.fromCharCode(charCode);
+ },
+
+ /*
+ * Get the next value in the list
+ *
+ * @return int
+ */
+
+ getNextValue: function() {
+ var charCode = this.value.charCodeAt(0) + 1;
+ var minCode = this.getMinCharCode(), maxCode = this.getMaxCharCode();
+
+ if(charCode > maxCode) {
+ charCode = minCode;
+ }
+
+ return String.fromCharCode(charCode);
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /*
+ * The FlipClock.Divider class makes visual dividers on clocks
+ * easy to create and manipulate.
+ */
+
+ FlipClock.Divider = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The FlipClock.Translator instance
+ */
+
+ translator: false,
+
+ /*
+ * Constructor
+ *
+ * @param mixed options
+ */
+
+ constructor: function(options) {
+ this.base(options);
+
+ // Translate the label
+ if(this.getOption('label')) {
+ this.setOption('label', this.t(this.getOption('label')));
+ }
+
+ var dots = !this.getOption('excludeDots') ? [
+ ' ',
+ ' '
+ ].join('') : '';
+
+ this.$el = $([
+ '',
+ ''+(this.getOption('label') ? this.getOption('label') : '')+' ',
+ dots,
+ ' '
+ ].join(''));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The available options for this class
+ */
+
+ className: false,
+
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ divider: 'flipclock-divider',
+ dot: 'flipclock-dot',
+ label: 'flipclock-label'
+ },
+
+ /**
+ * If true the dots will not be displayed in the divider
+ */
+
+ excludeDots: false,
+
+ /**
+ * The label for the divider
+ */
+
+ label: false
+ };
+ },
+
+ /*
+ * Output object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.$el.html();
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /*
+ * The FlipClock.Event class are instances for each event triggered
+ * by FlipClock's classes.
+ */
+
+ FlipClock.Event = FlipClock.Base.extend({
+
+ /**
+ * The name of the event
+ */
+
+ name: false,
+
+ /**
+ * Has the event fired?
+ */
+
+ _hasFired: false,
+
+ /**
+ * The returned object of the last event response. Null
+ * if no response has been triggered.
+ */
+
+ _lastResponse: null,
+
+ /**
+ * If true, the event will not fire
+ */
+
+ _preventFire: false,
+
+ /**
+ * If true, the event will only fire once
+ */
+
+ _fireOnce: false,
+
+ /**
+ * The function to call when the event is fired
+ */
+
+ _callback: function() {},
+
+ /*
+ * Constructor
+ *
+ * @param string
+ * @param mixed
+ */
+
+ constructor: function(name, callback) {
+ if(!name) {
+ throw "Events must have a name";
+ }
+
+ if(typeof callback === "function") {
+ this._callback = callback;
+ }
+ },
+
+ /*
+ * Fire the event. This method is chainable.
+ *
+ * @param object
+ * @param mixed
+ * @return object
+ */
+
+ fire: function(obj, args) {
+ if(this._preventFire === false) {
+ this.setLastResponse(this._callback.apply(obj, args));
+ this._hasFired = true;
+ if(this._fireOnce) {
+ this._preventFire = true;
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Prevent the event from firing. This method is chainable.
+ *
+ * @return object
+ */
+
+ off: function() {
+ this._preventFire = true;
+
+ return this;
+ },
+
+ /*
+ * Turn on the event (if the event was previously turned off).
+ * This method is chainable.
+ *
+ * @return object
+ */
+
+ on: function() {
+ this._preventFire = false;
+
+ return this;
+ },
+
+ /*
+ * Returns true if the event has fired
+ *
+ * @return bool
+ */
+
+ hasFired: function() {
+ return this._hasFired;
+ },
+
+ /*
+ * Get the last response. Returns null if no response exists
+ *
+ * @return mixed
+ */
+
+ getLastResponse: function() {
+ return this._lastResponse;
+ },
+
+ /*
+ * Sets the last response. This method is chainable.
+ *
+ * @param object
+ * @return object
+ */
+
+ setLastResponse: function(response) {
+ this._lastResponse = response;
+
+ return this;
+ },
+
+ /*
+ * Returns true if the event is set to only fire once
+ *
+ * @return bool
+ */
+
+ getFireOnce: function() {
+ return this._fireOnce;
+ },
+
+ /*
+ * Set event to fire once or indefinitely
+ *
+ * @param bool
+ * @return object
+ */
+
+ setFireOnce: function(value) {
+ this._fireOnce = value;
+
+ return this;
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Face class is an abstract class used to create
+ * new clock faces.
+ */
+
+ FlipClock.Face = FlipClock.Base.extend({
+
+ /**
+ * An array of jQuery objects used for the dividers (the colons)
+ */
+
+ dividers: [],
+
+ /**
+ * The language object after it has been loaded
+ */
+
+ lang: false,
+
+ /**
+ * An array of FlipClock.List objects
+ */
+
+ lists: [],
+
+ /**
+ * The original starting value of the clock face.
+ */
+
+ originalValue: 0,
+
+ /**
+ * The FlipClock.Time object
+ */
+
+ time: false,
+
+ /**
+ * The FlipClock.Timer object
+ */
+
+ timer: false,
+
+ /**
+ * The FlipClock.Translator object
+ */
+
+ translator: false,
+
+ /**
+ * The current value of the clock face.
+ */
+
+ value: 0,
+
+ /**
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ var t = this;
+
+ if(value instanceof Date === false && typeof value === "object") {
+ options = value;
+ value = 0;
+ }
+
+ this.dividers = [];
+ this.lists = [];
+ this.originalValue = value;
+ this.value = value;
+
+ this.base(options);
+
+ this.translator = new FlipClock.Translator({
+ defaultLanguage: this.getOption('defaultLanguage'),
+ language: this.getOption('language')
+ });
+
+ this.timer = new FlipClock.Timer();
+
+ this.timer.on('interval', function() {
+ t.flip();
+ t.trigger('interval');
+ });
+
+ this.on('add:digit', function(list) {
+ if(this.dividers.length) {
+ for(var i in this.dividers) {
+ var divider = this.dividers[i];
+
+ if(!divider.$el.is(':first-child')) {
+ divider.$el.insertAfter(divider.$el.next());
+ }
+ }
+ }
+ });
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The clock's animation rate.
+ *
+ * Note, currently this property doesn't do anything.
+ * This property is here to be used in the future to
+ * programmaticaly set the clock's animation speed
+ */
+
+ animationRate: 1000,
+
+ /**
+ * Sets whether or not the clock should automatically add the play class
+ */
+
+ autoPlay: true,
+
+ /**
+ * Sets whether or not the clock should start ticking upon instantiation
+ */
+
+ autoStart: true,
+
+ /**
+ * Sets whether or not the clock should countdown
+ */
+
+ countdown: false,
+
+ /**
+ * The default language
+ */
+
+ defaultLanguage: 'english',
+
+ /**
+ * The language being used to display labels (string)
+ */
+
+ language: 'english',
+
+ /**
+ * The minimum digits the clock must have
+ */
+
+ minimumDigits: 0
+ };
+ },
+
+ /**
+ * Add a digit to the clock face
+ */
+
+ addDigit: function(digit) {
+ var list = this.createList(digit);
+
+ this.trigger('add:digit', list);
+
+ return list;
+ },
+
+ /*
+ * Attach the FlipClock.List to the DOM of the clock face
+ *
+ * @param object $el
+ * @param object list
+ * @return null
+ */
+
+ attachList: function($el, list) {
+ $el.append(list.$el);
+ },
+
+ /**
+ * Build the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ build: function() {
+ if(this.getOption('autoStart')) {
+ this.start();
+ }
+
+ this.trigger('build');
+
+ return this;
+ },
+
+ /**
+ * Perform arbirtrary logic when the clock face instantiated.
+ * The factor object is passed in the first argument. This
+ * method is chainable.
+ *
+ * @param object factory
+ * @return object
+ */
+
+ init: function(factory) {
+ this.setTimeObject(this.value);
+ this.trigger('init');
+
+ return this;
+ },
+
+ /**
+ * Creates a jQuery object used for the digit divider
+ *
+ * @param mixed label
+ * @param mixed className
+ * @param mixed excludeDots
+ */
+
+ createDivider: function(label, className, excludeDots) {
+ if(typeof className == "boolean" || !className) {
+ excludeDots = className;
+ className = false;
+ }
+
+ var divider = new FlipClock.Divider({
+ label: label,
+ className: className,
+ excludeDots: excludeDots,
+ translator: this.translator
+ });
+
+ this.dividers.push(divider);
+
+ this.trigger('create:divider', divider);
+
+ return divider;
+ },
+
+ /**
+ * Creates a FlipClock.List object and appends it to the DOM
+ *
+ * @param mixed value
+ * @param object options
+ * @return object
+ */
+
+ createList: function(value, options) {
+ var list = this.getListObject(value);
+
+ if(this.getOption('autoPlay') || this.timer.running) {
+ list.addPlayClass();
+ }
+
+ this.lists.push(list);
+
+ this.trigger('create:list', list);
+
+ return list;
+ },
+
+ /*
+ * Get the list class object
+ *
+ * @return object
+ */
+
+ getListClass: function() {
+ return FlipClock.NumericList;
+ },
+
+ /*
+ * Get a new list class instance
+ *
+ * @param mixed value
+ * @return object
+ */
+
+ getListObject: function(value) {
+ var List = this.getListClass();
+
+ return new List(value, {
+ translator: this.translator
+ });
+ },
+
+ /**
+ * Reset the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ reset: function(callback) {
+ this.value = this.originalValue;
+ this.time.time = this.value;
+ this.flip();
+ this.trigger('reset');
+ this.callback(callback);
+
+ return this;
+ },
+
+ /**
+ * Starts the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ start: function(callback) {
+ if(!this.timer.running) {
+ this.trigger('before:start');
+ this.timer.start();
+ this.trigger('start');
+ this.callback(callback);
+ }
+
+ return this;
+ },
+
+ /**
+ * Stops the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ stop: function(callback) {
+ var t = this;
+ if(this.timer.running) {
+ this.trigger('before:stop');
+ this.timer.stop(function() {
+ t.trigger('stop');
+ t.callback(callback);
+ });
+ }
+
+ return this;
+ },
+
+ /**
+ * Auto increments/decrements the value of the clock face.
+ * This method is chainable;
+ *
+ * @return object
+ */
+
+ autoIncrement: function() {
+ if(!this.getOption('countdown')) {
+ this.increment();
+ }
+ else {
+ this.decrement();
+ }
+
+ this.trigger('auto:increment', this.getOption('countdown'));
+
+ return this;
+ },
+
+ /**
+ * Increments the value of the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ increment: function() {
+ this.value++;
+
+ if(this.time) {
+ this.time.addSecond();
+ }
+
+ this.trigger('increment');
+
+ return this;
+ },
+
+ /**
+ * Decrements the value of the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ decrement: function() {
+ if(this.time.getTimeSeconds() === 0) {
+ this.stop();
+ }
+ else {
+ this.value--;
+
+ if(this.time) {
+ this.time.subSecond();
+ }
+ }
+
+ this.trigger('decrement');
+
+ return this;
+ },
+
+ /**
+ * Triggers when the numbers on the clock flip. This method is chainable.
+ *
+ * @param array time
+ * @return object
+ */
+
+ flip: function(time) {
+ for(var i in time) {
+ if(this.lists[i]) {
+ this.lists[i].select(time[i]);
+ if(this.getOption('autoPlay') && this.timer.running) {
+ this.lists[i].addPlayClass();
+ }
+ }
+ else {
+ this.addDigit(time[i]);
+ }
+ }
+
+ this.trigger('flip');
+
+ return this;
+ },
+
+ /**
+ * Sets the clock time. This method is chainable.
+ *
+ * @param mixed time
+ * @return object
+ */
+
+ setTime: function(time) {
+ this.time.time = time;
+ this.flip();
+ this.trigger('set:time', time);
+
+ return this;
+ },
+
+ /**
+ * Get the clock time
+ *
+ * @return object
+ */
+
+ getTime: function() {
+ return this.time;
+ },
+
+ /**
+ * Set the time attribute with a new FlipClock.Time object.
+ * This method is chainable.
+ *
+ * @param object time
+ * @return object
+ */
+
+ setTimeObject: function(time) {
+ this.time = new FlipClock.Time(time, {
+ minimumDigits: this.getOption('minimumDigits')
+ });
+
+ return this;
+ },
+
+ /**
+ * Sets the clock face's time. This method is chainable.
+ *
+ * @param mixed value
+ * @return object
+ */
+
+ setValue: function(value) {
+ this.value = value;
+
+ if(this.time) {
+ this.setTimeObject(value);
+ }
+
+ this.flip();
+
+ this.trigger('set:value', this.value);
+
+ return this;
+ },
+
+ /**
+ * Get the clock face's value
+ *
+ * @return mixed
+ */
+
+ getValue: function() {
+ return this.value;
+ },
+
+ /**
+ * Changes the increment of time to up or down (add/sub).
+ * This method is chainable.
+ *
+ * @param bool value
+ * @return object
+ */
+
+ setCountdown: function(value) {
+ this.setOption('countdown', value ? true : false);
+
+ if(this.timer.running) {
+ this.stop();
+ this.start();
+ }
+
+ this.trigger('set:countdown', this.getOption('countdown'));
+
+ return this;
+ },
+
+ /**
+ * Get the current countdown option value
+ *
+ * @return bool
+ */
+
+ getCountdown: function() {
+ return this.getOption('countdown');
+ },
+
+ /**
+ * Destroy the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ destroy: function() {
+ this.timer.destroy();
+ this.trigger('destroy');
+
+ return this;
+ }
+
+ });
+
+}(jQuery));
+
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock Factory class is used to build the clock and manage
+ * all the public methods.
+ */
+
+ FlipClock.Factory = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The FlipClock.Face object
+ */
+
+ face: false,
+
+ /**
+ * Constructor
+ *
+ * @param object The wrapping jQuery object
+ * @param object Number of seconds used to start the clock
+ * @param object An object override options
+ */
+
+ constructor: function($el, value, options) {
+ if(value instanceof Date === false && typeof value === "object") {
+ options = value;
+ value = 0;
+ }
+
+ this.base(options);
+
+ this.lists = [];
+
+ this.$el = $el.addClass(this.getOption('classes').wrapper);
+
+ this.loadClockFace(this.getOption('clockFace'), value, this.getOption('clockFaceOptions'));
+
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ wrapper: 'flipclock-wrapper'
+ },
+
+ /**
+ * The name of the clock face class in use
+ */
+
+ clockFace: 'HourlyCounter',
+
+ /**
+ * The FlipClock.Face options object
+ */
+
+ clockFaceOptions: {},
+
+ /**
+ * The name of the default clock face class to use if the defined
+ * clockFace variable is not a valid FlipClock.Face object
+ */
+
+ defaultClockFace: 'HourlyCounter'
+ };
+ },
+
+ /**
+ * Load the FlipClock.Face object
+ *
+ * @param object The name of the FlickClock.Face class
+ * @param object An object override options
+ * @return object
+ */
+
+ loadClockFace: function(name, value, options) {
+ var t = this, face, suffix = 'Face';
+
+ name = name.ucfirst()+suffix;
+
+ if(this.face.stop) {
+ this.stop();
+ }
+
+ this.$el.html('');
+
+ if(FlipClock[name]) {
+ this.face = new FlipClock[name](value, options);
+ }
+ else {
+ this.face = new FlipClock[this.getOption('defaultClockFace')+suffix](value, options);
+ }
+
+ this.face.on('create:list', function(list) {
+ t.face.attachList(t.$el, list);
+ });
+
+ this.face.on('destroy', function() {
+ t.callback(t.onDestroy);
+ });
+
+ this.face.on('start', function() {
+ t.callback(t.onStart);
+ });
+
+ this.face.on('stop', function() {
+ t.callback(t.onStop);
+ });
+
+ this.face.on('reset', function() {
+ t.callback(t.onReset);
+ });
+
+ this.face.on('interval', function() {
+ t.callback(t.onInterval);
+ });
+
+ this.face.init(this);
+
+ this.face.build();
+
+ this.trigger('load:face', this.face);
+
+ this.callback(t.onInit);
+
+ return this.face;
+ },
+
+ /**
+ * Starts the clock face countdown option
+ *
+ * @return object
+ */
+
+ setCountdown: function(value) {
+ this.face.setCountdown(value);
+
+ return this;
+ },
+
+ /**
+ * Gets the countdown option from the clock face
+ *
+ * @return object
+ */
+
+ getCountdown: function() {
+ return this.face.getCountdown();
+ },
+
+ /**
+ * Destroy the clock
+ *
+ * @return object
+ */
+
+ destroy: function() {
+ this.face.destroy();
+ this.face = false;
+ this.$el.removeClass(this.getOption('classes').wrapper);
+ this.$el.html('');
+
+ return this;
+ },
+
+ /**
+ * Starts the clock
+ *
+ * @return object
+ */
+
+ start: function() {
+ this.face.start();
+
+ return this;
+ },
+
+ /**
+ * Stops the clock
+ *
+ * @return object
+ */
+
+ stop: function() {
+ this.face.stop();
+
+ return this;
+ },
+
+ /**
+ * Reset the clock
+ *
+ * @return object
+ */
+
+ reset: function() {
+ this.face.reset();
+
+ return this;
+ },
+
+ /**
+ * Sets the clock face's value
+ *
+ * @return object
+ */
+
+ setFaceValue: function(value) {
+ this.face.setValue(value);
+
+ return this;
+ },
+
+ /**
+ * Gets the clock face's value
+ *
+ * @return object
+ */
+
+ getFaceValue: function() {
+ return this.face.getValue();
+ },
+
+ /*
+ * The onDestroy callback
+ *
+ * @return undefined
+ */
+
+ onDestroy: function() {},
+
+ /*
+ * The onInit callback
+ *
+ * @return undefined
+ */
+
+ onInit: function() {},
+
+ /*
+ * The onInterval callback
+ *
+ * @return undefined
+ */
+
+ onInterval: function() {},
+
+ /*
+ * The onStart callback
+ *
+ * @return undefined
+ */
+
+ onStart: function() {},
+
+ /*
+ * The onStop callback
+ *
+ * @return undefined
+ */
+
+ onStop: function() {},
+
+ /*
+ * The onReset callback
+ *
+ * @return undefined
+ */
+
+ onReset: function() {}
+
+ });
+
+}(jQuery));
+
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.NumberList class is a specific class to create
+ * lists that display numbers
+ */
+
+ FlipClock.NumericList = FlipClock.List.extend({
+
+ /*
+ * Get the previous value in the list
+ *
+ * @return int
+ */
+
+ getPrevValue: function() {
+ if(this.value > 0) {
+ return this.value - 1;
+ }
+
+ return 9;
+ },
+
+ /*
+ * Get the next value in the list
+ *
+ * @return int
+ */
+
+ getNextValue: function() {
+ if(this.value < 9) {
+ return this.value + 1;
+ }
+
+ return 0;
+ }
+
+ });
+
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /*
+ * The FlipClock.Time class is a helper classes to digitize clock
+ * values and help calculate time.
+ */
+
+ FlipClock.Time = FlipClock.Base.extend({
+
+ /**
+ * The time (in seconds) or a date object
+ */
+
+ time: 0,
+
+ /**
+ * Constructor
+ *
+ * @param int An integer use to select the correct digit
+ * @param object An object to override the default properties
+ */
+
+ constructor: function(time, options) {
+ if(typeof options != "object") {
+ options = {};
+ }
+
+ if(time instanceof Date) {
+ this.time = time;
+ }
+ else if(time) {
+ this.time = Math.round(time);
+ }
+
+ this.base(options);
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The minimum number of digits the clock face must have
+ */
+
+ minimumDigits: 0
+ };
+ },
+
+ /**
+ * Convert a string or integer to an array of digits
+ *
+ * @param mixed str
+ * @return array
+ */
+
+ convertDigitsToArray: function(str) {
+ var data = [];
+
+ str = str.toString();
+
+ for(var x = 0;x < str.length; x++) {
+ if(str[x].match(/^\d*$/g)) {
+ data.push(str[x]);
+ }
+ }
+
+ return data;
+ },
+
+ /**
+ * Get a specific digit from the time integer
+ *
+ * @param int The specific digit to select from the time
+ * @return mixed Returns FALSE if no digit is found, otherwise
+ * the method returns the defined digit
+ */
+
+ digit: function(i) {
+ var timeStr = this.toString();
+ var length = timeStr.length;
+
+ if(timeStr[length - i]) {
+ return timeStr[length - i];
+ }
+
+ return false;
+ },
+
+ /**
+ * Formats any array of digits into a valid array of digits
+ *
+ * @param mixed An array of digits
+ * @return array An array of digits
+ */
+
+ digitize: function(obj) {
+ var data = [];
+
+ for(var i in obj) {
+ var value = obj[i].toString();
+
+ if(value.length == 1) {
+ value = '0'+value;
+ }
+
+ for(var x = 0; x < value.length; x++) {
+ data.push(value.charAt(x));
+ }
+ }
+
+ if(data.length > this.getOption('minimumDigits')) {
+ this.setOption('minimumDigits', data.length);
+ }
+
+ if(this.getOption('minimumDigits') > data.length) {
+ for(var x = data.length; x < this.getOption('minimumDigits'); x++) {
+ data.unshift('0');
+ }
+ }
+
+ return data;
+ },
+
+ /**
+ * Gets a new Date object for the current time
+ *
+ * @return array Returns a Date object
+ */
+
+ getDateObject: function() {
+ if(this.time instanceof Date) {
+ return this.time;
+ }
+
+ return new Date((new Date()).getTime() + this.getTimeSeconds() * 1000);
+ },
+
+ /**
+ * Gets a digitized daily counter
+ *
+ * @return object Returns a digitized object
+ */
+
+ getDayCounter: function(includeSeconds) {
+ var digits = [
+ this.getDays(),
+ this.getHours(true),
+ this.getMinutes(true)
+ ];
+
+ if(includeSeconds) {
+ digits.push(this.getSeconds(true));
+ }
+
+ return this.digitize(digits);
+ },
+
+ /**
+ * Gets number of days
+ *
+ * @param bool Should perform a modulus? If not sent, then no.
+ * @return int Retuns a floored integer
+ */
+
+ getDays: function(mod) {
+ var days = this.getTimeSeconds() / 60 / 60 / 24;
+
+ if(mod) {
+ days = days % 7;
+ }
+
+ return Math.floor(days);
+ },
+
+ /**
+ * Gets an hourly breakdown
+ *
+ * @param mixed includeSeconds
+ * @return object Returns a digitized object
+ */
+
+ getHourCounter: function(includeSeconds) {
+ var data = [
+ this.getHours(),
+ this.getMinutes(true)
+ ];
+
+ if(includeSeconds !== false) {
+ data.push(this.getSeconds(true));
+ }
+
+ return this.digitize(data);
+ },
+
+ /**
+ * Gets an hourly breakdown
+ *
+ * @param mixed includeSeconds
+ * @return object Returns a digitized object
+ */
+
+ getHourly: function(includeSeconds) {
+ return this.getHourCounter(includeSeconds);
+ },
+
+ /**
+ * Gets number of hours
+ *
+ * @param bool mod
+ * @return int
+ */
+
+ getHours: function(mod) {
+ var hours = this.getTimeSeconds() / 60 / 60;
+
+ if(mod) {
+ hours = hours % 24;
+ }
+
+ return Math.floor(hours);
+ },
+
+ /**
+ * Gets the twenty-four hour time
+ *
+ * @return object returns a digitized object
+ */
+
+ getMilitaryTime: function(date, showSeconds) {
+ if(typeof showSeconds === "undefined") {
+ showSeconds = true;
+ }
+
+ if(!date) {
+ date = this.getDateObject();
+ }
+
+ var data = [
+ date.getHours(),
+ date.getMinutes()
+ ];
+
+ if(showSeconds === true) {
+ data.push(date.getSeconds());
+ }
+
+ return this.digitize(data);
+ },
+
+ /**
+ * Gets number of minutes
+ *
+ * @param bool Should perform a modulus? If not sent, then no.
+ * @return int Retuns a floored integer
+ */
+
+ getMinutes: function(mod) {
+ var minutes = this.getTimeSeconds() / 60;
+
+ if(mod) {
+ minutes = minutes % 60;
+ }
+
+ return Math.floor(minutes);
+ },
+
+ /**
+ * Gets a minute breakdown
+ */
+
+ getMinuteCounter: function(includeSeconds) {
+ var data = [
+ this.getMinutes()
+ ];
+
+ if(includeSeconds !== false) {
+ data.push(this.getSeconds(true));
+ }
+
+ return this.digitize(data);
+ },
+
+ /**
+ * Gets time count in seconds regardless of if targetting date or not.
+ *
+ * @return int Returns a floored integer
+ */
+
+ getTimeSeconds: function(countdown, date) {
+ if(!date) {
+ date = new Date();
+ }
+
+ if (this.time instanceof Date) {
+ if (countdown) {
+ return Math.round(Math.max(this.time.getTime()/1000 - date.getTime()/1000,0));
+ } else {
+ return Math.round(date.getTime()/1000 - this.time.getTime()/1000);
+ }
+ } else {
+ return Math.round(this.time);
+ }
+ },
+
+ /**
+ * Gets the current twelve hour time
+ *
+ * @return object Returns a digitized object
+ */
+
+ getTime: function(date, showSeconds) {
+ if(typeof showSeconds === "undefined") {
+ showSeconds = true;
+ }
+
+ if(!date) {
+ date = this.getDateObject();
+ }
+
+ var hours = date.getHours();
+ var merid = hours > 12 ? 'PM' : 'AM';
+ var data = [
+ hours > 12 ? hours - 12 : (hours === 0 ? 12 : hours),
+ date.getMinutes()
+ ];
+
+ if(showSeconds === true) {
+ data.push(date.getSeconds());
+ }
+
+ return this.digitize(data);
+ },
+
+ /**
+ * Gets number of seconds
+ *
+ * @param bool Should perform a modulus? If not sent, then no.
+ * @return int Retuns a ceiled integer
+ */
+
+ getSeconds: function(mod) {
+ var seconds = this.getTimeSeconds();
+
+ if(mod) {
+ if(seconds == 60) {
+ seconds = 0;
+ }
+ else {
+ seconds = seconds % 60;
+ }
+ }
+
+ return Math.ceil(seconds);
+ },
+
+ /**
+ * Gets number of weeks
+ *
+ * @param bool Should perform a modulus? If not sent, then no.
+ * @return int Retuns a floored integer
+ */
+
+ getWeeks: function(mod) {
+ var weeks = this.getTimeSeconds() / 60 / 60 / 24 / 7;
+
+ if(mod) {
+ weeks = weeks % 52;
+ }
+
+ return Math.floor(weeks);
+ },
+
+ /**
+ * Removes a specific number of leading zeros from the array.
+ * This method prevents you from removing too many digits, even
+ * if you try.
+ *
+ * @param int Total number of digits to remove
+ * @return array An array of digits
+ */
+
+ removeLeadingZeros: function(totalDigits, digits) {
+ var total = 0;
+ var newArray = [];
+
+ for(var i in digits) {
+ if(i < totalDigits) {
+ total += parseInt(digits[i], 10);
+ }
+ else {
+ newArray.push(digits[i]);
+ }
+ }
+
+ if(total === 0) {
+ return newArray;
+ }
+
+ return digits;
+ },
+
+ /**
+ * Adds X second to the current time
+ */
+
+ addSeconds: function(x) {
+ if(this.time instanceof Date) {
+ this.time.setSeconds(this.time.getSeconds() + x);
+ }
+ else {
+ this.time += x;
+ }
+ },
+
+ /**
+ * Adds 1 second to the current time
+ */
+
+ addSecond: function() {
+ this.addSeconds(1);
+ },
+
+ /**
+ * Substracts X seconds from the current time
+ */
+
+ subSeconds: function(x) {
+ if(this.time instanceof Date) {
+ this.time.setSeconds(this.time.getSeconds() - x);
+ }
+ else {
+ this.time -= x;
+ }
+ },
+
+ /**
+ * Substracts 1 second from the current time
+ */
+
+ subSecond: function() {
+ this.subSeconds(1);
+ },
+
+ /**
+ * Converts the object to a human readable string
+ */
+
+ toString: function() {
+ return this.getTimeSeconds().toString();
+ }
+
+ /*
+ getYears: function() {
+ return Math.floor(this.time / 60 / 60 / 24 / 7 / 52);
+ },
+
+ getDecades: function() {
+ return Math.floor(this.getWeeks() / 10);
+ }*/
+ });
+
+}(jQuery));
+
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Timer object is a helper to manage the JS time intervals
+ */
+
+ FlipClock.Timer = FlipClock.Base.extend({
+
+ /**
+ * FlipClock timer count (how many intervals have passed)
+ */
+
+ count: 0,
+
+ /**
+ * Is the timer running?
+ */
+
+ running: false,
+
+ /**
+ * Constructor
+ *
+ * @param mixed mixed
+ */
+
+ constructor: function(options) {
+ this.base(options);
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The rate of the animation in milliseconds (not currently in use)
+ */
+
+ animationRate: 1000,
+
+ /**
+ * Timer interval (1 second by default)
+ */
+
+ interval: 1000
+ };
+ },
+
+ /**
+ * Gets the elapsed the time as an interger
+ *
+ * @return int
+ */
+
+ getElapsed: function() {
+ return this.count * this.getOption('interval');
+ },
+
+ /**
+ * Gets the elapsed the time as a Date object
+ *
+ * @return object
+ */
+
+ getElapsedTime: function() {
+ return new Date(this.time + this.getElapsed());
+ },
+
+ /**
+ * Resets the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ reset: function(callback) {
+ clearInterval(this.timer);
+ this.count = 0;
+ this._setInterval(callback);
+ this.trigger('reset');
+
+ return this;
+ },
+
+ /**
+ * Starts the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ start: function(callback) {
+ this.running = true;
+ this._createTimer(callback);
+
+ return this;
+ },
+
+ /**
+ * Stops the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ stop: function(callback) {
+ var t = this;
+
+ this.running = false;
+ this._clearInterval();
+
+ setTimeout(function() {
+ t.callback(callback);
+ t.trigger('stop');
+ }, this.getOption('interval'));
+
+ return this;
+ },
+
+
+ /**
+ * Destroy the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ destroy: function(callback) {
+ this._destroyTimer(callback);
+ this.trigger('destroy');
+
+ return this;
+ },
+
+
+ /**
+ * Clear the timer interval
+ *
+ * @return void
+ */
+
+ _clearInterval: function() {
+ clearInterval(this.timer);
+ },
+
+ /**
+ * Create the timer object
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _createTimer: function(callback) {
+ this._setInterval(callback);
+ },
+
+ /**
+ * Destroy the timer object
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _destroyTimer: function(callback) {
+ this._clearInterval();
+ this.running = false;
+ this.timer = false;
+ this.callback(callback);
+ this.trigger('destroy')
+ },
+
+ /**
+ * This method is called each time the timer interval is ran
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _interval: function(callback) {
+ this.callback(callback);
+ this.trigger('interval');
+ this.count++;
+ },
+
+ /**
+ * Sets the timer interval
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _setInterval: function(callback) {
+ var t = this;
+ this.timer = setInterval(function() {
+ if(t.running) {
+ t._interval(callback);
+ }
+ }, this.getOption('interval'));
+ this.trigger('start');
+ this._interval(callback);
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function() {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Translate object will translate string to a specified
+ * locale.
+ */
+
+ FlipClock.Translator = FlipClock.Base.extend({
+
+ /**
+ * The language object after it has been loaded
+ */
+
+ lang: false,
+
+ /*
+ * Constructor
+ *
+ * @param mixed options
+ */
+
+ constructor: function(options) {
+ this.base(options);
+ this.loadLanguage(this.getOption('language'));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The default language
+ */
+
+ defaultLanguage: 'english',
+
+ /**
+ * The language being used to display labels (string)
+ */
+
+ language: 'english'
+ };
+ },
+
+ /**
+ * Load the FlipClock.Lang object
+ *
+ * @param object The name of the language to load
+ * @return object
+ */
+
+ loadLanguage: function(name) {
+ var lang;
+
+ if(FlipClock.Lang[name.ucfirst()]) {
+ lang = FlipClock.Lang[name.ucfirst()];
+ }
+ else if(FlipClock.Lang[name]) {
+ lang = FlipClock.Lang[name];
+ }
+ else {
+ lang = FlipClock.Lang[this.getOption('defaultLanguage')];
+ }
+
+ return this.lang = lang;
+ },
+
+ /**
+ * Localize strings into various languages
+ *
+ * @param string The index of the localized string
+ * @param object Optionally pass a lang object
+ * @return string
+ */
+
+ localize: function(index, obj) {
+ var lang = this.lang;
+
+ if(!index) {
+ return null;
+ }
+
+ var lindex = index.toLowerCase();
+
+ if(typeof obj == "object") {
+ lang = obj;
+ }
+
+ if(lang && lang[lindex]) {
+ return lang[lindex];
+ }
+
+ return index;
+ }
+
+ });
+
+}());
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Uuid object generates a uuid instance and return
+ * the uuid as string.
+ */
+
+ FlipClock.Uuid = FlipClock.Base.extend({
+
+ /**
+ * The actual uuid value as a string
+ */
+
+ value: false,
+
+ /*
+ * Constructor
+ *
+ * @param string value
+ */
+
+ constructor: function(value) {
+ this.value = value ? value : this.generate();
+ },
+
+ /*
+ * Generate a new Uuid
+ *
+ * @return string
+ */
+
+ generate: function() {
+ var d = new Date().getTime();
+ var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (d + Math.random()*16)%16 | 0;
+ d = Math.floor(d/16);
+ return (c=='x' ? r : (r&0x3|0x8)).toString(16);
+ });
+ return uuid;
+ },
+
+ /*
+ * Does this uuid equal another uuid object
+ *
+ * @param object
+ * @return bool
+ */
+
+ equals: function(other) {
+ return this.isUuid(other) && value == other;
+ },
+
+ /*
+ * Tests another value to see if it's a uuid
+ *
+ * @param mixed
+ * @return bool
+ */
+
+ isUuid: function(value) {
+ var validator = new RegExp("^[a-z0-9]{32}$", "i");
+
+ return value && (value instanceof Uuid || validator.test(value.toString()));
+ },
+
+ /*
+ * Outputs the object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.value;
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.List class is used to build the list used to create
+ * the card flip effect. This object fascilates selecting the correct
+ * node by passing a specific value.
+ */
+
+ FlipClock.List = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The items in the list
+ */
+
+ items: [],
+
+ /**
+ * The selected value in the list
+ */
+
+ value: 0,
+
+ /**
+ * Constructor
+ *
+ * @param object A FlipClock.Factory object
+ * @param int An string or integer use to select the correct value
+ * @param object An object to override the default properties
+ */
+
+ constructor: function(value, options) {
+ this.items = [];
+ this.value = value;
+ this.$el = false;
+
+ this.base(options);
+ this.createList();
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The CSS classes
+ */
+
+ classes: {
+ active: 'flipclock-active',
+ before: 'flipclock-before',
+ flip: 'flip',
+ play: 'play'
+ },
+
+ /**
+ * The last value selected in the list
+ */
+
+ lastValue: 0
+ };
+ },
+
+ /**
+ * Select the value in the list
+ *
+ * @param int value
+ * @return object
+ */
+
+ select: function(value) {
+ var _afterListItem = this._afterListItem;
+
+ this.setOption('lastValue', this.value);
+
+ if(typeof value === "undefined") {
+ value = this.value;
+ }
+ else {
+ this.value = value;
+ }
+
+ if(this.value != this.getOption('lastValue')) {
+ this._beforeListItem.$el.removeClass(this.getOption('classes').before);
+
+ this.$el.find('.'+this.getOption('classes').active)
+ .removeClass(this.getOption('classes').active)
+ .addClass(this.getOption('classes').before);
+
+ this.items.splice(0, 1);
+
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
+
+ this._beforeListItem.$el.remove();
+ this._beforeListItem = _afterListItem;
+
+ this.trigger('select', this.value);
+ }
+
+ return this;
+ },
+
+ /*
+ * Add the play class to the list
+ *
+ * @return object
+ */
+
+ addPlayClass: function() {
+ this.$el.addClass(this.getOption('classes').play);
+
+ return this;
+ },
+
+ /*
+ * Remove the play class to the list
+ *
+ * @return object
+ */
+
+ removePlayClass: function() {
+ this.$el.removeClass(this.getOption('classes').play);
+
+ return this;
+ },
+
+ /**
+ * Creates the list item HTML and returns as a string
+ *
+ * @param mixed value
+ * @param string css
+ * @return object
+ */
+
+ createListItem: function(value, css) {
+ var item = new FlipClock.ListItem(value, {
+ className: css
+ });
+
+ this.items.push(item);
+
+ this.$el.append(item.$el);
+
+ this.trigger('create:item', item);
+
+ return item;
+ },
+
+ /**
+ * Create the list of values and appends it to the DOM object
+ *
+ * @return object
+ */
+
+ createList: function() {
+ var $el = this.$el = $('');
+
+ this._beforeListItem = this.createListItem(this.getPrevValue(), this.getOption('classes').before);
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
+
+ $el.append(this._beforeListItem.el);
+ $el.append(this._afterListItem.el);
+
+ this.trigger('create:list', $el);
+
+ return $el;
+ }
+
+ });
+
+}(jQuery));
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * Capitalize the first letter in a string
+ *
+ * @return string
+ */
+
+ String.prototype.ucfirst = function() {
+ return this.substr(0, 1).toUpperCase() + this.substr(1);
+ };
+
+ /**
+ * jQuery helper method
+ *
+ * @param int An integer used to start the clock (no. seconds)
+ * @param object An object of properties to override the default
+ */
+
+ $.fn.FlipClock = function(digit, options) {
+ return new FlipClock($(this), digit, options);
+ };
+
+ /**
+ * jQuery helper method
+ *
+ * @param int An integer used to start the clock (no. seconds)
+ * @param object An object of properties to override the default
+ */
+
+ $.fn.flipClock = function(digit, options) {
+ return $.fn.FlipClock(digit, options);
+ };
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * Twenty-Four Hour Clock Face
+ *
+ * This class will generate a twenty-four our clock for FlipClock.js
+ */
+
+ FlipClock.TwentyFourHourClockFace = FlipClock.Face.extend({
+
+ /**
+ * Build the clock face
+ *
+ * @param object Pass the time that should be used to display on the clock.
+ */
+
+ build: function(time) {
+ var time = time ? time : this.time.getMilitaryTime(false, this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ this.createDivider().$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ this.createDivider().$el.insertBefore(this.lists[this.lists.length - 4].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function(time, doNotAddPlayClass) {
+ this.autoIncrement();
+
+ time = time ? time : this.time.getMilitaryTime(false, this.getOption('showSeconds'));
+
+ this.base(time);
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * Counter Clock Face
+ *
+ * This class will generate a generice flip counter. The timer has been
+ * disabled. clock.increment() and clock.decrement() have been added.
+ */
+
+ FlipClock.CounterFace = FlipClock.Face.extend({
+
+ /**
+ * Constructor
+ *
+ * @param object The parent FlipClock.Factory object
+ * @param object An object of properties to override the default
+ * @return
+ */
+
+ constructor: function(value, options) {
+ this.base(value, options);
+
+ this.timer.off('stop');
+
+ this.on('create:list', function(list) {
+ list.addPlayClass();
+ });
+ },
+
+ /**
+ * Build the clock face
+ *
+ * @return
+ */
+
+ build: function() {
+ var t = this, time = this.getTime().digitize([this.getTime().time]);
+
+ for(var i in time) {
+ t.createList(time[i]);
+ }
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ *
+ * @return
+ */
+
+ flip: function(time) {
+ if(this.getOption('autoStart')) {
+ this.autoIncrement();
+ }
+
+ if(!time) {
+ time = this.getTime().digitize([this.getTime().time]);
+ }
+
+ this.base(time);
+ },
+
+ /**
+ * Perform arbirtrary logic when the clock face instantiated.
+ * The factor object is passed in the first argument
+ *
+ * @param object
+ * @return
+ */
+
+ init: function(factory) {
+ var t = this;
+
+ factory.increment = function() {
+ t.increment();
+ t.flip();
+ };
+
+ factory.decrement = function() {
+ t.decrement();
+ t.flip();
+ };
+
+ this.base(factory);
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * Daily Counter Clock Face
+ *
+ * This class will generate a daily counter for FlipClock.js. A
+ * daily counter will track days, hours, minutes, and seconds. If
+ * the number of available digits is exceeded in the count, a new
+ * digit will be created.
+ */
+
+ FlipClock.DailyCounterFace = FlipClock.Face.extend({
+
+ /**
+ * Build the clock face
+ */
+
+ build: function() {
+ var offset = 0;
+
+ var time = this.time.getDayCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds')) {
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ }
+ else
+ {
+ offset = 2;
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[this.lists.length - 4 + offset].$el);
+ this.createDivider('Hours').$el.insertBefore(this.lists[this.lists.length - 6 + offset].$el);
+ this.createDivider('Days', true).$el.insertBefore(this.lists[0].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+ flip: function(time) {
+ if(!time) {
+ time = this.time.getDayCounter(this.getOption('showSeconds'));
+ }
+
+ this.base(time);
+ this.autoIncrement();
+ },
+
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * English Alphabet Clock Face
+ *
+ */
+
+ FlipClock.EnglishAlphabetFace = FlipClock.Face.extend({
+
+ _autoIncrementValues: [],
+
+ /**
+ * Tells the clock face if it should auto-increment
+ */
+
+ // shouldAutoIncrement: false,
+
+ /**
+ * Tells the clock face if it should use capital letters
+ */
+
+ capitalLetters: true,
+
+ getDefaultOptions: function() {
+ var options = this.base();
+
+ options.capitalLetters = true;
+
+ return options;
+ },
+
+ init: function(factory) {
+ this.base(factory);
+
+ if(!this.value) {
+ this.value = this.getListObject(this.value).value;
+ }
+ },
+
+ build: function() {
+ var values = this.value.split('');
+
+ /*
+ for(var x = values.length + 1; x <= this.getOption('minimumDigits'); x++) {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ */
+
+ for(var i in values) {
+ this.createList(values[i]);
+ }
+
+ for(var x in this.lists) {
+ this._autoIncrementValues.unshift(this.lists[x].getCharCode());
+ }
+
+ this.base();
+ },
+
+ increment: function() {
+ var flip = true, i = 0, values = this.value.split('');
+
+ while (flip)
+ {
+ flip = false;
+
+ var value = this._autoIncrementValues[i];
+ var list = this.lists[this.lists.length - i - 1];
+
+ if(list) {
+ values[this.value.length - i - 1] = list.getNextValue();
+
+ if(list.getCharCode() >= list.getMaxCharCode()) {
+ flip = true;
+ i++;
+ }
+ }
+ else {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ }
+
+ this.value = values.join('');
+ },
+
+ decrement: function() {
+ var flip = true, i = 0, values = this.value.split('');
+
+ while (flip)
+ {
+ flip = false;
+
+ var value = this._autoIncrementValues[i];
+ var list = this.lists[this.lists.length - i - 1];
+
+ if(list) {
+ values[this.value.length - i - 1] = list.getPrevValue();
+
+ if(list.getCharCode() <= list.getMinCharCode()) {
+ flip = true;
+ i++;
+ }
+ }
+ else {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ }
+
+ this.value = values.join('');
+ },
+
+ flip: function() {
+ /*
+ if(this.shouldAutoIncrement) {
+ this.autoIncrement();
+ }
+ */
+
+ this.autoIncrement();
+ this.base(this.value.split(''));
+ },
+
+ /*
+ * Get the list class object
+ *
+ * @return object
+ */
+
+ getListClass: function() {
+ return FlipClock.EnglishAlphaList;
+ },
+
+ /*
+ * Get a new list class instance
+ *
+ * @return object
+ */
+
+ getListObject: function(value) {
+ var List = this.getListClass();
+
+ return new List(value, {
+ capitalLetters: this.capitalLetters,
+ translator: this.translator
+ });
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * Hourly Counter Clock Face
+ *
+ * This class will generate an hourly counter for FlipClock.js. An
+ * hour counter will track hours, minutes, and seconds. If number of
+ * available digits is exceeded in the count, a new digit will be
+ * created.
+ */
+
+ FlipClock.HourlyCounterFace = FlipClock.Face.extend({
+
+ /**
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.base(value, options);
+
+ if(this.getOption('showSeconds') === null) {
+ this.setOption('showSeconds', true);
+ }
+ },
+
+ /**
+ * Build the clock face
+ */
+
+ build: function(time) {
+ var offset = 0, time = time ? time : this.time.getHourCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds') === true) {
+ offset = 2;
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - offset].$el);
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[this.lists.length - 2 - offset].$el);
+ this.createDivider('Hours', true).$el.insertBefore(this.lists[0].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function(time) {
+ if(!time) {
+ time = this.time.getHourCounter(this.getOption('showSeconds'));
+ }
+
+ this.base(time);
+ this.autoIncrement();
+ },
+
+ /**
+ * Append a newly created list to the clock
+ */
+
+ appendDigitToClock: function(obj) {
+ this.base(obj);
+ this.dividers[0].insertAfter(this.dividers[0].next());
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * Minute Counter Clock Face
+ *
+ * This class will generate a minute counter for FlipClock.js. A
+ * minute counter will track minutes and seconds. If an hour is
+ * reached, the counter will reset back to 0. (4 digits max)
+ */
+
+ FlipClock.MinuteCounterFace = FlipClock.HourlyCounterFace.extend({
+
+ /**
+ * Build the clock face
+ *
+ * @return
+ */
+
+ build: function() {
+ var time = this.time.getMinuteCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds')) {
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[0].$el);
+
+ return FlipClock.Face.prototype.build.call(this);
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function() {
+ this.base(this.time.getMinuteCounter(this.getOption('showSeconds')));
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * Twelve Hour Clock Face
+ *
+ * This class will generate a twelve hour clock for FlipClock.js
+ */
+
+ FlipClock.TwelveHourClockFace = FlipClock.TwentyFourHourClockFace.extend({
+
+ /**
+ * The meridium jQuery DOM object
+ */
+
+ $meridium: false,
+
+ /**
+ * The meridium text as string for easy access
+ */
+
+ meridiumText: 'AM',
+
+ /**
+ * Build the clock face
+ *
+ * @param object Pass the time that should be used to display on the clock.
+ */
+
+ build: function() {
+ var t = this, time = this.time.getTime(false, this.getOption('showSeconds'));
+
+ this.meridiumText = this.getMeridium();
+
+ this.$meridium = $([
+ ''
+ ].join(''));
+
+ this.base(time);
+
+ this.$meridium.insertAfter(this.lists[this.lists.length-1].$el);
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function(time) {
+ if(this.meridiumText != this.getMeridium()) {
+ this.meridiumText = this.getMeridium();
+ this.$meridium.find('a').html(this.meridiumText);
+ }
+
+ this.base(this.time.getTime(false, this.getOption('showSeconds')));
+ },
+
+ /**
+ * Get the current meridium
+ *
+ * @return string Returns the meridium (AM|PM)
+ */
+
+ getMeridium: function() {
+ return new Date().getHours() >= 12 ? this.t('PM') : this.t('AM');
+ },
+
+ /**
+ * Is it currently in the post-medirium?
+ *
+ * @return bool Returns true or false
+ */
+
+ isPM: function() {
+ return this.getMeridium() == 'PM' ? true : false;
+ },
+
+ /**
+ * Is it currently before the post-medirium?
+ *
+ * @return bool Returns true or false
+ */
+
+ isAM: function() {
+ return this.getMeridium() == 'AM' ? true : false;
+ }
+
+ });
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Arabic Language Pack
+ *
+ * This class will be used to translate tokens into the Arabic language.
+ *
+ */
+
+ FlipClock.Lang.Arabic = {
+
+ 'years' : 'سنوات',
+ 'months' : 'شهور',
+ 'days' : 'أيام',
+ 'hours' : 'ساعات',
+ 'minutes' : 'دقائق',
+ 'seconds' : 'ثواني'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['ar'] = FlipClock.Lang.Arabic;
+ FlipClock.Lang['ar-ar'] = FlipClock.Lang.Arabic;
+ FlipClock.Lang['arabic'] = FlipClock.Lang.Arabic;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Czech Language Pack
+ *
+ * This class will used to translate tokens into the Czech language.
+ *
+ */
+
+ FlipClock.Lang.Czech = {
+
+ 'years' : 'Roky',
+ 'months' : 'Měsíce',
+ 'days' : 'Dny',
+ 'hours' : 'Hodiny',
+ 'minutes' : 'Minuty',
+ 'seconds' : 'Sekundy'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['cs'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cs-cz'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cz'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cz-cs'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['czech'] = FlipClock.Lang.Czech;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Danish Language Pack
+ *
+ * This class will used to translate tokens into the Danish language.
+ *
+ */
+
+ FlipClock.Lang.Danish = {
+
+ 'years' : 'År',
+ 'months' : 'Måneder',
+ 'days' : 'Dage',
+ 'hours' : 'Timer',
+ 'minutes' : 'Minutter',
+ 'seconds' : 'Sekunder'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['da'] = FlipClock.Lang.Danish;
+ FlipClock.Lang['da-dk'] = FlipClock.Lang.Danish;
+ FlipClock.Lang['danish'] = FlipClock.Lang.Danish;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock German Language Pack
+ *
+ * This class will used to translate tokens into the German language.
+ *
+ */
+
+ FlipClock.Lang.German = {
+
+ 'years' : 'Jahre',
+ 'months' : 'Monate',
+ 'days' : 'Tage',
+ 'hours' : 'Stunden',
+ 'minutes' : 'Minuten',
+ 'seconds' : 'Sekunden'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['de'] = FlipClock.Lang.German;
+ FlipClock.Lang['de-de'] = FlipClock.Lang.German;
+ FlipClock.Lang['german'] = FlipClock.Lang.German;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock English Language Pack
+ *
+ * This class will used to translate tokens into the English language.
+ *
+ */
+
+ FlipClock.Lang.English = {
+
+ 'years' : 'Years',
+ 'months' : 'Months',
+ 'days' : 'Days',
+ 'hours' : 'Hours',
+ 'minutes' : 'Minutes',
+ 'seconds' : 'Seconds'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['en'] = FlipClock.Lang.English;
+ FlipClock.Lang['en-us'] = FlipClock.Lang.English;
+ FlipClock.Lang['english'] = FlipClock.Lang.English;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Spanish Language Pack
+ *
+ * This class will used to translate tokens into the Spanish language.
+ *
+ */
+
+ FlipClock.Lang.Spanish = {
+
+ 'years' : 'Años',
+ 'months' : 'Meses',
+ 'days' : 'Días',
+ 'hours' : 'Horas',
+ 'minutes' : 'Minutos',
+ 'seconds' : 'Segundos'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['es'] = FlipClock.Lang.Spanish;
+ FlipClock.Lang['es-es'] = FlipClock.Lang.Spanish;
+ FlipClock.Lang['spanish'] = FlipClock.Lang.Spanish;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock English Language Pack
+ *
+ * This class will used to translate tokens into the English language.
+ *
+ */
+
+ FlipClock.Lang.Persian = {
+
+ 'years' : 'سال',
+ 'months' : 'ماه',
+ 'days' : 'روز',
+ 'hours' : 'ساعت',
+ 'minutes' : 'دقیقه',
+ 'seconds' : 'ثانیه'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['fa'] = FlipClock.Lang.Persian;
+ FlipClock.Lang['fa-ir'] = FlipClock.Lang.Persian;
+ FlipClock.Lang['persian'] = FlipClock.Lang.Persian;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Finnish Language Pack
+ *
+ * This class will used to translate tokens into the Finnish language.
+ *
+ */
+
+ FlipClock.Lang.Finnish = {
+
+ 'years' : 'Vuotta',
+ 'months' : 'Kuukautta',
+ 'days' : 'Päivää',
+ 'hours' : 'Tuntia',
+ 'minutes' : 'Minuuttia',
+ 'seconds' : 'Sekuntia'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['fi'] = FlipClock.Lang.Finnish;
+ FlipClock.Lang['fi-fi'] = FlipClock.Lang.Finnish;
+ FlipClock.Lang['finnish'] = FlipClock.Lang.Finnish;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Canadian French Language Pack
+ *
+ * This class will used to translate tokens into the Canadian French language.
+ *
+ */
+
+ FlipClock.Lang.French = {
+
+ 'years' : 'Ans',
+ 'months' : 'Mois',
+ 'days' : 'Jours',
+ 'hours' : 'Heures',
+ 'minutes' : 'Minutes',
+ 'seconds' : 'Secondes'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['fr'] = FlipClock.Lang.French;
+ FlipClock.Lang['fr-ca'] = FlipClock.Lang.French;
+ FlipClock.Lang['french'] = FlipClock.Lang.French;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ FlipClock Hebrew Language Pack *
+ This class will used to translate tokens into the Hebrew language. *
+ Laurent HADJADJ - 10/09/2015
+ */
+
+ FlipClock.Lang.Hebrew = {
+ 'years' : 'שנים',
+ 'months' : 'חודש',
+ 'days' : 'ימים',
+ 'hours' : 'שעות',
+ 'minutes' : 'דקות',
+ 'seconds' : 'שניות'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['il'] = FlipClock.Lang.Hebrew;
+ FlipClock.Lang['he-il'] = FlipClock.Lang.Hebrew;
+ FlipClock.Lang['hebrew'] = FlipClock.Lang.Hebrew;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Hungarian Language Pack
+ *
+ * This class will used to translate tokens into the Hungarian language.
+ *
+ */
+
+ FlipClock.Lang.Hungarian = {
+ 'years' : 'Év',
+ 'months' : 'Hónap',
+ 'days' : 'Nap',
+ 'hours' : 'Óra',
+ 'minutes' : 'Perc',
+ 'seconds' : 'Másodperc'
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['hu'] = FlipClock.Lang.Hungarian;
+ FlipClock.Lang['hu-hu'] = FlipClock.Lang.Hungarian;
+ FlipClock.Lang['hungarian'] = FlipClock.Lang.Hungarian;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Italian Language Pack
+ *
+ * This class will used to translate tokens into the Italian language.
+ *
+ */
+
+ FlipClock.Lang.Italian = {
+
+ 'years' : 'Anni',
+ 'months' : 'Mesi',
+ 'days' : 'Giorni',
+ 'hours' : 'Ore',
+ 'minutes' : 'Minuti',
+ 'seconds' : 'Secondi'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['it'] = FlipClock.Lang.Italian;
+ FlipClock.Lang['it-it'] = FlipClock.Lang.Italian;
+ FlipClock.Lang['italian'] = FlipClock.Lang.Italian;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Korean Language Pack
+ *
+ * This class will used to translate tokens into the Korean language.
+ *
+ */
+
+ FlipClock.Lang.Korean = {
+
+ 'years' : '년',
+ 'months' : '월',
+ 'days' : '일',
+ 'hours' : '시',
+ 'minutes' : '분',
+ 'seconds' : '초'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['ko'] = FlipClock.Lang.Korean;
+ FlipClock.Lang['ko-kr'] = FlipClock.Lang.Korean;
+ FlipClock.Lang['korean'] = FlipClock.Lang.Korean;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Latvian Language Pack
+ *
+ * This class will used to translate tokens into the Latvian language.
+ *
+ */
+
+ FlipClock.Lang.Latvian = {
+
+ 'years' : 'Gadi',
+ 'months' : 'Mēneši',
+ 'days' : 'Dienas',
+ 'hours' : 'Stundas',
+ 'minutes' : 'Minūtes',
+ 'seconds' : 'Sekundes'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['lv'] = FlipClock.Lang.Latvian;
+ FlipClock.Lang['lv-lv'] = FlipClock.Lang.Latvian;
+ FlipClock.Lang['latvian'] = FlipClock.Lang.Latvian;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Dutch Language Pack
+ *
+ * This class will used to translate tokens into the Dutch language.
+ */
+
+ FlipClock.Lang.Dutch = {
+
+ 'years' : 'Jaren',
+ 'months' : 'Maanden',
+ 'days' : 'Dagen',
+ 'hours' : 'Uren',
+ 'minutes' : 'Minuten',
+ 'seconds' : 'Seconden'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['nl'] = FlipClock.Lang.Dutch;
+ FlipClock.Lang['nl-be'] = FlipClock.Lang.Dutch;
+ FlipClock.Lang['dutch'] = FlipClock.Lang.Dutch;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Norwegian-Bokmål Language Pack
+ *
+ * This class will used to translate tokens into the Norwegian language.
+ *
+ */
+
+ FlipClock.Lang.Norwegian = {
+
+ 'years' : 'År',
+ 'months' : 'Måneder',
+ 'days' : 'Dager',
+ 'hours' : 'Timer',
+ 'minutes' : 'Minutter',
+ 'seconds' : 'Sekunder'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['no'] = FlipClock.Lang.Norwegian;
+ FlipClock.Lang['nb'] = FlipClock.Lang.Norwegian;
+ FlipClock.Lang['no-nb'] = FlipClock.Lang.Norwegian;
+ FlipClock.Lang['norwegian'] = FlipClock.Lang.Norwegian;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Polish Language Pack
+ *
+ * This class will used to translate tokens into the Polish language.
+ *
+ */
+
+ FlipClock.Lang.Polish = {
+
+ 'years' : 'lat',
+ 'months' : 'miesięcy',
+ 'days' : 'dni',
+ 'hours' : 'godzin',
+ 'minutes' : 'minut',
+ 'seconds' : 'sekund'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['pl'] = FlipClock.Lang.Polish;
+ FlipClock.Lang['pl-pl'] = FlipClock.Lang.Polish;
+ FlipClock.Lang['polish'] = FlipClock.Lang.Polish;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Portuguese Language Pack
+ *
+ * This class will used to translate tokens into the Portuguese language.
+ *
+ */
+
+ FlipClock.Lang.Portuguese = {
+
+ 'years' : 'Anos',
+ 'months' : 'Meses',
+ 'days' : 'Dias',
+ 'hours' : 'Horas',
+ 'minutes' : 'Minutos',
+ 'seconds' : 'Segundos'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['pt'] = FlipClock.Lang.Portuguese;
+ FlipClock.Lang['pt-br'] = FlipClock.Lang.Portuguese;
+ FlipClock.Lang['portuguese'] = FlipClock.Lang.Portuguese;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Russian Language Pack
+ *
+ * This class will used to translate tokens into the Russian language.
+ *
+ */
+
+ FlipClock.Lang.Russian = {
+
+ 'years' : 'лет',
+ 'months' : 'месяцев',
+ 'days' : 'дней',
+ 'hours' : 'часов',
+ 'minutes' : 'минут',
+ 'seconds' : 'секунд'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['ru'] = FlipClock.Lang.Russian;
+ FlipClock.Lang['ru-ru'] = FlipClock.Lang.Russian;
+ FlipClock.Lang['russian'] = FlipClock.Lang.Russian;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Slovak Language Pack
+ *
+ * This class will used to translate tokens into the Slovak language.
+ *
+ */
+
+ FlipClock.Lang.Slovak = {
+
+ 'years' : 'Roky',
+ 'months' : 'Mesiace',
+ 'days' : 'Dni',
+ 'hours' : 'Hodiny',
+ 'minutes' : 'Minúty',
+ 'seconds' : 'Sekundy'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['sk'] = FlipClock.Lang.Slovak;
+ FlipClock.Lang['sk-sk'] = FlipClock.Lang.Slovak;
+ FlipClock.Lang['slovak'] = FlipClock.Lang.Slovak;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Swedish Language Pack
+ *
+ * This class will used to translate tokens into the Swedish language.
+ *
+ */
+
+ FlipClock.Lang.Swedish = {
+
+ 'years' : 'År',
+ 'months' : 'Månader',
+ 'days' : 'Dagar',
+ 'hours' : 'Timmar',
+ 'minutes' : 'Minuter',
+ 'seconds' : 'Sekunder'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['sv'] = FlipClock.Lang.Swedish;
+ FlipClock.Lang['sv-se'] = FlipClock.Lang.Swedish;
+ FlipClock.Lang['swedish'] = FlipClock.Lang.Swedish;
+
+}(jQuery));
+
+(function($) {
+
+ /**
+ * FlipClock Thai Language Pack
+ *
+ * This class will used to translate tokens into the Thai language.
+ *
+ */
+
+ FlipClock.Lang.Thai = {
+
+ 'years' : 'ปี',
+ 'months' : 'เดือน',
+ 'days' : 'วัน',
+ 'hours' : 'ชั่วโมง',
+ 'minutes' : 'นาที',
+ 'seconds' : 'วินาที'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['th'] = FlipClock.Lang.Thai;
+ FlipClock.Lang['th-th'] = FlipClock.Lang.Thai;
+ FlipClock.Lang['thai'] = FlipClock.Lang.Thai;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Russian Language Pack
+ *
+ * This class will used to translate tokens into the Russian language.
+ *
+ */
+
+ FlipClock.Lang.Ukrainian = {
+
+ 'years' : 'роки',
+ 'months' : 'місяці',
+ 'days' : 'дні',
+ 'hours' : 'години',
+ 'minutes' : 'хвилини',
+ 'seconds' : 'секунди'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['ua'] = FlipClock.Lang.Ukrainian;
+ FlipClock.Lang['ua-ua'] = FlipClock.Lang.Ukrainian;
+ FlipClock.Lang['ukraine'] = FlipClock.Lang.Ukrainian;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Chinese Language Pack
+ *
+ * This class will used to translate tokens into the Chinese language.
+ *
+ */
+
+ FlipClock.Lang.Chinese = {
+
+ 'years' : '年',
+ 'months' : '月',
+ 'days' : '日',
+ 'hours' : '时',
+ 'minutes' : '分',
+ 'seconds' : '秒'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['zh'] = FlipClock.Lang.Chinese;
+ FlipClock.Lang['zh-cn'] = FlipClock.Lang.Chinese;
+ FlipClock.Lang['chinese'] = FlipClock.Lang.Chinese;
+
+}(jQuery));
+(function($) {
+
+ /**
+ * FlipClock Traditional Chinese Language Pack
+ *
+ * This class will used to translate tokens into the Traditional Chinese.
+ *
+ */
+
+ FlipClock.Lang.TraditionalChinese = {
+
+ 'years' : '年',
+ 'months' : '月',
+ 'days' : '日',
+ 'hours' : '時',
+ 'minutes' : '分',
+ 'seconds' : '秒'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['zh-tw'] = FlipClock.Lang.TraditionalChinese;
+
+}(jQuery));
diff --git a/dist/flipclock.min.js b/dist/flipclock.min.js
new file mode 100644
index 00000000..05279c7b
--- /dev/null
+++ b/dist/flipclock.min.js
@@ -0,0 +1,3 @@
+/* flipclock - v0.8.2 */
+var Base=function(){};Base.extend=function(t,i){"use strict";var e=Base.prototype.extend;Base._prototyping=!0;var n=new this;e.call(n,t),n.base=function(){},delete Base._prototyping;var s=n.constructor,o=n.constructor=function(){if(!Base._prototyping)if(this._constructing||this.constructor==o)this._constructing=!0,s.apply(this,arguments),delete this._constructing;else if(null!==arguments[0])return(arguments[0].extend||e).call(arguments[0],n)};return o.ancestor=this,o.extend=this.extend,o.forEach=this.forEach,o.implement=this.implement,o.prototype=n,o.toString=this.toString,o.valueOf=function(t){return"object"==t?o:s.valueOf()},e.call(o,i),"function"==typeof o.init&&o.init(),o},Base.prototype={extend:function(t,i){if(arguments.length>1){var e=this[t];if(e&&"function"==typeof i&&(!e.valueOf||e.valueOf()!=i.valueOf())&&/\bbase\b/.test(i)){var n=i.valueOf();i=function(){var t=this.base||Base.prototype.base;this.base=e;var i=n.apply(this,arguments);return this.base=t,i},i.valueOf=function(t){return"object"==t?i:n},i.toString=Base.toString}this[t]=i}else if(t){var s=Base.prototype.extend;Base._prototyping||"function"==typeof this||(s=this.extend||s);for(var o={toSource:null},a=["constructor","toString","valueOf"],r=Base._prototyping?0:1;l=a[r++];)t[l]!=o[l]&&s.call(this,l,t[l]);for(var l in t)o[l]||s.call(this,l,t[l])}return this}},Base=Base.extend({constructor:function(){this.extend(arguments[0])}},{ancestor:Object,version:"1.1",forEach:function(t,i,e){for(var n in t)void 0===this.prototype[n]&&i.call(e,t[n],n,t)},implement:function(){for(var t=0;t0&&i.push(arguments[e]);for(var n in this._events[t])this._events[t][n].fire(this,i)}return this},localize:function(t){return this.translator?this.translator.localize(t):t},t:function(t){return this.localize(t)}})}(jQuery),function(t){"use strict";String.prototype.ucfirst=function(){return this.substr(0,1).toUpperCase()+this.substr(1)},t.fn.FlipClock=function(i,e){return new FlipClock(t(this),i,e)},t.fn.flipClock=function(i,e){return t.fn.FlipClock(i,e)}}(jQuery),function(t){"use strict";FlipClock.List=FlipClock.Base.extend({$el:!1,items:[],value:0,constructor:function(t,i){this.items=[],this.value=t,this.$el=!1,this.base(i),this.createList(),this.trigger("init")},getDefaultOptions:function(){return{classes:{active:"flipclock-active",before:"flipclock-before",flip:"flip",play:"play"},lastValue:0}},select:function(t){var i=this._afterListItem;return this.setOption("lastValue",this.value),"undefined"==typeof t?t=this.value:this.value=t,this.value!=this.getOption("lastValue")&&(this._beforeListItem.$el.removeClass(this.getOption("classes").before),this.$el.find("."+this.getOption("classes").active).removeClass(this.getOption("classes").active).addClass(this.getOption("classes").before),this.items.splice(0,1),this._afterListItem=this.createListItem(this.value,this.getOption("classes").active),this._beforeListItem.$el.remove(),this._beforeListItem=i,this.trigger("select",this.value)),this},addPlayClass:function(){return this.$el.addClass(this.getOption("classes").play),this},removePlayClass:function(){return this.$el.removeClass(this.getOption("classes").play),this},createListItem:function(t,i){var e=new FlipClock.ListItem(t,{className:i});return this.items.push(e),this.$el.append(e.$el),this.trigger("create:item",e),e},createList:function(){var i=this.$el=t('');return this._beforeListItem=this.createListItem(this.getPrevValue(),this.getOption("classes").before),this._afterListItem=this.createListItem(this.value,this.getOption("classes").active),i.append(this._beforeListItem.el),i.append(this._afterListItem.el),this.trigger("create:list",i),i}})}(jQuery),function(t){"use strict";FlipClock.ListItem=FlipClock.Base.extend({$el:!1,value:null,constructor:function(i,e){this.base(e),this.value=i,this.$el=t(['','','",'"," "," "].join(""))},getDefaultOptions:function(){return{classes:{down:"down",inn:"inn",shadow:"shadow",up:"up"},className:null}},toString:function(){return this.$el.html()}})}(jQuery),function(t){"use strict";FlipClock.EnglishAlphaList=FlipClock.List.extend({constructor:function(t,i){this.options=this.getDefaultOptions(),this.setOptions(i),t||(t=String.fromCharCode(this.getMinCharCode())),this.base(t,i)},getDefaultOptions:function(){var t=this.base();return t.capitalLetters=!0,t},getMaxCharCode:function(){return this.getOption("capitalLetters")?90:122},getMinCharCode:function(){return this.getOption("capitalLetters")?65:96},getCharCode:function(){return this.value.charCodeAt(0)},getPrevValue:function(){var t=this.value.charCodeAt(0)-1,i=this.getMinCharCode(),e=this.getMaxCharCode();return te&&(t=i),String.fromCharCode(t)}})}(jQuery),function(t){"use strict";FlipClock.Divider=FlipClock.Base.extend({$el:!1,translator:!1,constructor:function(i){this.base(i),this.getOption("label")&&this.setOption("label",this.t(this.getOption("label")));var e=this.getOption("excludeDots")?"":[' ',' '].join("");this.$el=t(['',''+(this.getOption("label")?this.getOption("label"):"")+" ",e," "].join(""))},getDefaultOptions:function(){return{className:!1,classes:{divider:"flipclock-divider",dot:"flipclock-dot",label:"flipclock-label"},excludeDots:!1,label:!1}},toString:function(){return this.$el.html()}})}(jQuery),function(t){"use strict";FlipClock.Event=FlipClock.Base.extend({name:!1,_hasFired:!1,_lastResponse:null,_preventFire:!1,_fireOnce:!1,_callback:function(){},constructor:function(t,i){if(!t)throw"Events must have a name";"function"==typeof i&&(this._callback=i)},fire:function(t,i){return this._preventFire===!1&&(this.setLastResponse(this._callback.apply(t,i)),this._hasFired=!0,this._fireOnce&&(this._preventFire=!0)),this},off:function(){return this._preventFire=!0,this},on:function(){return this._preventFire=!1,this},hasFired:function(){return this._hasFired},getLastResponse:function(){return this._lastResponse},setLastResponse:function(t){return this._lastResponse=t,this},getFireOnce:function(){return this._fireOnce},setFireOnce:function(t){return this._fireOnce=t,this}})}(jQuery),function(t){"use strict";FlipClock.Face=FlipClock.Base.extend({dividers:[],lang:!1,lists:[],originalValue:0,time:!1,timer:!1,translator:!1,value:0,constructor:function(t,i){var e=this;t instanceof Date==!1&&"object"==typeof t&&(i=t,t=0),this.dividers=[],this.lists=[],this.originalValue=t,this.value=t,this.base(i),this.translator=new FlipClock.Translator({defaultLanguage:this.getOption("defaultLanguage"),language:this.getOption("language")}),this.timer=new FlipClock.Timer,this.timer.on("interval",function(){e.flip(),e.trigger("interval")}),this.on("add:digit",function(t){if(this.dividers.length)for(var i in this.dividers){var e=this.dividers[i];e.$el.is(":first-child")||e.$el.insertAfter(e.$el.next())}})},getDefaultOptions:function(){return{animationRate:1e3,autoPlay:!0,autoStart:!0,countdown:!1,defaultLanguage:"english",language:"english",minimumDigits:0}},addDigit:function(t){var i=this.createList(t);return this.trigger("add:digit",i),i},attachList:function(t,i){t.append(i.$el)},build:function(){return this.getOption("autoStart")&&this.start(),this.trigger("build"),this},init:function(t){return this.setTimeObject(this.value),this.trigger("init"),this},createDivider:function(t,i,e){"boolean"!=typeof i&&i||(e=i,i=!1);var n=new FlipClock.Divider({label:t,className:i,excludeDots:e,translator:this.translator});return this.dividers.push(n),this.trigger("create:divider",n),n},createList:function(t,i){var e=this.getListObject(t);return(this.getOption("autoPlay")||this.timer.running)&&e.addPlayClass(),this.lists.push(e),this.trigger("create:list",e),e},getListClass:function(){return FlipClock.NumericList},getListObject:function(t){var i=this.getListClass();return new i(t,{translator:this.translator})},reset:function(t){return this.value=this.originalValue,this.time.time=this.value,this.flip(),this.trigger("reset"),this.callback(t),this},start:function(t){return this.timer.running||(this.trigger("before:start"),this.timer.start(),this.trigger("start"),this.callback(t)),this},stop:function(t){var i=this;return this.timer.running&&(this.trigger("before:stop"),this.timer.stop(function(){i.trigger("stop"),i.callback(t)})),this},autoIncrement:function(){return this.getOption("countdown")?this.decrement():this.increment(),this.trigger("auto:increment",this.getOption("countdown")),this},increment:function(){return this.value++,this.time&&this.time.addSecond(),this.trigger("increment"),this},decrement:function(){return 0===this.time.getTimeSeconds()?this.stop():(this.value--,this.time&&this.time.subSecond()),this.trigger("decrement"),this},flip:function(t){for(var i in t)this.lists[i]?(this.lists[i].select(t[i]),this.getOption("autoPlay")&&this.timer.running&&this.lists[i].addPlayClass()):this.addDigit(t[i]);return this.trigger("flip"),this},setTime:function(t){return this.time.time=t,this.flip(),this.trigger("set:time",t),this},getTime:function(){return this.time},setTimeObject:function(t){return this.time=new FlipClock.Time(t,{minimumDigits:this.getOption("minimumDigits")}),this},setValue:function(t){return this.value=t,this.time&&this.setTimeObject(t),this.flip(),this.trigger("set:value",this.value),this},getValue:function(){return this.value},setCountdown:function(t){return this.setOption("countdown",!!t),this.timer.running&&(this.stop(),this.start()),this.trigger("set:countdown",this.getOption("countdown")),this},getCountdown:function(){return this.getOption("countdown")},destroy:function(){return this.timer.destroy(),this.trigger("destroy"),this}})}(jQuery),function(t){"use strict";FlipClock.Factory=FlipClock.Base.extend({$el:!1,face:!1,constructor:function(t,i,e){i instanceof Date==!1&&"object"==typeof i&&(e=i,i=0),this.base(e),this.lists=[],this.$el=t.addClass(this.getOption("classes").wrapper),this.loadClockFace(this.getOption("clockFace"),i,this.getOption("clockFaceOptions")),this.trigger("init")},getDefaultOptions:function(){return{classes:{wrapper:"flipclock-wrapper"},clockFace:"HourlyCounter",clockFaceOptions:{},defaultClockFace:"HourlyCounter"}},loadClockFace:function(t,i,e){var n=this,s="Face";return t=t.ucfirst()+s,this.face.stop&&this.stop(),this.$el.html(""),FlipClock[t]?this.face=new FlipClock[t](i,e):this.face=new(FlipClock[this.getOption("defaultClockFace")+s])(i,e),this.face.on("create:list",function(t){n.face.attachList(n.$el,t)}),this.face.on("destroy",function(){n.callback(n.onDestroy)}),this.face.on("start",function(){n.callback(n.onStart)}),this.face.on("stop",function(){n.callback(n.onStop)}),this.face.on("reset",function(){n.callback(n.onReset)}),this.face.on("interval",function(){n.callback(n.onInterval)}),this.face.init(this),this.face.build(),this.trigger("load:face",this.face),this.callback(n.onInit),this.face},setCountdown:function(t){return this.face.setCountdown(t),this},getCountdown:function(){return this.face.getCountdown()},destroy:function(){return this.face.destroy(),this.face=!1,this.$el.removeClass(this.getOption("classes").wrapper),this.$el.html(""),this},start:function(){return this.face.start(),this},stop:function(){return this.face.stop(),this},reset:function(){return this.face.reset(),this},setFaceValue:function(t){return this.face.setValue(t),this},getFaceValue:function(){return this.face.getValue()},onDestroy:function(){},onInit:function(){},onInterval:function(){},onStart:function(){},onStop:function(){},onReset:function(){}})}(jQuery),function(t){"use strict";FlipClock.NumericList=FlipClock.List.extend({getPrevValue:function(){return this.value>0?this.value-1:9},getNextValue:function(){return this.value<9?this.value+1:0}})}(jQuery),function(t){"use strict";FlipClock.Time=FlipClock.Base.extend({time:0,constructor:function(t,i){"object"!=typeof i&&(i={}),t instanceof Date?this.time=t:t&&(this.time=Math.round(t)),this.base(i)},getDefaultOptions:function(){return{minimumDigits:0}},convertDigitsToArray:function(t){var i=[];t=t.toString();for(var e=0;ethis.getOption("minimumDigits")&&this.setOption("minimumDigits",i.length),this.getOption("minimumDigits")>i.length)for(var s=i.length;s12?e-12:0===e?12:e,t.getMinutes()];return i===!0&&n.push(t.getSeconds()),this.digitize(n)},getSeconds:function(t){var i=this.getTimeSeconds();return t&&(60==i?i=0:i%=60),Math.ceil(i)},getWeeks:function(t){var i=this.getTimeSeconds()/60/60/24/7;return t&&(i%=52),Math.floor(i)},removeLeadingZeros:function(t,i){var e=0,n=[];for(var s in i)s');return this._beforeListItem=this.createListItem(this.getPrevValue(),this.getOption("classes").before),this._afterListItem=this.createListItem(this.value,this.getOption("classes").active),i.append(this._beforeListItem.el),i.append(this._afterListItem.el),this.trigger("create:list",i),i}})}(jQuery),function(t){"use strict";String.prototype.ucfirst=function(){return this.substr(0,1).toUpperCase()+this.substr(1)},t.fn.FlipClock=function(i,e){return new FlipClock(t(this),i,e)},t.fn.flipClock=function(i,e){return t.fn.FlipClock(i,e)}}(jQuery),function(t){FlipClock.TwentyFourHourClockFace=FlipClock.Face.extend({build:function(t){var t=t?t:this.time.getMilitaryTime(!1,this.getOption("showSeconds"));for(var i in t)this.createList(t[i]);this.createDivider().$el.insertBefore(this.lists[this.lists.length-2].$el),this.createDivider().$el.insertBefore(this.lists[this.lists.length-4].$el),this.base()},flip:function(t,i){this.autoIncrement(),t=t?t:this.time.getMilitaryTime(!1,this.getOption("showSeconds")),this.base(t)}})}(jQuery),function(t){FlipClock.CounterFace=FlipClock.Face.extend({constructor:function(t,i){this.base(t,i),this.timer.off("stop"),this.on("create:list",function(t){t.addPlayClass()})},build:function(){var t=this,i=this.getTime().digitize([this.getTime().time]);for(var e in i)t.createList(i[e]);this.base()},flip:function(t){this.getOption("autoStart")&&this.autoIncrement(),t||(t=this.getTime().digitize([this.getTime().time])),this.base(t)},init:function(t){var i=this;t.increment=function(){i.increment(),i.flip()},t.decrement=function(){i.decrement(),i.flip()},this.base(t)}})}(jQuery),function(t){FlipClock.DailyCounterFace=FlipClock.Face.extend({build:function(){var t=0,i=this.time.getDayCounter(this.getOption("showSeconds"));for(var e in i)this.createList(i[e]);this.getOption("showSeconds")?this.createDivider("Seconds").$el.insertBefore(this.lists[this.lists.length-2].$el):t=2,this.createDivider("Minutes").$el.insertBefore(this.lists[this.lists.length-4+t].$el),this.createDivider("Hours").$el.insertBefore(this.lists[this.lists.length-6+t].$el),this.createDivider("Days",!0).$el.insertBefore(this.lists[0].$el),this.base()},flip:function(t){t||(t=this.time.getDayCounter(this.getOption("showSeconds"))),this.base(t),this.autoIncrement()}})}(jQuery),function(t){FlipClock.EnglishAlphabetFace=FlipClock.Face.extend({_autoIncrementValues:[],capitalLetters:!0,getDefaultOptions:function(){var t=this.base();return t.capitalLetters=!0,t},init:function(t){this.base(t),this.value||(this.value=this.getListObject(this.value).value)},build:function(){var t=this.value.split("");for(var i in t)this.createList(t[i]);for(var e in this.lists)this._autoIncrementValues.unshift(this.lists[e].getCharCode());this.base()},increment:function(){for(var t=!0,i=0,e=this.value.split("");t;){t=!1;var n=(this._autoIncrementValues[i],this.lists[this.lists.length-i-1]);n?(e[this.value.length-i-1]=n.getNextValue(),n.getCharCode()>=n.getMaxCharCode()&&(t=!0,i++)):e.unshift(String.fromCharCode(this.getListObject(!1).getMinCharCode()))}this.value=e.join("")},decrement:function(){for(var t=!0,i=0,e=this.value.split("");t;){t=!1;var n=(this._autoIncrementValues[i],this.lists[this.lists.length-i-1]);n?(e[this.value.length-i-1]=n.getPrevValue(),n.getCharCode()<=n.getMinCharCode()&&(t=!0,i++)):e.unshift(String.fromCharCode(this.getListObject(!1).getMinCharCode()))}this.value=e.join("")},flip:function(){this.autoIncrement(),this.base(this.value.split(""))},getListClass:function(){return FlipClock.EnglishAlphaList},getListObject:function(t){var i=this.getListClass();return new i(t,{capitalLetters:this.capitalLetters,translator:this.translator})}})}(jQuery),function(t){FlipClock.HourlyCounterFace=FlipClock.Face.extend({constructor:function(t,i){this.base(t,i),null===this.getOption("showSeconds")&&this.setOption("showSeconds",!0)},build:function(t){var i=0,t=t?t:this.time.getHourCounter(this.getOption("showSeconds"));for(var e in t)this.createList(t[e]);this.getOption("showSeconds")===!0&&(i=2,this.createDivider("Seconds").$el.insertBefore(this.lists[this.lists.length-i].$el)),this.createDivider("Minutes").$el.insertBefore(this.lists[this.lists.length-2-i].$el),this.createDivider("Hours",!0).$el.insertBefore(this.lists[0].$el),this.base()},flip:function(t){t||(t=this.time.getHourCounter(this.getOption("showSeconds"))),this.base(t),this.autoIncrement()},appendDigitToClock:function(t){this.base(t),this.dividers[0].insertAfter(this.dividers[0].next())}})}(jQuery),function(t){FlipClock.MinuteCounterFace=FlipClock.HourlyCounterFace.extend({build:function(){var t=this.time.getMinuteCounter(this.getOption("showSeconds"));for(var i in t)this.createList(t[i]);return this.getOption("showSeconds")&&this.createDivider("Seconds").$el.insertBefore(this.lists[this.lists.length-2].$el),this.createDivider("Minutes").$el.insertBefore(this.lists[0].$el),FlipClock.Face.prototype.build.call(this)},flip:function(){this.base(this.time.getMinuteCounter(this.getOption("showSeconds")))}})}(jQuery),function(t){FlipClock.TwelveHourClockFace=FlipClock.TwentyFourHourClockFace.extend({$meridium:!1,meridiumText:"AM",build:function(){var i=this.time.getTime(!1,this.getOption("showSeconds"));this.meridiumText=this.getMeridium(),this.$meridium=t(['"].join("")),this.base(i),this.$meridium.insertAfter(this.lists[this.lists.length-1].$el)},flip:function(t){this.meridiumText!=this.getMeridium()&&(this.meridiumText=this.getMeridium(),this.$meridium.find("a").html(this.meridiumText)),this.base(this.time.getTime(!1,this.getOption("showSeconds")))},getMeridium:function(){return(new Date).getHours()>=12?this.t("PM"):this.t("AM")},isPM:function(){return"PM"==this.getMeridium()},isAM:function(){return"AM"==this.getMeridium()}})}(jQuery),function(t){FlipClock.Lang.Arabic={years:"سنوات",months:"شهور",days:"أيام",hours:"ساعات",minutes:"دقائق",seconds:"ثواني"},FlipClock.Lang.ar=FlipClock.Lang.Arabic,FlipClock.Lang["ar-ar"]=FlipClock.Lang.Arabic,FlipClock.Lang.arabic=FlipClock.Lang.Arabic}(jQuery),function(t){FlipClock.Lang.Czech={years:"Roky",months:"Měsíce",days:"Dny",hours:"Hodiny",minutes:"Minuty",seconds:"Sekundy"},FlipClock.Lang.cs=FlipClock.Lang.Czech,FlipClock.Lang["cs-cz"]=FlipClock.Lang.Czech,FlipClock.Lang.cz=FlipClock.Lang.Czech,FlipClock.Lang["cz-cs"]=FlipClock.Lang.Czech,FlipClock.Lang.czech=FlipClock.Lang.Czech}(jQuery),function(t){FlipClock.Lang.Danish={years:"År",months:"Måneder",days:"Dage",hours:"Timer",minutes:"Minutter",seconds:"Sekunder"},FlipClock.Lang.da=FlipClock.Lang.Danish,FlipClock.Lang["da-dk"]=FlipClock.Lang.Danish,FlipClock.Lang.danish=FlipClock.Lang.Danish}(jQuery),function(t){FlipClock.Lang.German={years:"Jahre",months:"Monate",days:"Tage",hours:"Stunden",minutes:"Minuten",seconds:"Sekunden"},FlipClock.Lang.de=FlipClock.Lang.German,FlipClock.Lang["de-de"]=FlipClock.Lang.German,FlipClock.Lang.german=FlipClock.Lang.German}(jQuery),function(t){FlipClock.Lang.English={years:"Years",months:"Months",days:"Days",hours:"Hours",minutes:"Minutes",seconds:"Seconds"},FlipClock.Lang.en=FlipClock.Lang.English,FlipClock.Lang["en-us"]=FlipClock.Lang.English,FlipClock.Lang.english=FlipClock.Lang.English}(jQuery),function(t){FlipClock.Lang.Spanish={years:"Años",months:"Meses",days:"Días",hours:"Horas",minutes:"Minutos",seconds:"Segundos"},FlipClock.Lang.es=FlipClock.Lang.Spanish,FlipClock.Lang["es-es"]=FlipClock.Lang.Spanish,FlipClock.Lang.spanish=FlipClock.Lang.Spanish}(jQuery),function(t){FlipClock.Lang.Persian={years:"سال",months:"ماه",days:"روز",hours:"ساعت",minutes:"دقیقه",seconds:"ثانیه"},FlipClock.Lang.fa=FlipClock.Lang.Persian,FlipClock.Lang["fa-ir"]=FlipClock.Lang.Persian,FlipClock.Lang.persian=FlipClock.Lang.Persian}(jQuery),function(t){FlipClock.Lang.Finnish={years:"Vuotta",months:"Kuukautta",days:"Päivää",hours:"Tuntia",minutes:"Minuuttia",seconds:"Sekuntia"},FlipClock.Lang.fi=FlipClock.Lang.Finnish,FlipClock.Lang["fi-fi"]=FlipClock.Lang.Finnish,FlipClock.Lang.finnish=FlipClock.Lang.Finnish}(jQuery),function(t){FlipClock.Lang.French={years:"Ans",months:"Mois",days:"Jours",hours:"Heures",minutes:"Minutes",seconds:"Secondes"},FlipClock.Lang.fr=FlipClock.Lang.French,FlipClock.Lang["fr-ca"]=FlipClock.Lang.French,FlipClock.Lang.french=FlipClock.Lang.French}(jQuery),function(t){FlipClock.Lang.Hebrew={years:"שנים",months:"חודש",days:"ימים",hours:"שעות",minutes:"דקות",seconds:"שניות"},FlipClock.Lang.il=FlipClock.Lang.Hebrew,FlipClock.Lang["he-il"]=FlipClock.Lang.Hebrew,FlipClock.Lang.hebrew=FlipClock.Lang.Hebrew}(jQuery),function(t){FlipClock.Lang.Hungarian={years:"Év",months:"Hónap",days:"Nap",hours:"Óra",minutes:"Perc",seconds:"Másodperc"},FlipClock.Lang.hu=FlipClock.Lang.Hungarian,FlipClock.Lang["hu-hu"]=FlipClock.Lang.Hungarian,FlipClock.Lang.hungarian=FlipClock.Lang.Hungarian}(jQuery),function(t){FlipClock.Lang.Italian={years:"Anni",months:"Mesi",days:"Giorni",hours:"Ore",minutes:"Minuti",seconds:"Secondi"},FlipClock.Lang.it=FlipClock.Lang.Italian,FlipClock.Lang["it-it"]=FlipClock.Lang.Italian,FlipClock.Lang.italian=FlipClock.Lang.Italian}(jQuery),function(t){FlipClock.Lang.Korean={years:"년",months:"월",days:"일",hours:"시",minutes:"분",seconds:"초"},FlipClock.Lang.ko=FlipClock.Lang.Korean,FlipClock.Lang["ko-kr"]=FlipClock.Lang.Korean,FlipClock.Lang.korean=FlipClock.Lang.Korean}(jQuery),function(t){FlipClock.Lang.Latvian={years:"Gadi",months:"Mēneši",days:"Dienas",hours:"Stundas",minutes:"Minūtes",seconds:"Sekundes"},FlipClock.Lang.lv=FlipClock.Lang.Latvian,FlipClock.Lang["lv-lv"]=FlipClock.Lang.Latvian,FlipClock.Lang.latvian=FlipClock.Lang.Latvian}(jQuery),function(t){FlipClock.Lang.Dutch={years:"Jaren",months:"Maanden",days:"Dagen",hours:"Uren",minutes:"Minuten",seconds:"Seconden"},FlipClock.Lang.nl=FlipClock.Lang.Dutch,FlipClock.Lang["nl-be"]=FlipClock.Lang.Dutch,FlipClock.Lang.dutch=FlipClock.Lang.Dutch}(jQuery),function(t){FlipClock.Lang.Norwegian={years:"År",months:"Måneder",days:"Dager",hours:"Timer",minutes:"Minutter",seconds:"Sekunder"},FlipClock.Lang.no=FlipClock.Lang.Norwegian,FlipClock.Lang.nb=FlipClock.Lang.Norwegian,FlipClock.Lang["no-nb"]=FlipClock.Lang.Norwegian,FlipClock.Lang.norwegian=FlipClock.Lang.Norwegian}(jQuery),function(t){FlipClock.Lang.Polish={years:"lat",months:"miesięcy",days:"dni",hours:"godzin",minutes:"minut",seconds:"sekund"},FlipClock.Lang.pl=FlipClock.Lang.Polish,FlipClock.Lang["pl-pl"]=FlipClock.Lang.Polish,FlipClock.Lang.polish=FlipClock.Lang.Polish}(jQuery),function(t){FlipClock.Lang.Portuguese={years:"Anos",months:"Meses",days:"Dias",hours:"Horas",minutes:"Minutos",seconds:"Segundos"},FlipClock.Lang.pt=FlipClock.Lang.Portuguese,FlipClock.Lang["pt-br"]=FlipClock.Lang.Portuguese,FlipClock.Lang.portuguese=FlipClock.Lang.Portuguese}(jQuery),function(t){FlipClock.Lang.Russian={years:"лет",months:"месяцев",days:"дней",hours:"часов",minutes:"минут",seconds:"секунд"},FlipClock.Lang.ru=FlipClock.Lang.Russian,FlipClock.Lang["ru-ru"]=FlipClock.Lang.Russian,FlipClock.Lang.russian=FlipClock.Lang.Russian}(jQuery),function(t){FlipClock.Lang.Slovak={years:"Roky",months:"Mesiace",days:"Dni",hours:"Hodiny",minutes:"Minúty",seconds:"Sekundy"},FlipClock.Lang.sk=FlipClock.Lang.Slovak,FlipClock.Lang["sk-sk"]=FlipClock.Lang.Slovak,
+FlipClock.Lang.slovak=FlipClock.Lang.Slovak}(jQuery),function(t){FlipClock.Lang.Swedish={years:"År",months:"Månader",days:"Dagar",hours:"Timmar",minutes:"Minuter",seconds:"Sekunder"},FlipClock.Lang.sv=FlipClock.Lang.Swedish,FlipClock.Lang["sv-se"]=FlipClock.Lang.Swedish,FlipClock.Lang.swedish=FlipClock.Lang.Swedish}(jQuery),function(t){FlipClock.Lang.Thai={years:"ปี",months:"เดือน",days:"วัน",hours:"ชั่วโมง",minutes:"นาที",seconds:"วินาที"},FlipClock.Lang.th=FlipClock.Lang.Thai,FlipClock.Lang["th-th"]=FlipClock.Lang.Thai,FlipClock.Lang.thai=FlipClock.Lang.Thai}(jQuery),function(t){FlipClock.Lang.Ukrainian={years:"роки",months:"місяці",days:"дні",hours:"години",minutes:"хвилини",seconds:"секунди"},FlipClock.Lang.ua=FlipClock.Lang.Ukrainian,FlipClock.Lang["ua-ua"]=FlipClock.Lang.Ukrainian,FlipClock.Lang.ukraine=FlipClock.Lang.Ukrainian}(jQuery),function(t){FlipClock.Lang.Chinese={years:"年",months:"月",days:"日",hours:"时",minutes:"分",seconds:"秒"},FlipClock.Lang.zh=FlipClock.Lang.Chinese,FlipClock.Lang["zh-cn"]=FlipClock.Lang.Chinese,FlipClock.Lang.chinese=FlipClock.Lang.Chinese}(jQuery),function(t){FlipClock.Lang.TraditionalChinese={years:"年",months:"月",days:"日",hours:"時",minutes:"分",seconds:"秒"},FlipClock.Lang["zh-tw"]=FlipClock.Lang.TraditionalChinese}(jQuery);
\ No newline at end of file
diff --git a/examples/_responsive.html b/examples/_responsive.html
new file mode 100644
index 00000000..5d35e23c
--- /dev/null
+++ b/examples/_responsive.html
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/base.html b/examples/base.html
index 5ed3250d..e2615ce6 100644
--- a/examples/base.html
+++ b/examples/base.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/examples/countdown-from-new-years-without-seconds.html b/examples/countdown-from-new-years-without-seconds.html
index 16ab3c95..989fde08 100644
--- a/examples/countdown-from-new-years-without-seconds.html
+++ b/examples/countdown-from-new-years-without-seconds.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -25,8 +25,7 @@
// Instantiate a coutdown FlipClock
clock = $('.clock').FlipClock(diff, {
- clockFace: 'DailyCounter',
- showSeconds: false
+ clockFace: 'DailyCounter'
});
});
diff --git a/examples/countdown-from-new-years.html b/examples/countdown-from-new-years.html
index 65d7cf9b..a7486042 100644
--- a/examples/countdown-from-new-years.html
+++ b/examples/countdown-from-new-years.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -25,7 +25,10 @@
// Instantiate a coutdown FlipClock
clock = $('.clock').FlipClock(diff, {
- clockFace: 'DailyCounter'
+ clockFace: 'DailyCounter',
+ clockFaceOptions: {
+ showSeconds: true
+ }
});
});
diff --git a/examples/countdown-start-callback.html b/examples/countdown-start-callback.html
index d27242b7..f3cfd82f 100644
--- a/examples/countdown-start-callback.html
+++ b/examples/countdown-start-callback.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -19,17 +19,16 @@
clock = $('.clock').FlipClock(10, {
clockFace: 'MinuteCounter',
- countdown: true,
- autoStart: false,
- callbacks: {
- start: function() {
- $('.message').html('The clock has started!');
- }
- }
+ clockFaceOptions: {
+ countdown: true,
+ autoStart: false
+ },
+ onStart: function() {
+ $('.message').html('The clock has started!');
+ }
});
$('.start').click(function(e) {
-
clock.start();
});
diff --git a/examples/countdown-stop-callback.html b/examples/countdown-stop-callback.html
index 66869d9c..fd5270b7 100644
--- a/examples/countdown-stop-callback.html
+++ b/examples/countdown-stop-callback.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,13 +15,13 @@
$(document).ready(function() {
- clock = $('.clock').FlipClock(10, {
+ clock = $('.clock').FlipClock(5, {
clockFace: 'MinuteCounter',
- countdown: true,
- callbacks: {
- stop: function() {
- $('.message').html('The clock has stopped!');
- }
+ clockFaceOptions: {
+ countdown: true,
+ },
+ onStop: function() {
+ $('.message').html('The clock has stopped!');
}
});
diff --git a/examples/countdown-to-new-years-without-seconds.html b/examples/countdown-to-new-years-without-seconds.html
index 6ec0405b..d0d172a8 100644
--- a/examples/countdown-to-new-years-without-seconds.html
+++ b/examples/countdown-to-new-years-without-seconds.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -26,8 +26,10 @@
// Instantiate a coutdown FlipClock
clock = $('.clock').FlipClock(diff, {
clockFace: 'DailyCounter',
- countdown: true,
- showSeconds: false
+ clockFaceOptions: {
+ countdown: true,
+ showSeconds: false
+ }
});
});
diff --git a/examples/countdown-to-new-years.html b/examples/countdown-to-new-years.html
index 0fe052b9..fc794d98 100644
--- a/examples/countdown-to-new-years.html
+++ b/examples/countdown-to-new-years.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -26,7 +26,9 @@
// Instantiate a coutdown FlipClock
clock = $('.clock').FlipClock(diff, {
clockFace: 'DailyCounter',
- countdown: true
+ clockFaceOptions: {
+ countdown: true
+ }
});
});
diff --git a/examples/daily-counter-countdown.html b/examples/daily-counter-countdown.html
index 5ed3250d..98ced1d7 100644
--- a/examples/daily-counter-countdown.html
+++ b/examples/daily-counter-countdown.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -17,17 +17,17 @@
var clock;
clock = $('.clock').FlipClock({
- clockFace: 'DailyCounter',
- autoStart: false,
- callbacks: {
- stop: function() {
- $('.message').html('The clock has stopped!')
- }
- }
+ clockFace: 'HourlyCounter',
+ clockFaceOptions: {
+ autoStart: false,
+ },
+ onStop: function() {
+ $('.message').html('The clock has stopped!');
+ }
});
- clock.setTime(220880);
- clock.setCountdown(true);
+ clock.face.setCountdown(true);
+ clock.setFaceValue(10);
clock.start();
});
diff --git a/examples/daily-counter.html b/examples/daily-counter.html
index b7a7a072..4adf7602 100644
--- a/examples/daily-counter.html
+++ b/examples/daily-counter.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -16,7 +16,10 @@
$(document).ready(function() {
clock = $('.clock').FlipClock({
- clockFace: 'DailyCounter'
+ clockFace: 'DailyCounter',
+ clockFaceOptions: {
+ showSeconds: false
+ }
});
});
diff --git a/examples/english-alphabetical-clock.html b/examples/english-alphabetical-clock.html
new file mode 100644
index 00000000..e842cb42
--- /dev/null
+++ b/examples/english-alphabetical-clock.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/hourly-counter.html b/examples/hourly-counter.html
index 853baea3..7f4586a4 100644
--- a/examples/hourly-counter.html
+++ b/examples/hourly-counter.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,8 +15,11 @@
$(document).ready(function() {
- clock = $('.clock').FlipClock({
- clockFace: 'HourlyCounter'
+ clock = $('.clock').FlipClock(1018, {
+ clockFace: 'HourlyCounter',
+ clockFaceOptions: {
+ showSeconds: true
+ }
});
});
diff --git a/examples/interval-callback.html b/examples/interval-callback.html
index 97655b8d..07ea7630 100644
--- a/examples/interval-callback.html
+++ b/examples/interval-callback.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -17,15 +17,9 @@
clock = $('.clock').FlipClock({
clockFace: 'MinuteCounter',
- callbacks: {
- interval: function() {
- var time = this.factory.getTime().time;
-
- if(time) {
- console.log('interval', time);
- }
- }
- }
+ onInterval: function() {
+ console.log('interval', this.face.getTime().time);
+ }
});
});
diff --git a/examples/load-new-clock-face.html b/examples/load-new-clock-face.html
index 305159d0..0decff40 100644
--- a/examples/load-new-clock-face.html
+++ b/examples/load-new-clock-face.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -20,19 +20,11 @@
autoStart: true
});
- setTimeout(function() {
- clock.loadClockFace('MinuteCounter');
- }, 3000);
-
- setTimeout(function() {
- clock.loadClockFace('HourlyCounter');
- }, 7000);
-
setTimeout(function() {
clock.loadClockFace('Counter', {
autoStart: true
});
- }, 10000);
+ }, 3000);
});
diff --git a/examples/localization.html b/examples/localization.html
index dedcae1c..604fe7df 100644
--- a/examples/localization.html
+++ b/examples/localization.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,7 +15,10 @@
$(document).ready(function() {
clock = $('.clock').FlipClock({
clockFace: 'DailyCounter',
- language: 'es'
+ clockFaceOptions: {
+ language: 'es',
+ showSeconds: true
+ }
});
});
diff --git a/examples/minute-counter-overflow.html b/examples/minute-counter-overflow.html
index dcd8c154..bf35fa5d 100644
--- a/examples/minute-counter-overflow.html
+++ b/examples/minute-counter-overflow.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -18,7 +18,7 @@
clockFace: 'MinuteCounter'
});
- clock.setTime(60*100-5);
+ clock.setFaceValue(60*100-5);
});
diff --git a/examples/minute-counter.html b/examples/minute-counter.html
index dbba448d..65a16ee1 100644
--- a/examples/minute-counter.html
+++ b/examples/minute-counter.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/examples/multiple-instances.html b/examples/multiple-instances.html
index 3f7fcb2c..4316c7ef 100644
--- a/examples/multiple-instances.html
+++ b/examples/multiple-instances.html
@@ -1,16 +1,16 @@
-
+
-
+
-
+
-
+
@@ -20,11 +20,11 @@
$(document).ready(function() {
clocks.push($('.clock-1').FlipClock({
- clockFace: 'MinuteCounter'
+ clockFace: 'Counter'
}));
- clocks.push($('.clock-2').FlipClock({
- clockFace: 'HourlyCounter'
+ clocks.push($('.clock-2').FlipClock(15000, {
+ clockFace: 'Counter'
}));
});
diff --git a/examples/simple-countdown-autostart.html b/examples/simple-countdown-autostart.html
index 6b24f19d..57c0c3de 100644
--- a/examples/simple-countdown-autostart.html
+++ b/examples/simple-countdown-autostart.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,10 +15,12 @@
$(document).ready(function() {
// Instantiate a counter
- clock = new FlipClock($('.clock'), 10, {
+ clock = new FlipClock($('.clock'), 13, {
clockFace: 'Counter',
- autoStart: true,
- countdown: true
+ clockFaceOptions: {
+ autoStart: true,
+ countdown: true
+ }
});
});
diff --git a/examples/simple-counter-autostart.html b/examples/simple-counter-autostart.html
index 8bd7c8fa..e6ba494f 100644
--- a/examples/simple-counter-autostart.html
+++ b/examples/simple-counter-autostart.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -17,7 +17,9 @@
// Instantiate a counter
clock = new FlipClock($('.clock'), {
clockFace: 'Counter',
- autoStart: true
+ clockFaceOptions: {
+ autoStart: true
+ }
});
});
diff --git a/examples/simple-counter-minimum-digits.html b/examples/simple-counter-minimum-digits.html
index 053544a5..0ab58e54 100644
--- a/examples/simple-counter-minimum-digits.html
+++ b/examples/simple-counter-minimum-digits.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -17,8 +17,10 @@
// Instantiate a counter
clock = new FlipClock($('.clock'), {
clockFace: 'Counter',
- autoStart: true,
- minimumDigits: 6
+ clockFaceOptions: {
+ autoStart: true,
+ minimumDigits: 6
+ }
});
});
diff --git a/examples/simple-counter.html b/examples/simple-counter.html
index 3ff1474a..91b1368a 100644
--- a/examples/simple-counter.html
+++ b/examples/simple-counter.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -22,7 +22,10 @@
// Instantiate a counter
clock = new FlipClock($('.clock'), 101, {
- clockFace: 'Counter'
+ clockFace: 'Counter',
+ clockFaceOptions: {
+ autoStart: false
+ }
});
// Attach a click event to a button a increment the clock
diff --git a/examples/test.html b/examples/test.html
index 7067e265..639035e0 100644
--- a/examples/test.html
+++ b/examples/test.html
@@ -1,46 +1,25 @@
-
+
-
+
diff --git a/examples/twelve-hour-clock-custom-time.html b/examples/twelve-hour-clock-custom-time.html
index 226cd5d3..493f6b8a 100644
--- a/examples/twelve-hour-clock-custom-time.html
+++ b/examples/twelve-hour-clock-custom-time.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/examples/twelve-hour-clock-without-seconds.html b/examples/twelve-hour-clock-without-seconds.html
index 569f213c..232830ac 100644
--- a/examples/twelve-hour-clock-without-seconds.html
+++ b/examples/twelve-hour-clock-without-seconds.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,7 +15,9 @@
$(document).ready(function() {
clock = $('.clock').FlipClock({
clockFace: 'TwelveHourClock',
- showSeconds: false
+ clockFaceOptions: {
+ showSeconds: false
+ }
});
});
diff --git a/examples/twelve-hour-clock.html b/examples/twelve-hour-clock.html
index 00246cc8..bf2a01f0 100644
--- a/examples/twelve-hour-clock.html
+++ b/examples/twelve-hour-clock.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/examples/twenty-four-hour-clock-custom-time.html b/examples/twenty-four-hour-clock-custom-time.html
index ea72ecb6..b8d44d5a 100644
--- a/examples/twenty-four-hour-clock-custom-time.html
+++ b/examples/twenty-four-hour-clock-custom-time.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/examples/twenty-four-hour-clock-without-seconds.html b/examples/twenty-four-hour-clock-without-seconds.html
index f0ac6a0b..9aef6209 100644
--- a/examples/twenty-four-hour-clock-without-seconds.html
+++ b/examples/twenty-four-hour-clock-without-seconds.html
@@ -1,10 +1,10 @@
-
+
-
+
@@ -15,7 +15,9 @@
$(document).ready(function() {
clock = $('.clock').FlipClock({
clockFace: 'TwentyFourHourClock',
- showSeconds: false
+ clockFaceOptions: {
+ showSeconds: false
+ }
});
});
diff --git a/examples/twenty-four-hour-clock.html b/examples/twenty-four-hour-clock.html
index 01a67456..528f9063 100644
--- a/examples/twenty-four-hour-clock.html
+++ b/examples/twenty-four-hour-clock.html
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 00000000..d68d05b4
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,108 @@
+var
+ gulp = require('gulp'),
+ browserSync = require('browser-sync').create(),
+ sass = require('gulp-sass'),
+ sourcemaps = require('gulp-sourcemaps'),
+ autoprefixer = require('gulp-autoprefixer');
+ header = require('gulp-header');
+ uglify = require('gulp-uglify');
+ concat = require('gulp-concat');
+ notify = require('gulp-notify');
+ gutil = require('gulp-util');
+ rename = require('gulp-rename');
+ pkg = require('./package.json');
+;
+
+var reportError = function (error) {
+ var lineNumber = (error.lineNumber) ? 'LINE ' + error.lineNumber + ' -- ' : '';
+
+ notify({
+ title: 'Task Failed [' + error.plugin + ']',
+ message: lineNumber + 'See console.',
+ sound: 'Sosumi' // See: https://github.com/mikaelbr/node-notifier#all-notification-options-with-their-defaults
+ }).write(error);
+
+ gutil.beep(); // Beep 'sosumi' again
+
+ // Inspect the error object
+ //console.log(error);
+
+ // Easy error reporting
+ //console.log(error.toString());
+
+ // Pretty error reporting
+ var report = '';
+ var chalk = gutil.colors.white.bgRed;
+
+ report += chalk('TASK:') + ' [' + error.plugin + ']\n';
+ report += chalk('PROB:') + ' ' + error.message + '\n';
+ if (error.lineNumber) { report += chalk('LINE:') + ' ' + error.lineNumber + '\n'; }
+ if (error.fileName) { report += chalk('FILE:') + ' ' + error.fileName + '\n'; }
+ console.error(report);
+
+ // Prevent the 'watch' task from stopping
+ this.emit('end');
+}
+
+var banner = [
+ '/* <%= pkg.name %> - v<%= pkg.version %> */',
+ ''
+].join('\n');
+
+// Static Server + watching scss/html files
+gulp.task('dev', ['sass', 'dist'], function() {
+
+ browserSync.init({
+ server: {
+ baseDir: "examples",
+ routes: {
+ "/dist": "dist"
+ },
+ directory: true
+ }
+ });
+
+ gulp.watch("src/flipclock/scss/**/*.scss", ['sass']);
+ gulp.watch("src/flipclock/js/**/*.js", ['dist']).on('change', browserSync.reload);
+ gulp.watch("examples/*.html").on('change', browserSync.reload);
+});
+
+// Minify js files
+gulp.task('dist', function () {
+ return gulp.src([
+ 'src/flipclock/js/vendor/*.js',
+ 'src/flipclock/js/libs/Base.js',
+ 'src/flipclock/js/libs/Plugins.js',
+ 'src/flipclock/js/libs/List.js',
+ 'src/flipclock/js/libs/ListItem.js',
+ 'src/flipclock/js/libs/EnglishAlphaList.js',
+ 'src/flipclock/js/libs/*.js',
+ 'src/flipclock/js/faces/TwentyFourHourClockFace.js',
+ 'src/flipclock/js/faces/*.js',
+ 'src/flipclock/js/lang/*.js'
+ ]) //select all javascript files
+ .pipe(concat('flipclock.js')) //the name of the resulting file
+ .pipe(gulp.dest('dist')) //the destination folder
+ .pipe(rename('flipclock.min.js')) //minify the compiled js
+ .pipe(uglify())
+ .pipe(header(banner, {pkg: pkg})) //add a small version banner to the minified js
+ .pipe(gulp.dest('dist'))
+ .pipe(notify({ message: 'Finished minifying JavaScript'}));
+});
+
+// Compile sass into CSS & auto-inject into browsers
+gulp.task('sass', function() {
+ return gulp.src("src/flipclock/scss/**/*.scss")
+ .pipe(sourcemaps.init())
+ .pipe(sass({outputStyle: 'compressed'}).on('error', reportError))
+ .pipe(autoprefixer({
+ browsers: ['last 2 versions'],
+ cascade: false
+ }))
+ .pipe(sourcemaps.write("./"))
+ .pipe(gulp.dest("dist"))
+ .pipe(browserSync.stream())
+ .pipe(notify({ message: 'Styles recompiled'}));
+});
+
+gulp.task('default', ['dev']);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..65649fe4
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,7708 @@
+{
+ "name": "flipclock",
+ "version": "0.8.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@gulp-sourcemaps/map-sources": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "2.1.1",
+ "through2": "2.0.3"
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.18",
+ "negotiator": "0.6.1"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ }
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
+ "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-each-series": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+ "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
+ "dev": true
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "autoprefixer-core": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz",
+ "integrity": "sha1-5kDEFK5Bmq4hwa1DyOoPPbgqVm0=",
+ "dev": true,
+ "requires": {
+ "browserslist": "0.4.0",
+ "caniuse-db": "1.0.30000821",
+ "num2fraction": "1.2.2",
+ "postcss": "4.1.16"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz",
+ "integrity": "sha1-O9SrkZncG5FQ1NbbpNnTqrvIbdQ=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "1.0.30000821"
+ }
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz",
+ "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "dev": true
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "browser-sync": {
+ "version": "2.23.6",
+ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.23.6.tgz",
+ "integrity": "sha512-loCO5NQKZXfBJrEvmLwF1TPSECCsPopNd29qduoysLmpw8op2lgolGMjz3oI/MjG4duzB9TfDs7k58djRSwPwg==",
+ "dev": true,
+ "requires": {
+ "browser-sync-ui": "1.0.1",
+ "bs-recipes": "1.3.4",
+ "chokidar": "1.7.0",
+ "connect": "3.5.0",
+ "connect-history-api-fallback": "1.5.0",
+ "dev-ip": "1.0.1",
+ "easy-extender": "2.3.2",
+ "eazy-logger": "3.0.2",
+ "emitter-steward": "1.0.0",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "fs-extra": "3.0.1",
+ "http-proxy": "1.15.2",
+ "immutable": "3.8.2",
+ "localtunnel": "1.8.3",
+ "micromatch": "2.3.11",
+ "opn": "4.0.2",
+ "portscanner": "2.1.1",
+ "qs": "6.2.1",
+ "resp-modifier": "6.0.2",
+ "rx": "4.1.0",
+ "serve-index": "1.8.0",
+ "serve-static": "1.12.2",
+ "server-destroy": "1.0.1",
+ "socket.io": "2.0.4",
+ "ua-parser-js": "0.7.12",
+ "yargs": "6.4.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "3.0.1",
+ "universalify": "0.1.1"
+ }
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "qs": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz",
+ "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz",
+ "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "window-size": "0.2.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "browser-sync-ui": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz",
+ "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==",
+ "dev": true,
+ "requires": {
+ "async-each-series": "0.1.1",
+ "connect-history-api-fallback": "1.5.0",
+ "immutable": "3.8.2",
+ "server-destroy": "1.0.1",
+ "socket.io-client": "2.0.4",
+ "stream-throttle": "0.1.3"
+ }
+ },
+ "bs-recipes": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+ "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000821",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000821.tgz",
+ "integrity": "sha1-P83GfERqlKnN2Egkik4+VLLadBk=",
+ "dev": true
+ },
+ "cardinal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz",
+ "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=",
+ "dev": true,
+ "requires": {
+ "ansicolors": "0.2.1",
+ "redeyed": "1.0.1"
+ }
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "cli": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz",
+ "integrity": "sha1-ePlIXNFhtWbppsctcXDEJw6B22E=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "cli-table": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
+ "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ }
+ }
+ },
+ "cli-usage": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.7.tgz",
+ "integrity": "sha512-x/Q52iLSZsRrRb2ePmTsVYXrGcrPQ8G4yRAY7QpMlumxAfPVrnDOH2X6Z5s8qsAX7AA7YuIi8AXFrvH0wWEesA==",
+ "dev": true,
+ "requires": {
+ "marked": "0.3.19",
+ "marked-terminal": "2.0.0"
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "process-nextick-args": "2.0.0",
+ "readable-stream": "2.3.5"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "coffee-script": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
+ "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz",
+ "integrity": "sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "connect": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz",
+ "integrity": "sha1-s1dSWgtMH1BZnNmD4dnv7qlncZg=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "finalhandler": "0.5.0",
+ "parseurl": "1.3.2",
+ "utils-merge": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+ "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz",
+ "integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "dev": true,
+ "requires": {
+ "atob": "1.1.3",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.3.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
+ "dev": true
+ }
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "dateformat": {
+ "version": "1.0.2-1.2.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
+ "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
+ "dev": true
+ },
+ "deap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz",
+ "integrity": "sha512-k75KYNZMvwAwes2xIPry/QTffXIchjD8QfABvvfTr80P85jv5ZcKqcoDo+vMe71nNnVnXYe8MA28weyqcf/DKw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-fabulous": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz",
+ "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "lazy-debug-legacy": "0.0.1",
+ "object-assign": "4.1.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.4"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "dev-ip": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+ "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "easy-extender": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz",
+ "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=",
+ "dev": true,
+ "requires": {
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ }
+ }
+ },
+ "eazy-logger": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz",
+ "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=",
+ "dev": true,
+ "requires": {
+ "tfunk": "3.1.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "emitter-steward": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emitter-steward/-/emitter-steward-1.0.0.tgz",
+ "integrity": "sha1-80Ea3pdYp1Zd+Eiy2gy70bRsvWQ=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
+ "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "uws": "9.14.0",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
+ "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.2"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "0.1.1",
+ "color-support": "1.1.3",
+ "time-stamp": "1.1.0"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "finalhandler": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz",
+ "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
+ "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
+ "dev": true,
+ "requires": {
+ "glob": "3.2.11",
+ "lodash": "2.4.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimatch": "0.3.0"
+ }
+ },
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "is-plain-object": "2.0.4",
+ "object.defaults": "1.1.0",
+ "object.pick": "1.3.0",
+ "parse-filepath": "1.0.2"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
+ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "2.8.0",
+ "node-pre-gyp": "0.6.39"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
+ "dev": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
+ "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
+ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz",
+ "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=",
+ "dev": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.1.1",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
+ "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.39",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz",
+ "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.2",
+ "hawk": "3.1.3",
+ "mkdirp": "0.5.1",
+ "nopt": "4.0.1",
+ "npmlog": "4.1.0",
+ "rc": "1.2.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "tar-pack": "3.4.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
+ "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
+ "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
+ "dev": true,
+ "requires": {
+ "buffer-shims": "1.0.0",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "1.0.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.15",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.0.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
+ "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+ "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
+ "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.8",
+ "fstream": "1.0.11",
+ "fstream-ignore": "1.0.5",
+ "once": "1.4.0",
+ "readable-stream": "2.2.9",
+ "rimraf": "2.6.1",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+ "dev": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "gaze": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true,
+ "requires": {
+ "globule": "1.2.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getobject": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "4.5.3",
+ "glob2base": "0.0.12",
+ "minimatch": "2.0.10",
+ "ordered-read-streams": "0.1.0",
+ "through2": "0.6.5",
+ "unique-stream": "1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "2.0.10",
+ "once": "1.4.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "0.5.2"
+ },
+ "dependencies": {
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "0.1.0"
+ }
+ },
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "3.1.21",
+ "lodash": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "0.1.1"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.2",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "1.0.2",
+ "which": "1.3.0"
+ }
+ },
+ "globule": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4"
+ }
+ },
+ "glogg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "grunt": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
+ "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
+ "dev": true,
+ "requires": {
+ "async": "0.1.22",
+ "coffee-script": "1.3.3",
+ "colors": "0.6.2",
+ "dateformat": "1.0.2-1.2.3",
+ "eventemitter2": "0.4.14",
+ "exit": "0.1.2",
+ "findup-sync": "0.1.3",
+ "getobject": "0.1.0",
+ "glob": "3.1.21",
+ "grunt-legacy-log": "0.1.3",
+ "grunt-legacy-util": "0.2.0",
+ "hooker": "0.2.3",
+ "iconv-lite": "0.2.11",
+ "js-yaml": "2.0.5",
+ "lodash": "0.9.2",
+ "minimatch": "0.2.14",
+ "nopt": "1.0.10",
+ "rimraf": "2.2.8",
+ "underscore.string": "2.2.1",
+ "which": "1.0.9"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "0.1.16",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
+ "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
+ "dev": true,
+ "requires": {
+ "underscore": "1.7.0",
+ "underscore.string": "2.4.0"
+ },
+ "dependencies": {
+ "underscore.string": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
+ "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
+ "dev": true
+ }
+ }
+ },
+ "async": {
+ "version": "0.1.22",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
+ "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+ "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
+ "dev": true
+ },
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
+ "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
+ "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
+ "dev": true,
+ "requires": {
+ "argparse": "0.1.16",
+ "esprima": "1.0.4"
+ }
+ },
+ "lodash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
+ "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ },
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
+ "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-contrib-concat": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.3.0.tgz",
+ "integrity": "sha1-SPoNQzbSm2U62CJaa9b4VrRIPjI=",
+ "dev": true
+ },
+ "grunt-contrib-jshint": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz",
+ "integrity": "sha1-OvtGdnRTZMxKGe7nk0wOBgCLVm4=",
+ "dev": true,
+ "requires": {
+ "jshint": "2.1.11"
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz",
+ "integrity": "sha1-5r2lHgxAoUWfbOrUI8Ze/XJaG/c=",
+ "dev": true,
+ "requires": {
+ "grunt-lib-contrib": "0.6.1",
+ "uglify-js": "2.4.24"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.34",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
+ "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "2.4.24",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
+ "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.1.34",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.5.4"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
+ "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0",
+ "wordwrap": "0.0.2"
+ }
+ }
+ }
+ },
+ "grunt-legacy-log": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
+ "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
+ "dev": true,
+ "requires": {
+ "colors": "0.6.2",
+ "grunt-legacy-log-utils": "0.1.1",
+ "hooker": "0.2.3",
+ "lodash": "2.4.2",
+ "underscore.string": "2.3.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
+ "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
+ "dev": true,
+ "requires": {
+ "colors": "0.6.2",
+ "lodash": "2.4.2",
+ "underscore.string": "2.3.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
+ "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
+ "dev": true,
+ "requires": {
+ "async": "0.1.22",
+ "exit": "0.1.2",
+ "getobject": "0.1.0",
+ "hooker": "0.2.3",
+ "lodash": "0.9.2",
+ "underscore.string": "2.2.1",
+ "which": "1.0.9"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.1.22",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
+ "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
+ "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
+ "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-lib-contrib": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz",
+ "integrity": "sha1-P1att9oG6BR5XuJBWw6+X7iQPrs=",
+ "dev": true,
+ "requires": {
+ "zlib-browserify": "0.0.1"
+ }
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "chalk": "1.1.3",
+ "deprecated": "0.0.1",
+ "gulp-util": "3.0.8",
+ "interpret": "1.1.0",
+ "liftoff": "2.5.0",
+ "minimist": "1.2.0",
+ "orchestrator": "0.3.8",
+ "pretty-hrtime": "1.0.3",
+ "semver": "4.3.6",
+ "tildify": "1.2.0",
+ "v8flags": "2.1.1",
+ "vinyl-fs": "0.3.14"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-autoprefixer": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-2.3.1.tgz",
+ "integrity": "sha1-9nXTsb128IjfLySretPkoFngfmc=",
+ "dev": true,
+ "requires": {
+ "autoprefixer-core": "5.2.1",
+ "gulp-util": "3.0.8",
+ "object-assign": "2.1.1",
+ "postcss": "4.1.16",
+ "through2": "0.6.5",
+ "vinyl-sourcemaps-apply": "0.1.4"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "gulp-concat": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
+ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "1.0.5",
+ "through2": "2.0.3",
+ "vinyl": "2.1.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.2",
+ "clone-buffer": "1.0.0",
+ "clone-stats": "1.0.0",
+ "cloneable-readable": "1.1.2",
+ "remove-trailing-separator": "1.1.0",
+ "replace-ext": "1.0.0"
+ }
+ }
+ }
+ },
+ "gulp-header": {
+ "version": "1.8.12",
+ "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz",
+ "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "1.0.5",
+ "lodash.template": "4.4.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ }
+ }
+ },
+ "gulp-notify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz",
+ "integrity": "sha1-BGyChcKS6X7tThWgCcJsu+XO8TU=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "3.0.8",
+ "lodash.template": "3.6.2",
+ "node-notifier": "4.6.1",
+ "node.extend": "1.1.6",
+ "through2": "0.6.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz",
+ "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=",
+ "dev": true,
+ "requires": {
+ "lodash._baseclone": "3.3.0",
+ "lodash._bindcallback": "3.0.1"
+ }
+ },
+ "node-notifier": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz",
+ "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=",
+ "dev": true,
+ "requires": {
+ "cli-usage": "0.1.7",
+ "growly": "1.3.0",
+ "lodash.clonedeep": "3.0.2",
+ "minimist": "1.2.0",
+ "semver": "5.5.0",
+ "shellwords": "0.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "gulp-rename": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+ "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+ "dev": true
+ },
+ "gulp-sass": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-2.3.2.tgz",
+ "integrity": "sha1-grerkP6QLNw0wE8YDZLyw0kC3VI=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "3.0.8",
+ "lodash.clonedeep": "4.5.0",
+ "node-sass": "3.13.1",
+ "through2": "2.0.3",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ },
+ "dependencies": {
+ "node-sass": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz",
+ "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=",
+ "dev": true,
+ "requires": {
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.2",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.2",
+ "in-publish": "2.0.0",
+ "lodash.assign": "4.2.0",
+ "lodash.clonedeep": "4.5.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.8.0",
+ "node-gyp": "3.6.2",
+ "npmlog": "4.1.2",
+ "request": "2.79.0",
+ "sass-graph": "2.2.4"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.1.tgz",
+ "integrity": "sha1-tDfR89mAzyboEYSCNxjOFa5ll7Y=",
+ "dev": true,
+ "requires": {
+ "@gulp-sourcemaps/map-sources": "1.0.0",
+ "acorn": "4.0.13",
+ "convert-source-map": "1.5.1",
+ "css": "2.2.1",
+ "debug-fabulous": "0.0.4",
+ "detect-newline": "2.1.0",
+ "graceful-fs": "4.1.11",
+ "source-map": "0.6.1",
+ "strip-bom": "2.0.0",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.4",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulp-strip-css-comments": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-strip-css-comments/-/gulp-strip-css-comments-1.2.0.tgz",
+ "integrity": "sha1-/nmGPOMvUN1Mvo0NtW9HbIbPubg=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "3.0.8",
+ "strip-css-comments": "3.0.0",
+ "through2": "2.0.3"
+ }
+ },
+ "gulp-uglify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz",
+ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=",
+ "dev": true,
+ "requires": {
+ "deap": "1.0.1",
+ "fancy-log": "1.3.2",
+ "gulp-util": "3.0.8",
+ "isobject": "2.1.0",
+ "through2": "2.0.3",
+ "uglify-js": "2.6.4",
+ "uglify-save-license": "0.4.1",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "2.2.0",
+ "fancy-log": "1.3.2",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.1"
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.13.0",
+ "is-my-json-valid": "2.17.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
+ "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz",
+ "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.2",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-proxy": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz",
+ "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "immutable": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+ "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
+ "dev": true
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
+ "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "1.0.0",
+ "is-windows": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "1.11.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
+ "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-number-like": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+ "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+ "dev": true,
+ "requires": {
+ "lodash.isfinite": "3.3.2"
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jquery": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
+ "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+ },
+ "js-base64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.1.tgz",
+ "integrity": "sha512-2h586r2I/CqU7z1aa1kBgWaVAXWAZK+zHnceGi/jFgn7+7VSluxYer/i3xOZVearCxxXvyDkLtTBo+OeJCA3kA==",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jshint": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz",
+ "integrity": "sha1-61EI/vm6Xd67gwmD9XLSQuSeP5Y=",
+ "dev": true,
+ "requires": {
+ "cli": "0.4.5",
+ "console-browserify": "0.1.6",
+ "minimatch": "0.4.0",
+ "shelljs": "0.1.4",
+ "underscore": "1.4.4"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz",
+ "integrity": "sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ },
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
+ "dev": true
+ }
+ }
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "lazy-debug-legacy": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz",
+ "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "findup-sync": "2.0.0",
+ "fined": "1.1.0",
+ "flagged-respawn": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "object.map": "1.0.1",
+ "rechoir": "0.6.2",
+ "resolve": "1.5.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "1.0.0",
+ "is-glob": "3.1.0",
+ "micromatch": "3.1.10",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.1",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ }
+ }
+ },
+ "limiter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz",
+ "integrity": "sha512-JIKZ0xb6fZZYa3deZ0BgXCgX6HgV8Nx3mFGeFHmFWW8Fb2c08e0CyE+G3nalpD0xGvGssjGb1UdFr+PprxZEbw==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "localtunnel": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.3.tgz",
+ "integrity": "sha1-3MWSL9hWUQN9S94k/ZMkjQsk6wU=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "openurl": "1.1.1",
+ "request": "2.81.0",
+ "yargs": "3.29.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.29.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz",
+ "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "os-locale": "1.4.0",
+ "window-size": "0.1.4",
+ "y18n": "3.2.1"
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._arraycopy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
+ "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=",
+ "dev": true
+ },
+ "lodash._arrayeach": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
+ "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._baseclone": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
+ "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=",
+ "dev": true,
+ "requires": {
+ "lodash._arraycopy": "3.0.0",
+ "lodash._arrayeach": "3.0.0",
+ "lodash._baseassign": "3.2.0",
+ "lodash._basefor": "3.0.3",
+ "lodash.isarray": "3.0.4",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basefor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+ "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isfinite": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+ "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lodash.toarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
+ "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "marked": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+ "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
+ "dev": true
+ },
+ "marked-terminal": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-2.0.0.tgz",
+ "integrity": "sha1-Xq9Wi+ZvaGVBr6UqVYKAMQox3i0=",
+ "dev": true,
+ "requires": {
+ "cardinal": "1.0.0",
+ "chalk": "1.1.3",
+ "cli-table": "0.3.1",
+ "lodash.assign": "4.2.0",
+ "node-emoji": "1.8.1"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "nan": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
+ "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natives": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.2.tgz",
+ "integrity": "sha512-5bRASydE1gu6zPOenLN043++J8xj1Ob7ArkfdYO3JN4DF5rDmG7bMoiybkTyD+GnXQEMixVeDHMzuqm6kpBmiA==",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "node-emoji": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz",
+ "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==",
+ "dev": true,
+ "requires": {
+ "lodash.toarray": "4.4.0"
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.4",
+ "request": "2.79.0",
+ "rimraf": "2.6.2",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "node.extend": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz",
+ "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=",
+ "dev": true,
+ "requires": {
+ "is": "3.2.1"
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "object-path": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
+ "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "1.0.1",
+ "array-slice": "1.1.0",
+ "for-own": "1.0.0",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "make-iterator": "1.0.0"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "openurl": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
+ "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=",
+ "dev": true
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "0.1.5",
+ "sequencify": "0.0.7",
+ "stream-consume": "0.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "1.0.0",
+ "map-cache": "0.2.2",
+ "path-root": "0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "0.1.2"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "portscanner": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
+ "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "is-number-like": "1.0.8"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz",
+ "integrity": "sha1-TESbTIr53zyvbTf44eV10DYXWNw=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "2.3.0",
+ "js-base64": "2.1.9",
+ "source-map": "0.4.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
+ "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
+ "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=",
+ "dev": true
+ }
+ }
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
+ },
+ "redeyed": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz",
+ "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=",
+ "dev": true,
+ "requires": {
+ "esprima": "3.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz",
+ "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=",
+ "dev": true
+ }
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.2.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "resp-modifier": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+ "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "minimatch": "3.0.4"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "2.4.1",
+ "source-map": "0.4.4"
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.2.tgz",
+ "integrity": "sha1-+R+rRAO8+H5xb3DOtdsvV4vcF9Y=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.4",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.0",
+ "http-errors": "1.6.2",
+ "mime": "1.3.4",
+ "ms": "1.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz",
+ "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.3"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
+ "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=",
+ "dev": true
+ }
+ }
+ },
+ "fresh": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
+ "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-1.0.0.tgz",
+ "integrity": "sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serve-index": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz",
+ "integrity": "sha1-fF2WwT+xMRAfk8HFd0+FFqHnjTs=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "batch": "0.5.3",
+ "debug": "2.2.0",
+ "escape-html": "1.0.3",
+ "http-errors": "1.5.1",
+ "mime-types": "2.1.17",
+ "parseurl": "1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.2.tgz",
+ "integrity": "sha1-5UbicmCBuBtLzsjpCAjrzdMjr7o=",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.15.2"
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=",
+ "dev": true
+ },
+ "shelljs": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz",
+ "integrity": "sha1-37vnjVbDwBaNL7eeEOzR28sH7A4=",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "engine.io": "3.1.5",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.0.4",
+ "socket.io-parser": "3.1.3"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.6",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.1.3",
+ "to-array": "0.1.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
+ "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "3.1.0",
+ "has-binary2": "1.0.2",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-throttle": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+ "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
+ "dev": true,
+ "requires": {
+ "commander": "2.13.0",
+ "limiter": "1.1.2"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-css-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-3.0.0.tgz",
+ "integrity": "sha1-elYl7/iisibPiUehElTaluE9rok=",
+ "dev": true,
+ "requires": {
+ "is-regexp": "1.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tfunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz",
+ "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "object-path": "0.9.2"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.12",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz",
+ "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=",
+ "dev": true
+ },
+ "uglify-save-license": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+ "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
+ "dev": true
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
+ "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true
+ },
+ "uws": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
+ "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
+ "dev": true,
+ "optional": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.4",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3",
+ "glob-stream": "3.1.18",
+ "glob-watcher": "0.0.6",
+ "graceful-fs": "3.0.11",
+ "mkdirp": "0.5.1",
+ "strip-bom": "1.0.0",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "1.1.2"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "is-utf8": "0.2.1"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz",
+ "integrity": "sha1-xfy9Q+LyOEI8LcmL3db3m3K8NFs=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.1.43"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "zlib-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.1.tgz",
+ "integrity": "sha1-T6akXQDbwV8xikr6HZr8Aljhdsw=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index 7bda3d31..61c5378e 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,53 @@
{
"name": "flipclock",
- "version": "0.7.8",
+ "version": "0.8.2",
"email": "support@objectivehtml.com",
"author": "Objective HTML, LLC ",
+ "contributors": [
+ "Objective HTML, LLC ",
+ "Brian Espinosa "
+ ],
+ "description": "A fully featured countdown clock.",
+ "keywords": [
+ "clock",
+ "countdown",
+ "time",
+ "javascript",
+ "html",
+ "css",
+ "sass",
+ "scss"
+ ],
"license": "MIT",
- "main": "compiled/flipclock.js",
+ "engines": {
+ "node": "^0.12.x",
+ "npm": "^2.1.x"
+ },
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.6.3",
"grunt-contrib-uglify": "~0.2.7",
- "grunt-contrib-watch": "^0.6.1"
+ "browser-sync": "^2.11.1",
+ "gulp": "^3.9.0",
+ "gulp-autoprefixer": "^2.3.1",
+ "gulp-concat": "^2.6.0",
+ "gulp-header": "^1.7.1",
+ "gulp-notify": "^2.2.0",
+ "gulp-rename": "^1.2.2",
+ "gulp-sass": "^2.0.x",
+ "gulp-sourcemaps": "^1.6.0",
+ "gulp-strip-css-comments": "^1.2.0",
+ "gulp-uglify": "^1.4.2"
},
+ "main": "dist/flipclock.js",
+ "homepage": "http://flipclockjs.com/",
"repository": {
"type": "git",
"url": "https://github.com/objectivehtml/FlipClock"
},
"bugs": {
- "url": "https://github.com/nodejitsu/browsenpm.org/issues"
+ "url": "https://github.com/objectivehtml/FlipClock/issues"
},
"dependencies": {
"jquery": ">=1.7"
diff --git a/src/flipclock/css/flipclock.css b/src/flipclock/css/flipclock.css
deleted file mode 100644
index 2914ce08..00000000
--- a/src/flipclock/css/flipclock.css
+++ /dev/null
@@ -1,431 +0,0 @@
-/* Get the bourbon mixin from http://bourbon.io */
-/* Reset */
-.flip-clock-wrapper * {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- -o-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- -o-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-
-.flip-clock-wrapper a {
- cursor: pointer;
- text-decoration: none;
- color: #ccc; }
-
-.flip-clock-wrapper a:hover {
- color: #fff; }
-
-.flip-clock-wrapper ul {
- list-style: none; }
-
-.flip-clock-wrapper.clearfix:before,
-.flip-clock-wrapper.clearfix:after {
- content: " ";
- display: table; }
-
-.flip-clock-wrapper.clearfix:after {
- clear: both; }
-
-.flip-clock-wrapper.clearfix {
- *zoom: 1; }
-
-/* Main */
-.flip-clock-wrapper {
- font: normal 11px "Helvetica Neue", Helvetica, sans-serif;
- -webkit-user-select: none; }
-
-.flip-clock-meridium {
- background: none !important;
- box-shadow: 0 0 0 !important;
- font-size: 36px !important; }
-
-.flip-clock-meridium a { color: #313333; }
-
-.flip-clock-wrapper {
- text-align: center;
- position: relative;
- width: 100%;
- margin: 1em;
-}
-
-.flip-clock-wrapper:before,
-.flip-clock-wrapper:after {
- content: " "; /* 1 */
- display: table; /* 2 */
-}
-.flip-clock-wrapper:after {
- clear: both;
-}
-
-/* Skeleton */
-.flip-clock-wrapper ul {
- position: relative;
- float: left;
- margin: 5px;
- width: 60px;
- height: 90px;
- font-size: 80px;
- font-weight: bold;
- line-height: 87px;
- border-radius: 6px;
- background: #000;
-}
-
-.flip-clock-wrapper ul li {
- z-index: 1;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- line-height: 87px;
- text-decoration: none !important;
-}
-
-.flip-clock-wrapper ul li:first-child {
- z-index: 2; }
-
-.flip-clock-wrapper ul li a {
- display: block;
- height: 100%;
- -webkit-perspective: 200px;
- -moz-perspective: 200px;
- perspective: 200px;
- margin: 0 !important;
- overflow: visible !important;
- cursor: default !important; }
-
-.flip-clock-wrapper ul li a div {
- z-index: 1;
- position: absolute;
- left: 0;
- width: 100%;
- height: 50%;
- font-size: 80px;
- overflow: hidden;
- outline: 1px solid transparent; }
-
-.flip-clock-wrapper ul li a div .shadow {
- position: absolute;
- width: 100%;
- height: 100%;
- z-index: 2; }
-
-.flip-clock-wrapper ul li a div.up {
- -webkit-transform-origin: 50% 100%;
- -moz-transform-origin: 50% 100%;
- -ms-transform-origin: 50% 100%;
- -o-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- top: 0; }
-
-.flip-clock-wrapper ul li a div.up:after {
- content: "";
- position: absolute;
- top: 44px;
- left: 0;
- z-index: 5;
- width: 100%;
- height: 3px;
- background-color: #000;
- background-color: rgba(0, 0, 0, 0.4); }
-
-.flip-clock-wrapper ul li a div.down {
- -webkit-transform-origin: 50% 0;
- -moz-transform-origin: 50% 0;
- -ms-transform-origin: 50% 0;
- -o-transform-origin: 50% 0;
- transform-origin: 50% 0;
- bottom: 0;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.flip-clock-wrapper ul li a div div.inn {
- position: absolute;
- left: 0;
- z-index: 1;
- width: 100%;
- height: 200%;
- color: #ccc;
- text-shadow: 0 1px 2px #000;
- text-align: center;
- background-color: #333;
- border-radius: 6px;
- font-size: 70px; }
-
-.flip-clock-wrapper ul li a div.up div.inn {
- top: 0; }
-
-.flip-clock-wrapper ul li a div.down div.inn {
- bottom: 0; }
-
-/* PLAY */
-.flip-clock-wrapper ul.play li.flip-clock-before {
- z-index: 3; }
-
-.flip-clock-wrapper .flip { box-shadow: 0 2px 5px rgba(0, 0, 0, 0.7); }
-
-.flip-clock-wrapper ul.play li.flip-clock-active {
- -webkit-animation: asd 0.5s 0.5s linear both;
- -moz-animation: asd 0.5s 0.5s linear both;
- animation: asd 0.5s 0.5s linear both;
- z-index: 5; }
-
-.flip-clock-divider {
- float: left;
- display: inline-block;
- position: relative;
- width: 20px;
- height: 100px; }
-
-.flip-clock-divider:first-child {
- width: 0; }
-
-.flip-clock-dot {
- display: block;
- background: #323434;
- width: 10px;
- height: 10px;
- position: absolute;
- border-radius: 50%;
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
- left: 5px; }
-
-.flip-clock-divider .flip-clock-label {
- position: absolute;
- top: -1.5em;
- right: -86px;
- color: black;
- text-shadow: none; }
-
-.flip-clock-divider.minutes .flip-clock-label {
- right: -88px; }
-
-.flip-clock-divider.seconds .flip-clock-label {
- right: -91px; }
-
-.flip-clock-dot.top {
- top: 30px; }
-
-.flip-clock-dot.bottom {
- bottom: 30px; }
-
-@-webkit-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@-moz-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@-o-keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-@keyframes asd {
- 0% {
- z-index: 2; }
-
- 20% {
- z-index: 4; }
-
- 100% {
- z-index: 4; } }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down {
- z-index: 2;
- -webkit-animation: turn 0.5s 0.5s linear both;
- -moz-animation: turn 0.5s 0.5s linear both;
- animation: turn 0.5s 0.5s linear both; }
-
-@-webkit-keyframes turn {
- 0% {
- -webkit-transform: rotateX(90deg); }
-
- 100% {
- -webkit-transform: rotateX(0deg); } }
-
-@-moz-keyframes turn {
- 0% {
- -moz-transform: rotateX(90deg); }
-
- 100% {
- -moz-transform: rotateX(0deg); } }
-
-@-o-keyframes turn {
- 0% {
- -o-transform: rotateX(90deg); }
-
- 100% {
- -o-transform: rotateX(0deg); } }
-
-@keyframes turn {
- 0% {
- transform: rotateX(90deg); }
-
- 100% {
- transform: rotateX(0deg); } }
-
-.flip-clock-wrapper ul.play li.flip-clock-before .up {
- z-index: 2;
- -webkit-animation: turn2 0.5s linear both;
- -moz-animation: turn2 0.5s linear both;
- animation: turn2 0.5s linear both; }
-
-@-webkit-keyframes turn2 {
- 0% {
- -webkit-transform: rotateX(0deg); }
-
- 100% {
- -webkit-transform: rotateX(-90deg); } }
-
-@-moz-keyframes turn2 {
- 0% {
- -moz-transform: rotateX(0deg); }
-
- 100% {
- -moz-transform: rotateX(-90deg); } }
-
-@-o-keyframes turn2 {
- 0% {
- -o-transform: rotateX(0deg); }
-
- 100% {
- -o-transform: rotateX(-90deg); } }
-
-@keyframes turn2 {
- 0% {
- transform: rotateX(0deg); }
-
- 100% {
- transform: rotateX(-90deg); } }
-
-.flip-clock-wrapper ul li.flip-clock-active {
- z-index: 3; }
-
-/* SHADOW */
-.flip-clock-wrapper ul.play li.flip-clock-before .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
- background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
- background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
- -webkit-animation: show 0.5s linear both;
- -moz-animation: show 0.5s linear both;
- animation: show 0.5s linear both; }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
- background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
- background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
- background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
- -webkit-animation: hide 0.5s 0.3s linear both;
- -moz-animation: hide 0.5s 0.3s linear both;
- animation: hide 0.5s 0.3s linear both; }
-
-/*DOWN*/
-.flip-clock-wrapper ul.play li.flip-clock-before .down .shadow {
- background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
- background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
- background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
- -webkit-animation: show 0.5s linear both;
- -moz-animation: show 0.5s linear both;
- animation: show 0.5s linear both; }
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down .shadow {
- background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
- background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
- background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
- background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
- -webkit-animation: hide 0.5s 0.3s linear both;
- -moz-animation: hide 0.5s 0.3s linear both;
- animation: hide 0.5s 0.2s linear both; }
-
-@-webkit-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-moz-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-o-keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@keyframes show {
- 0% {
- opacity: 0; }
-
- 100% {
- opacity: 1; } }
-
-@-webkit-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@-moz-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@-o-keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
-
-@keyframes hide {
- 0% {
- opacity: 1; }
-
- 100% {
- opacity: 0; } }
diff --git a/src/flipclock/css/flipclock.scss b/src/flipclock/css/flipclock.scss
deleted file mode 100644
index ddb89a55..00000000
--- a/src/flipclock/css/flipclock.scss
+++ /dev/null
@@ -1,315 +0,0 @@
-@import 'bourbon/bourbon';
-/* Get the bourbon mixin from http://bourbon.io */
-
-/* Reset */
-.flip-clock-wrapper * {
- margin: 0;
- padding: 0;
- line-height: normal;
- @include box-sizing(border-box);
-}
-
-.flip-clock-wrapper a {
- cursor: pointer;
- text-decoration: none;
- color: #ccc;
-}
-
-.flip-clock-wrapper a:hover {
- color: #fff;
-}
-
-.flip-clock-wrapper ul {
- list-style: none
-}
-
-.flip-clock-wrapper.clearfix:before,
-.flip-clock-wrapper.clearfix:after {
- content: " ";
- display: table;
-}
-
-.flip-clock-wrapper.clearfix:after {
- clear: both;
-}
-
-.flip-clock-wrapper.clearfix {
- *zoom: 1;
-}
-
-/* Main */
-
-.flip-clock-wrapper {
- min-height: 100%;
- font: normal 11px "Helvetica Neue", Helvetica, sans-serif;
- -webkit-user-select: none;
-}
-
-.flip-clock-meridium {
- background: none;
- box-shadow: 0 0 0 !important;
- font-size: 36px !important;
- color: rgb(49, 51, 51);
- bottom: 10px;
-}
-
-
-.flip-clock-wrapper {
- text-align: center;
- position: relative;
- width: 100%;
- margin: 1em;
-}
-
-/* Skeleton */
-
-.flip-clock-wrapper ul {
- position: relative;
- float: left;
- margin: 5px;
- width: 60px;
- height: 90px;
- font-size: 80px;
- font-weight: bold;
- line-height: 87px;
- border-radius: 6px_prefixed
- ;
- box-shadow: 0 2px 5px rgba(0, 0, 0, .7);
-}
-
-.flip-clock-wrapper ul li {
- z-index: 1;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- line-height: 87px;
-}
-
-.flip-clock-wrapper ul li:first-child {
- z-index: 2;
-}
-
-.flip-clock-wrapper ul li a {
- display: block;
- height: 100%;
- @include perspective(200px);
- margin: 0 !important;
- overflow: visible !important;
-}
-
-.flip-clock-wrapper ul li a div {
- z-index: 1;
- position: absolute;
- left: 0;
- width: 100%;
- height: 50%;
- overflow: hidden;
-}
-
-.flip-clock-wrapper ul li a div .shadow {
- position: absolute;
- width: 100%;
- height: 100%;
- z-index: 2;
-}
-
-.flip-clock-wrapper ul li a div.up {
- @include transform-origin(50% 100%);
- top: 0;
-}
-
-.flip-clock-wrapper ul li a div.up:after {
- content: "";
- position:absolute;
- top:44px;
- left:0;
- z-index: 5;
- width: 100%;
- height: 3px;
- background-color: #000;
- background-color: rgba(0,0,0,.4);
-}
-
-.flip-clock-wrapper ul li a div.down {
- @include transform-origin(50% 0);
- bottom: 0;
-}
-
-.flip-clock-wrapper ul li a div div.inn {
- position: absolute;
- left: 0;
- z-index: 1;
- width: 100%;
- height: 200%;
- color: #ccc;
- text-shadow: 0 1px 2px #000;
- text-align: center;
- background-color: #333;
- border-radius: 6px;
- font-size: 70px;
-}
-
-.flip-clock-wrapper ul li a div.up div.inn {
- top: 0;
-
-}
-
-.flip-clock-wrapper ul li a div.down div.inn {
- bottom: 0;
-}
-
-/* PLAY */
-
-.flip-clock-wrapper ul.play li.flip-clock-before {
- z-index: 3;
-}
-
-.flip-clock-wrapper ul.play li.flip-clock-active {
- @include animation(asd .5s .5s linear both);
- z-index: 2;
-}
-
-.flip-clock-divider {
- float: left;
- display: inline-block;
- position: relative;
- width: 20px;
- height: 100px;
-}
-
-.flip-clock-divider:first-child { width: 0; }
-
-.flip-clock-dot {
- display: block;
- background: rgb(50, 52, 52);
- width: 10px;
- height: 10px;
- position: absolute;
- border-radius: 50%;
- box-shadow: 0 0 5px rgba(0, 0, 0, .5);
-}
-
-.flip-clock-divider .flip-clock-label {
- position: absolute;
- top: -1.5em;
- right: -86px;
- color: black;
- text-shadow: none;
-}
-
-.flip-clock-divider.minutes .flip-clock-label { right: -88px; }
-.flip-clock-divider.seconds .flip-clock-label { right: -91px; }
-
-.flip-clock-dot.top {
- top: 30px;
-}
-
-.flip-clock-dot.bottom {
- bottom: 30px;
-}
-
-@include keyframes(asd) {
- 0% {
- z-index:2;
- }
- 20% {
- z-index:4;
- }
- 100% {
- z-index:4;
- }
-}
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down {
- z-index: 2;
- @include animation(turn .5s .5s linear both);
-}
-
-@include keyframes(turn) {
- 0% {
- @include transform(rotateX(90deg));
- }
- 100% {
- @include transform(rotateX(0deg));
- }
-}
-
-.flip-clock-wrapper ul.play li.flip-clock-before .up {
- z-index: 2;
- @include animation(turn2 .5s linear both);
-}
-
-@include keyframes(turn2) {
- 0% {
- @include transform(rotateX(0deg));
- }
- 100% {
- @include transform(rotateX(-90deg));
- }
-}
-
-.flip-clock-wrapper ul li.flip-clock-active { z-index: 3; }
-
-/* SHADOW */
-
-.flip-clock-wrapper ul.play li.flip-clock-before .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, .1)), color-stop(100%, rgba(0, 0, 0, 1)));
- background: linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -o-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: linear-gradient(to bottom, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- @include animation(show .5s linear both);
-}
-
-.flip-clock-wrapper ul.play li.flip-clock-active .up .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, .1)), color-stop(100%, rgba(0, 0, 0, 1)));
- background: linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -o-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- background: linear-gradient(to bottom, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, 1) 100%);
- @include animation(hide .5s .3s linear both);
-}
-
-/*DOWN*/
-
-.flip-clock-wrapper ul.play li.flip-clock-before .down .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 1)), color-stop(100%, rgba(0, 0, 0, .1)));
- background: linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -o-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- @include animation(show .5s linear both);
-}
-
-.flip-clock-wrapper ul.play li.flip-clock-active .down .shadow {
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 1)), color-stop(100%, rgba(0, 0, 0, .1)));
- background: linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -o-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: -ms-linear-gradient(top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- background: linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .1) 100%);
- @include animation(hide .5s .3s linear both);
-}
-
-@include keyframes(show) {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
-
-@include keyframes(hide) {
- 0% {
- opacity: 1;
- }
- 100% {
- opacity: 0;
- }
-}
\ No newline at end of file
diff --git a/src/flipclock/js/faces/CounterFace.js b/src/flipclock/js/faces/CounterFace.js
new file mode 100644
index 00000000..35a56cf7
--- /dev/null
+++ b/src/flipclock/js/faces/CounterFace.js
@@ -0,0 +1,90 @@
+(function($) {
+
+ /**
+ * Counter Clock Face
+ *
+ * This class will generate a generice flip counter. The timer has been
+ * disabled. clock.increment() and clock.decrement() have been added.
+ */
+
+ FlipClock.CounterFace = FlipClock.Face.extend({
+
+ /**
+ * Constructor
+ *
+ * @param object The parent FlipClock.Factory object
+ * @param object An object of properties to override the default
+ * @return
+ */
+
+ constructor: function(value, options) {
+ this.base(value, options);
+
+ this.timer.off('stop');
+
+ this.on('create:list', function(list) {
+ list.addPlayClass();
+ });
+ },
+
+ /**
+ * Build the clock face
+ *
+ * @return
+ */
+
+ build: function() {
+ var t = this, time = this.getTime().digitize([this.getTime().time]);
+
+ for(var i in time) {
+ t.createList(time[i]);
+ }
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ *
+ * @return
+ */
+
+ flip: function(time) {
+ if(this.getOption('autoStart')) {
+ this.autoIncrement();
+ }
+
+ if(!time) {
+ time = this.getTime().digitize([this.getTime().time]);
+ }
+
+ this.base(time);
+ },
+
+ /**
+ * Perform arbirtrary logic when the clock face instantiated.
+ * The factor object is passed in the first argument
+ *
+ * @param object
+ * @return
+ */
+
+ init: function(factory) {
+ var t = this;
+
+ factory.increment = function() {
+ t.increment();
+ t.flip();
+ };
+
+ factory.decrement = function() {
+ t.decrement();
+ t.flip();
+ };
+
+ this.base(factory);
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/DailyCounterFace.js b/src/flipclock/js/faces/DailyCounterFace.js
new file mode 100644
index 00000000..71ceb804
--- /dev/null
+++ b/src/flipclock/js/faces/DailyCounterFace.js
@@ -0,0 +1,57 @@
+(function($) {
+
+ /**
+ * Daily Counter Clock Face
+ *
+ * This class will generate a daily counter for FlipClock.js. A
+ * daily counter will track days, hours, minutes, and seconds. If
+ * the number of available digits is exceeded in the count, a new
+ * digit will be created.
+ */
+
+ FlipClock.DailyCounterFace = FlipClock.Face.extend({
+
+ /**
+ * Build the clock face
+ */
+
+ build: function() {
+ var offset = 0;
+
+ var time = this.time.getDayCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds')) {
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ }
+ else
+ {
+ offset = 2;
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[this.lists.length - 4 + offset].$el);
+ this.createDivider('Hours').$el.insertBefore(this.lists[this.lists.length - 6 + offset].$el);
+ this.createDivider('Days', true).$el.insertBefore(this.lists[0].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+ flip: function(time) {
+ if(!time) {
+ time = this.time.getDayCounter(this.getOption('showSeconds'));
+ }
+
+ this.base(time);
+ this.autoIncrement();
+ },
+
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/EnglishAlphabetFace.js b/src/flipclock/js/faces/EnglishAlphabetFace.js
new file mode 100644
index 00000000..0a484846
--- /dev/null
+++ b/src/flipclock/js/faces/EnglishAlphabetFace.js
@@ -0,0 +1,150 @@
+(function($) {
+
+ /**
+ * English Alphabet Clock Face
+ *
+ */
+
+ FlipClock.EnglishAlphabetFace = FlipClock.Face.extend({
+
+ _autoIncrementValues: [],
+
+ /**
+ * Tells the clock face if it should auto-increment
+ */
+
+ // shouldAutoIncrement: false,
+
+ /**
+ * Tells the clock face if it should use capital letters
+ */
+
+ capitalLetters: true,
+
+ getDefaultOptions: function() {
+ var options = this.base();
+
+ options.capitalLetters = true;
+
+ return options;
+ },
+
+ init: function(factory) {
+ this.base(factory);
+
+ if(!this.value) {
+ this.value = this.getListObject(this.value).value;
+ }
+ },
+
+ build: function() {
+ var values = this.value.split('');
+
+ /*
+ for(var x = values.length + 1; x <= this.getOption('minimumDigits'); x++) {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ */
+
+ for(var i in values) {
+ this.createList(values[i]);
+ }
+
+ for(var x in this.lists) {
+ this._autoIncrementValues.unshift(this.lists[x].getCharCode());
+ }
+
+ this.base();
+ },
+
+ increment: function() {
+ var flip = true, i = 0, values = this.value.split('');
+
+ while (flip)
+ {
+ flip = false;
+
+ var value = this._autoIncrementValues[i];
+ var list = this.lists[this.lists.length - i - 1];
+
+ if(list) {
+ values[this.value.length - i - 1] = list.getNextValue();
+
+ if(list.getCharCode() >= list.getMaxCharCode()) {
+ flip = true;
+ i++;
+ }
+ }
+ else {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ }
+
+ this.value = values.join('');
+ },
+
+ decrement: function() {
+ var flip = true, i = 0, values = this.value.split('');
+
+ while (flip)
+ {
+ flip = false;
+
+ var value = this._autoIncrementValues[i];
+ var list = this.lists[this.lists.length - i - 1];
+
+ if(list) {
+ values[this.value.length - i - 1] = list.getPrevValue();
+
+ if(list.getCharCode() <= list.getMinCharCode()) {
+ flip = true;
+ i++;
+ }
+ }
+ else {
+ values.unshift(String.fromCharCode(this.getListObject(false).getMinCharCode()));
+ }
+ }
+
+ this.value = values.join('');
+ },
+
+ flip: function() {
+ /*
+ if(this.shouldAutoIncrement) {
+ this.autoIncrement();
+ }
+ */
+
+ this.autoIncrement();
+ this.base(this.value.split(''));
+ },
+
+ /*
+ * Get the list class object
+ *
+ * @return object
+ */
+
+ getListClass: function() {
+ return FlipClock.EnglishAlphaList;
+ },
+
+ /*
+ * Get a new list class instance
+ *
+ * @return object
+ */
+
+ getListObject: function(value) {
+ var List = this.getListClass();
+
+ return new List(value, {
+ capitalLetters: this.capitalLetters,
+ translator: this.translator
+ });
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/HourlyCounterFace.js b/src/flipclock/js/faces/HourlyCounterFace.js
new file mode 100644
index 00000000..c437444d
--- /dev/null
+++ b/src/flipclock/js/faces/HourlyCounterFace.js
@@ -0,0 +1,75 @@
+(function($) {
+
+ /**
+ * Hourly Counter Clock Face
+ *
+ * This class will generate an hourly counter for FlipClock.js. An
+ * hour counter will track hours, minutes, and seconds. If number of
+ * available digits is exceeded in the count, a new digit will be
+ * created.
+ */
+
+ FlipClock.HourlyCounterFace = FlipClock.Face.extend({
+
+ /**
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.base(value, options);
+
+ if(this.getOption('showSeconds') === null) {
+ this.setOption('showSeconds', true);
+ }
+ },
+
+ /**
+ * Build the clock face
+ */
+
+ build: function(time) {
+ var offset = 0, time = time ? time : this.time.getHourCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds') === true) {
+ offset = 2;
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - offset].$el);
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[this.lists.length - 2 - offset].$el);
+ this.createDivider('Hours', true).$el.insertBefore(this.lists[0].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function(time) {
+ if(!time) {
+ time = this.time.getHourCounter(this.getOption('showSeconds'));
+ }
+
+ this.base(time);
+ this.autoIncrement();
+ },
+
+ /**
+ * Append a newly created list to the clock
+ */
+
+ appendDigitToClock: function(obj) {
+ this.base(obj);
+ this.dividers[0].insertAfter(this.dividers[0].next());
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/MinuteCounterFace.js b/src/flipclock/js/faces/MinuteCounterFace.js
new file mode 100644
index 00000000..f4002c2c
--- /dev/null
+++ b/src/flipclock/js/faces/MinuteCounterFace.js
@@ -0,0 +1,45 @@
+(function($) {
+
+ /**
+ * Minute Counter Clock Face
+ *
+ * This class will generate a minute counter for FlipClock.js. A
+ * minute counter will track minutes and seconds. If an hour is
+ * reached, the counter will reset back to 0. (4 digits max)
+ */
+
+ FlipClock.MinuteCounterFace = FlipClock.HourlyCounterFace.extend({
+
+ /**
+ * Build the clock face
+ *
+ * @return
+ */
+
+ build: function() {
+ var time = this.time.getMinuteCounter(this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ if(this.getOption('showSeconds')) {
+ this.createDivider('Seconds').$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ }
+
+ this.createDivider('Minutes').$el.insertBefore(this.lists[0].$el);
+
+ return FlipClock.Face.prototype.build.call(this);
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function() {
+ this.base(this.time.getMinuteCounter(this.getOption('showSeconds')));
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/twelvehourclock.js b/src/flipclock/js/faces/TwelveHourClockFace.js
similarity index 65%
rename from src/flipclock/js/faces/twelvehourclock.js
rename to src/flipclock/js/faces/TwelveHourClockFace.js
index 9a5c260d..ea747926 100644
--- a/src/flipclock/js/faces/twelvehourclock.js
+++ b/src/flipclock/js/faces/TwelveHourClockFace.js
@@ -4,9 +4,6 @@
* Twelve Hour Clock Face
*
* This class will generate a twelve hour clock for FlipClock.js
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
*/
FlipClock.TwelveHourClockFace = FlipClock.TwentyFourHourClockFace.extend({
@@ -15,14 +12,14 @@
* The meridium jQuery DOM object
*/
- meridium: false,
+ $meridium: false,
/**
* The meridium text as string for easy access
*/
meridiumText: 'AM',
-
+
/**
* Build the clock face
*
@@ -30,33 +27,34 @@
*/
build: function() {
- var t = this;
-
- var time = this.factory.time.getTime(false, this.showSeconds);
+ var t = this, time = this.time.getTime(false, this.getOption('showSeconds'));
+
+ this.meridiumText = this.getMeridium();
- this.base(time);
- this.meridiumText = this.getMeridium();
- this.meridium = $([
- '',
+ this.$meridium = $([
+ ''
].join(''));
+
+ this.base(time);
- this.meridium.insertAfter(this.lists[this.lists.length-1].$el);
+ this.$meridium.insertAfter(this.lists[this.lists.length-1].$el);
},
/**
* Flip the clock face
*/
- flip: function(time, doNotAddPlayClass) {
+ flip: function(time) {
if(this.meridiumText != this.getMeridium()) {
this.meridiumText = this.getMeridium();
- this.meridium.find('a').html(this.meridiumText);
+ this.$meridium.find('a').html(this.meridiumText);
}
- this.base(this.factory.time.getTime(false, this.showSeconds), doNotAddPlayClass);
+
+ this.base(this.time.getTime(false, this.getOption('showSeconds')));
},
/**
@@ -66,7 +64,7 @@
*/
getMeridium: function() {
- return new Date().getHours() >= 12 ? 'PM' : 'AM';
+ return new Date().getHours() >= 12 ? this.t('PM') : this.t('AM');
},
/**
diff --git a/src/flipclock/js/faces/TwentyFourHourClockFace.js b/src/flipclock/js/faces/TwentyFourHourClockFace.js
new file mode 100644
index 00000000..8235b577
--- /dev/null
+++ b/src/flipclock/js/faces/TwentyFourHourClockFace.js
@@ -0,0 +1,44 @@
+(function($) {
+
+ /**
+ * Twenty-Four Hour Clock Face
+ *
+ * This class will generate a twenty-four our clock for FlipClock.js
+ */
+
+ FlipClock.TwentyFourHourClockFace = FlipClock.Face.extend({
+
+ /**
+ * Build the clock face
+ *
+ * @param object Pass the time that should be used to display on the clock.
+ */
+
+ build: function(time) {
+ var time = time ? time : this.time.getMilitaryTime(false, this.getOption('showSeconds'));
+
+ for(var i in time) {
+ this.createList(time[i]);
+ }
+
+ this.createDivider().$el.insertBefore(this.lists[this.lists.length - 2].$el);
+ this.createDivider().$el.insertBefore(this.lists[this.lists.length - 4].$el);
+
+ this.base();
+ },
+
+ /**
+ * Flip the clock face
+ */
+
+ flip: function(time, doNotAddPlayClass) {
+ this.autoIncrement();
+
+ time = time ? time : this.time.getMilitaryTime(false, this.getOption('showSeconds'));
+
+ this.base(time);
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/counter.js b/src/flipclock/js/faces/counter.js
deleted file mode 100644
index aea72886..00000000
--- a/src/flipclock/js/faces/counter.js
+++ /dev/null
@@ -1,119 +0,0 @@
-(function($) {
-
- /**
- * Counter Clock Face
- *
- * This class will generate a generice flip counter. The timer has been
- * disabled. clock.increment() and clock.decrement() have been added.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.CounterFace = FlipClock.Face.extend({
-
- /**
- * Tells the counter clock face if it should auto-increment
- */
-
- shouldAutoIncrement: false,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
-
- if(typeof options != "object") {
- options = {};
- }
-
- factory.autoStart = options.autoStart ? true : false;
-
- if(options.autoStart) {
- this.shouldAutoIncrement = true;
- }
-
- factory.increment = function() {
- factory.countdown = false;
- factory.setTime(factory.getTime().getTimeSeconds() + 1);
- };
-
- factory.decrement = function() {
- factory.countdown = true;
- var time = factory.getTime().getTimeSeconds();
- if(time > 0) {
- factory.setTime(time - 1);
- }
- };
-
- factory.setValue = function(digits) {
- factory.setTime(digits);
- };
-
- factory.setCounter = function(digits) {
- factory.setTime(digits);
- };
-
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- var t = this;
- var children = this.factory.$el.find('ul');
- var time = this.factory.getTime().digitize([this.factory.getTime().time]);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- var list = t.createList(digit);
-
- list.select(digit);
- });
-
- }
-
- $.each(this.lists, function(i, list) {
- list.play();
- });
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(this.shouldAutoIncrement) {
- this.autoIncrement();
- }
-
- if(!time) {
- time = this.factory.getTime().digitize([this.factory.getTime().time]);
- }
-
- this.base(time, doNotAddPlayClass);
- },
-
- /**
- * Reset the clock face
- */
-
- reset: function() {
- this.factory.time = new FlipClock.Time(
- this.factory,
- this.factory.original ? Math.round(this.factory.original) : 0
- );
-
- this.flip();
- }
- });
-
-}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/dailycounter.js b/src/flipclock/js/faces/dailycounter.js
deleted file mode 100644
index 11395670..00000000
--- a/src/flipclock/js/faces/dailycounter.js
+++ /dev/null
@@ -1,78 +0,0 @@
-(function($) {
-
- /**
- * Daily Counter Clock Face
- *
- * This class will generate a daily counter for FlipClock.js. A
- * daily counter will track days, hours, minutes, and seconds. If
- * the number of available digits is exceeded in the count, a new
- * digit will be created.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.DailyCounterFace = FlipClock.Face.extend({
-
- showSeconds: true,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function(time) {
- var t = this;
- var children = this.factory.$el.find('ul');
- var offset = 0;
-
- time = time ? time : this.factory.time.getDayCounter(this.showSeconds);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- if(this.showSeconds) {
- $(this.createDivider('Seconds')).insertBefore(this.lists[this.lists.length - 2].$el);
- }
- else
- {
- offset = 2;
- }
-
- $(this.createDivider('Minutes')).insertBefore(this.lists[this.lists.length - 4 + offset].$el);
- $(this.createDivider('Hours')).insertBefore(this.lists[this.lists.length - 6 + offset].$el);
- $(this.createDivider('Days', true)).insertBefore(this.lists[0].$el);
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getDayCounter(this.showSeconds);
- }
-
- this.autoIncrement();
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/hourlycounter.js b/src/flipclock/js/faces/hourlycounter.js
deleted file mode 100644
index b348b8f1..00000000
--- a/src/flipclock/js/faces/hourlycounter.js
+++ /dev/null
@@ -1,82 +0,0 @@
-(function($) {
-
- /**
- * Hourly Counter Clock Face
- *
- * This class will generate an hourly counter for FlipClock.js. An
- * hour counter will track hours, minutes, and seconds. If number of
- * available digits is exceeded in the count, a new digit will be
- * created.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.HourlyCounterFace = FlipClock.Face.extend({
-
- // clearExcessDigits: true,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function(excludeHours, time) {
- var t = this;
- var children = this.factory.$el.find('ul');
-
- time = time ? time : this.factory.time.getHourCounter();
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- $(this.createDivider('Seconds')).insertBefore(this.lists[this.lists.length - 2].$el);
- $(this.createDivider('Minutes')).insertBefore(this.lists[this.lists.length - 4].$el);
-
- if(!excludeHours) {
- $(this.createDivider('Hours', true)).insertBefore(this.lists[0].$el);
- }
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getHourCounter();
- }
-
- this.autoIncrement();
-
- this.base(time, doNotAddPlayClass);
- },
-
- /**
- * Append a newly created list to the clock
- */
-
- appendDigitToClock: function(obj) {
- this.base(obj);
-
- this.dividers[0].insertAfter(this.dividers[0].next());
- }
-
- });
-
-}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/minutecounter.js b/src/flipclock/js/faces/minutecounter.js
deleted file mode 100644
index ba14684f..00000000
--- a/src/flipclock/js/faces/minutecounter.js
+++ /dev/null
@@ -1,51 +0,0 @@
-(function($) {
-
- /**
- * Minute Counter Clock Face
- *
- * This class will generate a minute counter for FlipClock.js. A
- * minute counter will track minutes and seconds. If an hour is
- * reached, the counter will reset back to 0. (4 digits max)
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.MinuteCounterFace = FlipClock.HourlyCounterFace.extend({
-
- clearExcessDigits: false,
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- this.base(true, this.factory.time.getMinuteCounter());
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- if(!time) {
- time = this.factory.time.getMinuteCounter();
- }
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/faces/twentyfourhourclock.js b/src/flipclock/js/faces/twentyfourhourclock.js
deleted file mode 100644
index 29090cad..00000000
--- a/src/flipclock/js/faces/twentyfourhourclock.js
+++ /dev/null
@@ -1,72 +0,0 @@
-(function($) {
-
- /**
- * Twenty-Four Hour Clock Face
- *
- * This class will generate a twenty-four our clock for FlipClock.js
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.TwentyFourHourClockFace = FlipClock.Face.extend({
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.base(factory, options);
- },
-
- /**
- * Build the clock face
- *
- * @param object Pass the time that should be used to display on the clock.
- */
-
- build: function(time) {
- var t = this;
- var children = this.factory.$el.find('ul');
-
- if(!this.factory.time.time) {
- this.factory.original = new Date();
-
- this.factory.time = new FlipClock.Time(this.factory, this.factory.original);
- }
-
- var time = time ? time : this.factory.time.getMilitaryTime(false, this.showSeconds);
-
- if(time.length > children.length) {
- $.each(time, function(i, digit) {
- t.createList(digit);
- });
- }
-
- this.createDivider();
- this.createDivider();
-
- $(this.dividers[0]).insertBefore(this.lists[this.lists.length - 2].$el);
- $(this.dividers[1]).insertBefore(this.lists[this.lists.length - 4].$el);
-
- this.base();
- },
-
- /**
- * Flip the clock face
- */
-
- flip: function(time, doNotAddPlayClass) {
- this.autoIncrement();
-
- time = time ? time : this.factory.time.getMilitaryTime(false, this.showSeconds);
-
- this.base(time, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/lang/cs-cz.js b/src/flipclock/js/lang/cs-cz.js
index e9248608..3f1aa0a6 100644
--- a/src/flipclock/js/lang/cs-cz.js
+++ b/src/flipclock/js/lang/cs-cz.js
@@ -20,8 +20,10 @@
/* Create various aliases for convenience */
- FlipClock.Lang['cs'] = FlipClock.Lang.Czech;
- FlipClock.Lang['cs-cz'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cs'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cs-cz'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cz'] = FlipClock.Lang.Czech;
+ FlipClock.Lang['cz-cs'] = FlipClock.Lang.Czech;
FlipClock.Lang['czech'] = FlipClock.Lang.Czech;
}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/lang/cz-cs.js b/src/flipclock/js/lang/cz-cs.js
deleted file mode 100644
index 70ccb05f..00000000
--- a/src/flipclock/js/lang/cz-cs.js
+++ /dev/null
@@ -1,27 +0,0 @@
-(function($) {
-
- /**
- * FlipClock Czech Language Pack
- *
- * This class will used to translate tokens into the Czech language.
- *
- */
-
- FlipClock.Lang.Czech = {
-
- 'years' : 'Roky',
- 'months' : 'Měsíce',
- 'days' : 'Dny',
- 'hours' : 'Hodiny',
- 'minutes' : 'Minuty',
- 'seconds' : 'Sekundy'
-
- };
-
- /* Create various aliases for convenience */
-
- FlipClock.Lang['cz'] = FlipClock.Lang.Czech;
- FlipClock.Lang['cz-cs'] = FlipClock.Lang.Czech;
- FlipClock.Lang['czech'] = FlipClock.Lang.Czech;
-
-}(jQuery));
diff --git a/src/flipclock/js/lang/he-il.js b/src/flipclock/js/lang/he-il.js
new file mode 100644
index 00000000..79b6b6e2
--- /dev/null
+++ b/src/flipclock/js/lang/he-il.js
@@ -0,0 +1,25 @@
+(function($) {
+
+ /**
+ FlipClock Hebrew Language Pack *
+ This class will used to translate tokens into the Hebrew language. *
+ Laurent HADJADJ - 10/09/2015
+ */
+
+ FlipClock.Lang.Hebrew = {
+ 'years' : 'שנים',
+ 'months' : 'חודש',
+ 'days' : 'ימים',
+ 'hours' : 'שעות',
+ 'minutes' : 'דקות',
+ 'seconds' : 'שניות'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['il'] = FlipClock.Lang.Hebrew;
+ FlipClock.Lang['he-il'] = FlipClock.Lang.Hebrew;
+ FlipClock.Lang['hebrew'] = FlipClock.Lang.Hebrew;
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/lang/hu-hu.js b/src/flipclock/js/lang/hu-hu.js
index d8b7ebc5..15b9bd1c 100644
--- a/src/flipclock/js/lang/hu-hu.js
+++ b/src/flipclock/js/lang/hu-hu.js
@@ -7,21 +7,19 @@
*
*/
- FlipClock.Lang.German = {
-
- 'years' : 'év',
- 'months' : 'hónap',
- 'days' : 'nap',
- 'hours' : 'óra',
- 'minutes' : 'perc',
- 'seconds' : 'másodperc'
-
+ FlipClock.Lang.Hungarian = {
+ 'years' : 'Év',
+ 'months' : 'Hónap',
+ 'days' : 'Nap',
+ 'hours' : 'Óra',
+ 'minutes' : 'Perc',
+ 'seconds' : 'Másodperc'
};
/* Create various aliases for convenience */
- FlipClock.Lang['hu'] = FlipClock.Lang.German;
- FlipClock.Lang['hu-hu] = FlipClock.Lang.German;
- FlipClock.Lang['hungarian'] = FlipClock.Lang.German;
+ FlipClock.Lang['hu'] = FlipClock.Lang.Hungarian;
+ FlipClock.Lang['hu-hu'] = FlipClock.Lang.Hungarian;
+ FlipClock.Lang['hungarian'] = FlipClock.Lang.Hungarian;
}(jQuery));
diff --git a/src/flipclock/js/lang/pl-pl.js b/src/flipclock/js/lang/pl-pl.js
new file mode 100644
index 00000000..d9a2ad98
--- /dev/null
+++ b/src/flipclock/js/lang/pl-pl.js
@@ -0,0 +1,27 @@
+(function($) {
+
+ /**
+ * FlipClock Polish Language Pack
+ *
+ * This class will used to translate tokens into the Polish language.
+ *
+ */
+
+ FlipClock.Lang.Polish = {
+
+ 'years' : 'lat',
+ 'months' : 'miesięcy',
+ 'days' : 'dni',
+ 'hours' : 'godzin',
+ 'minutes' : 'minut',
+ 'seconds' : 'sekund'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['pl'] = FlipClock.Lang.Polish;
+ FlipClock.Lang['pl-pl'] = FlipClock.Lang.Polish;
+ FlipClock.Lang['polish'] = FlipClock.Lang.Polish;
+
+}(jQuery));
diff --git a/src/flipclock/js/lang/ua-ua.js b/src/flipclock/js/lang/ua-ua.js
new file mode 100644
index 00000000..9f461b2c
--- /dev/null
+++ b/src/flipclock/js/lang/ua-ua.js
@@ -0,0 +1,27 @@
+(function($) {
+
+ /**
+ * FlipClock Russian Language Pack
+ *
+ * This class will used to translate tokens into the Russian language.
+ *
+ */
+
+ FlipClock.Lang.Ukrainian = {
+
+ 'years' : 'роки',
+ 'months' : 'місяці',
+ 'days' : 'дні',
+ 'hours' : 'години',
+ 'minutes' : 'хвилини',
+ 'seconds' : 'секунди'
+
+ };
+
+ /* Create various aliases for convenience */
+
+ FlipClock.Lang['ua'] = FlipClock.Lang.Ukrainian;
+ FlipClock.Lang['ua-ua'] = FlipClock.Lang.Ukrainian;
+ FlipClock.Lang['ukraine'] = FlipClock.Lang.Ukrainian;
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Base.js b/src/flipclock/js/libs/Base.js
new file mode 100644
index 00000000..14572568
--- /dev/null
+++ b/src/flipclock/js/libs/Base.js
@@ -0,0 +1,308 @@
+/*jshint smarttabs:true */
+
+var FlipClock;
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * FlipFlock Helper
+ *
+ * @param {object} obj - A jQuery object or CSS select
+ * @param {int} digit - An integer used to start the clock (no. seconds)
+ * @param {object} options - An object of properties to override the default
+ */
+
+ FlipClock = function(obj, digit, options) {
+ if(digit instanceof Object && digit instanceof Date === false) {
+ options = digit;
+ digit = 0;
+ }
+
+ return new FlipClock.Factory(obj, digit, options);
+ };
+
+ /**
+ * The global FlipClock.Lang object
+ */
+
+ FlipClock.Lang = {};
+
+ /**
+ * The Base FlipClock class is used to extend all other FlipFlock
+ * classes. It handles the callbacks and the basic setters/getters
+ */
+
+ FlipClock.Base = Base.extend({
+
+ /**
+ * @param {string} buildDate - The last official build date
+ */
+
+ buildDate: '2016-04-01',
+
+ /**
+ * @param {string} version - The current version
+ */
+
+ version: '1.0.0',
+
+ /**
+ * @param {object} options - The available options for this class
+ */
+
+ options: {},
+
+ /**
+ * @param {object} _events - The bound events to this object
+ */
+
+ _events: {},
+
+ /**
+ * @param {object} _uid - The Flipclock.Uuid object instance
+ */
+
+ _uid: false,
+
+ /**
+ * Sets the default options
+ *
+ * @param {mixed} options - The default options
+ */
+
+ constructor: function(options) {
+ if(typeof options !== "object") {
+ options = {};
+ }
+ this._events = {};
+ this._uid = (new FlipClock.Uuid()).toString();
+ this.options = this.getDefaultOptions();
+ this.setOptions(options);
+ },
+
+ /**
+ * Delegates the callback to the defined method
+ *
+ * @param {function} method - The callback function
+ * @return object
+ */
+
+ callback: function(method) {
+ if(typeof method === "function") {
+ var args = [];
+
+ for(var x = 1; x <= arguments.length; x++) {
+ if(arguments[x]) {
+ args.push(arguments[x]);
+ }
+ }
+
+ method.apply(this, args);
+ }
+
+ return this;
+ },
+
+ /**
+ * Log a string into the console if it exists
+ *
+ * @param {string} str - The string to log
+ * @return mixed
+ */
+
+ log: function(str) {
+ if(window.console && console.log) {
+ console.log(str);
+ }
+
+ return this;
+ },
+
+ /**
+ * Get an single option value. Returns false if option does not exist
+ *
+ * @param {string} index - The name of the option
+ * @return mixed
+ */
+
+ getOption: function(index) {
+ if(this.options.hasOwnProperty(index)) {
+ return this.options[index];
+ }
+ return null;
+ },
+
+ /**
+ * Get all options
+ *
+ * @return bool
+ */
+
+ getOptions: function() {
+ return this.options;
+ },
+
+ /**
+ * Set a single option value
+ *
+ * @param {string} index - The name of the option
+ * @param {string} value - The value of the option
+ * @return object
+ */
+
+ setOption: function(index, value) {
+ if( this.hasOwnProperty(index) ||
+ typeof this[index] === "function" ||
+ index in this
+ ) {
+ this[index] = value;
+ }
+ else {
+ this.options[index] = value;
+ }
+
+ return this;
+ },
+
+ /**
+ * Set a multiple options by passing a JSON object
+ *
+ * @param {object} options - An object of options to set
+ * @return object
+ */
+
+ setOptions: function(options) {
+ for(var key in options) {
+ if(typeof options[key] !== "undefined") {
+ this.setOption(key, options[key]);
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {};
+ },
+
+ /*
+ * Bind an event
+ *
+ * @param {string} name - The name of the event
+ * @param {function} callback - The event callback function or method
+ * @return object
+ */
+
+ on: function(name, callback) {
+ if(!this._events[name]) {
+ this._events[name] = [];
+ }
+
+ var event = new FlipClock.Event(name, callback);
+
+ this._events[name].push(event);
+
+ return event;
+ },
+
+ /*
+ * Bind an event to be called once
+ *
+ * @param {string} name - The name of the event
+ * @param {function} callback - The event callback function or method
+ * @return object
+ */
+
+ once: function(name, callback) {
+ var event = this.on(name, callback);
+
+ event.setFireOnce(true);
+
+ return event;
+ },
+
+ /*
+ * Remove all bound events for a specific trigger
+ *
+ * @param {string} name - The name of the event
+ * @return object
+ */
+
+ off: function(name) {
+ if(this._events[name]) {
+ delete this._events[name];
+ }
+
+ return this;
+ },
+
+ /*
+ * Remove all bound events for a specific trigger
+ *
+ * @param {string} name - The name of the event
+ * @return object
+ */
+
+ trigger: function(name) {
+ if(this._events[name]) {
+ var params = [];
+
+ for(var x in arguments) {
+ if(x > 0) {
+ params.push(arguments[x]);
+ }
+ }
+
+ for(var i in this._events[name]) {
+ this._events[name][i].fire(this, params);
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Translate a string to the localized locale
+ *
+ * @param {string} name - The name of the string to localize
+ * @return string
+ */
+
+ localize: function(name) {
+ if(this.translator) {
+ return this.translator.localize(name);
+ }
+
+ return name;
+ },
+
+ /*
+ * Helper method for localize. t() is just short.
+ *
+ * @param {string} name - The name of the string to localize
+ * @return string
+ */
+
+ t: function(name) {
+ return this.localize(name);
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Divider.js b/src/flipclock/js/libs/Divider.js
new file mode 100644
index 00000000..5840afb6
--- /dev/null
+++ b/src/flipclock/js/libs/Divider.js
@@ -0,0 +1,111 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /*
+ * The FlipClock.Divider class makes visual dividers on clocks
+ * easy to create and manipulate.
+ */
+
+ FlipClock.Divider = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The FlipClock.Translator instance
+ */
+
+ translator: false,
+
+ /*
+ * Constructor
+ *
+ * @param mixed options
+ */
+
+ constructor: function(options) {
+ this.base(options);
+
+ // Translate the label
+ if(this.getOption('label')) {
+ this.setOption('label', this.t(this.getOption('label')));
+ }
+
+ var dots = !this.getOption('excludeDots') ? [
+ ' ',
+ ' '
+ ].join('') : '';
+
+ this.$el = $([
+ '',
+ ''+(this.getOption('label') ? this.getOption('label') : '')+' ',
+ dots,
+ ' '
+ ].join(''));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The available options for this class
+ */
+
+ className: false,
+
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ divider: 'flipclock-divider',
+ dot: 'flipclock-dot',
+ label: 'flipclock-label'
+ },
+
+ /**
+ * If true the dots will not be displayed in the divider
+ */
+
+ excludeDots: false,
+
+ /**
+ * The label for the divider
+ */
+
+ label: false
+ };
+ },
+
+ /*
+ * Output object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.$el.html();
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/EnglishAlphaList.js b/src/flipclock/js/libs/EnglishAlphaList.js
new file mode 100644
index 00000000..b088ee82
--- /dev/null
+++ b/src/flipclock/js/libs/EnglishAlphaList.js
@@ -0,0 +1,123 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.EnglishAlphaList class is a specific class to create
+ * lists that alphabetical values
+ */
+
+ FlipClock.EnglishAlphaList = FlipClock.List.extend({
+
+ /*
+ * Constructor
+ *
+ * @param string
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.options = this.getDefaultOptions();
+ this.setOptions(options);
+
+ if(!value) {
+ value = String.fromCharCode(this.getMinCharCode());
+ }
+
+ this.base(value, options);
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ var options = this.base();
+
+ /**
+ * Tells the list to use capital letters if true
+ */
+ options.capitalLetters = true;
+
+ return options;
+ },
+
+ /*
+ * Get the maximum character code in the list
+ *
+ * @return int
+ */
+
+ getMaxCharCode: function() {
+ return this.getOption('capitalLetters') ? 90 : 122;
+ },
+
+ /*
+ * Get the minimum character code in the list
+ *
+ * @return int
+ */
+
+ getMinCharCode: function() {
+ return this.getOption('capitalLetters') ? 65 : 96;
+ },
+
+ /*
+ * Get the char code of the current list value
+ *
+ * @return int
+ */
+
+ getCharCode: function() {
+ return this.value.charCodeAt(0);
+ },
+
+ /*
+ * Get the previous value in the list
+ *
+ * @return int
+ */
+
+ getPrevValue: function() {
+ var charCode = this.value.charCodeAt(0) - 1;
+ var minCode = this.getMinCharCode(), maxCode = this.getMaxCharCode();
+
+ if(charCode < minCode) {
+ charCode = maxCode;
+ }
+
+ return String.fromCharCode(charCode);
+ },
+
+ /*
+ * Get the next value in the list
+ *
+ * @return int
+ */
+
+ getNextValue: function() {
+ var charCode = this.value.charCodeAt(0) + 1;
+ var minCode = this.getMinCharCode(), maxCode = this.getMaxCharCode();
+
+ if(charCode > maxCode) {
+ charCode = minCode;
+ }
+
+ return String.fromCharCode(charCode);
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Event.js b/src/flipclock/js/libs/Event.js
new file mode 100644
index 00000000..ffdd0d58
--- /dev/null
+++ b/src/flipclock/js/libs/Event.js
@@ -0,0 +1,179 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /*
+ * The FlipClock.Event class are instances for each event triggered
+ * by FlipClock's classes.
+ */
+
+ FlipClock.Event = FlipClock.Base.extend({
+
+ /**
+ * The name of the event
+ */
+
+ name: false,
+
+ /**
+ * Has the event fired?
+ */
+
+ _hasFired: false,
+
+ /**
+ * The returned object of the last event response. Null
+ * if no response has been triggered.
+ */
+
+ _lastResponse: null,
+
+ /**
+ * If true, the event will not fire
+ */
+
+ _preventFire: false,
+
+ /**
+ * If true, the event will only fire once
+ */
+
+ _fireOnce: false,
+
+ /**
+ * The function to call when the event is fired
+ */
+
+ _callback: function() {},
+
+ /*
+ * Constructor
+ *
+ * @param string
+ * @param mixed
+ */
+
+ constructor: function(name, callback) {
+ if(!name) {
+ throw "Events must have a name";
+ }
+
+ if(typeof callback === "function") {
+ this._callback = callback;
+ }
+ },
+
+ /*
+ * Fire the event. This method is chainable.
+ *
+ * @param object
+ * @param mixed
+ * @return object
+ */
+
+ fire: function(obj, args) {
+ if(this._preventFire === false) {
+ this.setLastResponse(this._callback.apply(obj, args));
+ this._hasFired = true;
+ if(this._fireOnce) {
+ this._preventFire = true;
+ }
+ }
+
+ return this;
+ },
+
+ /*
+ * Prevent the event from firing. This method is chainable.
+ *
+ * @return object
+ */
+
+ off: function() {
+ this._preventFire = true;
+
+ return this;
+ },
+
+ /*
+ * Turn on the event (if the event was previously turned off).
+ * This method is chainable.
+ *
+ * @return object
+ */
+
+ on: function() {
+ this._preventFire = false;
+
+ return this;
+ },
+
+ /*
+ * Returns true if the event has fired
+ *
+ * @return bool
+ */
+
+ hasFired: function() {
+ return this._hasFired;
+ },
+
+ /*
+ * Get the last response. Returns null if no response exists
+ *
+ * @return mixed
+ */
+
+ getLastResponse: function() {
+ return this._lastResponse;
+ },
+
+ /*
+ * Sets the last response. This method is chainable.
+ *
+ * @param object
+ * @return object
+ */
+
+ setLastResponse: function(response) {
+ this._lastResponse = response;
+
+ return this;
+ },
+
+ /*
+ * Returns true if the event is set to only fire once
+ *
+ * @return bool
+ */
+
+ getFireOnce: function() {
+ return this._fireOnce;
+ },
+
+ /*
+ * Set event to fire once or indefinitely
+ *
+ * @param bool
+ * @return object
+ */
+
+ setFireOnce: function(value) {
+ this._fireOnce = value;
+
+ return this;
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Face.js b/src/flipclock/js/libs/Face.js
new file mode 100644
index 00000000..6af24162
--- /dev/null
+++ b/src/flipclock/js/libs/Face.js
@@ -0,0 +1,563 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Face class is an abstract class used to create
+ * new clock faces.
+ */
+
+ FlipClock.Face = FlipClock.Base.extend({
+
+ /**
+ * An array of jQuery objects used for the dividers (the colons)
+ */
+
+ dividers: [],
+
+ /**
+ * The language object after it has been loaded
+ */
+
+ lang: false,
+
+ /**
+ * An array of FlipClock.List objects
+ */
+
+ lists: [],
+
+ /**
+ * The original starting value of the clock face.
+ */
+
+ originalValue: 0,
+
+ /**
+ * The FlipClock.Time object
+ */
+
+ time: false,
+
+ /**
+ * The FlipClock.Timer object
+ */
+
+ timer: false,
+
+ /**
+ * The FlipClock.Translator object
+ */
+
+ translator: false,
+
+ /**
+ * The current value of the clock face.
+ */
+
+ value: 0,
+
+ /**
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ var t = this;
+
+ if(value instanceof Date === false && typeof value === "object") {
+ options = value;
+ value = 0;
+ }
+
+ this.dividers = [];
+ this.lists = [];
+ this.originalValue = value;
+ this.value = value;
+
+ this.base(options);
+
+ this.translator = new FlipClock.Translator({
+ defaultLanguage: this.getOption('defaultLanguage'),
+ language: this.getOption('language')
+ });
+
+ this.timer = new FlipClock.Timer();
+
+ this.timer.on('interval', function() {
+ t.flip();
+ t.trigger('interval');
+ });
+
+ this.on('add:digit', function(list) {
+ if(this.dividers.length) {
+ for(var i in this.dividers) {
+ var divider = this.dividers[i];
+
+ if(!divider.$el.is(':first-child')) {
+ divider.$el.insertAfter(divider.$el.next());
+ }
+ }
+ }
+ });
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The clock's animation rate.
+ *
+ * Note, currently this property doesn't do anything.
+ * This property is here to be used in the future to
+ * programmaticaly set the clock's animation speed
+ */
+
+ animationRate: 1000,
+
+ /**
+ * Sets whether or not the clock should automatically add the play class
+ */
+
+ autoPlay: true,
+
+ /**
+ * Sets whether or not the clock should start ticking upon instantiation
+ */
+
+ autoStart: true,
+
+ /**
+ * Sets whether or not the clock should countdown
+ */
+
+ countdown: false,
+
+ /**
+ * The default language
+ */
+
+ defaultLanguage: 'english',
+
+ /**
+ * The language being used to display labels (string)
+ */
+
+ language: 'english',
+
+ /**
+ * The minimum digits the clock must have
+ */
+
+ minimumDigits: 0
+ };
+ },
+
+ /**
+ * Add a digit to the clock face
+ */
+
+ addDigit: function(digit) {
+ var list = this.createList(digit);
+
+ this.trigger('add:digit', list);
+
+ return list;
+ },
+
+ /*
+ * Attach the FlipClock.List to the DOM of the clock face
+ *
+ * @param object $el
+ * @param object list
+ * @return null
+ */
+
+ attachList: function($el, list) {
+ $el.append(list.$el);
+ },
+
+ /**
+ * Build the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ build: function() {
+ if(this.getOption('autoStart')) {
+ this.start();
+ }
+
+ this.trigger('build');
+
+ return this;
+ },
+
+ /**
+ * Perform arbirtrary logic when the clock face instantiated.
+ * The factor object is passed in the first argument. This
+ * method is chainable.
+ *
+ * @param object factory
+ * @return object
+ */
+
+ init: function(factory) {
+ this.setTimeObject(this.value);
+ this.trigger('init');
+
+ return this;
+ },
+
+ /**
+ * Creates a jQuery object used for the digit divider
+ *
+ * @param mixed label
+ * @param mixed className
+ * @param mixed excludeDots
+ */
+
+ createDivider: function(label, className, excludeDots) {
+ if(typeof className == "boolean" || !className) {
+ excludeDots = className;
+ className = false;
+ }
+
+ var divider = new FlipClock.Divider({
+ label: label,
+ className: className,
+ excludeDots: excludeDots,
+ translator: this.translator
+ });
+
+ this.dividers.push(divider);
+
+ this.trigger('create:divider', divider);
+
+ return divider;
+ },
+
+ /**
+ * Creates a FlipClock.List object and appends it to the DOM
+ *
+ * @param mixed value
+ * @param object options
+ * @return object
+ */
+
+ createList: function(value, options) {
+ var list = this.getListObject(value);
+
+ if(this.getOption('autoPlay') || this.timer.running) {
+ list.addPlayClass();
+ }
+
+ this.lists.push(list);
+
+ this.trigger('create:list', list);
+
+ return list;
+ },
+
+ /*
+ * Get the list class object
+ *
+ * @return object
+ */
+
+ getListClass: function() {
+ return FlipClock.NumericList;
+ },
+
+ /*
+ * Get a new list class instance
+ *
+ * @param mixed value
+ * @return object
+ */
+
+ getListObject: function(value) {
+ var List = this.getListClass();
+
+ return new List(value, {
+ translator: this.translator
+ });
+ },
+
+ /**
+ * Reset the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ reset: function(callback) {
+ this.value = this.originalValue;
+ this.time.time = this.value;
+ this.flip();
+ this.trigger('reset');
+ this.callback(callback);
+
+ return this;
+ },
+
+ /**
+ * Starts the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ start: function(callback) {
+ if(!this.timer.running) {
+ this.trigger('before:start');
+ this.timer.start();
+ this.trigger('start');
+ this.callback(callback);
+ }
+
+ return this;
+ },
+
+ /**
+ * Stops the clock. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ stop: function(callback) {
+ var t = this;
+ if(this.timer.running) {
+ this.trigger('before:stop');
+ this.timer.stop(function() {
+ t.trigger('stop');
+ t.callback(callback);
+ });
+ }
+
+ return this;
+ },
+
+ /**
+ * Auto increments/decrements the value of the clock face.
+ * This method is chainable;
+ *
+ * @return object
+ */
+
+ autoIncrement: function() {
+ if(!this.getOption('countdown')) {
+ this.increment();
+ }
+ else {
+ this.decrement();
+ }
+
+ this.trigger('auto:increment', this.getOption('countdown'));
+
+ return this;
+ },
+
+ /**
+ * Increments the value of the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ increment: function() {
+ this.value++;
+
+ if(this.time) {
+ this.time.addSecond();
+ }
+
+ this.trigger('increment');
+
+ return this;
+ },
+
+ /**
+ * Decrements the value of the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ decrement: function() {
+ if(this.time.getTimeSeconds() === 0) {
+ this.stop();
+ }
+ else {
+ this.value--;
+
+ if(this.time) {
+ this.time.subSecond();
+ }
+ }
+
+ this.trigger('decrement');
+
+ return this;
+ },
+
+ /**
+ * Triggers when the numbers on the clock flip. This method is chainable.
+ *
+ * @param array time
+ * @return object
+ */
+
+ flip: function(time) {
+ for(var i in time) {
+ if(this.lists[i]) {
+ this.lists[i].select(time[i]);
+ if(this.getOption('autoPlay') && this.timer.running) {
+ this.lists[i].addPlayClass();
+ }
+ }
+ else {
+ this.addDigit(time[i]);
+ }
+ }
+
+ this.trigger('flip');
+
+ return this;
+ },
+
+ /**
+ * Sets the clock time. This method is chainable.
+ *
+ * @param mixed time
+ * @return object
+ */
+
+ setTime: function(time) {
+ this.time.time = time;
+ this.flip();
+ this.trigger('set:time', time);
+
+ return this;
+ },
+
+ /**
+ * Get the clock time
+ *
+ * @return object
+ */
+
+ getTime: function() {
+ return this.time;
+ },
+
+ /**
+ * Set the time attribute with a new FlipClock.Time object.
+ * This method is chainable.
+ *
+ * @param object time
+ * @return object
+ */
+
+ setTimeObject: function(time) {
+ this.time = new FlipClock.Time(time, {
+ minimumDigits: this.getOption('minimumDigits')
+ });
+
+ return this;
+ },
+
+ /**
+ * Sets the clock face's time. This method is chainable.
+ *
+ * @param mixed value
+ * @return object
+ */
+
+ setValue: function(value) {
+ this.value = value;
+
+ if(this.time) {
+ this.setTimeObject(value);
+ }
+
+ this.flip();
+
+ this.trigger('set:value', this.value);
+
+ return this;
+ },
+
+ /**
+ * Get the clock face's value
+ *
+ * @return mixed
+ */
+
+ getValue: function() {
+ return this.value;
+ },
+
+ /**
+ * Changes the increment of time to up or down (add/sub).
+ * This method is chainable.
+ *
+ * @param bool value
+ * @return object
+ */
+
+ setCountdown: function(value) {
+ this.setOption('countdown', value ? true : false);
+
+ if(this.timer.running) {
+ this.stop();
+ this.start();
+ }
+
+ this.trigger('set:countdown', this.getOption('countdown'));
+
+ return this;
+ },
+
+ /**
+ * Get the current countdown option value
+ *
+ * @return bool
+ */
+
+ getCountdown: function() {
+ return this.getOption('countdown');
+ },
+
+ /**
+ * Destroy the clock face. This method is chainable.
+ *
+ * @return object
+ */
+
+ destroy: function() {
+ this.timer.destroy();
+ this.trigger('destroy');
+
+ return this;
+ }
+
+ });
+
+}(jQuery));
diff --git a/src/flipclock/js/libs/Factory.js b/src/flipclock/js/libs/Factory.js
new file mode 100644
index 00000000..b1c1ec5c
--- /dev/null
+++ b/src/flipclock/js/libs/Factory.js
@@ -0,0 +1,302 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock Factory class is used to build the clock and manage
+ * all the public methods.
+ */
+
+ FlipClock.Factory = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The FlipClock.Face object
+ */
+
+ face: false,
+
+ /**
+ * Constructor
+ *
+ * @param object The wrapping jQuery object
+ * @param object Number of seconds used to start the clock
+ * @param object An object override options
+ */
+
+ constructor: function($el, value, options) {
+ if(value instanceof Date === false && typeof value === "object") {
+ options = value;
+ value = 0;
+ }
+
+ this.base(options);
+
+ this.lists = [];
+
+ this.$el = $el.addClass(this.getOption('classes').wrapper);
+
+ this.loadClockFace(this.getOption('clockFace'), value, this.getOption('clockFaceOptions'));
+
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ wrapper: 'flipclock-wrapper'
+ },
+
+ /**
+ * The name of the clock face class in use
+ */
+
+ clockFace: 'HourlyCounter',
+
+ /**
+ * The FlipClock.Face options object
+ */
+
+ clockFaceOptions: {},
+
+ /**
+ * The name of the default clock face class to use if the defined
+ * clockFace variable is not a valid FlipClock.Face object
+ */
+
+ defaultClockFace: 'HourlyCounter'
+ };
+ },
+
+ /**
+ * Load the FlipClock.Face object
+ *
+ * @param object The name of the FlickClock.Face class
+ * @param object An object override options
+ * @return object
+ */
+
+ loadClockFace: function(name, value, options) {
+ var t = this, face, suffix = 'Face';
+
+ name = name.ucfirst()+suffix;
+
+ if(this.face.stop) {
+ this.stop();
+ }
+
+ this.$el.html('');
+
+ if(FlipClock[name]) {
+ this.face = new FlipClock[name](value, options);
+ }
+ else {
+ this.face = new FlipClock[this.getOption('defaultClockFace')+suffix](value, options);
+ }
+
+ this.face.on('create:list', function(list) {
+ t.face.attachList(t.$el, list);
+ });
+
+ this.face.on('destroy', function() {
+ t.callback(t.onDestroy);
+ });
+
+ this.face.on('start', function() {
+ t.callback(t.onStart);
+ });
+
+ this.face.on('stop', function() {
+ t.callback(t.onStop);
+ });
+
+ this.face.on('reset', function() {
+ t.callback(t.onReset);
+ });
+
+ this.face.on('interval', function() {
+ t.callback(t.onInterval);
+ });
+
+ this.face.init(this);
+
+ this.face.build();
+
+ this.trigger('load:face', this.face);
+
+ this.callback(t.onInit);
+
+ return this.face;
+ },
+
+ /**
+ * Starts the clock face countdown option
+ *
+ * @return object
+ */
+
+ setCountdown: function(value) {
+ this.face.setCountdown(value);
+
+ return this;
+ },
+
+ /**
+ * Gets the countdown option from the clock face
+ *
+ * @return object
+ */
+
+ getCountdown: function() {
+ return this.face.getCountdown();
+ },
+
+ /**
+ * Destroy the clock
+ *
+ * @return object
+ */
+
+ destroy: function() {
+ this.face.destroy();
+ this.face = false;
+ this.$el.removeClass(this.getOption('classes').wrapper);
+ this.$el.html('');
+
+ return this;
+ },
+
+ /**
+ * Starts the clock
+ *
+ * @return object
+ */
+
+ start: function() {
+ this.face.start();
+
+ return this;
+ },
+
+ /**
+ * Stops the clock
+ *
+ * @return object
+ */
+
+ stop: function() {
+ this.face.stop();
+
+ return this;
+ },
+
+ /**
+ * Reset the clock
+ *
+ * @return object
+ */
+
+ reset: function() {
+ this.face.reset();
+
+ return this;
+ },
+
+ /**
+ * Sets the clock face's value
+ *
+ * @return object
+ */
+
+ setFaceValue: function(value) {
+ this.face.setValue(value);
+
+ return this;
+ },
+
+ /**
+ * Gets the clock face's value
+ *
+ * @return object
+ */
+
+ getFaceValue: function() {
+ return this.face.getValue();
+ },
+
+ /*
+ * The onDestroy callback
+ *
+ * @return undefined
+ */
+
+ onDestroy: function() {},
+
+ /*
+ * The onInit callback
+ *
+ * @return undefined
+ */
+
+ onInit: function() {},
+
+ /*
+ * The onInterval callback
+ *
+ * @return undefined
+ */
+
+ onInterval: function() {},
+
+ /*
+ * The onStart callback
+ *
+ * @return undefined
+ */
+
+ onStart: function() {},
+
+ /*
+ * The onStop callback
+ *
+ * @return undefined
+ */
+
+ onStop: function() {},
+
+ /*
+ * The onReset callback
+ *
+ * @return undefined
+ */
+
+ onReset: function() {}
+
+ });
+
+}(jQuery));
diff --git a/src/flipclock/js/libs/ListItem.js b/src/flipclock/js/libs/ListItem.js
new file mode 100644
index 00000000..a478dc46
--- /dev/null
+++ b/src/flipclock/js/libs/ListItem.js
@@ -0,0 +1,100 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.ListItem object generates and maintains a list item
+ * in FlipClock.List objets.
+ */
+
+ FlipClock.ListItem = FlipClock.Base.extend({
+
+ /**
+ * The jQuery object
+ */
+
+ $el: false,
+
+ /**
+ * The list item value
+ */
+
+ value: null,
+
+ /*
+ * Constructor
+ *
+ * @param mixed
+ * @param mixed
+ */
+
+ constructor: function(value, options) {
+ this.base(options);
+ this.value = value;
+
+ this.$el = $([
+ '',
+ '',
+ '',
+ '
',
+ '
'+value+'
',
+ '
',
+ '',
+ '
',
+ '
'+value+'
',
+ '
',
+ ' ',
+ ' '
+ ].join(''));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * An object of available CSS classes
+ */
+
+ classes: {
+ down: 'down',
+ inn: 'inn',
+ shadow: 'shadow',
+ up: 'up'
+ },
+
+ /**
+ * The css class appended to the parent DOM node
+ */
+
+ className: null
+ };
+ },
+
+ /*
+ * Output the object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.$el.html();
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/NumericList.js b/src/flipclock/js/libs/NumericList.js
new file mode 100644
index 00000000..81afc877
--- /dev/null
+++ b/src/flipclock/js/libs/NumericList.js
@@ -0,0 +1,53 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.NumberList class is a specific class to create
+ * lists that display numbers
+ */
+
+ FlipClock.NumericList = FlipClock.List.extend({
+
+ /*
+ * Get the previous value in the list
+ *
+ * @return int
+ */
+
+ getPrevValue: function() {
+ if(this.value > 0) {
+ return this.value - 1;
+ }
+
+ return 9;
+ },
+
+ /*
+ * Get the next value in the list
+ *
+ * @return int
+ */
+
+ getNextValue: function() {
+ if(this.value < 9) {
+ return this.value + 1;
+ }
+
+ return 0;
+ }
+
+ });
+
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/time.js b/src/flipclock/js/libs/Time.js
similarity index 79%
rename from src/flipclock/js/libs/time.js
rename to src/flipclock/js/libs/Time.js
index a87cb88c..329ff0e0 100644
--- a/src/flipclock/js/libs/time.js
+++ b/src/flipclock/js/libs/Time.js
@@ -7,21 +7,16 @@
* @copyright 2013 - Objective HTML, LLC
* @licesnse http://www.opensource.org/licenses/mit-license.php
*/
-
+
(function($) {
"use strict";
-
- /**
- * The FlipClock Time class is used to manage all the time
- * calculations.
- *
- * @param object A FlipClock.Factory object
- * @param mixed This is the digit used to set the clock. If an
- * object is passed, 0 will be used.
- * @param object An object of properties to override the default
- */
-
+
+ /*
+ * The FlipClock.Time class is a helper classes to digitize clock
+ * values and help calculate time.
+ */
+
FlipClock.Time = FlipClock.Base.extend({
/**
@@ -30,48 +25,49 @@
time: 0,
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
- /**
- * The minimum number of digits the clock face must have
- */
-
- minimumDigits: 0,
-
/**
* Constructor
*
- * @param object A FlipClock.Factory object
* @param int An integer use to select the correct digit
* @param object An object to override the default properties
*/
- constructor: function(factory, time, options) {
+ constructor: function(time, options) {
if(typeof options != "object") {
options = {};
}
- if(!options.minimumDigits) {
- options.minimumDigits = factory.minimumDigits;
+ if(time instanceof Date) {
+ this.time = time;
+ }
+ else if(time) {
+ this.time = Math.round(time);
}
this.base(options);
- this.factory = factory;
+ },
- if(time) {
- this.time = time;
- }
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The minimum number of digits the clock face must have
+ */
+
+ minimumDigits: 0
+ };
},
/**
* Convert a string or integer to an array of digits
*
- * @param mixed String or Integer of digits
- * @return array An array of digits
+ * @param mixed str
+ * @return array
*/
convertDigitsToArray: function(str) {
@@ -117,8 +113,8 @@
digitize: function(obj) {
var data = [];
- $.each(obj, function(i, value) {
- value = value.toString();
+ for(var i in obj) {
+ var value = obj[i].toString();
if(value.length == 1) {
value = '0'+value;
@@ -126,15 +122,15 @@
for(var x = 0; x < value.length; x++) {
data.push(value.charAt(x));
- }
- });
+ }
+ }
- if(data.length > this.minimumDigits) {
- this.minimumDigits = data.length;
+ if(data.length > this.getOption('minimumDigits')) {
+ this.setOption('minimumDigits', data.length);
}
- if(this.minimumDigits > data.length) {
- for(var x = data.length; x < this.minimumDigits; x++) {
+ if(this.getOption('minimumDigits') > data.length) {
+ for(var x = data.length; x < this.getOption('minimumDigits'); x++) {
data.unshift('0');
}
}
@@ -196,34 +192,39 @@
/**
* Gets an hourly breakdown
*
+ * @param mixed includeSeconds
* @return object Returns a digitized object
*/
- getHourCounter: function() {
- var obj = this.digitize([
+ getHourCounter: function(includeSeconds) {
+ var data = [
this.getHours(),
- this.getMinutes(true),
- this.getSeconds(true)
- ]);
-
- return obj;
+ this.getMinutes(true)
+ ];
+
+ if(includeSeconds !== false) {
+ data.push(this.getSeconds(true));
+ }
+
+ return this.digitize(data);
},
/**
* Gets an hourly breakdown
*
+ * @param mixed includeSeconds
* @return object Returns a digitized object
*/
- getHourly: function() {
- return this.getHourCounter();
+ getHourly: function(includeSeconds) {
+ return this.getHourCounter(includeSeconds);
},
/**
* Gets number of hours
*
- * @param bool Should perform a modulus? If not sent, then no.
- * @return int Retuns a floored integer
+ * @param bool mod
+ * @return int
*/
getHours: function(mod) {
@@ -284,13 +285,16 @@
* Gets a minute breakdown
*/
- getMinuteCounter: function() {
- var obj = this.digitize([
- this.getMinutes(),
- this.getSeconds(true)
- ]);
+ getMinuteCounter: function(includeSeconds) {
+ var data = [
+ this.getMinutes()
+ ];
+
+ if(includeSeconds !== false) {
+ data.push(this.getSeconds(true));
+ }
- return obj;
+ return this.digitize(data);
},
/**
@@ -299,19 +303,19 @@
* @return int Returns a floored integer
*/
- getTimeSeconds: function(date) {
+ getTimeSeconds: function(countdown, date) {
if(!date) {
date = new Date();
}
if (this.time instanceof Date) {
- if (this.factory.countdown) {
- return Math.max(this.time.getTime()/1000 - date.getTime()/1000,0);
+ if (countdown) {
+ return Math.round(Math.max(this.time.getTime()/1000 - date.getTime()/1000,0));
} else {
- return date.getTime()/1000 - this.time.getTime()/1000 ;
+ return Math.round(date.getTime()/1000 - this.time.getTime()/1000);
}
} else {
- return this.time;
+ return Math.round(this.time);
}
},
@@ -330,9 +334,6 @@
date = this.getDateObject();
}
- console.log(date);
-
-
var hours = date.getHours();
var merid = hours > 12 ? 'PM' : 'AM';
var data = [
@@ -399,15 +400,15 @@
var total = 0;
var newArray = [];
- $.each(digits, function(i, digit) {
+ for(var i in digits) {
if(i < totalDigits) {
total += parseInt(digits[i], 10);
}
else {
newArray.push(digits[i]);
}
- });
-
+ }
+
if(total === 0) {
return newArray;
}
diff --git a/src/flipclock/js/libs/Timer.js b/src/flipclock/js/libs/Timer.js
new file mode 100644
index 00000000..54e21389
--- /dev/null
+++ b/src/flipclock/js/libs/Timer.js
@@ -0,0 +1,222 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Timer object is a helper to manage the JS time intervals
+ */
+
+ FlipClock.Timer = FlipClock.Base.extend({
+
+ /**
+ * FlipClock timer count (how many intervals have passed)
+ */
+
+ count: 0,
+
+ /**
+ * Is the timer running?
+ */
+
+ running: false,
+
+ /**
+ * Constructor
+ *
+ * @param mixed mixed
+ */
+
+ constructor: function(options) {
+ this.base(options);
+ this.trigger('init');
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The rate of the animation in milliseconds (not currently in use)
+ */
+
+ animationRate: 1000,
+
+ /**
+ * Timer interval (1 second by default)
+ */
+
+ interval: 1000
+ };
+ },
+
+ /**
+ * Gets the elapsed the time as an interger
+ *
+ * @return int
+ */
+
+ getElapsed: function() {
+ return this.count * this.getOption('interval');
+ },
+
+ /**
+ * Gets the elapsed the time as a Date object
+ *
+ * @return object
+ */
+
+ getElapsedTime: function() {
+ return new Date(this.time + this.getElapsed());
+ },
+
+ /**
+ * Resets the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ reset: function(callback) {
+ clearInterval(this.timer);
+ this.count = 0;
+ this._setInterval(callback);
+ this.trigger('reset');
+
+ return this;
+ },
+
+ /**
+ * Starts the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ start: function(callback) {
+ this.running = true;
+ this._createTimer(callback);
+
+ return this;
+ },
+
+ /**
+ * Stops the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ stop: function(callback) {
+ var t = this;
+
+ this.running = false;
+ this._clearInterval();
+
+ setTimeout(function() {
+ t.callback(callback);
+ t.trigger('stop');
+ }, this.getOption('interval'));
+
+ return this;
+ },
+
+
+ /**
+ * Destroy the timer. This method is chainable.
+ *
+ * @param function callback
+ * @return object
+ */
+
+ destroy: function(callback) {
+ this._destroyTimer(callback);
+ this.trigger('destroy');
+
+ return this;
+ },
+
+
+ /**
+ * Clear the timer interval
+ *
+ * @return void
+ */
+
+ _clearInterval: function() {
+ clearInterval(this.timer);
+ },
+
+ /**
+ * Create the timer object
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _createTimer: function(callback) {
+ this._setInterval(callback);
+ },
+
+ /**
+ * Destroy the timer object
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _destroyTimer: function(callback) {
+ this._clearInterval();
+ this.running = false;
+ this.timer = false;
+ this.callback(callback);
+ this.trigger('destroy')
+ },
+
+ /**
+ * This method is called each time the timer interval is ran
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _interval: function(callback) {
+ this.callback(callback);
+ this.trigger('interval');
+ this.count++;
+ },
+
+ /**
+ * Sets the timer interval
+ *
+ * @param function callback
+ * @return void
+ */
+
+ _setInterval: function(callback) {
+ var t = this;
+ this.timer = setInterval(function() {
+ if(t.running) {
+ t._interval(callback);
+ }
+ }, this.getOption('interval'));
+ this.trigger('start');
+ this._interval(callback);
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Translator.js b/src/flipclock/js/libs/Translator.js
new file mode 100644
index 00000000..ded3d4db
--- /dev/null
+++ b/src/flipclock/js/libs/Translator.js
@@ -0,0 +1,114 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function() {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Translate object will translate string to a specified
+ * locale.
+ */
+
+ FlipClock.Translator = FlipClock.Base.extend({
+
+ /**
+ * The language object after it has been loaded
+ */
+
+ lang: false,
+
+ /*
+ * Constructor
+ *
+ * @param mixed options
+ */
+
+ constructor: function(options) {
+ this.base(options);
+ this.loadLanguage(this.getOption('language'));
+ },
+
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The default language
+ */
+
+ defaultLanguage: 'english',
+
+ /**
+ * The language being used to display labels (string)
+ */
+
+ language: 'english'
+ };
+ },
+
+ /**
+ * Load the FlipClock.Lang object
+ *
+ * @param object The name of the language to load
+ * @return object
+ */
+
+ loadLanguage: function(name) {
+ var lang;
+
+ if(FlipClock.Lang[name.ucfirst()]) {
+ lang = FlipClock.Lang[name.ucfirst()];
+ }
+ else if(FlipClock.Lang[name]) {
+ lang = FlipClock.Lang[name];
+ }
+ else {
+ lang = FlipClock.Lang[this.getOption('defaultLanguage')];
+ }
+
+ return this.lang = lang;
+ },
+
+ /**
+ * Localize strings into various languages
+ *
+ * @param string The index of the localized string
+ * @param object Optionally pass a lang object
+ * @return string
+ */
+
+ localize: function(index, obj) {
+ var lang = this.lang;
+
+ if(!index) {
+ return null;
+ }
+
+ var lindex = index.toLowerCase();
+
+ if(typeof obj == "object") {
+ lang = obj;
+ }
+
+ if(lang && lang[lindex]) {
+ return lang[lindex];
+ }
+
+ return index;
+ }
+
+ });
+
+}());
\ No newline at end of file
diff --git a/src/flipclock/js/libs/Uuid.js b/src/flipclock/js/libs/Uuid.js
new file mode 100644
index 00000000..660957bc
--- /dev/null
+++ b/src/flipclock/js/libs/Uuid.js
@@ -0,0 +1,90 @@
+/*jshint smarttabs:true */
+
+/**
+ * FlipClock.js
+ *
+ * @author Justin Kimbrell
+ * @copyright 2013 - Objective HTML, LLC
+ * @licesnse http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ "use strict";
+
+ /**
+ * The FlipClock.Uuid object generates a uuid instance and return
+ * the uuid as string.
+ */
+
+ FlipClock.Uuid = FlipClock.Base.extend({
+
+ /**
+ * The actual uuid value as a string
+ */
+
+ value: false,
+
+ /*
+ * Constructor
+ *
+ * @param string value
+ */
+
+ constructor: function(value) {
+ this.value = value ? value : this.generate();
+ },
+
+ /*
+ * Generate a new Uuid
+ *
+ * @return string
+ */
+
+ generate: function() {
+ var d = new Date().getTime();
+ var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (d + Math.random()*16)%16 | 0;
+ d = Math.floor(d/16);
+ return (c=='x' ? r : (r&0x3|0x8)).toString(16);
+ });
+ return uuid;
+ },
+
+ /*
+ * Does this uuid equal another uuid object
+ *
+ * @param object
+ * @return bool
+ */
+
+ equals: function(other) {
+ return this.isUuid(other) && value == other;
+ },
+
+ /*
+ * Tests another value to see if it's a uuid
+ *
+ * @param mixed
+ * @return bool
+ */
+
+ isUuid: function(value) {
+ var validator = new RegExp("^[a-z0-9]{32}$", "i");
+
+ return value && (value instanceof Uuid || validator.test(value.toString()));
+ },
+
+ /*
+ * Outputs the object instance as a string
+ *
+ * @return string
+ */
+
+ toString: function() {
+ return this.value;
+ }
+
+ });
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/core.js b/src/flipclock/js/libs/core.js
deleted file mode 100644
index d8a2cc3f..00000000
--- a/src/flipclock/js/libs/core.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/*jshint smarttabs:true */
-
-var FlipClock;
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @license http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * FlipFlock Helper
- *
- * @param object A jQuery object or CSS select
- * @param int An integer used to start the clock (no. seconds)
- * @param object An object of properties to override the default
- */
-
- FlipClock = function(obj, digit, options) {
- if(digit instanceof Object && digit instanceof Date === false) {
- options = digit;
- digit = 0;
- }
-
- return new FlipClock.Factory(obj, digit, options);
- };
-
- /**
- * The global FlipClock.Lang object
- */
-
- FlipClock.Lang = {};
-
- /**
- * The Base FlipClock class is used to extend all other FlipFlock
- * classes. It handles the callbacks and the basic setters/getters
- *
- * @param object An object of the default properties
- * @param object An object of properties to override the default
- */
-
- FlipClock.Base = Base.extend({
-
- /**
- * Build Date
- */
-
- buildDate: '2014-12-12',
-
- /**
- * Version
- */
-
- version: '0.7.7',
-
- /**
- * Sets the default options
- *
- * @param object The default options
- * @param object The override options
- */
-
- constructor: function(_default, options) {
- if(typeof _default !== "object") {
- _default = {};
- }
- if(typeof options !== "object") {
- options = {};
- }
- this.setOptions($.extend(true, {}, _default, options));
- },
-
- /**
- * Delegates the callback to the defined method
- *
- * @param object The default options
- * @param object The override options
- */
-
- callback: function(method) {
- if(typeof method === "function") {
- var args = [];
-
- for(var x = 1; x <= arguments.length; x++) {
- if(arguments[x]) {
- args.push(arguments[x]);
- }
- }
-
- method.apply(this, args);
- }
- },
-
- /**
- * Log a string into the console if it exists
- *
- * @param string The name of the option
- * @return mixed
- */
-
- log: function(str) {
- if(window.console && console.log) {
- console.log(str);
- }
- },
-
- /**
- * Get an single option value. Returns false if option does not exist
- *
- * @param string The name of the option
- * @return mixed
- */
-
- getOption: function(index) {
- if(this[index]) {
- return this[index];
- }
- return false;
- },
-
- /**
- * Get all options
- *
- * @return bool
- */
-
- getOptions: function() {
- return this;
- },
-
- /**
- * Set a single option value
- *
- * @param string The name of the option
- * @param mixed The value of the option
- */
-
- setOption: function(index, value) {
- this[index] = value;
- },
-
- /**
- * Set a multiple options by passing a JSON object
- *
- * @param object The object with the options
- * @param mixed The value of the option
- */
-
- setOptions: function(options) {
- for(var key in options) {
- if(typeof options[key] !== "undefined") {
- this.setOption(key, options[key]);
- }
- }
- }
-
- });
-
-}(jQuery));
diff --git a/src/flipclock/js/libs/face.js b/src/flipclock/js/libs/face.js
deleted file mode 100644
index ab05dac1..00000000
--- a/src/flipclock/js/libs/face.js
+++ /dev/null
@@ -1,243 +0,0 @@
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock Face class is the base class in which to extend
- * all other FlockClock.Face classes.
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- FlipClock.Face = FlipClock.Base.extend({
-
- /**
- * Sets whether or not the clock should start upon instantiation
- */
-
- autoStart: true,
-
- /**
- * An array of jQuery objects used for the dividers (the colons)
- */
-
- dividers: [],
-
- /**
- * An array of FlipClock.List objects
- */
-
- factory: false,
-
- /**
- * An array of FlipClock.List objects
- */
-
- lists: [],
-
- /**
- * Constructor
- *
- * @param object The parent FlipClock.Factory object
- * @param object An object of properties to override the default
- */
-
- constructor: function(factory, options) {
- this.dividers = [];
- this.lists = [];
- this.base(options);
- this.factory = factory;
- },
-
- /**
- * Build the clock face
- */
-
- build: function() {
- if(this.autoStart) {
- this.start();
- }
- },
-
- /**
- * Creates a jQuery object used for the digit divider
- *
- * @param mixed The divider label text
- * @param mixed Set true to exclude the dots in the divider.
- * If not set, is false.
- */
-
- createDivider: function(label, css, excludeDots) {
- if(typeof css == "boolean" || !css) {
- excludeDots = css;
- css = label;
- }
-
- var dots = [
- ' ',
- ' '
- ].join('');
-
- if(excludeDots) {
- dots = '';
- }
-
- label = this.factory.localize(label);
-
- var html = [
- '',
- ''+(label ? label : '')+' ',
- dots,
- ' '
- ];
-
- var $html = $(html.join(''));
-
- this.dividers.push($html);
-
- return $html;
- },
-
- /**
- * Creates a FlipClock.List object and appends it to the DOM
- *
- * @param mixed The digit to select in the list
- * @param object An object to override the default properties
- */
-
- createList: function(digit, options) {
- if(typeof digit === "object") {
- options = digit;
- digit = 0;
- }
-
- var obj = new FlipClock.List(this.factory, digit, options);
-
- this.lists.push(obj);
-
- return obj;
- },
-
- /**
- * Triggers when the clock is reset
- */
-
- reset: function() {
- this.factory.time = new FlipClock.Time(
- this.factory,
- this.factory.original ? Math.round(this.factory.original) : 0,
- {
- minimumDigits: this.factory.minimumDigits
- }
- );
-
- this.flip(this.factory.original, false);
- },
-
- /**
- * Append a newly created list to the clock
- */
-
- appendDigitToClock: function(obj) {
- obj.$el.append(false);
- },
-
- /**
- * Add a digit to the clock face
- */
-
- addDigit: function(digit) {
- var obj = this.createList(digit, {
- classes: {
- active: this.factory.classes.active,
- before: this.factory.classes.before,
- flip: this.factory.classes.flip
- }
- });
-
- this.appendDigitToClock(obj);
- },
-
- /**
- * Triggers when the clock is started
- */
-
- start: function() {},
-
- /**
- * Triggers when the time on the clock stops
- */
-
- stop: function() {},
-
- /**
- * Auto increments/decrements the value of the clock face
- */
-
- autoIncrement: function() {
- if(!this.factory.countdown) {
- this.increment();
- }
- else {
- this.decrement();
- }
- },
-
- /**
- * Increments the value of the clock face
- */
-
- increment: function() {
- this.factory.time.addSecond();
- },
-
- /**
- * Decrements the value of the clock face
- */
-
- decrement: function() {
- if(this.factory.time.getTimeSeconds() == 0) {
- this.factory.stop()
- }
- else {
- this.factory.time.subSecond();
- }
- },
-
- /**
- * Triggers when the numbers on the clock flip
- */
-
- flip: function(time, doNotAddPlayClass) {
- var t = this;
-
- $.each(time, function(i, digit) {
- var list = t.lists[i];
-
- if(list) {
- if(!doNotAddPlayClass && digit != list.digit) {
- list.play();
- }
-
- list.select(digit);
- }
- else {
- t.addDigit(digit);
- }
- });
- }
-
- });
-
-}(jQuery));
diff --git a/src/flipclock/js/libs/factory.js b/src/flipclock/js/libs/factory.js
deleted file mode 100644
index 7cbb2f00..00000000
--- a/src/flipclock/js/libs/factory.js
+++ /dev/null
@@ -1,380 +0,0 @@
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock Factory class is used to build the clock and manage
- * all the public methods.
- *
- * @param object A jQuery object or CSS selector used to fetch
- the wrapping DOM nodes
- * @param mixed This is the digit used to set the clock. If an
- object is passed, 0 will be used.
- * @param object An object of properties to override the default
- */
-
- FlipClock.Factory = FlipClock.Base.extend({
-
- /**
- * The clock's animation rate.
- *
- * Note, currently this property doesn't do anything.
- * This property is here to be used in the future to
- * programmaticaly set the clock's animation speed
- */
-
- animationRate: 1000,
-
- /**
- * Auto start the clock on page load (True|False)
- */
-
- autoStart: true,
-
- /**
- * The callback methods
- */
-
- callbacks: {
- destroy: false,
- create: false,
- init: false,
- interval: false,
- start: false,
- stop: false,
- reset: false
- },
-
- /**
- * The CSS classes
- */
-
- classes: {
- active: 'flip-clock-active',
- before: 'flip-clock-before',
- divider: 'flip-clock-divider',
- dot: 'flip-clock-dot',
- label: 'flip-clock-label',
- flip: 'flip',
- play: 'play',
- wrapper: 'flip-clock-wrapper'
- },
-
- /**
- * The name of the clock face class in use
- */
-
- clockFace: 'HourlyCounter',
-
- /**
- * The name of the clock face class in use
- */
-
- countdown: false,
-
- /**
- * The name of the default clock face class to use if the defined
- * clockFace variable is not a valid FlipClock.Face object
- */
-
- defaultClockFace: 'HourlyCounter',
-
- /**
- * The default language
- */
-
- defaultLanguage: 'english',
-
- /**
- * The jQuery object
- */
-
- $el: false,
-
- /**
- * The FlipClock.Face object
- */
-
- face: true,
-
- /**
- * The language object after it has been loaded
- */
-
- lang: false,
-
- /**
- * The language being used to display labels (string)
- */
-
- language: 'english',
-
- /**
- * The minimum digits the clock must have
- */
-
- minimumDigits: 0,
-
- /**
- * The original starting value of the clock. Used for the reset method.
- */
-
- original: false,
-
- /**
- * Is the clock running? (True|False)
- */
-
- running: false,
-
- /**
- * The FlipClock.Time object
- */
-
- time: false,
-
- /**
- * The FlipClock.Timer object
- */
-
- timer: false,
-
- /**
- * The jQuery object (depcrecated)
- */
-
- $wrapper: false,
-
- /**
- * Constructor
- *
- * @param object The wrapping jQuery object
- * @param object Number of seconds used to start the clock
- * @param object An object override options
- */
-
- constructor: function(obj, digit, options) {
-
- if(!options) {
- options = {};
- }
-
- this.lists = [];
- this.running = false;
- this.base(options);
-
- this.$el = $(obj).addClass(this.classes.wrapper);
-
- // Depcrated support of the $wrapper property.
- this.$wrapper = this.$el;
-
- this.original = (digit instanceof Date) ? digit : (digit ? Math.round(digit) : 0);
-
- this.time = new FlipClock.Time(this, this.original, {
- minimumDigits: this.minimumDigits,
- animationRate: this.animationRate
- });
-
- this.timer = new FlipClock.Timer(this, options);
-
- this.loadLanguage(this.language);
-
- this.loadClockFace(this.clockFace, options);
-
- if(this.autoStart) {
- this.start();
- }
-
- },
-
- /**
- * Load the FlipClock.Face object
- *
- * @param object The name of the FlickClock.Face class
- * @param object An object override options
- */
-
- loadClockFace: function(name, options) {
- var face, suffix = 'Face', hasStopped = false;
-
- name = name.ucfirst()+suffix;
-
- if(this.face.stop) {
- this.stop();
- hasStopped = true;
- }
-
- this.$el.html('');
-
- this.time.minimumDigits = this.minimumDigits;
-
- if(FlipClock[name]) {
- face = new FlipClock[name](this, options);
- }
- else {
- face = new FlipClock[this.defaultClockFace+suffix](this, options);
- }
-
- face.build();
-
- this.face = face
-
- if(hasStopped) {
- this.start();
- }
-
- return this.face;
- },
-
- /**
- * Load the FlipClock.Lang object
- *
- * @param object The name of the language to load
- */
-
- loadLanguage: function(name) {
- var lang;
-
- if(FlipClock.Lang[name.ucfirst()]) {
- lang = FlipClock.Lang[name.ucfirst()];
- }
- else if(FlipClock.Lang[name]) {
- lang = FlipClock.Lang[name];
- }
- else {
- lang = FlipClock.Lang[this.defaultLanguage];
- }
-
- return this.lang = lang;
- },
-
- /**
- * Localize strings into various languages
- *
- * @param string The index of the localized string
- * @param object Optionally pass a lang object
- */
-
- localize: function(index, obj) {
- var lang = this.lang;
-
- if(!index) {
- return null;
- }
-
- var lindex = index.toLowerCase();
-
- if(typeof obj == "object") {
- lang = obj;
- }
-
- if(lang && lang[lindex]) {
- return lang[lindex];
- }
-
- return index;
- },
-
-
- /**
- * Starts the clock
- */
-
- start: function(callback) {
- var t = this;
-
- if(!t.running && (!t.countdown || t.countdown && t.time.time > 0)) {
- t.face.start(t.time);
- t.timer.start(function() {
- t.flip();
-
- if(typeof callback === "function") {
- callback();
- }
- });
- }
- else {
- t.log('Trying to start timer when countdown already at 0');
- }
- },
-
- /**
- * Stops the clock
- */
-
- stop: function(callback) {
- this.face.stop();
- this.timer.stop(callback);
-
- for(var x in this.lists) {
- if (this.lists.hasOwnProperty(x)) {
- this.lists[x].stop();
- }
- }
- },
-
- /**
- * Reset the clock
- */
-
- reset: function(callback) {
- this.timer.reset(callback);
- this.face.reset();
- },
-
- /**
- * Sets the clock time
- */
-
- setTime: function(time) {
- this.time.time = time;
- this.flip(true);
- },
-
- /**
- * Get the clock time
- *
- * @return object Returns a FlipClock.Time object
- */
-
- getTime: function(time) {
- return this.time;
- },
-
- /**
- * Changes the increment of time to up or down (add/sub)
- */
-
- setCountdown: function(value) {
- var running = this.running;
-
- this.countdown = value ? true : false;
-
- if(running) {
- this.stop();
- this.start();
- }
- },
-
- /**
- * Flip the digits on the clock
- *
- * @param array An array of digits
- */
- flip: function(doNotAddPlayClass) {
- this.face.flip(false, doNotAddPlayClass);
- }
-
- });
-
-}(jQuery));
diff --git a/src/flipclock/js/libs/list.js b/src/flipclock/js/libs/list.js
index fd40a9a8..fb400990 100644
--- a/src/flipclock/js/libs/list.js
+++ b/src/flipclock/js/libs/list.js
@@ -7,57 +7,24 @@
* @copyright 2013 - Objective HTML, LLC
* @licesnse http://www.opensource.org/licenses/mit-license.php
*/
-
+
(function($) {
"use strict";
/**
- * The FlipClock List class is used to build the list used to create
+ * The FlipClock.List class is used to build the list used to create
* the card flip effect. This object fascilates selecting the correct
- * node by passing a specific digit.
- *
- * @param object A FlipClock.Factory object
- * @param mixed This is the digit used to set the clock. If an
- * object is passed, 0 will be used.
- * @param object An object of properties to override the default
+ * node by passing a specific value.
*/
FlipClock.List = FlipClock.Base.extend({
-
- /**
- * The digit (0-9)
- */
-
- digit: 0,
-
- /**
- * The CSS classes
- */
-
- classes: {
- active: 'flip-clock-active',
- before: 'flip-clock-before',
- flip: 'flip'
- },
-
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
+
/**
* The jQuery object
*/
$el: false,
-
- /**
- * The jQuery object (deprecated)
- */
-
- $obj: false,
/**
* The items in the list
@@ -66,141 +33,161 @@
items: [],
/**
- * The last digit
+ * The selected value in the list
*/
- lastDigit: 0,
-
+ value: 0,
+
/**
* Constructor
*
* @param object A FlipClock.Factory object
- * @param int An integer use to select the correct digit
+ * @param int An string or integer use to select the correct value
* @param object An object to override the default properties
*/
- constructor: function(factory, digit, options) {
- this.factory = factory;
- this.digit = digit;
- this.lastDigit = digit;
- this.$el = this.createList();
-
- // Depcrated support of the $obj property.
- this.$obj = this.$el;
-
- if(digit > 0) {
- this.select(digit);
- }
-
- this.factory.$el.append(this.$el);
+ constructor: function(value, options) {
+ this.items = [];
+ this.value = value;
+ this.$el = false;
+
+ this.base(options);
+ this.createList();
+ this.trigger('init');
},
+ /*
+ * Get the default options for the class
+ *
+ * @return object
+ */
+
+ getDefaultOptions: function() {
+ return {
+ /**
+ * The CSS classes
+ */
+
+ classes: {
+ active: 'flipclock-active',
+ before: 'flipclock-before',
+ flip: 'flip',
+ play: 'play'
+ },
+
+ /**
+ * The last value selected in the list
+ */
+
+ lastValue: 0
+ };
+ },
+
/**
- * Select the digit in the list
+ * Select the value in the list
*
- * @param int A digit 0-9
+ * @param int value
+ * @return object
*/
- select: function(digit) {
- if(typeof digit === "undefined") {
- digit = this.digit;
+ select: function(value) {
+ var _afterListItem = this._afterListItem;
+
+ this.setOption('lastValue', this.value);
+
+ if(typeof value === "undefined") {
+ value = this.value;
}
else {
- this.digit = digit;
+ this.value = value;
}
- if(this.digit != this.lastDigit) {
- var $delete = this.$el.find('.'+this.classes.before).removeClass(this.classes.before);
+ if(this.value != this.getOption('lastValue')) {
+ this._beforeListItem.$el.removeClass(this.getOption('classes').before);
- this.$el.find('.'+this.classes.active).removeClass(this.classes.active)
- .addClass(this.classes.before);
+ this.$el.find('.'+this.getOption('classes').active)
+ .removeClass(this.getOption('classes').active)
+ .addClass(this.getOption('classes').before);
- this.appendListItem(this.classes.active, this.digit);
+ this.items.splice(0, 1);
- $delete.remove();
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
- this.lastDigit = this.digit;
+ this._beforeListItem.$el.remove();
+ this._beforeListItem = _afterListItem;
+
+ this.trigger('select', this.value);
}
+
+ return this;
},
-
- /**
- * Adds the play class to the DOM object
- */
-
- play: function() {
- this.$el.addClass(this.factory.classes.play);
+
+ /*
+ * Add the play class to the list
+ *
+ * @return object
+ */
+
+ addPlayClass: function() {
+ this.$el.addClass(this.getOption('classes').play);
+
+ return this;
},
- /**
- * Removes the play class to the DOM object
- */
-
- stop: function() {
- var t = this;
+ /*
+ * Remove the play class to the list
+ *
+ * @return object
+ */
- setTimeout(function() {
- t.$el.removeClass(t.factory.classes.play);
- }, this.factory.timer.interval);
+ removePlayClass: function() {
+ this.$el.removeClass(this.getOption('classes').play);
+
+ return this;
},
/**
* Creates the list item HTML and returns as a string
+ *
+ * @param mixed value
+ * @param string css
+ * @return object
*/
- createListItem: function(css, value) {
- return [
- '',
- '',
- '',
- '
',
- '
'+(value ? value : '')+'
',
- '
',
- '',
- '
',
- '
'+(value ? value : '')+'
',
- '
',
- ' ',
- ' '
- ].join('');
- },
+ createListItem: function(value, css) {
+ var item = new FlipClock.ListItem(value, {
+ className: css
+ });
- /**
- * Append the list item to the parent DOM node
- */
+ this.items.push(item);
+
+ this.$el.append(item.$el);
- appendListItem: function(css, value) {
- var html = this.createListItem(css, value);
+ this.trigger('create:item', item);
- this.$el.append(html);
+ return item;
},
/**
- * Create the list of digits and appends it to the DOM object
+ * Create the list of values and appends it to the DOM object
+ *
+ * @return object
*/
createList: function() {
+ var $el = this.$el = $('');
- var lastDigit = this.getPrevDigit() ? this.getPrevDigit() : this.digit;
+ this._beforeListItem = this.createListItem(this.getPrevValue(), this.getOption('classes').before);
+ this._afterListItem = this.createListItem(this.value, this.getOption('classes').active);
- var html = $([
- '',
- this.createListItem(this.classes.before, lastDigit),
- this.createListItem(this.classes.active, this.digit),
- ' '
- ].join(''));
-
- return html;
- },
-
- getNextDigit: function() {
- return this.digit == 9 ? 0 : this.digit + 1;
- },
+ $el.append(this._beforeListItem.el);
+ $el.append(this._afterListItem.el);
+
+ this.trigger('create:list', $el);
- getPrevDigit: function() {
- return this.digit == 0 ? 9 : this.digit - 1;
+ return $el;
}
});
-
-
-}(jQuery));
+
+}(jQuery));
\ No newline at end of file
diff --git a/src/flipclock/js/libs/plugins.js b/src/flipclock/js/libs/plugins.js
index 5b0d5e42..76a89e60 100644
--- a/src/flipclock/js/libs/plugins.js
+++ b/src/flipclock/js/libs/plugins.js
@@ -7,7 +7,7 @@
* @copyright 2013 - Objective HTML, LLC
* @licesnse http://www.opensource.org/licenses/mit-license.php
*/
-
+
(function($) {
"use strict";
diff --git a/src/flipclock/js/libs/timer.js b/src/flipclock/js/libs/timer.js
deleted file mode 100644
index f729257e..00000000
--- a/src/flipclock/js/libs/timer.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/*jshint smarttabs:true */
-
-/**
- * FlipClock.js
- *
- * @author Justin Kimbrell
- * @copyright 2013 - Objective HTML, LLC
- * @licesnse http://www.opensource.org/licenses/mit-license.php
- */
-
-(function($) {
-
- "use strict";
-
- /**
- * The FlipClock.Timer object managers the JS timers
- *
- * @param object The parent FlipClock.Factory object
- * @param object Override the default options
- */
-
- FlipClock.Timer = FlipClock.Base.extend({
-
- /**
- * Callbacks
- */
-
- callbacks: {
- destroy: false,
- create: false,
- init: false,
- interval: false,
- start: false,
- stop: false,
- reset: false
- },
-
- /**
- * FlipClock timer count (how many intervals have passed)
- */
-
- count: 0,
-
- /**
- * The parent FlipClock.Factory object
- */
-
- factory: false,
-
- /**
- * Timer interval (1 second by default)
- */
-
- interval: 1000,
-
- /**
- * The rate of the animation in milliseconds (not currently in use)
- */
-
- animationRate: 1000,
-
- /**
- * Constructor
- *
- * @return void
- */
-
- constructor: function(factory, options) {
- this.base(options);
- this.factory = factory;
- this.callback(this.callbacks.init);
- this.callback(this.callbacks.create);
- },
-
- /**
- * This method gets the elapsed the time as an interger
- *
- * @return void
- */
-
- getElapsed: function() {
- return this.count * this.interval;
- },
-
- /**
- * This method gets the elapsed the time as a Date object
- *
- * @return void
- */
-
- getElapsedTime: function() {
- return new Date(this.time + this.getElapsed());
- },
-
- /**
- * This method is resets the timer
- *
- * @param callback This method resets the timer back to 0
- * @return void
- */
-
- reset: function(callback) {
- clearInterval(this.timer);
- this.count = 0;
- this._setInterval(callback);
- this.callback(this.callbacks.reset);
- },
-
- /**
- * This method is starts the timer
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- start: function(callback) {
- this.factory.running = true;
- this._createTimer(callback);
- this.callback(this.callbacks.start);
- },
-
- /**
- * This method is stops the timer
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- stop: function(callback) {
- this.factory.running = false;
- this._clearInterval(callback);
- this.callback(this.callbacks.stop);
- this.callback(callback);
- },
-
- /**
- * Clear the timer interval
- *
- * @return void
- */
-
- _clearInterval: function() {
- clearInterval(this.timer);
- },
-
- /**
- * Create the timer object
- *
- * @param callback A function that is called once the timer is created
- * @return void
- */
-
- _createTimer: function(callback) {
- this._setInterval(callback);
- },
-
- /**
- * Destroy the timer object
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _destroyTimer: function(callback) {
- this._clearInterval();
- this.timer = false;
- this.callback(callback);
- this.callback(this.callbacks.destroy);
- },
-
- /**
- * This method is called each time the timer interval is ran
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _interval: function(callback) {
- this.callback(this.callbacks.interval);
- this.callback(callback);
- this.count++;
- },
-
- /**
- * This sets the timer interval
- *
- * @param callback A function that is called once the timer is destroyed
- * @return void
- */
-
- _setInterval: function(callback) {
- var t = this;
-
- t._interval(callback);
-
- t.timer = setInterval(function() {
- t._interval(callback);
- }, this.interval);
- }
-
- });
-
-}(jQuery));
diff --git a/src/flipclock/scss/_fc-base.scss b/src/flipclock/scss/_fc-base.scss
new file mode 100644
index 00000000..be4c6611
--- /dev/null
+++ b/src/flipclock/scss/_fc-base.scss
@@ -0,0 +1,302 @@
+//
+// Flipclock Base Styles
+//
+
+$fc-font-family: "Helvetica Neue", Helvetica, sans-serif !default;
+
+$fc-face-color: #ccc !default;
+$fc-face-background: #333 !default;
+
+.flipclock-wrapper {
+ background: red;
+ font-family: $fc-font-family;
+ font-size: 16px;
+ -webkit-user-select: none;
+
+ text-align: center;
+ position: relative;
+ width: 100%;
+ margin: 1em;
+
+ * {
+ box-sizing: border-box;
+ backface-visibility: hidden;
+ }
+
+ ul {
+ position: relative;
+ float: left;
+ margin: 5px;
+ width: 60px;
+ height: 90px;
+ font-size: 80px;
+ font-weight: bold;
+ line-height: 87px;
+ border-radius: 6px;
+ background: #000;
+ }
+
+ .flipclock-label {
+ font-size: .75em;
+ }
+
+ // clearfix IE8 and up
+ &.clearfix,
+ .clearfix {
+ &:after {
+ content: " ";
+ display: table;
+ clear: both;
+ }
+ }
+
+}
+
+
+
+
+.flipclock-wrapper ul {
+ list-style: none;
+}
+/* Main */
+
+.flipclock-meridium {
+ background: none !important;
+ box-shadow: 0 0 0 !important;
+ font-size: 36px !important;
+}
+.flipclock-meridium a {
+ color: #313333;
+}
+
+/* Skeleton */
+
+.flipclock-wrapper ul {
+
+}
+.flipclock-wrapper ul li {
+ z-index: 1;
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 87px;
+ text-decoration: none !important;
+}
+.flipclock-wrapper ul li:first-child {
+ z-index: 2;
+}
+.flipclock-wrapper ul li a {
+ display: block;
+ height: 100%;
+ -webkit-perspective: 200px;
+ -moz-perspective: 200px;
+ perspective: 200px;
+ margin: 0 !important;
+ overflow: visible !important;
+ cursor: default !important;
+}
+.flipclock-wrapper ul li a div {
+ z-index: 1;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ height: 50%;
+ font-size: 80px;
+ overflow: hidden;
+ outline: 1px solid transparent;
+}
+.flipclock-wrapper ul li a div .shadow {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+.flipclock-wrapper ul li a div.up {
+ transform-origin: 50% 100%;
+ top: 0;
+}
+.flipclock-wrapper ul li a div.up:after {
+ content: "";
+ position: absolute;
+ top: 44px;
+ left: 0;
+ z-index: 5;
+ width: 100%;
+ height: 3px;
+ background-color: #000;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+.flipclock-wrapper ul li a div.down {
+ transform-origin: 50% 0;
+ bottom: 0;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.flipclock-wrapper ul li a div div.inn {
+ position: absolute;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: 200%;
+ color: #ccc;
+ text-shadow: 0 1px 2px #000;
+ text-align: center;
+ background-color: #333;
+ border-radius: 6px;
+ font-size: 70px;
+}
+.flipclock-wrapper ul li a div.up div.inn {
+ top: 0;
+}
+.flipclock-wrapper ul li a div.down div.inn {
+ bottom: 0;
+}
+
+
+/* PLAY */
+
+.flipclock-wrapper ul.play li.flipclock-before {
+ z-index: 3;
+}
+.flipclock-wrapper .flip {
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.7);
+}
+.flipclock-wrapper ul.play li.flipclock-active {
+ animation: asd 0.5s 0.5s linear both;
+ z-index: 5;
+}
+.flipclock-divider {
+ float: left;
+ display: inline-block;
+ position: relative;
+ width: 20px;
+ height: 100px;
+}
+.flipclock-divider:first-child {
+ width: 0;
+}
+.flipclock-dot {
+ display: block;
+ background: #323434;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ border-radius: 50%;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
+ left: 5px;
+}
+.flipclock-divider .flipclock-label {
+ position: absolute;
+ top: -1.5em;
+ right: -86px;
+ color: black;
+ text-shadow: none;
+}
+.flipclock-divider.minutes .flipclock-label {
+ right: -88px;
+}
+.flipclock-divider.seconds .flipclock-label {
+ right: -91px;
+}
+.flipclock-dot.top {
+ top: 30px;
+}
+.flipclock-dot.bottom {
+ bottom: 30px;
+}
+@keyframes asd {
+ 0% {
+ z-index: 2;
+ }
+ 20% {
+ z-index: 4;
+ }
+ 100% {
+ z-index: 4;
+ }
+}
+.flipclock-wrapper ul.play li.flipclock-active .down {
+ animation: turn 0.5s 0.5s linear both;
+}
+@keyframes turn {
+ 0% {
+ transform: rotateX(90deg);
+ }
+ 100% {
+ transform: rotateX(0deg);
+ }
+}
+.flipclock-wrapper ul.play li.flipclock-before .up {
+ z-index: 2;
+ animation: turn2 0.5s linear both;
+}
+@keyframes turn2 {
+ 0% {
+ transform: rotateX(0deg);
+ }
+ 100% {
+ transform: rotateX(-90deg);
+ }
+}
+.flipclock-wrapper ul li.flipclock-active {
+ z-index: 3;
+}
+/* SHADOW */
+
+.flipclock-wrapper ul.play li.flipclock-before .up .shadow {
+ background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
+ background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
+ background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
+ animation: show 0.5s linear both;
+}
+.flipclock-wrapper ul.play li.flipclock-active .up .shadow {
+ background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.1)), color-stop(100%, black));
+ background: linear, top, rgba(0, 0, 0, 0.1) 0%, black 100%;
+ background: -o-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1) 0%, black 100%);
+ background: linear, to bottom, rgba(0, 0, 0, 0.1) 0%, black 100%;
+ animation: hide 0.5s 0.3s linear both;
+}
+/*DOWN*/
+
+.flipclock-wrapper ul.play li.flipclock-before .down .shadow {
+ background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
+ background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
+ background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
+ animation: show 0.5s linear both;
+}
+.flipclock-wrapper ul.play li.flipclock-active .down .shadow {
+ background: -moz-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, black), color-stop(100%, rgba(0, 0, 0, 0.1)));
+ background: linear, top, black 0%, rgba(0, 0, 0, 0.1) 100%;
+ background: -o-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: -ms-linear-gradient(top, black 0%, rgba(0, 0, 0, 0.1) 100%);
+ background: linear, to bottom, black 0%, rgba(0, 0, 0, 0.1) 100%;
+ animation: hide 0.5s 0.2s linear both;
+}
+@keyframes show {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+@keyframes hide {
+ 0% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
diff --git a/src/flipclock/scss/_fc-variables.scss b/src/flipclock/scss/_fc-variables.scss
new file mode 100644
index 00000000..81a64be4
--- /dev/null
+++ b/src/flipclock/scss/_fc-variables.scss
@@ -0,0 +1,4 @@
+//
+// FlipClock Variables
+//
+
diff --git a/src/flipclock/scss/_mixins.scss b/src/flipclock/scss/_mixins.scss
new file mode 100644
index 00000000..829a7698
--- /dev/null
+++ b/src/flipclock/scss/_mixins.scss
@@ -0,0 +1,31 @@
+//
+// Material Shadow Mixin
+// Brian Espinosa
+//
+// Based on http://www.google.com/design/spec/what-is-material/elevation-shadows.html
+//
+
+$material-shadow-color: #000 !default;
+
+@mixin material-shadow($z-height) {
+ @if $z-height == 1 {
+ box-shadow: 0 1.5px 3px rgba($material-shadow-color, 0.24),
+ 0 3px 8px rgba($material-shadow-color, 0.05);
+ }
+ @if $z-height == 2 {
+ box-shadow: 0 4px 7px rgba($material-shadow-color, 0.23),
+ 0 8px 25px rgba($material-shadow-color, 0.05);
+ }
+ @if $z-height == 3 {
+ box-shadow: 0 7px 10px rgba($material-shadow-color, 0.30),
+ 0 10px 50px rgba($material-shadow-color, 0.12);
+ }
+ @if $z-height == 4 {
+ box-shadow: 0 10px 15px rgba($material-shadow-color, 0.28),
+ 0 15px 60px rgba($material-shadow-color, 0.18);
+ }
+ @if $z-height == 5 {
+ box-shadow: 0 16px 20px rgba($material-shadow-color, 0.29),
+ 0 20px 65px rgba($material-shadow-color, 0.18);
+ }
+}
\ No newline at end of file
diff --git a/src/flipclock/scss/_theme-default.scss b/src/flipclock/scss/_theme-default.scss
new file mode 100644
index 00000000..4366a103
--- /dev/null
+++ b/src/flipclock/scss/_theme-default.scss
@@ -0,0 +1,4 @@
+//
+// FlipClock Theme: Default
+//
+
diff --git a/src/flipclock/scss/flipclock.scss b/src/flipclock/scss/flipclock.scss
new file mode 100644
index 00000000..a7e21cc0
--- /dev/null
+++ b/src/flipclock/scss/flipclock.scss
@@ -0,0 +1,249 @@
+//
+// Imports
+//
+
+// Project Variables
+@import "fc-variables";
+
+// Project Mixins
+@import "mixins";
+
+// Flipclock Base Styles
+@import "fc-base";
+
+// Theme Styles
+@import "theme-default";
+
+$fc-face-font-size: 4.5em !default;
+$fc-face-width: 4em !default;
+$fc-face-height: 6em !default;
+
+$fc-flip-shadow-color: #000 !default;
+
+.fc-wrapper {
+// background: red;
+ display: inline-flex;
+ font-size: 1vw;
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
+ box-sizing: border-box;
+ align-items: flex-end;
+
+ .fc-group {
+
+ .fc-label {
+ font-size: .875em;
+ height: 2em;
+ line-height: 2em;
+ }
+
+ .fc-face {
+ float: left;
+ width: $fc-face-width;
+ height: $fc-face-height;
+ background: $fc-face-background;
+ position: relative;
+ border-radius: .75rem;
+ margin: 0 .125em;
+ @include material-shadow(1);
+
+ font-weight: bold;
+ color: $fc-face-color;
+
+ .fc-number {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ perspective: 15em;
+
+ &:first-child {
+ z-index: 2;
+ }
+
+ &.before {
+ z-index: 3;
+
+ .top {
+ z-index: 2;
+ animation: flip-top .5s linear both;
+ transform-origin: bottom center;
+
+ &:after {
+ background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,.1) 0%, rgba($fc-flip-shadow-color,1) 100%);
+ animation: show-shadow .5s linear both;
+ }
+ }
+
+ .bottom {
+
+ &:after {
+ background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,1) 0%, rgba($fc-flip-shadow-color,.1) 100%);
+ animation: show-shadow .5s linear both;
+ }
+ }
+ }
+
+ &.active {
+ animation: indexing .5s .5s linear both;
+ z-index: 2;
+
+ .top {
+
+ &:after {
+ background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,.1) 0%, rgba($fc-flip-shadow-color,1) 100%);
+ animation: hide-shadow .5s .3s linear both;
+ }
+ }
+
+ .bottom {
+ z-index: 2;
+ animation: flip-bottom .5s .5s linear both;
+ transform-origin: top center;
+
+ &:after {
+ background: linear-gradient(to bottom, rgba($fc-flip-shadow-color,1) 0%, rgba($fc-flip-shadow-color,.1) 100%);
+ animation: hide-shadow .5s .3s linear both;
+ }
+ }
+ }
+
+ > .top,
+ > .bottom {
+ background: $fc-face-background;
+ width: 100%;
+ height: 50%;
+ font-size: $fc-face-font-size;
+ overflow: hidden;
+ backface-visibility: hidden;
+ position: relative;
+
+ box-shadow: inset 0 0 .2em rgba(#000,.5);
+
+ &:after {
+ content: " ";
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ }
+
+ &:before {
+ content: " ";
+ display: block;
+ width: 100%;
+ height: 1px;
+ position: absolute;
+ }
+ }
+
+ .top {
+ border-radius: .75rem .75rem 0 0;
+ line-height: $fc-face-height/$fc-face-font-size;
+
+ &:after {
+ border-radius: .75rem .75rem 0 0;
+ }
+
+ &:before {
+ background: $fc-face-background;
+ opacity: .4;
+ bottom: 0;
+ }
+ }
+
+ .bottom {
+ border-radius: 0 0 .75rem .75rem;
+ line-height: 0;
+
+ &:after {
+ border-radius: 0 0 .75rem .75rem;
+ }
+
+ &:before {
+ background: $fc-face-color;
+ opacity: .1;
+ }
+ }
+ }
+ }
+ }
+
+ .fc-divider {
+ position: relative;
+ width: 1.5em;
+ height: $fc-face-height;
+
+ &:before,
+ &:after {
+ content: " ";
+ display: block;
+ width: .75em;
+ height: .75em;
+ background: $fc-face-background;
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ }
+
+ &:before {
+ transform: translate(-50%, 75%);
+ }
+
+ &:after {
+ transform: translate(-50%, -175%);
+ }
+
+ }
+
+}
+
+@keyframes indexing {
+ 0% {
+ z-index: 2;
+ }
+ 1% {
+ z-index: 4;
+ }
+ 100% {
+ z-index: 4;
+ }
+}
+
+@keyframes flip-bottom {
+ 0% {
+ transform: rotateX(90deg);
+ }
+ 100% {
+ transform: rotateX(0deg);
+ }
+}
+
+@keyframes flip-top {
+ 0% {
+ transform: rotateX(0deg);
+ }
+ 100% {
+ transform: rotateX(-90deg);
+ }
+}
+
+@keyframes show-shadow {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes hide-shadow {
+ 0% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
\ No newline at end of file