From 980b8a2924d99261c884328af8a35d6f89e13c71 Mon Sep 17 00:00:00 2001 From: Olexandr Savchuk Date: Wed, 14 Dec 2016 18:54:44 +0100 Subject: [PATCH 001/257] Added console warning for deprecated config options --- CHANGELOG.md | 1 + config/.gitignore | 1 + config/deprecated.js | 12 ++++++++++++ js/app.js | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 config/deprecated.js diff --git a/CHANGELOG.md b/CHANGELOG.md index fb41a8de..8e92ebf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added option `roundTemp` for currentweather and weatherforecast modules to display temperatures rounded to nearest integer. - Added abilty set the classes option to compliments module for style and text size of compliments. - Added ability to configure electronOptions +- Added console warning on startup when deprecated config options are used ### Updated - Modified translations for Frysk. diff --git a/config/.gitignore b/config/.gitignore index d85e3bd4..daeb6336 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -1,2 +1,3 @@ * !config.js.sample +!deprecated.js diff --git a/config/deprecated.js b/config/deprecated.js new file mode 100644 index 00000000..cf305582 --- /dev/null +++ b/config/deprecated.js @@ -0,0 +1,12 @@ +/* Magic Mirror Deprecated Config Options List + * + * By Michael Teeuw http://michaelteeuw.nl + * MIT Licensed. + */ + +var deprecated = [ + 'kioskmode' +]; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== 'undefined') {module.exports = deprecated;} diff --git a/js/app.js b/js/app.js index 29036f69..e5ea72fb 100644 --- a/js/app.js +++ b/js/app.js @@ -42,6 +42,7 @@ var App = function() { try { fs.accessSync(configFilename, fs.F_OK); var c = require(configFilename); + checkDeprecatedOptions(c); var config = Object.assign(defaults, c); callback(config); } catch (e) { @@ -58,6 +59,21 @@ var App = function() { } }; + var checkDeprecatedOptions = function(userConfig) { + var deprecatedOptions = require(__dirname + "/../config/deprecated.js"); + var usedDeprecated = []; + + deprecatedOptions.forEach(function(option) { + if (userConfig.hasOwnProperty(option)) { + usedDeprecated.push(option); + } + }); + + if (usedDeprecated.length > 0) { + console.error("WARNING! Your config is using deprecated options: " + usedDeprecated.join(", ") + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality."); + } + } + /* loadModule(module) * Loads a specific module. * From 98855de71fc7d2f2bcb1f47087237d840484ae0a Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 31 Dec 2016 21:25:49 +0100 Subject: [PATCH 002/257] Changes in preperation of 2.1.1 --- CHANGELOG.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..94fc3495 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [2.1.1] - Unreleased + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` diff --git a/package.json b/package.json index 118c9837..54c60f92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.1.0", + "version": "2.1.1", "description": "A modular interface for smart mirrors.", "main": "js/electron.js", "scripts": { From 3947deb7bdedba7b4e43690c49d00866319ae282 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 7 Dec 2016 17:19:05 +0100 Subject: [PATCH 003/257] Add async callback to module when loaded --- js/app.js | 54 ++++++++++++++--------- modules/README.md | 15 +++++++ modules/node_modules/node_helper/index.js | 5 +++ 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/js/app.js b/js/app.js index ba6cd1a9..91149906 100644 --- a/js/app.js +++ b/js/app.js @@ -66,7 +66,7 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModule = function(module) { + var loadModule = function(module, callback) { var elements = module.split("/"); var moduleName = elements[elements.length - 1]; @@ -103,6 +103,10 @@ var App = function() { m.setName(moduleName); m.setPath(path.resolve(moduleFolder)); nodeHelpers.push(m); + + m.loaded(callback); + } else { + callback(); } }; @@ -111,14 +115,24 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModules = function(modules) { + var loadModules = function(modules, callback) { console.log("Loading module helpers ..."); - for (var m in modules) { - loadModule(modules[m]); - } + var loadNextModule = function() { + if (modules.length > 0) { + var nextModule = modules[0]; + loadModule(nextModule, function() { + modules = modules.slice(1); + loadNextModule(); + }); + } else { + // All modules are loaded + console.log("All module helpers loaded."); + callback(); + } + }; - console.log("All module helpers loaded."); + loadNextModule(); }; /* cmpVersions(a,b) @@ -164,24 +178,24 @@ var App = function() { } } - loadModules(modules); + loadModules(modules, function() { + var server = new Server(config, function(app, io) { + console.log("Server started ..."); - var server = new Server(config, function(app, io) { - console.log("Server started ..."); + for (var h in nodeHelpers) { + var nodeHelper = nodeHelpers[h]; + nodeHelper.setExpressApp(app); + nodeHelper.setSocketIO(io); + nodeHelper.start(); + } - for (var h in nodeHelpers) { - var nodeHelper = nodeHelpers[h]; - nodeHelper.setExpressApp(app); - nodeHelper.setSocketIO(io); - nodeHelper.start(); - } + console.log("Sockets connected & modules started ..."); - console.log("Sockets connected & modules started ..."); - - if (typeof callback === "function") { - callback(config); - } + if (typeof callback === "function") { + callback(config); + } + }); }); }); }; diff --git a/modules/README.md b/modules/README.md index 42a31dfa..03664b15 100644 --- a/modules/README.md +++ b/modules/README.md @@ -96,6 +96,21 @@ requiresVersion: "2.1.0", ####`init()` This method is called when a module gets instantiated. In most cases you do not need to subclass this method. +####`loaded(callback)` + +*Introduced in version: 2.1.1.* + +This method is called when a module is loaded. Subsequent modules in the config are not yet loaded. The `callback` function MUST be called when the module is done loading. In most cases you do not need to subclass this method. + +**Example:** +````javascript +loaded: function(callback) { + this.finishLoading(); + Log.log(this.name + ' is loaded!'); + callback(); +} +```` + ####`start()` This method is called when all modules are loaded an the system is ready to boot up. Keep in mind that the dom object for the module is not yet created. The start method is a perfect place to define any additional module properties: diff --git a/modules/node_modules/node_helper/index.js b/modules/node_modules/node_helper/index.js index dc57ef36..bdeccf8b 100644 --- a/modules/node_modules/node_helper/index.js +++ b/modules/node_modules/node_helper/index.js @@ -14,6 +14,11 @@ NodeHelper = Class.extend({ console.log("Initializing new module helper ..."); }, + loaded: function(callback) { + console.log("Module helper loaded: " + this.name); + callback(); + }, + start: function() { console.log("Staring module helper: " + this.name); }, From a7619771a637e165dc706f56a992e1e6ea6cec46 Mon Sep 17 00:00:00 2001 From: Ben Brosnahan Date: Mon, 2 Jan 2017 21:31:21 +0000 Subject: [PATCH 004/257] Add error handling to newsfeed --- modules/default/newsfeed/fetcher.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index b7511de9..f4fb44d9 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -85,7 +85,12 @@ var Fetcher = function(url, reloadInterval, encoding) { nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)"} - request({uri: url, encoding: null, headers: headers}).pipe(iconv.decodeStream(encoding)).pipe(parser); + request({uri: url, encoding: null, headers: headers}) + .on("error", function(error) { + fetchFailedCallback(self, error); + scheduleTimer(); + }) + .pipe(iconv.decodeStream(encoding)).pipe(parser); }; From 4882a801d252bfdd8ab46c067eed0e612678f293 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Tue, 3 Jan 2017 17:46:41 +0100 Subject: [PATCH 005/257] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94fc3495..e4e8687f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [2.1.1] - Unreleased +- Add loaded function to modules, providing an async callback. ## [2.1.0] - 2016-12-31 From 8ac8b666bf435f90dc81c980b170b13e7f63c53a Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 4 Jan 2017 08:59:37 +0100 Subject: [PATCH 006/257] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4e8687f..6408d1d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [2.1.1] - Unreleased + +### Added - Add loaded function to modules, providing an async callback. ## [2.1.0] - 2016-12-31 From adb8de97546a6dd07773717d6380ea1a8f7a7f56 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 4 Jan 2017 10:46:31 +0100 Subject: [PATCH 007/257] Enabled newsfeed default module for gesture events from https://github.com/thobach/MMM-Gestures --- modules/default/newsfeed/newsfeed.js | 101 ++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 8 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 74014208..152505dc 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -89,7 +89,8 @@ Module.register("newsfeed",{ if (this.newsItems.length > 0) { - if (this.config.showSourceTitle || this.config.showPublishDate) { + // this.config.showFullArticle is a run-time configuration, triggered by optional gestures + if (!this.config.showFullArticle && (this.config.showSourceTitle || this.config.showPublishDate)) { var sourceAndTimestamp = document.createElement("div"); sourceAndTimestamp.className = "light small dimmed"; @@ -151,18 +152,32 @@ Module.register("newsfeed",{ } } - - var title = document.createElement("div"); - title.className = "bright medium light"; - title.innerHTML = this.newsItems[this.activeItem].title; - wrapper.appendChild(title); - + + if(!this.config.showFullArticle){ + var title = document.createElement("div"); + title.className = "bright medium light"; + title.innerHTML = this.newsItems[this.activeItem].title; + wrapper.appendChild(title); + } + if (this.config.showDescription) { var description = document.createElement("div"); description.className = "small light"; description.innerHTML = this.newsItems[this.activeItem].description; wrapper.appendChild(description); } + + if (this.config.showFullArticle) { + var fullArticle = document.createElement("iframe"); + fullArticle.className = ""; + fullArticle.style.width = "100%"; + fullArticle.style.height = "1735px"; + fullArticle.style.border = "none"; + fullArticle.src = this.newsItems[this.activeItem].url; + wrapper.appendChild(fullArticle); + } + + } else { wrapper.innerHTML = this.translate("LOADING"); @@ -256,7 +271,7 @@ Module.register("newsfeed",{ self.updateDom(self.config.animationSpeed); - setInterval(function() { + timer = setInterval(function() { self.activeItem++; self.updateDom(self.config.animationSpeed); }, this.config.updateInterval); @@ -272,6 +287,76 @@ Module.register("newsfeed",{ capitalizeFirstLetter: function(string) { return string.charAt(0).toUpperCase() + string.slice(1); }, + + notificationReceived: function(notification, payload, sender) { + Log.info(this.name + " - received event"); + if(notification == 'GESTURE'){ + Log.info(this.name + " - received gesture"); + var gesture = payload.gesture; + // actually RIGHT, because gesture sensor is built in upside down + if(gesture == 'LEFT'){ + Log.info(this.name + " - received right"); + var before = this.activeItem; + this.activeItem++; + if (this.activeItem >= this.newsItems.length) { + this.activeItem = 0; + } + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); + } + Log.info(this.name + " - going from " + before + " to " + this.activeItem + " (of " + this.newsItems.length + ")"); + this.updateDom(100); + } + // actually LEFT, because gesture sensor is built in upside down + else if(gesture == 'RIGHT'){ + Log.info(this.name + " - received left"); + var before = this.activeItem; + this.activeItem--; + if (this.activeItem < 0) { + this.activeItem = this.newsItems.length - 1; + } + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); + } + Log.info(this.name + " - going from " + before + " to " + this.activeItem + " (of " + this.newsItems.length + ")"); + this.updateDom(100); + } + // actually UP, because gesture sensor is built in upside down + else if(gesture == 'DOWN' && !this.config.showDescription){ + Log.info(this.name + " - received up"); + this.config.showDescription = true; + this.config.showFullArticle = false; + clearInterval(timer); + timer = null; + this.updateDom(100); + } + // actually DOWN, because gesture sensor is built in upside down + else if(gesture == 'UP'){ + Log.info(this.name + " - received down"); + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); + } + this.updateDom(100); + } + // actually UP, because gesture sensor is built in upside down + else if(gesture == 'DOWN' && this.config.showDescription){ + Log.info(this.name + " - received up again"); + this.config.showFullArticle = true; + this.config.showDescription = false; + clearInterval(timer); + timer = null; + this.updateDom(100); + } else { + Log.info(this.name + " - received other: " + gesture); + } + } + }, }); From 0099b6d4a2df5f9741560a237420b57f98cde343 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 4 Jan 2017 10:56:03 +0100 Subject: [PATCH 008/257] Added change to CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..fea09a07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [develop] - release date to be defined +- Made default newsfeed module aware of gesture events from https://github.com/thobach/MMM-Gestures + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 6251b77b288c43e235ba6b0e6baacc20073bcf64 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 4 Jan 2017 11:01:07 +0100 Subject: [PATCH 009/257] Fixed code formatting issues --- modules/default/newsfeed/newsfeed.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 152505dc..0fdc9220 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -152,21 +152,21 @@ Module.register("newsfeed",{ } } - + if(!this.config.showFullArticle){ var title = document.createElement("div"); title.className = "bright medium light"; title.innerHTML = this.newsItems[this.activeItem].title; wrapper.appendChild(title); } - + if (this.config.showDescription) { var description = document.createElement("div"); description.className = "small light"; description.innerHTML = this.newsItems[this.activeItem].description; wrapper.appendChild(description); } - + if (this.config.showFullArticle) { var fullArticle = document.createElement("iframe"); fullArticle.className = ""; @@ -176,8 +176,8 @@ Module.register("newsfeed",{ fullArticle.src = this.newsItems[this.activeItem].url; wrapper.appendChild(fullArticle); } - - + + } else { wrapper.innerHTML = this.translate("LOADING"); @@ -287,14 +287,14 @@ Module.register("newsfeed",{ capitalizeFirstLetter: function(string) { return string.charAt(0).toUpperCase() + string.slice(1); }, - + notificationReceived: function(notification, payload, sender) { Log.info(this.name + " - received event"); - if(notification == 'GESTURE'){ + if(notification == "GESTURE"){ Log.info(this.name + " - received gesture"); var gesture = payload.gesture; // actually RIGHT, because gesture sensor is built in upside down - if(gesture == 'LEFT'){ + if(gesture == "LEFT"){ Log.info(this.name + " - received right"); var before = this.activeItem; this.activeItem++; @@ -310,7 +310,7 @@ Module.register("newsfeed",{ this.updateDom(100); } // actually LEFT, because gesture sensor is built in upside down - else if(gesture == 'RIGHT'){ + else if(gesture == "RIGHT"){ Log.info(this.name + " - received left"); var before = this.activeItem; this.activeItem--; @@ -326,7 +326,7 @@ Module.register("newsfeed",{ this.updateDom(100); } // actually UP, because gesture sensor is built in upside down - else if(gesture == 'DOWN' && !this.config.showDescription){ + else if(gesture == "DOWN" && !this.config.showDescription){ Log.info(this.name + " - received up"); this.config.showDescription = true; this.config.showFullArticle = false; @@ -335,7 +335,7 @@ Module.register("newsfeed",{ this.updateDom(100); } // actually DOWN, because gesture sensor is built in upside down - else if(gesture == 'UP'){ + else if(gesture == "UP"){ Log.info(this.name + " - received down"); this.config.showDescription = false; this.config.showFullArticle = false; @@ -345,7 +345,7 @@ Module.register("newsfeed",{ this.updateDom(100); } // actually UP, because gesture sensor is built in upside down - else if(gesture == 'DOWN' && this.config.showDescription){ + else if(gesture == "DOWN" && this.config.showDescription){ Log.info(this.name + " - received up again"); this.config.showFullArticle = true; this.config.showDescription = false; From 09531b399a5b992b9c7080c0371487ae899ffcb7 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 4 Jan 2017 11:04:33 +0100 Subject: [PATCH 010/257] Fixed Link formatting in MD --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fea09a07..bcb6b70a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [develop] - release date to be defined -- Made default newsfeed module aware of gesture events from https://github.com/thobach/MMM-Gestures +- Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) ## [2.1.0] - 2016-12-31 From af41e4892ff3d7b7aa8ee9620fd62650c69331c1 Mon Sep 17 00:00:00 2001 From: IgniparousTempest Date: Wed, 4 Jan 2017 16:26:49 +0200 Subject: [PATCH 011/257] Afrikaans language translation --- translations/af.json | 34 ++++++++++++++++++++++++++++++++++ translations/translations.js | 1 + 2 files changed, 35 insertions(+) create mode 100644 translations/af.json diff --git a/translations/af.json b/translations/af.json new file mode 100644 index 00000000..894b14ea --- /dev/null +++ b/translations/af.json @@ -0,0 +1,34 @@ +{ + /* GENERAL */ + "LOADING": "Besig om te laai …", + + /* CALENDAR */ + "TODAY": "Vandag", + "TOMORROW": "Môre", + "DAYAFTERTOMORROW": "Oormôre", + "RUNNING": "Eindig in", + "EMPTY": "Geen komende gebeurtenisse.", + + /* WEATHER */ + "N": "N", + "NNE": "NNO", + "NE": "NO", + "ENE": "ONO", + "E": "O", + "ESE": "OSO", + "SE": "SO", + "SSE": "SSO", + "S": "S", + "SSW": "SSW", + "SW": "SW", + "WSW": "WSW", + "W": "W", + "WNW": "WNW", + "NW": "NW", + "NNW": "NNW", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² update beskikbaar.", + "UPDATE_NOTIFICATION_MODULE": "Update beskikbaar vir MODULE_NAME module.", + "UPDATE_INFO": "Die huidige installasie is COMMIT_COUNT agter op die BRANCH_NAME branch." +} diff --git a/translations/translations.js b/translations/translations.js index d572c803..d5e74882 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -26,4 +26,5 @@ var translations = { "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish + "af" : "translations/af.json", // Afrikaans }; From 6552157894e6047b72dbbdf7339bedd96dea96fe Mon Sep 17 00:00:00 2001 From: Rodrigo Ramez Norambuena Date: Wed, 4 Jan 2017 12:52:21 -0300 Subject: [PATCH 012/257] Remove white flash on boot up When the electron app is started appear a white flash before show the MagicMirror system. This patch remove the white flash on boot up. --- CHANGELOG.md | 3 +++ js/electron.js | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6408d1d2..cefc49c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - Add loaded function to modules, providing an async callback. +### Fixed +- Remove white flash on boot up + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` diff --git a/js/electron.js b/js/electron.js index 173abe68..1f16092b 100644 --- a/js/electron.js +++ b/js/electron.js @@ -28,7 +28,8 @@ function createWindow() { webPreferences: { nodeIntegration: false, zoomFactor: config.zoom - } + }, + backgroundColor: "#000000" } // DEPRECATED: "kioskmode" backwards compatibility, to be removed From 92e0affb85df7f920524ebc0bcd2a82068c31626 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 4 Jan 2017 19:22:59 +0100 Subject: [PATCH 013/257] Disable pointer-events on fullscreen overlay --- CHANGELOG.md | 1 + css/main.css | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94fc3495..dc97e5ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [2.1.1] - Unreleased +- Make mouse events pass through the region fullscreen_above to modules below. ## [2.1.0] - 2016-12-31 diff --git a/css/main.css b/css/main.css index 5e63e596..f1c07fa0 100644 --- a/css/main.css +++ b/css/main.css @@ -135,6 +135,11 @@ sup { left: -60px; right: -60px; bottom: -60px; + pointer-events: none; +} + +.region.fullscreen * { + pointer-events: auto; } .region.right { From 396bbd83c8bbee6d92a892cfdb7c5e958427b8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 1 Jan 2017 19:51:50 -0300 Subject: [PATCH 014/257] modified installer to use config.js.sample for init config. --- CHANGELOG.md | 3 +++ installers/raspberry.sh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6408d1d2..852df9c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [2.1.1] - Unreleased +### Changed +- Installer: Use init config.js from config.js.sample. + ### Added - Add loaded function to modules, providing an async callback. diff --git a/installers/raspberry.sh b/installers/raspberry.sh index cd995a1e..b970d02e 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -113,6 +113,9 @@ else exit; fi +# Use sample config for start MagicMirror +cp config/config.js.sample config/config.js + # Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen. echo -e "\e[96mCheck plymouth installation ...\e[0m" if command_exists plymouth; then From 01cf4cc1ed4dcf26eeb8a9722bc828ef9664778b Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Fri, 6 Jan 2017 11:21:20 -0800 Subject: [PATCH 015/257] Added Russian Translations Redo of the PR #598 **Added:** - Russian Translations **Fixed:** - corrected .gitignore rules for default modules (Reasoning behind change: when I added translation for `alert` module `git add` was telling me that `.gitignore` rule excludes files and folders under `modules/default`) I also noticed that `.gitignore:56` has following declaration: ``` !/modules/node_helper !/modules/node_helper/** ``` but I don't think this directory structure exists today (also there is a small typo) --- .gitignore | 5 ++-- CHANGELOG.md | 8 +++++ modules/default/alert/translations/ru.json | 4 +++ translations/ru.json | 34 ++++++++++++++++++++++ translations/translations.js | 1 + 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 modules/default/alert/translations/ru.json create mode 100644 translations/ru.json diff --git a/.gitignore b/.gitignore index 67feae54..9e51215c 100644 --- a/.gitignore +++ b/.gitignore @@ -58,8 +58,9 @@ Temporary Items !/modules/node_helper/** # Ignore all modules except the default modules. -/modules/** -!/modules/default/** +!/modules/ +/modules/* +!/modules/default/ !/modules/README.md** # Ignore changes to the custom css files. diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..bc627832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [2.1.1] - Unreleased + +### Added +- Russian Translation + +### Fixed +- corrected .gitignore rules for default modules + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` diff --git a/modules/default/alert/translations/ru.json b/modules/default/alert/translations/ru.json new file mode 100644 index 00000000..ef7ee708 --- /dev/null +++ b/modules/default/alert/translations/ru.json @@ -0,0 +1,4 @@ +{ + "sysTitle": "MagicMirror Уведомление", + "welcome": "Добро пожаловать, старт был успешным!"" +} diff --git a/translations/ru.json b/translations/ru.json new file mode 100644 index 00000000..053385ee --- /dev/null +++ b/translations/ru.json @@ -0,0 +1,34 @@ +{ + /* GENERAL */ + "LOADING": "Загрузка …", + + /* CALENDAR */ + "TODAY": "Сегодня", + "TOMORROW": "Завтра", + "DAYAFTERTOMORROW": "Послезавтра", + "RUNNING": "Заканчивается через", + "EMPTY": "Нет предстоящих событий", + + /* WEATHER */ + "N": "С", + "NNE": "ССВ", + "NE": "СВ", + "ENE": "ВСВ", + "E": "В", + "ESE": "ВЮВ", + "SE": "ЮВ", + "SSE": "ЮЮВ", + "S": "Ю", + "SSW": "ЮЮЗ", + "SW": "ЮЗ", + "WSW": "ЗЮЗ", + "W": "З", + "WNW": "ЗСЗ", + "NW": "СЗ", + "NNW": "ССЗ", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "Есть обновление для MagicMirror².", + "UPDATE_NOTIFICATION_MODULE": "Есть обновление для MODULE_NAME модуля.", + "UPDATE_INFO": "Данная инсталляция позади BRANCH_NAME ветки на COMMIT_COUNT коммитов." +} diff --git a/translations/translations.js b/translations/translations.js index d572c803..71d086f5 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -26,4 +26,5 @@ var translations = { "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish + "ru" : "translations/ru.json", // Russian }; From b8a72245dc93d59f026a499dfe76883e877a21e2 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Fri, 6 Jan 2017 21:57:30 +0100 Subject: [PATCH 016/257] Using generic news feed events as notifications, instead of more implementation specific gestures from sensor --- modules/default/newsfeed/newsfeed.js | 114 ++++++++++++--------------- 1 file changed, 51 insertions(+), 63 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 0fdc9220..28bc4a0e 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -89,7 +89,7 @@ Module.register("newsfeed",{ if (this.newsItems.length > 0) { - // this.config.showFullArticle is a run-time configuration, triggered by optional gestures + // this.config.showFullArticle is a run-time configuration, triggered by optional notifications if (!this.config.showFullArticle && (this.config.showSourceTitle || this.config.showPublishDate)) { var sourceAndTimestamp = document.createElement("div"); sourceAndTimestamp.className = "light small dimmed"; @@ -289,74 +289,62 @@ Module.register("newsfeed",{ }, notificationReceived: function(notification, payload, sender) { - Log.info(this.name + " - received event"); - if(notification == "GESTURE"){ - Log.info(this.name + " - received gesture"); - var gesture = payload.gesture; - // actually RIGHT, because gesture sensor is built in upside down - if(gesture == "LEFT"){ - Log.info(this.name + " - received right"); - var before = this.activeItem; - this.activeItem++; - if (this.activeItem >= this.newsItems.length) { - this.activeItem = 0; - } - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } - Log.info(this.name + " - going from " + before + " to " + this.activeItem + " (of " + this.newsItems.length + ")"); - this.updateDom(100); + Log.info(this.name + " - received notification: " + notification); + if(notification == "ARTICLE_NEXT"){ + var before = this.activeItem; + this.activeItem++; + if (this.activeItem >= this.newsItems.length) { + this.activeItem = 0; } - // actually LEFT, because gesture sensor is built in upside down - else if(gesture == "RIGHT"){ - Log.info(this.name + " - received left"); - var before = this.activeItem; - this.activeItem--; - if (this.activeItem < 0) { - this.activeItem = this.newsItems.length - 1; - } - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } - Log.info(this.name + " - going from " + before + " to " + this.activeItem + " (of " + this.newsItems.length + ")"); - this.updateDom(100); + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); } - // actually UP, because gesture sensor is built in upside down - else if(gesture == "DOWN" && !this.config.showDescription){ - Log.info(this.name + " - received up"); - this.config.showDescription = true; - this.config.showFullArticle = false; - clearInterval(timer); - timer = null; - this.updateDom(100); + Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")"); + this.updateDom(100); + } else if(notification == "ARTICLE_PREVIOUS"){ + var before = this.activeItem; + this.activeItem--; + if (this.activeItem < 0) { + this.activeItem = this.newsItems.length - 1; } - // actually DOWN, because gesture sensor is built in upside down - else if(gesture == "UP"){ - Log.info(this.name + " - received down"); - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } - this.updateDom(100); + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); } - // actually UP, because gesture sensor is built in upside down - else if(gesture == "DOWN" && this.config.showDescription){ - Log.info(this.name + " - received up again"); - this.config.showFullArticle = true; - this.config.showDescription = false; - clearInterval(timer); - timer = null; - this.updateDom(100); - } else { - Log.info(this.name + " - received other: " + gesture); + Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")"); + this.updateDom(100); + } + // received "more details" the first time, so showing article summary + else if(notification == "ARTICLE_MORE_DETAILS" && !this.config.showDescription){ + this.config.showDescription = true; + this.config.showFullArticle = false; + clearInterval(timer); + timer = null; + Log.info(this.name + " - showing article description"); + this.updateDom(100); + } else if(notification == "ARTICLE_LESS_DETAILS"){ + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); } + Log.info(this.name + " - showing only article titles again"); + this.updateDom(100); + } + // received "more details" a second time, so showing full article + else if(notification == "ARTICLE_MORE_DETAILS" && this.config.showDescription){ + this.config.showFullArticle = true; + this.config.showDescription = false; + clearInterval(timer); + timer = null; + Log.info(this.name + " - showing full article"); + this.updateDom(100); + } else { + Log.info(this.name + " - unknown notification, ignoring: " + notification); } }, - }); From 443a90c7baec08f3254912ba428e2eea717eb887 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Sat, 7 Jan 2017 22:42:11 +0100 Subject: [PATCH 017/257] Made full article view of news full-screen on any screen size --- modules/default/newsfeed/newsfeed.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 28bc4a0e..55f2de58 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -171,7 +171,10 @@ Module.register("newsfeed",{ var fullArticle = document.createElement("iframe"); fullArticle.className = ""; fullArticle.style.width = "100%"; - fullArticle.style.height = "1735px"; + fullArticle.style.top = "0"; + fullArticle.style.left = "0"; + fullArticle.style.position = "fixed"; + fullArticle.height = window.innerHeight; fullArticle.style.border = "none"; fullArticle.src = this.newsItems[this.activeItem].url; wrapper.appendChild(fullArticle); From 456502893ca94234bba8965b04e86db61158edd4 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Sun, 8 Jan 2017 14:38:16 +0100 Subject: [PATCH 018/257] Addressed code review comments to reduce redundant lines --- modules/default/newsfeed/newsfeed.js | 45 ++++++++++------------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 55f2de58..aed917f8 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -291,6 +291,14 @@ Module.register("newsfeed",{ return string.charAt(0).toUpperCase() + string.slice(1); }, + resetDescrOrFullArticleAndTimer: function() { + this.config.showDescription = false; + this.config.showFullArticle = false; + if(!timer){ + this.scheduleUpdateInterval(); + } + }, + notificationReceived: function(notification, payload, sender) { Log.info(this.name + " - received notification: " + notification); if(notification == "ARTICLE_NEXT"){ @@ -299,11 +307,7 @@ Module.register("newsfeed",{ if (this.activeItem >= this.newsItems.length) { this.activeItem = 0; } - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } + this.resetDescrOrFullArticleAndTimer(); Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")"); this.updateDom(100); } else if(notification == "ARTICLE_PREVIOUS"){ @@ -312,39 +316,22 @@ Module.register("newsfeed",{ if (this.activeItem < 0) { this.activeItem = this.newsItems.length - 1; } - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } + this.resetDescrOrFullArticleAndTimer(); Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")"); this.updateDom(100); } - // received "more details" the first time, so showing article summary - else if(notification == "ARTICLE_MORE_DETAILS" && !this.config.showDescription){ - this.config.showDescription = true; - this.config.showFullArticle = false; + // if "more details" is received the first time: show article summary, on second time show full article + else if(notification == "ARTICLE_MORE_DETAILS"){ + this.config.showDescription = !this.config.showDescription; + this.config.showFullArticle = !this.config.showDescription; clearInterval(timer); timer = null; - Log.info(this.name + " - showing article description"); + Log.info(this.name + " - showing " + this.config.showDescription ? "article description" : "full article"); this.updateDom(100); } else if(notification == "ARTICLE_LESS_DETAILS"){ - this.config.showDescription = false; - this.config.showFullArticle = false; - if(!timer){ - this.scheduleUpdateInterval(); - } + this.resetDescrOrFullArticleAndTimer(); Log.info(this.name + " - showing only article titles again"); this.updateDom(100); - } - // received "more details" a second time, so showing full article - else if(notification == "ARTICLE_MORE_DETAILS" && this.config.showDescription){ - this.config.showFullArticle = true; - this.config.showDescription = false; - clearInterval(timer); - timer = null; - Log.info(this.name + " - showing full article"); - this.updateDom(100); } else { Log.info(this.name + " - unknown notification, ignoring: " + notification); } From 6171e5cc6e80cac1eaa30e40e34a3cfe1dc1446b Mon Sep 17 00:00:00 2001 From: aaronaxvig Date: Sun, 8 Jan 2017 18:02:45 -0700 Subject: [PATCH 019/257] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7c5286dd..7d3ea0a4 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The following wiki links are helpful in the configuration of your MagicMirror² - [Auto Starting MagicMirror](https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror) ### Updating your MagicMirror² - +8 If you want to update your MagicMirror² to the latest version, use your terminal to go to your Magic Mirror folder and type the following command: ```bash @@ -83,7 +83,7 @@ The following properties can be configured: | `timeFormat` | The form of time notation that will be used. Possible values are `12` or `24`. The default is `24`. | | `units` | The units that will be used in the default weather modules. Possible values are `metric` or `imperial`. The default is `metric`. | | `modules` | An array of active modules. **The array must contain objects. See the next table below for more information.** | -| `electronOptions` | An optional array of Electron (browser) options. This allows configuration of e.g. the browser screen size and position (defaults `.width = 800` & `.height = 600`). Kiosk mode can be enabled by setting `.kiosk = true`, `.autoHideMenuBar = false`, `.fullscreen = false`. More options can be found [here](https://github.com/electron/electron/blob/master/docs/api/browser-window.md). | +| `electronOptions` | An optional array of Electron (browser) options. This allows configuration of e.g. the browser screen size and position (example: `electronOptions: { fullscreen: false, width: 800, height: 600 }`). Kiosk mode can be enabled by setting `.kiosk = true`, `.autoHideMenuBar = false`, `.fullscreen = false`. More options can be found [here](https://github.com/electron/electron/blob/master/docs/api/browser-window.md). | Module configuration: From a97fa1abb60877db4eef18209625f259eef46632 Mon Sep 17 00:00:00 2001 From: aaronaxvig Date: Sun, 8 Jan 2017 18:14:30 -0700 Subject: [PATCH 020/257] Remove errant character --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7d3ea0a4..3086d466 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,6 @@ The following wiki links are helpful in the configuration of your MagicMirror² - [Auto Starting MagicMirror](https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror) ### Updating your MagicMirror² -8 If you want to update your MagicMirror² to the latest version, use your terminal to go to your Magic Mirror folder and type the following command: ```bash From 6466bd4ba75cbd1c8e386dc00a6835b188541457 Mon Sep 17 00:00:00 2001 From: aaronaxvig Date: Sun, 8 Jan 2017 18:15:48 -0700 Subject: [PATCH 021/257] Add back missing newline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3086d466..01b94178 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ The following wiki links are helpful in the configuration of your MagicMirror² - [Auto Starting MagicMirror](https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror) ### Updating your MagicMirror² + If you want to update your MagicMirror² to the latest version, use your terminal to go to your Magic Mirror folder and type the following command: ```bash From d71fd0ff2d85e6b96f2602b05a8ae6b0a4bff47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 9 Jan 2017 20:39:48 -0300 Subject: [PATCH 022/257] Add pm2 configuration for manager MagicMirror in script installer --- CHANGELOG.md | 1 + installers/mm.sh | 2 ++ installers/pm2_MagicMirror.json | 7 +++++++ installers/raspberry.sh | 6 ++++++ 4 files changed, 16 insertions(+) create mode 100755 installers/mm.sh create mode 100644 installers/pm2_MagicMirror.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 6408d1d2..8f6205eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - Add loaded function to modules, providing an async callback. +- Add use pm2 for manager process into Installer RaspberryPi script ## [2.1.0] - 2016-12-31 diff --git a/installers/mm.sh b/installers/mm.sh new file mode 100755 index 00000000..cc6c4bb3 --- /dev/null +++ b/installers/mm.sh @@ -0,0 +1,2 @@ +cd ~/MagicMirror +DISPLAY=:0 npm start diff --git a/installers/pm2_MagicMirror.json b/installers/pm2_MagicMirror.json new file mode 100644 index 00000000..55f8df31 --- /dev/null +++ b/installers/pm2_MagicMirror.json @@ -0,0 +1,7 @@ +{ + apps : [{ + name : "MagicMirror", + script : "/home/pi/MagicMirror/installer/mm.sh", + watch : ["/home/pi/MagicMirror/config/config.js"] + }] +} diff --git a/installers/raspberry.sh b/installers/raspberry.sh index cd995a1e..df3994bc 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -141,6 +141,12 @@ else echo -e "\e[93mplymouth is not installed.\e[0m"; fi +# Use pm2 control like a service MagicMirror +sudo npm install -g pm2 +sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u pi --hp /home/pi" +pm2 start ~/MagicMirror/installers/pm2_MagicMirror.json +pm2 save + echo " " echo -e "\e[92mWe're ready! Run \e[1m\e[97mDISPLAY=:0 npm start\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror.\e[0m" echo " " From 2e9b6ead2e18be7187f171e4969481529ec26840 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Mon, 9 Jan 2017 17:31:01 +0100 Subject: [PATCH 023/257] Fix gitignore to not ignore default modules folder /modules/** makes git ignore all directories and files in /modules, so it's not even looking in /modules/default for changes. !/modules/default/** is therefore never used. By adding the new line !/modules/default, git is told to look in the /modules/default folder for changes and will find all sub files/dirs and match these on !/modules/default/**. --- .gitignore | 1 + CHANGELOG.md | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 67feae54..1e17ef8b 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ Temporary Items # Ignore all modules except the default modules. /modules/** +!/modules/default !/modules/default/** !/modules/README.md** diff --git a/CHANGELOG.md b/CHANGELOG.md index 6408d1d2..149b9644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - Add loaded function to modules, providing an async callback. +### Fixed +- Update .gitignore to not ignore default modules folder + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 831d8b6d362af7672a0e7f573ee75b11555025ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 10 Jan 2017 15:21:59 -0300 Subject: [PATCH 024/257] update year license for 2017 --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index d4765af2..09ac7e6f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,7 @@ The MIT License (MIT) ===================== -Copyright © 2016 Michael Teeuw +Copyright © 2016-2017 Michael Teeuw Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation From 544e7fce8870843bc8e6c976ffafc32e68380875 Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Tue, 10 Jan 2017 11:05:37 -0800 Subject: [PATCH 025/257] removing .gitignore changes and changelog notes about it --- .gitignore | 5 ++--- CHANGELOG.md | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 9e51215c..67feae54 100644 --- a/.gitignore +++ b/.gitignore @@ -58,9 +58,8 @@ Temporary Items !/modules/node_helper/** # Ignore all modules except the default modules. -!/modules/ -/modules/* -!/modules/default/ +/modules/** +!/modules/default/** !/modules/README.md** # Ignore changes to the custom css files. diff --git a/CHANGELOG.md b/CHANGELOG.md index 98876061..c046352c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add loaded function to modules, providing an async callback. - Russian Translation -### Fixed -- corrected .gitignore rules for default modules - ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 49abe2b11f32034569f13de689fcfd0a71d9cee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 10 Jan 2017 16:11:29 -0300 Subject: [PATCH 026/257] Fix capitalize missing word Community --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c5286dd..126a1d7f 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ MagicMirror² focuses on a modular plugin system and uses [Electron](http://elec - [Configuration](#configuration) - [Modules](#modules) - [Known Issues](#known-issues) -- [community](#community) +- [Community](#community) - [Contributing Guidelines](#contributing-guidelines) ## Usage From c302030301900c037e9bb089a819afc08608875c Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 11 Jan 2017 11:19:33 +0100 Subject: [PATCH 027/257] Added documentation on supported notifications and related third party modules --- modules/default/newsfeed/README.md | 48 +++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 58c7b9ae..8a0fec25 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -1,9 +1,10 @@ # Module: News Feed The `newsfeed ` module is one of the default modules of the MagicMirror. -This module displays news headlines based on an RSS feed. +This module displays news headlines based on an RSS feed. Scrolling through news headlines happens time-based (````updateInterval````), but can also be controlled by sending news feed specific notifications to the module. ## Using the module +### Configuration To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ @@ -30,6 +31,51 @@ modules: [ ] ```` +### Notifications +#### Interacting with the module +MagicMirror's [notification mechanism](https://github.com/MichMich/MagicMirror/tree/master/modules#thissendnotificationnotification-payload) allows to send notifications to the ````newsfeed```` module. The following notifications are supported: + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Notification IdentifierDescription
ARTICLE_NEXTShows the next news title (hiding the summary or previously fully displayed article)
ARTICLE_PREVIOUSShows the previous news title (hiding the summary or previously fully displayed article)
ARTICLE_MORE_DETAILS

When received the *first time*, shows the corresponding description of the currently displayed news title.
The module expects that the module's configuration option ````showDescription```` is set to ````false```` (default value).

+ When received a *second consecutive time*, shows the full news article in an IFRAME.
+ This requires that the news page can be embedded in an IFRAME, e.g. doesn't have the HTTP response header [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) set to e.g. ````DENY````.
ARTICLE_LESS_DETAILSHides the summary or full news article and only displays the news title of the currently viewed news item.
+ +Note the payload of the sent notification event is ignored. + +#### Example +The following example shows how the next news article title can be displayed on the MagicMirror. +````javascript +this.sendNotification('ARTICLE_NEXT'); +```` + +#### ````newsfeed```` specific notification emitting modules +The third party [MMM-Gestures](https://github.com/thobach/MMM-Gestures) module supports above notifications when moving your hand up, down, left or right in front of a gesture sensor attached to the MagicMirror. See module's readme for more details. + ## Configuration options The following properties can be configured: From 3ba16f17734c7da7aa8505943dd03d155bb732e0 Mon Sep 17 00:00:00 2001 From: Thomas Bachmann Date: Wed, 11 Jan 2017 11:32:20 +0100 Subject: [PATCH 028/257] Merge remote-tracking branch 'MichMich/develop' --- .gitignore | 1 + CHANGELOG.md | 12 ++++- LICENSE.md | 2 +- installers/raspberry.sh | 3 ++ js/app.js | 54 ++++++++++++++--------- js/electron.js | 3 +- modules/README.md | 15 +++++++ modules/default/newsfeed/fetcher.js | 7 ++- modules/node_modules/node_helper/index.js | 5 +++ package.json | 2 +- 10 files changed, 79 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 67feae54..1e17ef8b 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ Temporary Items # Ignore all modules except the default modules. /modules/** +!/modules/default !/modules/default/** !/modules/README.md** diff --git a/CHANGELOG.md b/CHANGELOG.md index bcb6b70a..65119703 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,19 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [develop] - release date to be defined +## [2.1.1] - Unreleased + +### Changed +- Installer: Use init config.js from config.js.sample. + +### Added +- Add loaded function to modules, providing an async callback. - Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) +### Fixed +- Update .gitignore to not ignore default modules folder. +- Remove white flash on boot up. + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` diff --git a/LICENSE.md b/LICENSE.md index d4765af2..09ac7e6f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,7 @@ The MIT License (MIT) ===================== -Copyright © 2016 Michael Teeuw +Copyright © 2016-2017 Michael Teeuw Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/installers/raspberry.sh b/installers/raspberry.sh index cd995a1e..b970d02e 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -113,6 +113,9 @@ else exit; fi +# Use sample config for start MagicMirror +cp config/config.js.sample config/config.js + # Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen. echo -e "\e[96mCheck plymouth installation ...\e[0m" if command_exists plymouth; then diff --git a/js/app.js b/js/app.js index ba6cd1a9..91149906 100644 --- a/js/app.js +++ b/js/app.js @@ -66,7 +66,7 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModule = function(module) { + var loadModule = function(module, callback) { var elements = module.split("/"); var moduleName = elements[elements.length - 1]; @@ -103,6 +103,10 @@ var App = function() { m.setName(moduleName); m.setPath(path.resolve(moduleFolder)); nodeHelpers.push(m); + + m.loaded(callback); + } else { + callback(); } }; @@ -111,14 +115,24 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModules = function(modules) { + var loadModules = function(modules, callback) { console.log("Loading module helpers ..."); - for (var m in modules) { - loadModule(modules[m]); - } + var loadNextModule = function() { + if (modules.length > 0) { + var nextModule = modules[0]; + loadModule(nextModule, function() { + modules = modules.slice(1); + loadNextModule(); + }); + } else { + // All modules are loaded + console.log("All module helpers loaded."); + callback(); + } + }; - console.log("All module helpers loaded."); + loadNextModule(); }; /* cmpVersions(a,b) @@ -164,24 +178,24 @@ var App = function() { } } - loadModules(modules); + loadModules(modules, function() { + var server = new Server(config, function(app, io) { + console.log("Server started ..."); - var server = new Server(config, function(app, io) { - console.log("Server started ..."); + for (var h in nodeHelpers) { + var nodeHelper = nodeHelpers[h]; + nodeHelper.setExpressApp(app); + nodeHelper.setSocketIO(io); + nodeHelper.start(); + } - for (var h in nodeHelpers) { - var nodeHelper = nodeHelpers[h]; - nodeHelper.setExpressApp(app); - nodeHelper.setSocketIO(io); - nodeHelper.start(); - } + console.log("Sockets connected & modules started ..."); - console.log("Sockets connected & modules started ..."); - - if (typeof callback === "function") { - callback(config); - } + if (typeof callback === "function") { + callback(config); + } + }); }); }); }; diff --git a/js/electron.js b/js/electron.js index 173abe68..1f16092b 100644 --- a/js/electron.js +++ b/js/electron.js @@ -28,7 +28,8 @@ function createWindow() { webPreferences: { nodeIntegration: false, zoomFactor: config.zoom - } + }, + backgroundColor: "#000000" } // DEPRECATED: "kioskmode" backwards compatibility, to be removed diff --git a/modules/README.md b/modules/README.md index 42a31dfa..03664b15 100644 --- a/modules/README.md +++ b/modules/README.md @@ -96,6 +96,21 @@ requiresVersion: "2.1.0", ####`init()` This method is called when a module gets instantiated. In most cases you do not need to subclass this method. +####`loaded(callback)` + +*Introduced in version: 2.1.1.* + +This method is called when a module is loaded. Subsequent modules in the config are not yet loaded. The `callback` function MUST be called when the module is done loading. In most cases you do not need to subclass this method. + +**Example:** +````javascript +loaded: function(callback) { + this.finishLoading(); + Log.log(this.name + ' is loaded!'); + callback(); +} +```` + ####`start()` This method is called when all modules are loaded an the system is ready to boot up. Keep in mind that the dom object for the module is not yet created. The start method is a perfect place to define any additional module properties: diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index b7511de9..f4fb44d9 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -85,7 +85,12 @@ var Fetcher = function(url, reloadInterval, encoding) { nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)"} - request({uri: url, encoding: null, headers: headers}).pipe(iconv.decodeStream(encoding)).pipe(parser); + request({uri: url, encoding: null, headers: headers}) + .on("error", function(error) { + fetchFailedCallback(self, error); + scheduleTimer(); + }) + .pipe(iconv.decodeStream(encoding)).pipe(parser); }; diff --git a/modules/node_modules/node_helper/index.js b/modules/node_modules/node_helper/index.js index dc57ef36..bdeccf8b 100644 --- a/modules/node_modules/node_helper/index.js +++ b/modules/node_modules/node_helper/index.js @@ -14,6 +14,11 @@ NodeHelper = Class.extend({ console.log("Initializing new module helper ..."); }, + loaded: function(callback) { + console.log("Module helper loaded: " + this.name); + callback(); + }, + start: function() { console.log("Staring module helper: " + this.name); }, diff --git a/package.json b/package.json index 118c9837..54c60f92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.1.0", + "version": "2.1.1", "description": "A modular interface for smart mirrors.", "main": "js/electron.js", "scripts": { From 4bb3d33907816b139e4fc4a3a174c17d12ea275d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 11 Jan 2017 10:22:13 -0300 Subject: [PATCH 029/257] add choice to use pm2 for auto starting of MagicMirror --- installers/raspberry.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index df3994bc..b6ab3435 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -142,10 +142,14 @@ else fi # Use pm2 control like a service MagicMirror -sudo npm install -g pm2 -sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u pi --hp /home/pi" -pm2 start ~/MagicMirror/installers/pm2_MagicMirror.json -pm2 save +read -p "Do you want use pm2 for auto starting of your MagicMirror (y/n)?" choice +if [[ $choice =~ ^[Yy]$ ]] +then + sudo npm install -g pm2 + sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u pi --hp /home/pi" + pm2 start ~/MagicMirror/installers/pm2_MagicMirror.json + pm2 save +fi echo " " echo -e "\e[92mWe're ready! Run \e[1m\e[97mDISPLAY=:0 npm start\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror.\e[0m" From d542c063d7e7fd4165bf31de6084c34ec67dd50d Mon Sep 17 00:00:00 2001 From: IgniparousTempest Date: Wed, 11 Jan 2017 21:42:31 +0200 Subject: [PATCH 030/257] Updated CHANGELOG.md to include Afrikkans translation --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..b5573bc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [2.1.1] - Unreleased + +### Added +- Add loaded function to modules, providing an async callback. +- Afrikaans translation. + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 07d5b0774833110197f638fb04fbc5249f99e15c Mon Sep 17 00:00:00 2001 From: Courtney Pitcher Date: Wed, 11 Jan 2017 21:48:33 +0200 Subject: [PATCH 031/257] Update Changelog.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a3b4dd3..982ecf4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Update .gitignore to not ignore default modules folder. - Remove white flash on boot up. + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 6d1b0ae498f38e9efee66a32db935ca7f01f3695 Mon Sep 17 00:00:00 2001 From: Greg Dev Date: Thu, 12 Jan 2017 01:33:13 +0100 Subject: [PATCH 032/257] Add Polish translation for UPDATE_INFO --- translations/pl.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/pl.json b/translations/pl.json index 7a47745b..06bf3b5c 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -24,10 +24,10 @@ "W": "W", "WNW": "WNW", "NW": "NW", - "NNW": "NNW" - + "NNW": "NNW", + /* UPDATE INFO */ "UPDATE_NOTIFICATION": "Dostępna jest aktualizacja MagicMirror².", "UPDATE_NOTIFICATION_MODULE": "Dostępna jest aktualizacja modułu MODULE_NAME.", - "UPDATE_INFO": "The current installation is COMMIT_COUNT behind on the BRANCH_NAME branch." + "UPDATE_INFO": "Zainstalowana wersja odbiega o COMMIT_COUNT commitów od gałęzi BRANCH_NAME." } From 3cea6e5d0cea7b4e927e7182c29d0b0b1b1f01f3 Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 12 Jan 2017 09:58:02 +0100 Subject: [PATCH 033/257] Add apt-get update in raspberry.sh script Just tried this script and realized that it is likely that it will fail because the apt index is not up to date. The trivial fix seems to be to add an `apt-get update` before the package installation. It should be harmless also. --- installers/raspberry.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index b970d02e..e91c2850 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -36,6 +36,10 @@ fi function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; } function command_exists () { type "$1" &> /dev/null ;} +# Update before first apt-get +echo -e "\e[96mUpdating packages ...\e[90m" +sudo apt-get update || exit + # Installing helper tools echo -e "\e[96mInstalling helper tools ...\e[90m" sudo apt-get install curl wget git build-essential unzip || exit From af85ef8cfbd2aaf99556302e5834500b6bacb997 Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 12 Jan 2017 17:15:58 +0100 Subject: [PATCH 034/257] removing unnecessary exit, leaving a warning --- installers/raspberry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index e91c2850..3ba16795 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -38,7 +38,7 @@ function command_exists () { type "$1" &> /dev/null ;} # Update before first apt-get echo -e "\e[96mUpdating packages ...\e[90m" -sudo apt-get update || exit +sudo apt-get update || echo -e "\e[91mUpdate failed, carrying on installation ...\e[90m" # Installing helper tools echo -e "\e[96mInstalling helper tools ...\e[90m" From ab9e0f891ab035904c733b7085a30fa9f7b71ba2 Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 12 Jan 2017 17:25:33 +0100 Subject: [PATCH 035/257] updating CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b061f6f..aead7517 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Update .gitignore to not ignore default modules folder. - Remove white flash on boot up. +- Added `update` in Raspberry Pi installation script. ## [2.1.0] - 2016-12-31 From 2f7be0559a00a65071a133388d82978ac58cea9a Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 14 Jan 2017 19:31:24 +0100 Subject: [PATCH 036/257] Switch to rrule-alt. Issue: #565 --- CHANGELOG.md | 7 +++++-- modules/default/calendar/vendor/ical.js/node-ical.js | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a06df56..09c1d13d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [2.1.1] - Unreleased -- Make mouse events pass through the region fullscreen_above to modules below. + +**Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Changed - Installer: Use init config.js from config.js.sample. +- Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) +- Make mouse events pass through the region fullscreen_above to modules below. ### Added - Add loaded function to modules, providing an async callback. @@ -136,7 +139,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Added reference to Italian Translation. -- Added the missing NE translation to all languages. [#334](https://github.com/MichMich/MagicMirror/issues/344) +- Added the missing NE translation to all languages. [#565](https://github.com/MichMich/MagicMirror/issues/344) - Added proper User-Agent string to calendar call. ### Changed diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index 2f6ef3ef..e2c4a319 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -17,7 +17,7 @@ exports.parseFile = function(filename){ } -var rrule = require('rrule').RRule +var rrule = require('rrule-alt').RRule ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ curr.rrule = line; diff --git a/package.json b/package.json index 54c60f92..37ebbf0f 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "iconv-lite": "latest", "moment": "latest", "request": "^2.78.0", - "rrule": "latest", + "rrule-alt": "^2.2.3", "simple-git": "^1.62.0", "socket.io": "^1.5.1", "valid-url": "latest", From 0d672420f75a272686e5a7406ac3fe0351e06c64 Mon Sep 17 00:00:00 2001 From: Nicholas Hubbard Date: Sat, 14 Jan 2017 15:32:59 -0500 Subject: [PATCH 037/257] Add postinstall script for installation --- installers/postinstall/postinstall.sh | 2 ++ package.json | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 installers/postinstall/postinstall.sh diff --git a/installers/postinstall/postinstall.sh b/installers/postinstall/postinstall.sh new file mode 100644 index 00000000..dc19df98 --- /dev/null +++ b/installers/postinstall/postinstall.sh @@ -0,0 +1,2 @@ +echo "\033[32mMagicMirror installation successful!" +exit 0 diff --git a/package.json b/package.json index 118c9837..9d69eb58 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "A modular interface for smart mirrors.", "main": "js/electron.js", "scripts": { - "start": "electron js/electron.js" + "start": "electron js/electron.js", + "postinstall": "sh installers/postinstall.sh" }, "repository": { "type": "git", From 5c4d1c025924755c20da29e0b08c97bbf17eee8d Mon Sep 17 00:00:00 2001 From: Nicholas Hubbard Date: Sat, 14 Jan 2017 15:37:32 -0500 Subject: [PATCH 038/257] Add CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09c1d13d..4fc72060 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Installer: Use init config.js from config.js.sample. - Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) -- Make mouse events pass through the region fullscreen_above to modules below. +- Make mouse events pass through the region fullscreen\_above to modules below. ### Added - Add loaded function to modules, providing an async callback. @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add use pm2 for manager process into Installer RaspberryPi script - Russian Translation - Afrikaans Translation +- Add postinstall script to notify user that MagicMirror installed successfully despite warnings from NPM. ### Fixed - Update .gitignore to not ignore default modules folder. From f4c8db654c8a1c0ff663f076e03bc5fd59f3dfa5 Mon Sep 17 00:00:00 2001 From: Nicholas Hubbard Date: Sat, 14 Jan 2017 15:42:29 -0500 Subject: [PATCH 039/257] Fix postinstall error. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 32ed0b40..5b85915a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "js/electron.js", "scripts": { "start": "electron js/electron.js", - "postinstall": "sh installers/postinstall.sh" + "postinstall": "sh installers/postinstall/postinstall.sh" }, "repository": { "type": "git", From 65a8b831502febb9f936144b51bfe7876500d458 Mon Sep 17 00:00:00 2001 From: Nicholas Hubbard Date: Sat, 14 Jan 2017 15:46:38 -0500 Subject: [PATCH 040/257] Add Cache --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index f2d34342..b37becb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,3 +5,6 @@ node_js: before_script: - npm install grunt-cli -g script: grunt +cache: + directories: + - node_modules From 1cf8e08d4b8fe045b6ca99bf0d97d8faaff73b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 14 Jan 2017 19:37:09 -0300 Subject: [PATCH 041/257] Changelog: fix number reference issue. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09c1d13d..2e4e77e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -139,7 +139,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Added reference to Italian Translation. -- Added the missing NE translation to all languages. [#565](https://github.com/MichMich/MagicMirror/issues/344) +- Added the missing NE translation to all languages. [#344](https://github.com/MichMich/MagicMirror/issues/344) - Added proper User-Agent string to calendar call. ### Changed From 4c3dce694a12c1d547c15df725c9f2bbf958bc57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 15 Jan 2017 14:10:48 -0300 Subject: [PATCH 042/257] fix blackslash introduce in Pull Request #619 URL Pull Request: https://github.com/MichMich/MagicMirror/pull/619 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24e72147..62c93e6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Installer: Use init config.js from config.js.sample. - Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) -- Make mouse events pass through the region fullscreen\_above to modules below. +- Make mouse events pass through the region fullscreen_above to modules below. ### Added - Add loaded function to modules, providing an async callback. From 949f7587dc5fbb8975883728872fb6d981ade33f Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sun, 15 Jan 2017 19:38:46 +0100 Subject: [PATCH 043/257] Solve issue: #611 --- modules/default/clock/clock.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index c84c133e..e0a4326d 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -134,6 +134,10 @@ Module.register("clock",{ if (this.config.analogFace != "" && this.config.analogFace != "simple" && this.config.analogFace != "none") { clockCircle.style.background = "url("+ this.data.path + "faces/" + this.config.analogFace + ".svg)"; clockCircle.style.backgroundSize = "100%"; + + // The following line solves issue: https://github.com/MichMich/MagicMirror/issues/611 + clockCircle.style.border = "1px solid black"; + } else if (this.config.analogFace != "none") { clockCircle.style.border = "2px solid white"; } From 3a8d72db313e62729dbb6f9061415ff615b7ba0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 15 Jan 2017 15:40:23 -0300 Subject: [PATCH 044/257] init tests: This patch propouse use the mocha for testing MagicMirror. --- js/module.js | 4 ++++ package.json | 5 ++++- tests/functions/compare-version.js | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/functions/compare-version.js diff --git a/js/module.js b/js/module.js index 67305a9c..b12f6cd4 100644 --- a/js/module.js +++ b/js/module.js @@ -415,3 +415,7 @@ Module.register = function (name, moduleDefinition) { Log.log("Module registered: " + name); Module.definitions[name] = moduleDefinition; }; + +exports._test = { + cmpVersions: cmpVersions +} diff --git a/package.json b/package.json index 5b85915a..0cc8f497 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "js/electron.js", "scripts": { "start": "electron js/electron.js", - "postinstall": "sh installers/postinstall/postinstall.sh" + "postinstall": "sh installers/postinstall/postinstall.sh", + "test": "./node_modules/mocha/bin/mocha tests --recursive" }, "repository": { "type": "git", @@ -27,12 +28,14 @@ }, "homepage": "https://github.com/MichMich/MagicMirror#readme", "devDependencies": { + "chai": "^3.5.0", "grunt": "latest", "grunt-eslint": "latest", "grunt-jsonlint": "latest", "grunt-markdownlint": "^1.0.13", "grunt-stylelint": "latest", "grunt-yamllint": "latest", + "mocha": "^3.2.0", "stylelint-config-standard": "latest", "time-grunt": "latest" }, diff --git a/tests/functions/compare-version.js b/tests/functions/compare-version.js new file mode 100644 index 00000000..77efa422 --- /dev/null +++ b/tests/functions/compare-version.js @@ -0,0 +1,21 @@ +var chai = require('chai'); +var expect = chai.expect; +var classMM = require('../../js/class.js'); // require for load module.js +var moduleMM = require('../../js/module.js') + +describe('Test function cmpVersions into js/module.js', function() { + + it('Should be return -1 ', function() { + expect(moduleMM._test.cmpVersions('2.1', '2.2')).to.equal(-1); + }); + + it('Should be return 0 ', function() { + expect(moduleMM._test.cmpVersions('2.2', '2.2')).to.equal(0); + }); + + it('Should be return 1', function() { + expect(moduleMM._test.cmpVersions('1.1', '1.0')).to.equal(1); + }); + +}); + From 1d02154d998a4e68bded7639385b48ee592ab9db Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sun, 15 Jan 2017 19:41:42 +0100 Subject: [PATCH 045/257] Fix eslint issues. --- modules/default/clock/clock.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index e0a4326d..1882c52e 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -137,7 +137,7 @@ Module.register("clock",{ // The following line solves issue: https://github.com/MichMich/MagicMirror/issues/611 clockCircle.style.border = "1px solid black"; - + } else if (this.config.analogFace != "none") { clockCircle.style.border = "2px solid white"; } From 865dce6f6843dbe13c2870e6d84afb5ee6b041a1 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sun, 15 Jan 2017 20:36:11 +0100 Subject: [PATCH 046/257] Add info about issue #611. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62c93e6a..df41689b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Update .gitignore to not ignore default modules folder. - Remove white flash on boot up. - Added `update` in Raspberry Pi installation script. +- Fix an issue where the analog clock looked scrambled. ([#611](https://github.com/MichMich/MagicMirror/issues/611)) ## [2.1.0] - 2016-12-31 From a4cb53fdb4af6eaea652c3baa77a3cd92e4ebd49 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sun, 15 Jan 2017 21:16:01 +0100 Subject: [PATCH 047/257] Show correct units for showRainAmount --- CHANGELOG.md | 1 + modules/default/weatherforecast/weatherforecast.js | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df41689b..e0caa6de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Remove white flash on boot up. - Added `update` in Raspberry Pi installation script. - Fix an issue where the analog clock looked scrambled. ([#611](https://github.com/MichMich/MagicMirror/issues/611)) +- If units is set to imperial, the showRainAmount option of weatherforecast will show the correct unit. ## [2.1.0] - 2016-12-31 diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 9bd15ba8..0b389873 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -150,7 +150,11 @@ Module.register("weatherforecast",{ if (isNaN(forecast.rain)) { rainCell.innerHTML = ""; } else { - rainCell.innerHTML = forecast.rain + " mm"; + if(config.units !== "imperial") { + rainCell.innerHTML = forecast.rain + " mm"; + } else { + rainCell.innerHTML = (parseFloat(forecast.rain) / 25.4).toFixed(2) + " in"; + } } rainCell.className = "align-right bright rain"; row.appendChild(rainCell); From 29e82cc50911995105bb5106775988b29508d130 Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 16 Jan 2017 02:27:12 +0100 Subject: [PATCH 048/257] Fix Typo Change E into R --- modules/default/calendar/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index b636b30b..b719ac01 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -360,7 +360,7 @@ Module.register("calendar", { /* capFirst(string) * Capitalize the first letter of a string - * Eeturn capitalized string + * Return capitalized string */ capFirst: function (string) { From c95a37130ac09ff9fed4bb6fff9ec4f3aa025609 Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 16 Jan 2017 02:36:10 +0100 Subject: [PATCH 049/257] Remove unused uelf variable --- modules/default/calendar/node_helper.js | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index a1b8db09..cc511659 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -12,7 +12,6 @@ var CalendarFetcher = require("./calendarfetcher.js"); module.exports = NodeHelper.create({ // Override start method. start: function() { - var self = this; var events = []; this.fetchers = []; From 4cb3b514ab75f2f899762089d6873c91480462e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 15 Jan 2017 22:41:16 -0300 Subject: [PATCH 050/257] update CHANGELOG test --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0caa6de..718e3785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Russian Translation - Afrikaans Translation - Add postinstall script to notify user that MagicMirror installed successfully despite warnings from NPM. +- Init tests using mocha. ### Fixed - Update .gitignore to not ignore default modules folder. From 49fb9108e98aafb706f40a54bd3c354d90f36477 Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 16 Jan 2017 02:49:08 +0100 Subject: [PATCH 051/257] Add Regexp possibility to titleReplace Check if the given needle is a regexp, if so create one and use it instead --- modules/default/calendar/calendar.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index b636b30b..d0527408 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -379,6 +379,13 @@ Module.register("calendar", { titleTransform: function (title) { for (var needle in this.config.titleReplace) { var replacement = this.config.titleReplace[needle]; + + var regParts = needle.match(/^\/(.+)\/([gim]*)$/); + if (regParts) { + // the parsed pattern is a regexp. + needle = new RegExp(regParts[1], regParts[2]); + } + title = title.replace(needle, replacement); } From c1a5f59c422a84109b3ad4a265924f8b66080a08 Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 16 Jan 2017 02:52:50 +0100 Subject: [PATCH 052/257] Remove Trailing space --- modules/default/calendar/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index d0527408..9ecf1389 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -382,7 +382,7 @@ Module.register("calendar", { var regParts = needle.match(/^\/(.+)\/([gim]*)$/); if (regParts) { - // the parsed pattern is a regexp. + // the parsed pattern is a regexp. needle = new RegExp(regParts[1], regParts[2]); } From 6ea225ed2a8529e4effbb9034df8880e10ce1756 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Mon, 16 Jan 2017 11:53:02 +0100 Subject: [PATCH 053/257] Rescale Splash Screen --- CHANGELOG.md | 1 + splashscreen/splash.png | Bin 19820 -> 37062 bytes 2 files changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0caa6de..c9a73c34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Installer: Use init config.js from config.js.sample. - Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. +- Scaled the splash screen down to make it a bit more subtle. ### Added - Add loaded function to modules, providing an async callback. diff --git a/splashscreen/splash.png b/splashscreen/splash.png index f3da394b8f65fd41ede188b53093021400029123..b2acc49539505c9bcc991e155f5b4decc9534069 100644 GIT binary patch literal 37062 zcmeFacUaR|7B?O%Dk#p1D578qV3dx4KmZjHBTYd?x|C3)M0!t9N7z9H4ZUWRHi&@I zdqe~b9g$u_?+^$j1OoZpFS@hr%~p?&B}lHB|QQ zIkE=^gY89Ky{rX;Z3o3|uw6UBufoEEd%>^W_pj@VrGMOK5mM(w6>Q&Nhud zWWm34qQ}2ICl&U964KG!LRRbYm2cgFzvNF^IXmB%6%lcBa}#!x5XLxK0&*D{5m9jw zad9C~L&(X)-r2-m$lmGH*GB%)&SkWdnWOc6XKRf8aj0DrQ;dtV{K=D0N54Pc=4E&P z_m1qHzF`MY6md7XFCr!^D)LuE=4QXs+;?%b-58p=nF!hzZHKmZb^>%_e@S=W3ge7% zvcmkEE`R^}-*ybvL|y&&zW;K(c6NW+wUe{5D}dk|q<=~2bkpNLT0{%&gmG~+Lo2(2 zshs+&**jZX{Bv>sr6uT_e>--xyY;^zgTDDnw!sQtR|pB_Dy!s(HgU!{-o#*R6~1!W z^?yKkTuBMyDoJ6<h&h74Q`V~**iI#*qfnImlePZVQXu1S#h)T(q>W?GD2u^aTB3)5)x=38PRj%Lg!_~ z&&ilei%UtHifw?XuD+T4PfcIOn7KeZ=3CR||6|je$p6%|rlU2Gb|$u)>OiCaU%U8= zX8zRGRcj}}qaK@h7jW=~Jkv%y{Oj9)d|_+7A(!r(I69%BT_=C?AKUJCLH4_xf@n5& zudIm~B+(SipiO}`M~eK*+kX!0cgk;M*8hJO@N4^<$p3vGZdPdf|FogLHnmaf-#6lf zv2b=XaYSFV1U&KI?)R@P|10SqyFiLSTEN!&Ul-%++kai7e{k)e*Axi}H(9_BU~DEE z>i}5%Pw)QO^Vj-!pmnu%*{ClqE(#tIG3fIf>E^HhNUHmvNjHD}N78>%-m(d*`w>*uzc`XNrl6pZiAj$FKg9 zRQI2x(o*L)Q*Qd^8|By4+N9Yx7W3;{U^f7hMdWvz!VkDMqw(GH54gSy z(dG(2;M$DFcgsKE`YuG9EBt_KGaBD5|A6be5N)pT1Fp?ze7F1quJ1y$xxx>)Hly*~ z@(;Ma3(@8ZKj7Mo#&^p<;QB5^n=AZ)Ycm?(E&qV)yAW-z@B^;RXneQ)1Fr8vw7J3$ zxHhBl-SQ8(z6;Uj3P0f5jK+7%Kj8W$?zbuJ8k{&1ihL`~$A< zLbSQU54bj?@!j$dxV{U~<_bUH+Kk3`%Rk`yE<~Fv{D5mS8s9Ddfa|*uZLaVGuFYtC zxBLUH??SY>!VkDMqw(GHe}rq#KW_n|?ZMSQH*m+VgJgFI+z&i%c2!Fq2J_^D!F(UV zV00$-cJzg<}XdjXFhB&X|I$JMo z-+KD^C*_M5_rAJbyyN2a-yFwoXxiB2%?x(8iS9pj{iktmjQ&qe9EU;AAIIst@%B$m{HOl@*aYl9_4mI_^}@zj{!`a~8s~rN z`j6xMpQd_zV=RAc;{VN5|1|6GLiB%cs^9JUPY_+$K=Qw&`=6%zKdsJ2<>MP;`7i1I z%OQWA-~YmhUm^OxH`V`T&%rh-|6iM`?*`!i6rPN_lD`* zmh_PuUz~vyuveq5qNJui;6{y+wd7Ty;nHba0eEDafdGF&f#BE`8&^E>s^dNU44fG< z#HukI8K03M;?Ik9pUEE#Tv%L8)Jl13DVY^)5H%D+og?zmtKc-L?Jxm8dOVeEEZne| zC%YBQz_(B}7-mDN!1F&Y~#T{5mN zL;ZAWexW&@Ck}TJUx4s)XSAG-W8Mugf}xsh?!JtNIKDmZRB%jbaIY5yu6pdDwRE@q z30@6qqkVpcs<`vc#qrGZ%Csrctg|0)_5Gk`kCE}|>AKc5eF>Y^H^ozEks4JaDt=*M zVam$!{WW}ZHIsRoWEk&Vw6Z_lLvGFh;-RTa^&Ke6DmC+}sppy{9=$gxkDq?swL$lz zoZA4sDHJ9kahi710=tOwGu^2%dQVhU0n_pG zOX&G?M2bfgHo5(|sqIRtw)0t{Bx$;6ZoO2vV!LOvd|AIaJEq_a>4{b?qZC2P%bM&h zFbQfRlL>(7`BcN;s4yY@Fz|q-mR8I;MLIFeBpfc+w^b7}zGg$;u^|k)Zc$!)*PSaJ zeK^I~-MM7W9c+;6KQ;LaDzIU}@2E=BVXSBeRuB7*HHCbzPg%tC2B(l-h`xOR-`U%5 zt|n@sY$h+%m8LM{yTgV?&F-vW_daHFrtJlAAEtVoQ?h)59X!VZvrNcW)-%Kfq>mN8 z74PT_F2+V}^OcZrcdSd+W>dNU*p+?XmX(zi$4@8x&F2OxbPF8O=_N~@Z}juhd%1rV zA+cA!n@~Ekb$kE*3$0Hcc3K z&2Vm4B!pUz|Dzn8&rU})`?i7sD- zxo>lS4i}O!TLveqi`B@njZII-TJ4&h;mBipAxYucr+tB0eLj>!r;FH|&3MDc6RvnG z>XDyKu%M<`|j*wf%P0&@7<&Yy96p)=qb+k@j6mMt6BjwO{_;b`7ioBtPznGQsmc`kif+s z3Ne0Gs>jLX=d<{@|88%whYXW3KaUSDhCksHx~5vQPq7q>Bz42j;u-O`x3^dF8u-5K z3`XLI{NTxwf{JpaLrJqf#?h~8?)3yC3T+yyzw{=T2$ANsyOq|)I3z3^gow1u9h`0g z1u_-3bMo5V>q3ai1VYSEJDeq~t2ugLV$pE;UBNqpR$DB-1CcJ6$FEB$bCR7JDql!#A zP=4ry<9%(JX~`tsiWVGDbMH^@Nr2O@X~V7)<;fEWPx1(fnJ&!wxIlXWJCA4F!{>!m zlv#DZ7l5$LSYk6z?LuLi9EwnwZcz=3ieji zc-8pC{e2K$EKzZcZy$HXymV;STnd~V^-(H4q(WD+qJ^etwcKkH%rMzW^Ny@-;Lfnq zTWaw$JIB@kfqagmT{Bd9#Y&)o@eEGE?1Gi*$0@n6!0A`<(xE07vy}1db5eo`LX z|HRmOkAAN~Dbu067;DYd&S*Q_HPlVD9RC9MqVyH`AS|kxqf`SjvTX1joP?7?+AHwH zqJ+`+aR+#7) z?A{&jgDm|!xMcl2GLfkW+pD>CO4lPF(!6|hZ!)G22QU*N#Ma|cVSBY3)jz&OrJs59 zIQR-Z>Ojq?aooT)&mIMI*-|aXgF1#7=cgyZf@g^PPAff_n^2>Mqp&x3!u+36U9z;d zUm~kfc~MKT39j}HxdnphpZd;HRFd+y${#ek87JqmhDwk5IPc}^@n)jRZtifK9MLx1 zGHlX1hBBA{Zxf&|{shL6uSG18QcN)E;zW1FupC1P3$wNiUUB!)42U}s?{X)g;GnSP zPv@uQ1KP6rJRI;1`~~)ZtAC`czFL&uFELu|*tPEc^MK+orRQSFr8A+|06siE3r#>F zzUZVAstKVg+CX(cV&kUrT`lM7HP>cZ(izzKjS8rHXT>uh+S}#d!Wzr|G;DI;NQ$6I%N{q#y= zbAO=^(IlY0U_N>eHM%B)q}5X<*8O6{DM6vRy9x0yzuawhWqQ%{x4l{Ni;GO9fYiRO zW-&jf<)@jxxV7z_)E%gGIc3TN5|XC`;i+R7_DZLGi7oPZrdCP<5L@gD%Y9dMm`p+C zzw4<|)5ZMwVP0%XFjy|d22uFAwWL_^<85GuooiTUKI6!P#n|$qnv}8U^AZjR`(OfQ z*1VGQGqJY0&v@;>#0?p1btm5KIG<;E5wEJf;Cndz@A-VnZ9`tcZx95Wxo$%7+it&v zd?F(eF|%6I#&#aFbcQun$2K_)qv{}6s**K*W^Om4@R~GvvHxcdohjqU{;H%P<+bX2 zn1W}|v2ISvA{J;GXrKNM}J3` zKfU+Vu*^G|it8aI+*=<_%kWja4e%)U#@Ge$D7wK5h_Y5L_=%gM zH+xx^4OhShn>az5dTPh>2uz7p;an{xN;7ec>)mUE+Xx(O%1ZdrBQ3UrkqSgNfvjf^z`(! zZjq~6>OKZ(&{k2~i$9BBm#kK|3UfRMXThJz=N%e{ew>!YjUokaB#<(LD z53t)3bUEYd*59(7OK(^zD$GEMDY&EP-6NM6Qx3MxPiihnt5@{#hM1HGdLHbKG5!4B z*yc1R_H0FHW9;}XuFkX~0a91>rAZb!t4V)6162?=632hYV$A%-0f#ElX+|Z=K4@gI z=XsgidG{;1i$f8Jz~!ovmguN|X#yX$RuRe!P)Mu~AG->}3tnCru2jl4n?+ZG2IR|8D; z5O1%i>$fdrQOye|)^>Jvg)Wnh6$f?9dkS5w?T&@yWQP*N_nm2*TT-iohe78K`A-MS zInq@$J{O+lLVo;p9s7*ebX5HkY_>GB@t*LyqHN{jn=?BforEh0lsKDFJq z92YyVZ^wam$GiAx-o>^J8I;*@vqb#T(o(l`v%1H?F9M%?72pCZ}`vx#+xDo-+N*h&q1@8l#$m}lOQtO%X$s(M$tcX(X^SaW&e&ikIv z#d#4WqU=&{o*5q-`^1i0E@wTtRw6EP+N3L*7IIAs8 z3XGQ+5z2Z9l&fMFyUq3Rb`nEvia#@_x3gxXisy5$Dj;UcFZ_VTw7gm&XDR(z&+9G z-kN=?!aRydY2bvkP%-Detf{l*94!seeXH4)Ry1Z!=HOhZS&KJru1dl^@WEWZJgHe7 zr&;Ov_^n6GdVreuK!Ff~e@nNnP6(|&cjl9ePGW?p{mE8yt2{a%SC`KW_q23v=7^Di zC34C?LRnOp?8*uXS1&2)IUhIw9Pka$YKH;`r45@1lmGvZO@b&d!crA%cAojVYA@a;>~>h3VD78B;2v%npNH zA=$yUTwy*~PDNN`rh6F%2p12Q3@{3lOl@_Ol2})B&}F>@Q+#1j)|&2^N_^ByS^%$| z98yjRBkfuapSHoc_O`q~AaVWUQ`3y%>NM9jI!F7I0bJd&})gJB%k0f2Ti+}IP8hq>otkP?h6DEaOm*X2 z(roZhUGm^&Zl{-D=)aZL-R#~omw(W)#Xy%^yjZX@zUy^u@!$Kxb5-EbbF`v z&!>aA4*TRFV80oc@oF}e;{1BkXD79tv6_#IB(hl<<|}3JH}M|3v}o|OyqWdPy+;HP z@(wYR6LqeaN+E6PP<4#HP9qXpTU+}rRy6~Pyu5Q6J@mVH&7^$oaw}Y~el_9c;(Evy z;9zG2=NX3|h%-IjvH zL;6~3&)r`rqQU0#ZQ?Wum)s6RiLt*Ym`@#`Nj79+dt3whO0vA_I;c;Rs!}DK&zGeq zmAt&4?&XeeC}FLkrG$=_7ovLo7ZI0!b2}%$bGbc?_-YCZO>ie+Rw++woxMFp%&srX=KZP)gvZGW_Kn8)G*}EW3hsU;pW+k+G zu(mpZPF}8I>$`1r<`0r@MKa`gr=Aj%o%|5L3CzcMdmpK%q(*J^4G&i)-?8s;+c=^Y zc^{G^S{APCe}08svuyPo?R2|zg`Jjwi{nS&%93#!VUr#qHYp}XB%7YRE#m^X3Raiv zh8_>(2wsf6t&pA&@xoJZ%X@27T+6I`&%Uj`v57W654^dJ#T4r-L>adQ|Dt&$s!ST^$8k@eS9Sg8O$M_&L392c&vufwNO~LPQ--d{1MtTkw36xSCwu*TUA9xC637$9n~kVgvCRi zh=|*AXS&nXsD}{gf&8SO5d4cpt{jtb!9%r4XyYE#s)rh$89cCuBG$ZITKBj{FS+}v zEKx+2I^%ZqvrK)I*vFQkgxrKBf0%Z*T8WkD(U@ z)45%_ZLBa~)bh5i@7sZY!rC}KONHL4lXO_yFi-YWL!iPf&V>BOtTYmlWXVOT(S3C*|H19QL$tN+_CYXv$tRwVv8>J?-`}Ltn&6qaB9{85Xml zj4ZtOX}OtttbOy~SqXYp0jA*>)Vic{IP=9D4Y5i$Gkn@9WHMjH^9Loddx~O9IeM13 zDH1r~m_1fu6aDCIP3ENL?5A^0tgs6(n5eeTsR}{Ld`*=KT&Bc80Z&I6Nvgp_4K)yC zOus03)g*wcFGH1T#RZ$P>Ry_b+x5407sI%rM|%keG!Q|H$GSY!eNL;HJ)d<^Cs{?Z z!tPE$=TU`JiG{G6meYNb8Kl15?L40vUvAeP?t?SM)aGzr0dZ`}{B-w#8S+_`8w@v% zKFp_daoygysX(^UEaj@x^^|#WcY~EoD#J8tV${$)7C7j3%s#b5p7QbW2|NR7)k>?l z?x|W^qAJ5fJt#vh(<3T(F&MQEoYE^eXdcWA>-AsB#SQZ@*Ca9{ir-jwOo~&_&#z32 zavQ$nO3vw{L_DOqUkT7>s*^RqpdlcX)->_A_68kFKD<*jW-U18UGScSaC58W**Z9; zu5r~{(?6%k8uqqm(Kes|k=MhRh!_6eM~$&Wd#5Bf_nNpQfeN;@x{4KZ?)2n_5Y5h% zLojHZ{CbLNFXk(Mid&81$fC6M#Jzg5;Oy>&Z}qF<#xpc5>W6HFIu3&ARbq>l z6?&q}@^Wo89oKg?`1tHJMgTwO{zFMuaDE!+Wxe+FCev>}@`?28a-G-#`Ew&u((idP zUMF3`CEV?s9QGeik&+{wjS4f28Y+!#x3G!gp+pZy=)bkH9psjii-+6_T?)S+YF-zu37ioH(Uc~*pQd|*D|d;OGnT7{5>Oa ztg}QyUP|pnQw}$Wd7WV|^YdzOx4)1g?*XBW% ztij!v1T0w=w?fhG+6z799A8Gy$s0wL1#j!cPm?w5#E-=Rw_={!pjVJNx_OX}n9+Kh zddM8iM5umfubq`D)e=?ud}w}{D4<@BO}i%6rfdj#51&N|urOQ$ip)iGqWte14J8p+ z`hH8Qs*#YF566#vg(yRr4_ zbXbWMeko6Jke#3ZH9d~TD)8>O-0?^LsD*_5BXY;qDGF4?@@cKF#`savG@7>g zrnsr@WN)|{p#MT6EIfSFFrHVPrtysltXKRH6Akvu7kcmH8xqE2eKY7Z@5$|ZXjhUg z$Cmq=JY`Ah>NWMBhPpA{#Hr%`?b7HmBrGE?!G-wiI8rZm=%saM#v-b;DSPTo5^geG zO^gMmO?d}bw9;GhW1I0g_tPP;S}%sGnoEM8mB4_PS}V2Xs0U=aXt;Uo40arD7KS3s0!fJE z7<^nD&xwuwm0WbH;<|6)W7PV|iqNjYy4KC0@gzy(kWr%_n%&$A_TfvR zxRU?FV!20@YEd3sWSRWqm0(6yeRmV^s0-?5!d1frf7%LZIM+fwKO?@i9JbO!j64bF zos1M$rYMD;$|Wn)XJr^NRC3B21N3h-M+yItl9MFNQ>UUOl$gZ&6f}_Fp=9-%UcxVr zg>i(kl3lkgSG@4H^?j+Uv8diSQ^yaLrp{T$JDMj_;JB`ATYEgNZrSTYv7%DOI!;o_ ze_D+q(yk{YFE4)y1}(``2bX}k>1RiZNH`w>TWz-j!)N<6sqe(nEj93(0`$w}3X)`Y z?>A1Y3?+P;dd<3&Qc)=769~zLMmh*Qm@(;eb;YZSyNiEnvQno?muFWoYwEcyaTVK% z4PTbKMJwpPApBSaj|>*}Mh^|D*GR$XjcV;TzAguUfe0xFOm$K8@v<}LE+7vveDq{^ zLwA|YAvk>zE)DlkDW?*-ER3sU>Ft_$Z`X+Z{Whp|Bqw7eX^k+nqR zdnEAuXuSjC(rY5m366YB($t&%u)C(6=eE30D3nzaSXaek_&gj1?3#g_71&~P#K-~r z9b^q^xgR^-4pA8^f@*Rp@yKOn2+%L!MWlojMU^SO@4SyNuhSKt(YP_1)G|0mm0Fki z)*GC`b&@2yJeBrv_z$q&$tCeyyW;f)vuy#QQkeWuMg_u+jpk(Kl0db+S zD-CMYR;o?*Ds3e5utCp4$!NmZOsNA~SI!9%Q$x&ky)lV$Ow`YAQs~JblT=@Hsduai zjuBMCkM7Gd#t0Ix*m&Tbf*IZdlr}V4tfTkKQaHVdJT9#M)B80iyskP~E|;;=Bld<8 zJp3;1#m_LH&rox4aYXWHQi*tP#3O-3?u^#mxh_4&5cVuGO|zp>9C=rZeeg?` zCr4>^D0@3SSDPz5M?~Z1i(HP{8FiE?XpT~R`*ZCw>r;-=P4S5bkUT-j5l`pWhI7c7j`i~YW6p_5NWJaf+Fn8)+#EdF4ox`v} z#Z0?k4HzlSY^8~PLTJ&(e06~!CtlnQKNv;bVf10sop95A4}vqN_pt@vFh};h)hvm; z)3#I{PuIpVvVLai1$ghoeuF8*llot78v5*2#K{jY z-4-x8X4cd->vY?=!8}Fk=%Zg4jKEeGgx~XGX_CB|drv&VvmqwrrIVA|f?KP5;CTKe z-+MVnU{`Lx2-)gY2u{TGzjF*4ry|mCrlF{xw%_h}G4zS!gbklEZF=v4JLDL)X&xfd zZ1Nu2);{1JEd%Ayf+cX2e>j7_Gj|^tVq|qk+OA0}5n5J`Agl|I410Cx<7L6C4#SLW zj&jbWy4?4k+Q3^WO``ejW|h^h{d;fwf&K=qrzO14S~--sI;(x|p~RN3nHD`bd)=6l z^A$)|)+0-4MQm*LYGNwy*#+*rVb4>vL%+=P+&bBPwgSoatiP`L0J8T<4S{%#P7x7z z9;klzCO$(DtDhoY>HceyC!K%)8*FmbH-!*j{opvaGzz6Oa5&cOyY=%1Fc7vlz&1$dJ2hab7rB0x?|- zA3Z0udV`-9HvnTiFArg!u(L)b zYIVrqKI-dz?(L0RT5`2)*05a#p>l*i?PduJ%qt1xr@Yso#>2@d$1CNT;UIR0&)}!$ z!4*-|A<+!O=R+Q-UIVP8&U+BrnR4dvoovf!F!GuX1>Q&~#H>Guq-u)|RUj>to$|BS#fz z1s+RTgxED2Sy4zxNZTl(<&l4Cdf^$Hw)DE{(6id9Et%#dC;{TB%=WRVsaj|(P#ysA zPkD^18p~e480XKi(LHOr*j4~oM_D&k7_!+af5pVF>vc|S8S5{+ry zC8uMFSJa@!J;m+wEi4K)cs{h0(%zVxn`_&hF9ywSvCWtOdQAY%ww8O6q1X7H91^Jq z$M}efCx?=WM8#mbbgt3g0fEJIXHLODz}Zaf+6t6Db2~LLIavVML0nSXt!!*mjg86A zUuC7G34t~g*XM$qCe!jP1}mSX+&tsa^u#DciCzAjex7}u!s=A;4pz>DygaueWv8_X z@4=-s!y+j_#mXu8sk^`_%c|+sQ5<6~QqFDWePOOntrTaaTaSwlH0w9UM1}d0x|-br zG0%fFWUc*6cqXbwU#Re)a`e=5^p3SBPw&_TngYJUg1JiWEN?pX;^a7mqN%Unb>V?g z+HIDAwQGs^N9+pclL^?B3q{ZPy;CS;u$+>%;Y@I#uO%oN?|K{Sl=yZ3LwOD=N5viH zDh}BQUVt|2-D2Lt$(~~FXIW2{Sc4f@e4FKz{1?w)hH3z5J0W6f?Ty>2y`Zg}tgN5V z=hrP07f$rH?;M=YHKJ@?Z&YF*1}v?acDn}R2f)#ZX?FS&lK!w~I>VkvlRevK>ewuqU^}FSOSog5c>R>xwvIu!7lDh`L+hn#(nT<&|Mn{)40VPWBw63jD-A@Og$K(T`DKb6yF zv`vYnQasCBzE=0`-HS^dmV^heU$Oh1S|+UkSLFKo`cc4G9_#Z20=!@{y@5m zooC-8YZZMYj|O%r*PQU)MOZ)Z=sQ5EaowJiY2%ZVsz4p}+f+FoohZ`;I0P!Jj6nfj z-4aii)(m4}`KA$F2^3c1!XM zU$n_6acvA;e6fT>D(hvf9PC@!?yx8}9>4nx|0L&qAZ~N?>@H2(6hBnd?P@!G=c#3E zUDvs=!B$3Zut%**XD-P~;sj8&cahyYV7}9w1R&+N^}Our?7ZT_SD2W{2eu55(2yyP ze|rA5mn8=iQh=d4Mv*x-ZGq#}E0?>(QMc0#WZoW&pI(yJoyhv4ncWyQ<@H%JyFKoc zl=|(Lim}rz?mWg06$gPGaE0lHIsg-msjsgGxiEZW<~nUYo_Eda?$+FQoH3v`dQ%WK zgo0zPLP774Lk8ssuPtVzr>8%7Wev1N^KAxup1f$}i3>iTw!>_LcwjI#EnaRS5PlDY znFkOdlPBIklkSZ$W(*v9#IMXvsa=j23Y?(XWdzM-H0WO^+}Y=vy#IpchH>)rT1gjn z@XdVaHT36nyqk*)y4-JX0fSoO-+ch}%}ojPmF4v}&9tPgKgy9oe;I!|JFx z#J;E>+ykPK+wzPir>0^Uin4ZgkRFq=ZGR33PAjgBYqD5W5@=B9Mqc!uwKE7pnXWg z>SkG}&lJzsBNrN#zKYxE&mVB-)6&wQXfcEq3y=G8$OZwT_FD?;LELYhosNvTDgn~3 z!$8Bxtc=CaHxt&+fkE&(lf4WX9l=Vzd%2~CGHZlufcb;m|3-a8lp6}f);?!vg8gTn zUNlqq%P3gfEllLw)w5CZ(~P_PEl7WMB_4cbwAeDg`LnT z=56%B4KBN-V;Bm!%s%hX1sj{mY~yM2i2Q$g ziYQv$3E7iLDa+(YS{{oaJQl@+a%?$gJIYjdw8ry3n_XM0nfLLb7fcxAYlXYK>eSYH zZZLi3Agv5k#wTEwiM!2oA9e40AOpmpf2`nJpliT(2b^#hX!7^5(i`*L3p7!d$NWg7 zDC>G&u%Ie6mpZ2?;Bkh;h2B#AWn84o-Am%M>r~&WTzL~pSdCihP`pG8wv9}h?!M8r zriTYsSe&^%{t?K>t?}M(Yon^KuP(ruFu+4< z;VaXn7QQOgIGqq?ul{;hw7CghQO(f+AH-j9iWKA6F#vDlryDe{Sb(f*I7?{R2gT4D zVL{e6r|{lo>=pvx{%{Yp?y^zTkaYDRqaR)qeDpdG8Dx0J4v~Y8 z>T*^Jgsi^JHfR$GugbJXbtEMx?0TUPIwUll%eaN_svcZ%_rS&m4<*2vH*&{QP)jK4 zx+6DPE4NMnkG!6aL*XsMt5SL3NTT=j4K(+O9xQ-V{9%OOPcI*G` zn{F5adhT66*ieUQ`diy?;U45=n*-zZtHz5Ii@dzkc#e!8+KZY&IeO`;<-+NM96bq& zp+mLs4Er-rnc0F=kRsQ^3^hGpMhM?A0Db8R3GDrSE(M7r0AMULMS7G`3>DqYc~o47g6iRx(hf-k_vt* z`W5%`mSJq%El$R^oSOw{83;1-4M$H^hQ{aMAzF3ra+f1cL4W75j5BTYez@^fu~x<> zcy!GxdgAa3yO7dzJ$g=x;N1q{ywOi^qHb=7aoCn}T6E`FQ1#t`fK2%!EjHS6i=#e4 z2TM^w@1J`~bzvIgbB4t{+;n&G8gcf6!=o-25Au#ZE*=yg!NWry&%5EfbvUbd5rnL4 zw!d+PQRe2UN4<3DD>c=F^P>pA-Q8LW8Hu*Rz;Bl$&iGAEh@@Y0-}DxjR048cGrVei zdbrdjtZL>L$F7-cVht6VHH{-H;+L0gxo&!=vxUV)553J?!`-x}vDExJAb~ziZ5Wp6 z2%B3BjL-t6F{EfAtBJ6_kSyml_7lu3fd%$n_$UmrQy|T&w!XjAP4_r9M=(klm1!Js zwi(xc{oI-s9wSve62YO9Cmpt9)?=6ke1A*?YfpG$zT@g*CTxw8Y1JuEacg#^dmBcr zY4Wa83B7vYT?X4Od!cQGl*`Tcpkf)x1(fi(zjlt$ukFK}Y|6K9oaVdZi|JIg46yD69+osgtg# zJ=5loM;iDE(?S|1Pb)oQ3bx^NbU!kS$79CNK6;1=ufiDx@N7@(XwAXe(2MIi3@J?G z0&i{I>*PB-FY8$7QyzwgSD8C;xqEv>%rDLlzspZy`)TRk`BvbJ@YK}pBfJ=xV2D)v z7#J$hnlkMOgjX!(yy26jCzXTzy|fqh)7u>B2Zp7{(L>APhgUrd;>Z!dD1HHp18guT z(CYZ*h6<3$700%3NW=~iN^UN4eR;5e*6U@tV#n0eGT5T7d)X!Yu|bIqqcu~Mm^qGV zt^`51>Ps#ewv&~;#_4WYIwMQV*#;xB?Quf>Rznf<)V({rt1r}uEHQn%WPrD#S31#%j*}*u|`eVfxUhwOBB2KKTZnfC8x3N)~mKFAPWAC z-LAdY(`)K#PIs?n*y_?0hfWJOEvH~VPDR&%5dKP938M>>-nk=4I{PAy9;1Z!e$(A+ z8M@kzFYD=$yRv*#i*P-ow=zg_yOK|NjIm9$k-p--1}k^FYS)-s3YO)&rnRlxX=%e= ztw)TQbD1Thl5gTmy2D3&I*Z2FbV9dWRxNk1x9c34@pF3Z6tNb2gZK#eQ-Y)I3rXG^ zKBc7W*Y?&VySyIg3XI`PR{Kd&oEMKOh(G7o_^qMuT({e^-Lsm~@}$Q{t5&8leBc_B z{Yb0BU3%e*$}7(1U9&$sX&FRfmFSFg>YD74Jrqxeuq4x>#Fuw%k^4nXvliV#Vfjvx zu^FG=23CvO-Kxt?ZA3LK5=AOn7JayLlZh|WysDYBb7`pp6^#L2)l0I{!1=bgX2q5C z>>jFKQ_Q)apv}fRhH0-Kv6~TjGN_1Z3LZ#@> zWH*+{DeLy!Kx%|e^?bh}+N(I8%>Y`7USJh!}Z6HGr9H7HiXNoZVMr#-m;*lq7fqs`PGdOf?2^v&6MEY~0LPh&np*kWx zy|hHo9jMQG4jq*7^C3P&dO|5uS!b%K+C^SM`OtcE^~r)%lUPG_6L6hHXD~eBaCwQQ zE~6*bbZTwOuq;KG?1l{}*cqrUwv(7_O`cH~OIqhcR94^$1!07%VsI0a0I{JesT>_0 zrMb3t*R)}&bdkJOA@px^BOK)ivG`Y$YyHDS)oN2u!vbc5@U}3|tBtzrb(phHTH>oO zxnh;ZnvRCmUTcyV%+5S!5#C^fX&)IG)F%^?YbddJQ+#o~->bs8^St4vSl^LLC222@ z$ws%5mt(^GC~dT?Qo97MEx`#UGS{O9LkAyTAb5$c6q`T?aM0(e!Pe$%^(xfNJogdW*+cvl&Q`6o3XlBJ>vj+`8v^U zEe*ZOG^3XcYAr;#7c&I!JNX$^^j^1LWvQNCuA-LA*td^V4tB+wzN!+a8C>FNQot?4d6|`d6DRWl@i=wQ-biDd^d&tZC80YX(<8IMRjC7l|p|8MN>W;%j8D z6L)>IUUNZ*_r7jjkSmTDiE=mP_k%%RvBg$>Cy?-!n3}380`uj1GZ236ZE_KPB-$-y zdU|T=X#PNJM@K=bH1mxu6FXzLx1#AHTFlKvH(M$wXr{IgMd5#yiV!{gq|#(td{0Bu z*r!JOwelRL>f`3(lm@A8h3PX_?!{XWb$H^RxGi)b9*qV^)Y`T4-AZk7c5xa0z$&7q zqtm7lx&JLNtb2NT3Wo5ipL=@b2ZZ*Dlr9gzrbr-1`L1Q>jT_x}er}^w^@?8-%W?Tz zUaHsDjI=;AMU{BV2=u9gp}{^*ONJf+v?k8p5-!7rPn{h0+hA%4kSyPR>kZ0b@&b+9 z?2N(d-H^rpzP2&iv=tYz$3}7stVj;jfk7uK@BnWNc)(c$^6Wtmu(Dw=U+4oO1P?el z{Y&uz^!IwO9yp{h&L1_dAxt1W@|=bIC;D>}#X~&kb^rtKpNX@ycf;IMdQe znpixzMF+h3CIsRsa3%(=fi@onFoA~xct{n46xZE>?`0TBQ!w-?g$bQDFHcX$b^7S& zSbR`@39UC;j#4a z-x|uXSzUVgr9V%#6JfO*9P(rCf7q=Q)|Qb;TU;FebSkL!o5&V{e3{-O5-hnH;DVpZ zF_)VfifaqC(b6I)M_P~DXf&B&!Q(mh@?t~Ap}9r7bYPPgI$O^aQA#0ePG%&+jM{D% zw9!+s$2{<8ip>^+2^RwgXdQ4Y&QqA{6v&IEm3A9M8t`g{8QWmLGSogt)NY&l1zg=7 zF}&v`_xsIVwX$s1gX^q^glkic7GKABj6@FVwE-`4MEO2BTmPEeJS3_$-7p%in}5Im zw_dk54H;ee4raiKnAJ0C;8Z7B0DO?mz^e*S2P2dNkZ*ecEAj(>0vT!G-v4-fV&Ynk zUhI;cm9;er`oE{a#sMx@aEW!KeSX z17h>LmDV#8xQ{=nY(yZ&ZZ|B&y0q#-suMCJ7AM;*fo~HG?r$I#4THff{8m0LmnUc=kU^y;hJ#PuZ?P(fn!ywjt4OgZFjgUm08^(sSlrn!+I@73=k^VNT<=cjyM;R38+?0D%F%a05KJHhn(JqV5}}xgCWrHY=;EPVcv{m^Zyr_L$TsM**kV zy$HikfOU8JSr(7VQ@F-{67^cLeYOn}Sxe@NXV*bq2y}1J>D%I+tHeoPr~EVV_#-vav(y2^)aOKRyqnx|<`CyQu0)#hM2B!{m`0i~R zm1o`nFhF#u>ZlVGd<9uSpMldpuXtFfl1>?!2$og=8yw~3&Fyhdk2 z1Fmen02rl6b&d!;OU2{rm}*_i*u;xVcP-;QMlN82QZq_rfglPOw`mnTu_1ulZ?#m> z!1jkaJY;bH!2sdn#ONa+pCQ@vp#lfC!x9d0cDnKfV@zi~~L-;56Lu zi@kaxEM7{u;SUQp@*ICIvqg;q%6*4f{Q8VrdIb1^>Y{rWk{~a({b*IhCExfU1zC`I zxNXaOsNDxeJAn$bhC@o?t;CnjJOLbuHC&c4FJ~UMC44g+FZm1;D zV--wr%OKOL>7*GWvh{f1P_SnGq0-sMkOwqKe(4Sfht~bH!Cy&*%RtzY2@rp9B-NF! z&P3BnX(b(RO_ZQZ#f*hy#X8_%eEzW!q%Q3hih}t@8q5N0(O~f*K9jQV{%zSZIa(TH zR4-5K_MUyjTMOMY2Z_dz?*ddwt=w|=O7k{gJLqn(G6(`fa(Euf(gdz`@IVaudfBq_ z{Cuqh6tV$W@Q{3HJ<|8vd~qWlk+gya z^=}LWMg3BBGBm*E{<`X4TJGgQp7K!wZvA~pJ3DgrLf*VtxHi$|{Q*tn3r#FF7`jGn z(GZtr0`cox%T%{TGMJule&53wAi$11?)d;=!|vU;jb86o8eAhnM1rA%VCBpa2uNS~ ztXT@UpZei3s}oRbmXP@H>!}8Vqxwk~pQz%+d1FDOV>D21<`aZxX{mzA2D7^2KnO>& zk|19VskHL{ubFF&YVt_KL8|Fl6>8O`tE_O=6tn^ADoOz*u$Hx<71~;as+g#CS&NVr zRKySxVQbIn*1E+Dmx7_t64nFdVJU%H*!gkRRkl5y zDzEP2c&fd$IVwiOteT#5e_H#n9E7|RhIi%N?@M8 zV!9`-J?QG$k(CsE_ba=cPmgwV*=B!?8Kv?%cK^F6VcUs%G>M^#7J5^J0a&lGx4TUB z!=|nflNQG8r+c;=-0}9v533~)V;Vs)5J|dM<3L)TBW>8qhgmBX8&w&ezy%s@!pFhf z1cA{{1C&V_~B{hAe)CA>?oUadat|Bw0MD*HWb zu?$g&4hWT+>d$}^j8?LzTxq zmNTcpAv`Mh6C^wGrG-ANGV5u>g>1G}c|bw>bNqDuXY2g$8_uC*?^O@eENf8?6nNvg zXjt>VIto*QEoW958r(k>$u4P=?*HD47N0Q1W!MUkjIh6_iO@L0Pr#g*^ZFz48@?=7 z)&TqFa^R270Az6%VkUb$G^{iDG1Hs3DsQNMV$TV`%ADmtOmK3~Tp}*rZG}D1a|j?R z9Qz(aZbR`tm*qvA>S2EWesNatzT<&KE;#Qp_|=Ma>Z}gtGKWu4@J@}|TNSk_Dw!8x zEagn>Z{0p1;NNf_M7fz0S98>gwW7d(Dyy<2bbnhq$L_)1Drt+U$Tfd%GebhDbSvOi zOPxIZS4`Rx(6lHleH>#q72=TOM(2o)*v_*WjgLcdP;rsy&f>5KF*}?7%&MF=pN-d; z=efZ($^%M2J!6niEuJ7-UE)NypZU(2`<>9;2{ZMe-0 z_EYKBdGo~CEbK#t;;lE8+Jt8t&n1qhbN$$-0N|=VNVKbH9Us?qG}rj(f^9e%n8z2V z?qkS32%~9p9 z4yIOiZ)w>XSK>|3KF?cSW-|@&09KQ2{B>d^ftga@ySo_S38vgL?n%S4UI?G7P;g;L zFd&^*Yz*RMB0F&7hUDANF_zhdg7?%e9o9>YSW+JHp=-I(JtyuT)9F3Kn7Fn4*dGPI zA%_BAm_}1yCoo?Z=wPjDp$GA>4jzn@p6=cYxUPPBg|G#K#_H zqIpn?7l=sJLpfNtb^G=l%nPBg8J;o5?_w)vQ?H1(*lXc+ybCAu8z%mU^-)~BKxuAP zW@?A>v^BMB`-?V3a9P490N7bMHzxCEU3trC+~)r{M~VPZ&J_{E#oFdQ$AW}DMem8d z5*OTJ5}07R@1O^h>I&dG<9WNY^BkVtyvz{6G;3m(Bl!xMye5rY{g)?iRi5tl^CK5H zG?dIi1H{Qz3BUUJlf;b;mrPJuaAOs5FwR1@U86s>whm zYsxbF@2@LD!cob!F6(+mhar<}yyieAT9`;3HAk|uXBS{?5O2z_ITjYNy=fNgJ|a;ol3UmvRdu*jWXmh%RshdJMQ!d-Q3a~?dv;a!`y)Ks{6W)+V~9Loyd zsZN`_d)#r2{pW(xsx-Ma9eYm25)u=zpF$6_#N!D;aPyWKvu$N}Lq#&)9(Jwnb`QB}rBF`|pn#v7x^j!e(5qN*>`Vzi-0$oW50 z^||!F4pm2J{n9CtF*7;FcCV!BONV~ZFftGOGO~=Z-55odF@3(u+mS7~W8ty3-9EoI S=!i^7&H4U;@8|zXnD}o3hzZO9 literal 19820 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 T(lIsttxHQ?SFP&Ni^%^C3tFD_ From fc00966b8b0057a62126bce669f52f9d177ac6dc Mon Sep 17 00:00:00 2001 From: Brian Date: Tue, 17 Jan 2017 11:05:18 +0100 Subject: [PATCH 054/257] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0caa6de..0e2b73e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Russian Translation - Afrikaans Translation - Add postinstall script to notify user that MagicMirror installed successfully despite warnings from NPM. +- Option to use RegExp in Calendar's titleReplace. ### Fixed - Update .gitignore to not ignore default modules folder. From 2913120ff7ced418eb0dbe339efe7a3dfe86824e Mon Sep 17 00:00:00 2001 From: Brian Date: Tue, 17 Jan 2017 16:12:03 +0100 Subject: [PATCH 055/257] Update README files --- modules/default/alert/README.md | 141 ++--------- modules/default/calendar/README.md | 211 +++-------------- modules/default/clock/README.md | 118 ++-------- modules/default/compliments/README.md | 80 ++----- modules/default/currentweather/README.md | 235 ++++--------------- modules/default/helloworld/README.md | 23 +- modules/default/newsfeed/README.md | 200 +++------------- modules/default/updatenotification/README.md | 21 +- modules/default/weatherforecast/README.md | 212 ++++------------- 9 files changed, 211 insertions(+), 1030 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index d566313d..89505d16 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -21,52 +21,13 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
effectThe animation effect to use for notifications.
-
Possible values: scale slide genie jelly flip exploader bouncyflip -
Default value: slide -
alert_effectThe animation effect to use for alerts.
-
Possible values: scale slide genie jelly flip exploader bouncyflip -
Default value: jelly -
display_timeTime a notification is displayed in milliseconds.
-
Possible values: int -
Default value: 3500 -
positionPosition where the notifications should be displayed.
-
Possible values: left center right -
Default value: center -
welcome_messageMessage shown at startup.
-
Possible values: string false -
Default value: false (no message at startup) -
+| Option | Description +| ----------------- | ----------- +| `effect` | The animation effect to use for notifications.

**Possible values:** `scale` `slide` `genie` `jelly` `flip` `exploader` `bouncyflip`
**Default value:** `slide` +| `alert_effect` | The animation effect to use for alerts.

**Possible values:** `scale` `slide` `genie` `jelly` `flip` `exploader` `bouncyflip`
**Default value:** `jelly` +| `display_time` | Time a notification is displayed in milliseconds.

**Possible values:** `int`
**Default value:** `3500` +| `position` | Position where the notifications should be displayed.

**Possible values:** `left` `center` `right`
**Default value:** `center` +| `welcome_message` | Message shown at startup.

**Possible values:** `string` `false`
**Default value:** `false` (no message at startup) ## Developer notes @@ -82,83 +43,21 @@ self.sendNotification("SHOW_ALERT", {}); ``` ### Notification params - - - - - - - - - - - - - - - - - - -
OptionDescription
titleThe title of the notification.
-
Possible values: text or html -
messageThe message of the notification.
-
Possible values: text or html -
+| Option | Description +| --------- | ----------- +| `title` | The title of the notification.

**Possible values:** `text` or `html` +| `message` | The message of the notification.

**Possible values:** `text` or `html` + ### Alert params - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
titleThe title of the alert.
-
Possible values: text or html -
messageThe message of the alert.
-
Possible values: text or html -
imageUrl (optional)Image to show in the alert
-
Possible values: url path -
Default value: none -
imageFA (optional)Font Awesome icon to show in the alert
-
Possible values: See Font Awsome website. -
Default value: none -
imageHeight (optional even with imageUrl set)Height of the image
-
Possible values: intpx -
Default value: 80px -
timer (optional)How long the alert should stay visible in ms. -
Important: If you do not use the timer, it is your duty to hide the alert by using self.sendNotification("HIDE_ALERT");!
-
Possible values: int float -
Default value: none -
+| Option | Description +| ----------------------------------------------- | ----------- +| `title` | The title of the alert.

**Possible values:** `text` or `html` +| `message` | The message of the alert.

**Possible values:** `text` or `html` +| `imageUrl` (optional) | Image to show in the alert

**Possible values:** `url` `path`
**Default value:** `none` +| `imageFA` (optional) | Font Awesome icon to show in the alert

**Possible values:** See [Font Awsome](http://fontawesome.io/icons/) website.
**Default value:** `none` +| `imageHeight` (optional even with imageUrl set) | Height of the image

**Possible values:** `intpx`
**Default value:** `80px` +| `timer` (optional) | How long the alert should stay visible in ms.
**Important:** If you do not use the `timer`, it is your duty to hide the alert by using `self.sendNotification("HIDE_ALERT");`!

**Possible values:** `int` `float`
**Default value:** `none` ## Open Source Licenses ###[NotificationStyles](https://github.com/codrops/NotificationStyles) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index c5745152..06b7dd9c 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -24,152 +24,26 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
maximumEntriesThe maximum number of events shown.
-
Possible values: 0 - 100 -
Default value: 10 -
maximumNumberOfDaysThe maximum number of days in the future.
-
Default value: 365 -
displaySymbolDisplay a symbol in front of an entry.
-
Possible values: true or false -
Default value: true -
defaultSymbolThe default symbol.
-
Possible values: See Font Awsome website. -
Default value: calendar -
maxTitleLengthThe maximum title length.
-
Possible values: 10 - 50 -
Default value: 25 -
fetchIntervalHow often does the content needs to be fetched? (Milliseconds)
-
Possible values: 1000 - 86400000 -
Default value: 300000 (5 minutes) -
animationSpeedSpeed of the update animation. (Milliseconds)
-
Possible values:0 - 5000 -
Default value: 2000 (2 seconds) -
fadeFade the future events to black. (Gradient)
-
Possible values: true or false -
Default value: true -
fadePointWhere to start fade?
-
Possible values: 0 (top of the list) - 1 (bottom of list) -
Default value: 0.25 -
calendarsThe list of calendars.
-
Possible values: An array, see calendar configuration below. -
Default value: An example calendar. -
titleReplaceAn object of textual replacements applied to the tile of the event. This allow to remove or replace certains words in the title.
-
Example:
- - titleReplace: {'Birthday of ' : '', 'foo':'bar'} - -
Default value: - - { - "De verjaardag van ": "", - "'s birthday": "" - } - -
displayRepeatingCountTitleShow count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")
-
Possible values: true or false -
Default value: false -
dateFormatFormat to use for the date of events (when using absolute dates)
-
Possible values: See Moment.js formats -
Default value: MMM Do (e.g. Jan 18th) -
timeFormatDisplay event times as absolute dates, or relative time
-
Possible values: absolute or relative -
Default value: relative -
getRelativeHow much time (in hours) should be left until calendar events start getting relative?
-
Possible values: 0 (events stay absolute) - 48 (48 hours before the event starts) -
Default value: 6 -
urgencyWhen using a timeFormat of absolute, the urgency setting allows you to display events within a specific time frame as relative - This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates
-
Possible values: a positive integer representing the number of days for which you want a relative date, for example 7 (for 7 days)
-
Default value: 7 -
broadcastEventsIf this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: CALENDAR_EVENTS. The event objects are stored in an array and contain the following fields: title, startDate, endDate, fullDayEvent, location and geo.
-
Possible values: true, false
-
Default value: true -
hidePrivateHides private calendar events.
-
Possible values: true or false -
Default value: false -
+| Option | Description +| ---------------------------- | ----------- +| `maximumEntries` | The maximum number of events shown. / **Possible values:** `0` - `100`
**Default value:** `10` +| `maximumNumberOfDays` | The maximum number of days in the future.

**Default value:** `365` +| `displaySymbol` | Display a symbol in front of an entry.

**Possible values:** `true` or `false`
**Default value:** `true` +| `defaultSymbol` | The default symbol.

**Possible values:** See [Font Awsome](http://fontawesome.io/icons/) website.
**Default value:** `calendar` +| `maxTitleLength` | The maximum title length.

**Possible values:** `10` - `50`
**Default value:** `25` +| `fetchInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `2000` (2 seconds) +| `fade` | Fade the future events to black. (Gradient)

**Possible values:** `true` or `false`
**Default value:** `true` +| `fadePoint` | Where to start fade?

**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` +| `calendars` | The list of calendars.

**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ +| `titleReplace` | An object of textual replacements applied to the tile of the event. This allow to remove or replace certains words in the title.

**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` +| `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")

**Possible values:** `true` or `false`
**Default value:** `false` +| `dateFormat` | Format to use for the date of events (when using absolute dates)

**Possible values:** See [Moment.js formats](http://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) +| `timeFormat` | Display event times as absolute dates, or relative time

**Possible values:** `absolute` or `relative`
**Default value:** `relative` +| `getRelative` | How much time (in hours) should be left until calendar events start getting relative?

**Possible values:** `0` (events stay absolute) - `48` (48 hours before the event starts)
**Default value:** `6` +| `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates

**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)

**Default value:** `7` +| `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.

**Possible values:** `true`, `false`

**Default value:** `true` +| `hidePrivate` | Hides private calendar events.

**Possible values:** `true` or `false`
**Default value:** `false` ### Calendar configuration @@ -189,41 +63,10 @@ config: { #### Calendar configuration options: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
urlThe url of the calendar .ical. This property is required.
-
Possible values: Any public accessble .ical calendar. -
symbolThe symbol to show in front of an event. This property is optional.
-
Possible values: See Font Awesome website. -
repeatingCountTitleThe count title for yearly repating events in this calendar.
-
Example:
- 'Birthday' -
userThe username for HTTP Basic authentication.
passThe password for HTTP Basic authentication.
+| Option | Description +| --------------------- | ----------- +| `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. +| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. +| `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` +| `user` | The username for HTTP Basic authentication. +| `pass` | The password for HTTP Basic authentication. diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 76a979d4..9bd0bafd 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -22,106 +22,18 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
timeFormatUse 12 or 24 hour format.
-
Possible values: 12 or 24 -
Default value: uses value of config.timeFormat -
displaySecondsDisplay seconds.
-
Possible values: true or false -
Default value: true -
showPeriodShow the period (am/pm) with 12 hour format.
-
Possible values: true or false -
Default value: true -
showPeriodUpperShow the period (AM/PM) with 12 hour format as uppercase.
-
Possible values: true or false -
Default value: false -
clockBoldRemove the colon and bold the minutes to make a more modern look.
-
Possible values: true or false -
Default value: false -
showDateTurn off or on the Date section.
-
Possible values: true or false -
Default value: true -
displayTypeDisplay a digital clock, analog clock, or both together.
-
Possible values: digital, analog, or both -
Default value: digital -
analogSizeSpecific to the analog clock. Defines how large the analog display is.
-
Possible values: A positive number of pixels -
Default value: 200px -
analogFaceSpecific to the analog clock. Specifies which clock face to use.
-
Possible values: simple for a simple border, none for no face or border, or face-### (where ### is currently a value between 001 and 012, inclusive) -
Default value: simple -
secondsColorSpecific to the analog clock. Specifies what color to make the 'seconds' hand.
-
Possible values: any HTML RGB Color -
Default value: #888888 -
analogPlacementSpecific to the analog clock. (requires displayType set to 'both') Specifies where the analog clock is in relation to the digital clock
-
Possible values: top, right, bottom, or left -
Default value: bottom -
analogShowDateSpecific to the analog clock. If the clock is used as a separate module and set to analog only, this configures whether a date is also displayed with the clock.
-
Possible values: false, top, or bottom -
Default value: top -
timezoneSpecific a timezone to show clock.
-
Possible examples values: America/New_York, America/Santiago, Etc/GMT+10 -
Default value: none -
+| Option | Description +| ----------------- | ----------- +| `timeFormat` | Use 12 or 24 hour format.

**Possible values:** `12` or `24`
**Default value:** uses value of _config.timeFormat_ +| `displaySeconds` | Display seconds.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showPeriod` | Show the period (am/pm) with 12 hour format.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase.

**Possible values:** `true` or `false`
**Default value:** `false` +| `clockBold` | Remove the colon and bold the minutes to make a more modern look.

**Possible values:** `true` or `false`
**Default value:** `false` +| `showDate` | Turn off or on the Date section.

**Possible values:** `true` or `false`
**Default value:** `true` +| `displayType` | Display a digital clock, analog clock, or both together.

**Possible values:** `digital`, `analog`, or `both`
**Default value:** `digital` +| `analogSize` | **Specific to the analog clock.** Defines how large the analog display is.

**Possible values:** A positive number of pixels`
**Default value:** `200px` +| `analogFace` | **Specific to the analog clock.** Specifies which clock face to use.

**Possible values:** `simple` for a simple border, `none` for no face or border, or `face-###` (where ### is currently a value between 001 and 012, inclusive)
**Default value:** `simple` +| `secondsColor` | **Specific to the analog clock.** Specifies what color to make the 'seconds' hand.

**Possible values:** `any HTML RGB Color`
**Default value:** `#888888` +| `analogPlacement` | **Specific to the analog clock. _(requires displayType set to `'both'`)_** Specifies where the analog clock is in relation to the digital clock

**Possible values:** `top`, `right`, `bottom`, or `left`
**Default value:** `bottom` +| `analogShowDate` | **Specific to the analog clock.** If the clock is used as a separate module and set to analog only, this configures whether a date is also displayed with the clock.

**Possible values:** `false`, `top`, or `bottom`
**Default value:** `top` +| `timezone` | Specific a timezone to show clock.

**Possible examples values:** `America/New_York`, `America/Santiago`, `Etc/GMT+10`
**Default value:** `none` diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index 430c4fbf..d8be85d2 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -25,48 +25,12 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
updateIntervalHow often does the compliment have to change? (Milliseconds)
-
Possible values: 1000 - 86400000 -
Default value: 30000 (30 seconds) -
fadeSpeedSpeed of the update animation. (Milliseconds)
-
Possible values:0 - 5000 -
Default value: 4000 (4 seconds) -
complimentsThe list of compliments.
-
Possible values: An object with three arrays: morning, afternoon andevening. See compliment configuration below. -
Default value: See compliment configuration below. -
remoteFileExternal file from which to load the compliments
-
Possible values:Path to a JSON file containing compliments, configured - as per the value of the compliments configuration (see below). An object with three arrays: - morning, afternoon and evening. - compliments.json -
Default value: null (Do not load from file) -
+| Option | Description +| ---------------- | ----------- +| `updateInterval` | How often does the compliment have to change? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `30000` (30 seconds) +| `fadeSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `4000` (4 seconds) +| `compliments` | The list of compliments.

**Possible values:** An object with three arrays: `morning`, `afternoon` and`evening`. See _compliment configuration_ below.
**Default value:** See _compliment configuration_ below. +| `remoteFile` | External file from which to load the compliments

**Possible values:** Path to a JSON file containing compliments, configured as per the value of the _compliments configuration_ (see below). An object with three arrays: `morning`, `afternoon` and `evening`. - `compliments.json`
**Default value:** `null` (Do not load from file) ### Compliment configuration @@ -74,22 +38,22 @@ The `compliments` property contains an object with three arrays: morningday_sunny -* day_cloudy -* cloudy -* cloudy_windy -* showers -* rain -* thunderstorm -* snow -* fog -* night_clear -* night_cloudy -* night_showers -* night_rain -* night_thunderstorm -* night_snow -* night_alt_cloudy_windy +* `day_sunny` +* `day_cloudy` +* `cloudy` +* `cloudy_windy` +* `showers` +* `rain` +* `thunderstorm` +* `snow` +* `fog` +* `night_clear` +* `night_cloudy` +* `night_showers` +* `night_rain` +* `night_thunderstorm` +* `night_snow` +* `night_alt_cloudy_windy` #### Example use with currentweather module ````javascript diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index ccef543c..36a8a436 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -26,189 +26,52 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
locationThe location used for weather information.
-
Example: 'Amsterdam,Netherlands' -
Default value: false

- Note: When the location and locationID are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. -
locationIDLocation ID from OpenWeatherMap This will override anything you put in location.
Leave blank if you want to use location. -
Example: 1234567 -
Default value: false

- Note: When the location and locationID are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. -
appidThe OpenWeatherMap API key, which can be obtained by creating an OpenWeatherMap account.
-
This value is REQUIRED -
unitsWhat units to use. Specified by config.js
-
Possible values: config.units = Specified by config.js, default = Kelvin, metric = Celsius, imperial =Fahrenheit -
Default value: config.units -
roundTempRound temperature value to nearest integer.
-
Possible values: true (round to integer) or false (display exact value with decimal point) -
Default value: false -
updateIntervalHow often does the content needs to be fetched? (Milliseconds)
-
Possible values: 1000 - 86400000 -
Default value: 600000 (10 minutes) -
animationSpeedSpeed of the update animation. (Milliseconds)
-
Possible values:0 - 5000 -
Default value: 1000 (1 second) -
timeFormatUse 12 or 24 hour format.
-
Possible values: 12 or 24 -
Default value: uses value of config.timeFormat -
showPeriodShow the period (am/pm) with 12 hour format
-
Possible values: true or false -
Default value: true -
showPeriodUpperShow the period (AM/PM) with 12 hour format as uppercase
-
Possible values: true or false -
Default value: false -
showWindDirectionShow the wind direction next to the wind speed.
-
Possible values: true or false -
Default value: true -
showHumidityShow the current humidity
-
Possible values: true or false -
Default value: false -
onlyTempShow only current Temperature and weather icon.
-
Possible values: true or false -
Default value: false -
useBeaufortPick between using the Beaufort scale for wind speed or using the default units.
-
Possible values: true or false -
Default value: true -
langThe language of the days.
-
Possible values: en, nl, ru, etc ... -
Default value: uses value of config.language -
initialLoadDelayThe initial delay before loading. If you have multiple modules that use the same API key, you might want to delay one of the requests. (Milliseconds)
-
Possible values: 1000 - 5000 -
Default value: 0 -
retryDelayThe delay before retrying after a request failure. (Milliseconds)
-
Possible values: 1000 - 60000 -
Default value: 2500 -
apiVersionThe OpenWeatherMap API version to use.
-
Default value: 2.5 -
apiBaseThe OpenWeatherMap base URL.
-
Default value: 'http://api.openweathermap.org/data/' -
weatherEndpointThe OpenWeatherMap API endPoint.
-
Default value: 'weather' -
appendLocationNameToHeaderIf set to true, the returned location name will be appended to the header of the module, if the header is enabled. This is mainly intresting when using calender based weather.
-
Default value: true -
calendarClassThe class for the calender module to base the event based weather information on.
-
Default value: 'calendar' -
iconTableThe conversion table to convert the weather conditions to weather-icons.
-
Default value: iconTable: { - '01d':'wi-day-sunny', - '02d':'wi-day-cloudy', - '03d':'wi-cloudy', - '04d':'wi-cloudy-windy', - '09d':'wi-showers', - '10d':'wi-rain', - '11d':'wi-thunderstorm', - '13d':'wi-snow', - '50d':'wi-fog', - '01n':'wi-night-clear', - '02n':'wi-night-cloudy', - '03n':'wi-night-cloudy', - '04n':'wi-night-cloudy', - '09n':'wi-night-showers', - '10n':'wi-night-rain', - '11n':'wi-night-thunderstorm', - '13n':'wi-night-snow', - '50n':'wi-night-alt-cloudy-windy' - } -
+| Option | Description +| ---------------------------- | ----------- +| `location` | The location used for weather information.

**Example:** `'Amsterdam,Netherlands'`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `locationID` | Location ID from [OpenWeatherMap](http://openweathermap.org/help/city_list.txt) **This will override anything you put in location.**
Leave blank if you want to use location.
**Example:** `1234567`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `appid` | The [OpenWeatherMap](https://home.openweathermap.org) API key, which can be obtained by creating an OpenWeatherMap account.

This value is **REQUIRED** +| `units` | What units to use. Specified by config.js

**Possible values:** `config.units` = Specified by config.js, `default` = Kelvin, `metric` = Celsius, `imperial` =Fahrenheit
**Default value:** `config.units` +| `roundTemp` | Round temperature value to nearest integer.

**Possible values:** `true` (round to integer) or `false` (display exact value with decimal point)
**Default value:** `false` +| `updateInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `600000` (10 minutes) +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `1000` (1 second) +| `timeFormat` | Use 12 or 24 hour format.

**Possible values:** `12` or `24`
**Default value:** uses value of _config.timeFormat_ +| `showPeriod` | Show the period (am/pm) with 12 hour format

**Possible values:** `true` or `false`
**Default value:** `true` +| `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase

**Possible values:** `true` or `false`
**Default value:** `false` +| `showWindDirection` | Show the wind direction next to the wind speed.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showHumidity` | Show the current humidity

**Possible values:** `true` or `false`
**Default value:** `false` +| `onlyTemp` | Show only current Temperature and weather icon.

**Possible values:** `true` or `false`
**Default value:** `false` +| `useBeaufort` | Pick between using the Beaufort scale for wind speed or using the default units.

**Possible values:** `true` or `false`
**Default value:** `true` +| `lang` | The language of the days.

**Possible values:** `en`, `nl`, `ru`, etc ...
**Default value:** uses value of _config.language_ +| `initialLoadDelay` | The initial delay before loading. If you have multiple modules that use the same API key, you might want to delay one of the requests. (Milliseconds)

**Possible values:** `1000` - `5000`
**Default value:** `0` +| `retryDelay` | The delay before retrying after a request failure. (Milliseconds)

**Possible values:** `1000` - `60000`
**Default value:** `2500` +| `apiVersion` | The OpenWeatherMap API version to use.

**Default value:** `2.5` +| `apiBase` | The OpenWeatherMap base URL.

**Default value:** `'http://api.openweathermap.org/data/'` +| `weatherEndpoint` | The OpenWeatherMap API endPoint.

**Default value:** `'weather'` +| `appendLocationNameToHeader` | If set to `true`, the returned location name will be appended to the header of the module, if the header is enabled. This is mainly intresting when using calender based weather.

**Default value:** `true` +| `calendarClass` | The class for the calender module to base the event based weather information on.

**Default value:** `'calendar'` +| `iconTable` | The conversion table to convert the weather conditions to weather-icons.

**Default value:** view tabel below. + +#### Default Icon Table +````javascript +iconTable: { + '01d': 'wi-day-sunny', + '02d': 'wi-day-cloudy', + '03d': 'wi-cloudy', + '04d': 'wi-cloudy-windy', + '09d': 'wi-showers', + '10d': 'wi-rain', + '11d': 'wi-thunderstorm', + '13d': 'wi-snow', + '50d': 'wi-fog', + '01n': 'wi-night-clear', + '02n': 'wi-night-cloudy', + '03n': 'wi-night-cloudy', + '04n': 'wi-night-cloudy', + '09n': 'wi-night-showers', + '10n': 'wi-night-rain', + '11n': 'wi-night-thunderstorm', + '13n': 'wi-night-snow', + '50n': 'wi-night-alt-cloudy-windy' +} +```` diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index 72e7d023..bcbd57fc 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -20,23 +20,6 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - - - -
OptionDescription
textThe text to display.
-
Example: 'Hello world!' -
Default value: 'Hello world!' -
+| Option | Description +| ------ | ----------- +| `text` | The text to display.

**Example:** `'Hello world!'`
**Default value:** `'Hello world!'` diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 8a0fec25..20840806 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -33,37 +33,14 @@ modules: [ ### Notifications #### Interacting with the module -MagicMirror's [notification mechanism](https://github.com/MichMich/MagicMirror/tree/master/modules#thissendnotificationnotification-payload) allows to send notifications to the ````newsfeed```` module. The following notifications are supported: +MagicMirror's [notification mechanism](https://github.com/MichMich/MagicMirror/tree/master/modules#thissendnotificationnotification-payload) allows to send notifications to the `newsfeed` module. The following notifications are supported: - - - - - - - - - - - - - - - - - - - - - - - - - - -
Notification IdentifierDescription
ARTICLE_NEXTShows the next news title (hiding the summary or previously fully displayed article)
ARTICLE_PREVIOUSShows the previous news title (hiding the summary or previously fully displayed article)
ARTICLE_MORE_DETAILS

When received the *first time*, shows the corresponding description of the currently displayed news title.
The module expects that the module's configuration option ````showDescription```` is set to ````false```` (default value).

- When received a *second consecutive time*, shows the full news article in an IFRAME.
- This requires that the news page can be embedded in an IFRAME, e.g. doesn't have the HTTP response header [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) set to e.g. ````DENY````.
ARTICLE_LESS_DETAILSHides the summary or full news article and only displays the news title of the currently viewed news item.
+| Notification Identifier | Description +| ----------------------- | ----------- +| `ARTICLE_NEXT` | Shows the next news title (hiding the summary or previously fully displayed article) +| `ARTICLE_PREVIOUS` | Shows the previous news title (hiding the summary or previously fully displayed article) +| `ARTICLE_MORE_DETAILS` | When received the _first time_, shows the corresponding description of the currently displayed news title.
The module expects that the module's configuration option `showDescription` is set to `false` (default value).

When received a _second consecutive time_, shows the full news article in an IFRAME.
This requires that the news page can be embedded in an IFRAME, e.g. doesn't have the HTTP response header [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) set to e.g. `DENY`. +| `ARTICLE_LESS_DETAILS` | Hides the summary or full news article and only displays the news title of the currently viewed news item. Note the payload of the sent notification event is ignored. @@ -73,155 +50,32 @@ The following example shows how the next news article title can be displayed on this.sendNotification('ARTICLE_NEXT'); ```` -#### ````newsfeed```` specific notification emitting modules +#### `newsfeed` specific notification emitting modules The third party [MMM-Gestures](https://github.com/thobach/MMM-Gestures) module supports above notifications when moving your hand up, down, left or right in front of a gesture sensor attached to the MagicMirror. See module's readme for more details. ## Configuration options The following properties can be configured: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - removeStartTags: false, - removeEndTags: false, - startTags: [], - endTags: [] - - - - - - - - - - - - - - - - - - - -
OptionDescription
feedsAn array of feed urls that will be used as source.
- More info about this object can be found below. -
Default value: [ - { - title: "New York Times", - url: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml", - encoding: "UTF-8" - } - ] -
showSourceTitleDisplay the title of the source.
-
Possible values: true or false -
Default value: true -
showPublishDateDisplay the publish date of an headline.
-
Possible values: true or false -
Default value: true -
showDescriptionDisplay the description of an item.
-
Possible values: true or false -
Default value: false -
reloadIntervalHow often does the content needs to be fetched? (Milliseconds)
-
Possible values: 1000 - 86400000 -
Default value: 300000 (5 minutes) -
updateIntervalHow often do you want to display a new headline? (Milliseconds)
-
Possible values:1000 - 60000 -
Default value: 10000 (10 seconds) -
animationSpeedSpeed of the update animation. (Milliseconds)
-
Possible values:0 - 5000 -
Default value: 2500 (2.5 seconds) -
maxNewsItemsTotal amount of news items to cycle through. (0 for unlimited)
-
Possible values:0 - ... -
Default value: 0 -
removeStartTagsSome newsfeeds feature tags at the beginning of their titles or descriptions, such as [VIDEO]. - This setting allows for the removal of specified tags from the beginning of an item's description and/or title.
-
Possible values:'title', 'description', 'both' -
startTagsList the tags you would like to have removed at the beginning of the feed item
-
Possible values: ['TAG'] or ['TAG1','TAG2',...] -
removeEndTagsRemove specified tags from the end of an item's description and/or title.
-
Possible values:'title', 'description', 'both' -
endTagsList the tags you would like to have removed at the end of the feed item
-
Possible values: ['TAG'] or ['TAG1','TAG2',...] -
+| Option | Description +| ----------------- | ----------- +| `feeds` | An array of feed urls that will be used as source.
More info about this object can be found below.
**Default value:** `[{ title: "New York Times", url: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml", encoding: "UTF-8" }]` +| `showSourceTitle` | Display the title of the source.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showPublishDate` | Display the publish date of an headline.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showDescription` | Display the description of an item.

**Possible values:** `true` or `false`
**Default value:** `false` +| `reloadInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) +| `updateInterval` | How often do you want to display a new headline? (Milliseconds)

**Possible values:**`1000` - `60000`
**Default value:** `10000` (10 seconds) +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `2500` (2.5 seconds) +| `maxNewsItems` | Total amount of news items to cycle through. (0 for unlimited)

**Possible values:**`0` - `...`
**Default value:** `0` +| `removeStartTags` | Some newsfeeds feature tags at the **beginning** of their titles or descriptions, such as _[VIDEO]_. This setting allows for the removal of specified tags from the beginning of an item's description and/or title.

**Possible values:**`'title'`, `'description'`, `'both'` +| `startTags` | List the tags you would like to have removed at the beginning of the feed item

**Possible values:** `['TAG']` or `['TAG1','TAG2',...]` +| `removeEndTags` | Remove specified tags from the **end** of an item's description and/or title.

**Possible values:**`'title'`, `'description'`, `'both'` +| `endTags` | List the tags you would like to have removed at the end of the feed item

**Possible values:** `['TAG']` or `['TAG1','TAG2',...]` The `feeds` property contains an array with multiple objects. These objects have the following properties: - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
titleThe name of the feed source to be displayed above the news items.
-
This property is optional. -
urlThe url of the feed used for the headlines.
-
Example: 'http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml' -
encodingThe encoding of the news feed.
-
This property is optional. -
Possible values:'UTF-8', 'ISO-8859-1', etc ... -
Default value: 'UTF-8' -
+| Option | Description +| ---------- | ----------- +| `title` | The name of the feed source to be displayed above the news items.

This property is optional. +| `url` | The url of the feed used for the headlines.

**Example:** `'http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml'` +| `encoding` | The encoding of the news feed.

This property is optional.
**Possible values:**`'UTF-8'`, `'ISO-8859-1'`, etc ...
**Default value:** `'UTF-8'` diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index 7d839087..16a1b0c2 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -22,21 +22,6 @@ modules: [ The following properties can be configured: - - - - - - - - - - - - - - -
OptionDescription
updateIntervalHow often do you want to check for a new version? This value represents the interval in milliseconds.
-
Possible values: Any value above 60000 (1 minute); -
Default value: 600000 (10 minutes); -
\ No newline at end of file +| Option | Description +| ---------------- | ----------- +| `updateInterval` | How often do you want to check for a new version? This value represents the interval in milliseconds.

**Possible values:** Any value above `60000` (1 minute)
**Default value:** `600000` (10 minutes); diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 2842af54..e2cc5028 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -25,171 +25,49 @@ modules: [ The following properties can be configured: +| Option | Description +| ---------------------------- | ----------- +| `location` | The location used for weather information.

**Example:** `'Amsterdam,Netherlands'`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `locationID` | Location ID from [OpenWeatherMap](http://openweathermap.org/help/city_list.txt) **This will override anything you put in location.**
Leave blank if you want to use location.
**Example:** `1234567`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `appid` | The [OpenWeatherMap](https://home.openweathermap.org) API key, which can be obtained by creating an OpenWeatherMap account.

This value is **REQUIRED** +| `units` | What units to use. Specified by config.js

**Possible values:** `config.units` = Specified by config.js, `default` = Kelvin, `metric` = Celsius, `imperial` =Fahrenheit
**Default value:** `config.units` +| `roundTemp` | Round temperature values to nearest integer.

**Possible values:** `true` (round to integer) or `false` (display exact value with decimal point)
**Default value:** `false` +| `maxNumberOfDays` | How many days of forecast to return. Specified by config.js

**Possible values:** `1` - `16`
**Default value:** `7` (7 days)
This value is optional. By default the weatherforecast module will return 7 days. +| `showRainAmount` | Should the predicted rain amount be displayed?

**Possible values:** `true` or `false`
**Default value:** `false`
This value is optional. By default the weatherforecast module will not display the predicted amount of rain. +| `updateInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `600000` (10 minutes) +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `1000` (1 second) +| `lang` | The language of the days.

**Possible values:** `en`, `nl`, `ru`, etc ...
**Default value:** uses value of _config.language_ +| `fade` | Fade the future events to black. (Gradient)

**Possible values:** `true` or `false`
**Default value:** `true` +| `fadePoint` | Where to start fade?

**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` +| `initialLoadDelay` | The initial delay before loading. If you have multiple modules that use the same API key, you might want to delay one of the requests. (Milliseconds)

**Possible values:** `1000` - `5000`
**Default value:** `2500` (2.5 seconds delay. This delay is used to keep the OpenWeather API happy.) +| `retryDelay` | The delay before retrying after a request failure. (Milliseconds)

**Possible values:** `1000` - `60000`
**Default value:** `2500` +| `apiVersion` | The OpenWeatherMap API version to use.

**Default value:** `2.5` +| `apiBase` | The OpenWeatherMap base URL.

**Default value:** `'http://api.openweathermap.org/data/'` +| `forecastEndpoint` | The OpenWeatherMap API endPoint.

**Default value:** `'forecast/daily'` +| `appendLocationNameToHeader` | If set to `true`, the returned location name will be appended to the header of the module, if the header is enabled. This is mainly intresting when using calender based weather.

**Default value:** `true` +| `calendarClass` | The class for the calender module to base the event based weather information on.

**Default value:** `'calendar'` +| `iconTable` | The conversion table to convert the weather conditions to weather-icons.

**Default value:** view table below - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
locationThe location used for weather information.
-
Example: 'Amsterdam,Netherlands' -
Default value: false

- Note: When the location and locationID are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. -
locationIDLocation ID from OpenWeatherMap This will override anything you put in location.
Leave blank if you want to use location. -
Example: 1234567 -
Default value: false

- Note: When the location and locationID are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. -
appidThe OpenWeatherMap API key, which can be obtained by creating an OpenWeatherMap account.
-
This value is REQUIRED -
unitsWhat units to use. Specified by config.js
-
Possible values: config.units = Specified by config.js, default = Kelvin, metric = Celsius, imperial =Fahrenheit -
Default value: config.units -
roundTempRound temperature values to nearest integer.
-
Possible values: true (round to integer) or false (display exact value with decimal point) -
Default value: false -
maxNumberOfDaysHow many days of forecast to return. Specified by config.js
-
Possible values: 1 - 16 -
Default value: 7 (7 days) -
This value is optional. By default the weatherforecast module will return 7 days. -
showRainAmountShould the predicted rain amount be displayed?
-
Possible values: true or false -
Default value: false -
This value is optional. By default the weatherforecast module will not display the predicted amount of rain. -
updateIntervalHow often does the content needs to be fetched? (Milliseconds)
-
Possible values: 1000 - 86400000 -
Default value: 600000 (10 minutes) -
animationSpeedSpeed of the update animation. (Milliseconds)
-
Possible values:0 - 5000 -
Default value: 1000 (1 second) -
langThe language of the days.
-
Possible values: en, nl, ru, etc ... -
Default value: uses value of config.language -
fadeFade the future events to black. (Gradient)
-
Possible values: true or false -
Default value: true -
fadePointWhere to start fade?
-
Possible values: 0 (top of the list) - 1 (bottom of list) -
Default value: 0.25 -
initialLoadDelayThe initial delay before loading. If you have multiple modules that use the same API key, you might want to delay one of the requests. (Milliseconds)
-
Possible values: 1000 - 5000 -
Default value: 2500 (2.5 seconds delay. This delay is used to keep the OpenWeather API happy.) -
retryDelayThe delay before retrying after a request failure. (Milliseconds)
-
Possible values: 1000 - 60000 -
Default value: 2500 -
apiVersionThe OpenWeatherMap API version to use.
-
Default value: 2.5 -
apiBaseThe OpenWeatherMap base URL.
-
Default value: 'http://api.openweathermap.org/data/' -
forecastEndpointThe OpenWeatherMap API endPoint.
-
Default value: 'forecast/daily' -
appendLocationNameToHeaderIf set to true, the returned location name will be appended to the header of the module, if the header is enabled. This is mainly intresting when using calender based weather.
-
Default value: true -
calendarClassThe class for the calender module to base the event based weather information on.
-
Default value: 'calendar' -
iconTableThe conversion table to convert the weather conditions to weather-icons.
-
Default value: iconTable: { - '01d':'wi-day-sunny', - '02d':'wi-day-cloudy', - '03d':'wi-cloudy', - '04d':'wi-cloudy-windy', - '09d':'wi-showers', - '10d':'wi-rain', - '11d':'wi-thunderstorm', - '13d':'wi-snow', - '50d':'wi-fog', - '01n':'wi-night-clear', - '02n':'wi-night-cloudy', - '03n':'wi-night-cloudy', - '04n':'wi-night-cloudy', - '09n':'wi-night-showers', - '10n':'wi-night-rain', - '11n':'wi-night-thunderstorm', - '13n':'wi-night-snow', - '50n':'wi-night-alt-cloudy-windy' - } -
+#### Default Icon Table +````javascript +iconTable: { + '01d': 'wi-day-sunny', + '02d': 'wi-day-cloudy', + '03d': 'wi-cloudy', + '04d': 'wi-cloudy-windy', + '09d': 'wi-showers', + '10d': 'wi-rain', + '11d': 'wi-thunderstorm', + '13d': 'wi-snow', + '50d': 'wi-fog', + '01n': 'wi-night-clear', + '02n': 'wi-night-cloudy', + '03n': 'wi-night-cloudy', + '04n': 'wi-night-cloudy', + '09n': 'wi-night-showers', + '10n': 'wi-night-rain', + '11n': 'wi-night-thunderstorm', + '13n': 'wi-night-snow', + '50n': 'wi-night-alt-cloudy-windy' +} +```` From 0734e136d0f9c347819fcbf12f13800131aa271f Mon Sep 17 00:00:00 2001 From: Brian Date: Tue, 17 Jan 2017 16:15:39 +0100 Subject: [PATCH 056/257] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a01840c9..459779a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. - Scaled the splash screen down to make it a bit more subtle. +- Replace HTML tables with markdown tables in README files. ### Added - Add loaded function to modules, providing an async callback. From a591cf1d21813b8358245691078f1a49cfcc04e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 18 Jan 2017 01:36:14 -0300 Subject: [PATCH 057/257] update branch Manual Installation in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 126a1d7f..3ccd2150 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installer ### Manual Installation 1. Download and install the latest Node.js version. -2. Clone the repository and check out the beta branch: `git clone https://github.com/MichMich/MagicMirror` +2. Clone the repository and check out the master branch: `git clone https://github.com/MichMich/MagicMirror` 3. Enter the repository: `cd ~/MagicMirror` 4. Install and run the app: `npm install && npm start` From 93c07b2b1e2e4218d17ceead43b63509b6beb7e0 Mon Sep 17 00:00:00 2001 From: Tino Ziegler Date: Wed, 18 Jan 2017 15:56:12 +0100 Subject: [PATCH 058/257] =?UTF-8?q?Fix:=20check=20if=20temperature=20is=20?= =?UTF-8?q?defined=20(0=C2=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/default/currentweather/currentweather.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index e92550ea..37b054a9 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -296,7 +296,7 @@ Module.register("currentweather",{ */ processWeather: function(data) { - if (!data || !data.main || !data.main.temp) { + if (!data || !data.main || typeof data.main.temp === 'undefined') { // Did not receive usable new data. // Maybe this needs a better check? return; From 56413ee94eca749171fad83ccd95aabc189e02e5 Mon Sep 17 00:00:00 2001 From: Tino Ziegler Date: Wed, 18 Jan 2017 16:04:02 +0100 Subject: [PATCH 059/257] added fix --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..544ce189 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## Fixed +- Module currentWeather: check if temperature is defined + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From 222e4154a1bc303c8c37a0c25abfbc16bb89e0f0 Mon Sep 17 00:00:00 2001 From: Tino Ziegler Date: Thu, 19 Jan 2017 09:11:33 +0100 Subject: [PATCH 060/257] changed to double quotes --- modules/default/currentweather/currentweather.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 37b054a9..135af54a 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -296,7 +296,7 @@ Module.register("currentweather",{ */ processWeather: function(data) { - if (!data || !data.main || typeof data.main.temp === 'undefined') { + if (!data || !data.main || typeof data.main.temp === "undefined") { // Did not receive usable new data. // Maybe this needs a better check? return; From d9e20ea17a0f336099990146c48523aa3cd98b43 Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Fri, 20 Jan 2017 13:43:44 +0100 Subject: [PATCH 061/257] Hungarian Translation --- translations/hu.json | 35 +++++++++++++++++++++++++++++++++++ translations/translations.js | 1 + 2 files changed, 36 insertions(+) create mode 100644 translations/hu.json diff --git a/translations/hu.json b/translations/hu.json new file mode 100644 index 00000000..d52242d8 --- /dev/null +++ b/translations/hu.json @@ -0,0 +1,35 @@ +{ + /* GENERAL */ + "LOADING": "Betöltés …", + + /* CALENDAR */ + "TODAY": "Ma", + "TOMORROW": "Holnap", + "DAYAFTERTOMORROW": "Holnapután", + "RUNNING": "Vége lesz", + "EMPTY": "Nincs közelgő esemény.", + + /* WEATHER */ + "N": "É", + "NNE": "ÉÉK", + "NE": "ÉK", + "ENE": "KÉK", + "E": "K", + "ESE": "KDK", + "SE": "DK", + "SSE": "DDK", + "S": "D", + "SSW": "DDNy", + "SW": "DNy", + "WSW": "NyDNy", + "W": "Ny", + "WNW": "NyÉNy", + "NW": "ÉNy", + "NNW": "ÉÉNy", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés.", + "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", + "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." +} + \ No newline at end of file diff --git a/translations/translations.js b/translations/translations.js index d572c803..4c0a6b94 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -26,4 +26,5 @@ var translations = { "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish + "hu" : "translations/hu.json", // Hungarian }; From 02a32dea40c62d625868dc8f3b49737409cf7318 Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Fri, 20 Jan 2017 13:43:58 +0100 Subject: [PATCH 062/257] Revert "Hungarian Translation" This reverts commit d9e20ea17a0f336099990146c48523aa3cd98b43. --- translations/hu.json | 35 ----------------------------------- translations/translations.js | 1 - 2 files changed, 36 deletions(-) delete mode 100644 translations/hu.json diff --git a/translations/hu.json b/translations/hu.json deleted file mode 100644 index d52242d8..00000000 --- a/translations/hu.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - /* GENERAL */ - "LOADING": "Betöltés …", - - /* CALENDAR */ - "TODAY": "Ma", - "TOMORROW": "Holnap", - "DAYAFTERTOMORROW": "Holnapután", - "RUNNING": "Vége lesz", - "EMPTY": "Nincs közelgő esemény.", - - /* WEATHER */ - "N": "É", - "NNE": "ÉÉK", - "NE": "ÉK", - "ENE": "KÉK", - "E": "K", - "ESE": "KDK", - "SE": "DK", - "SSE": "DDK", - "S": "D", - "SSW": "DDNy", - "SW": "DNy", - "WSW": "NyDNy", - "W": "Ny", - "WNW": "NyÉNy", - "NW": "ÉNy", - "NNW": "ÉÉNy", - - /* UPDATE INFO */ - "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés.", - "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", - "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." -} - \ No newline at end of file diff --git a/translations/translations.js b/translations/translations.js index 4c0a6b94..d572c803 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -26,5 +26,4 @@ var translations = { "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish - "hu" : "translations/hu.json", // Hungarian }; From 7f1b11d19b371ab0222e3b2741e0b9384612a990 Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Fri, 20 Jan 2017 13:45:14 +0100 Subject: [PATCH 063/257] Hungarian translation --- translations/hu.json | 35 +++++++++++++++++++++++++++++++++++ translations/translations.js | 1 + 2 files changed, 36 insertions(+) create mode 100644 translations/hu.json diff --git a/translations/hu.json b/translations/hu.json new file mode 100644 index 00000000..d52242d8 --- /dev/null +++ b/translations/hu.json @@ -0,0 +1,35 @@ +{ + /* GENERAL */ + "LOADING": "Betöltés …", + + /* CALENDAR */ + "TODAY": "Ma", + "TOMORROW": "Holnap", + "DAYAFTERTOMORROW": "Holnapután", + "RUNNING": "Vége lesz", + "EMPTY": "Nincs közelgő esemény.", + + /* WEATHER */ + "N": "É", + "NNE": "ÉÉK", + "NE": "ÉK", + "ENE": "KÉK", + "E": "K", + "ESE": "KDK", + "SE": "DK", + "SSE": "DDK", + "S": "D", + "SSW": "DDNy", + "SW": "DNy", + "WSW": "NyDNy", + "W": "Ny", + "WNW": "NyÉNy", + "NW": "ÉNy", + "NNW": "ÉÉNy", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés.", + "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", + "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." +} + \ No newline at end of file diff --git a/translations/translations.js b/translations/translations.js index d572c803..4c0a6b94 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -26,4 +26,5 @@ var translations = { "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish + "hu" : "translations/hu.json", // Hungarian }; From c4d70e7f9bf889f2ebe650cdca452309b1daa440 Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Fri, 20 Jan 2017 13:49:10 +0100 Subject: [PATCH 064/257] Hungarian Translation --- translations/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/hu.json b/translations/hu.json index d52242d8..a957a2e6 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -28,7 +28,7 @@ "NNW": "ÉÉNy", /* UPDATE INFO */ - "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés.", + "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés!", "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." } From b8917a3c0e4fb1eef3d7211f15064c8653972919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 18 Jan 2017 13:47:45 -0300 Subject: [PATCH 065/257] Hotfix introduced client error on commit 3a8d72d Noticed by @qistoph https://github.com/MichMich/MagicMirror/pull/623#issuecomment-273505208 --- js/module.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/js/module.js b/js/module.js index b12f6cd4..dfd5f2bc 100644 --- a/js/module.js +++ b/js/module.js @@ -416,6 +416,10 @@ Module.register = function (name, moduleDefinition) { Module.definitions[name] = moduleDefinition; }; -exports._test = { - cmpVersions: cmpVersions +if (typeof exports != "undefined") { // For testing purpose only + // A good a idea move the function cmpversions a helper file. + // It's used into other side. + exports._test = { + cmpVersions: cmpVersions + } } From 853ec7320f8b413e206e848021ccd2449b910c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 20 Jan 2017 19:03:33 -0300 Subject: [PATCH 066/257] Add note in step of copy for sample file configuration in README. This note is related if was used installer script. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bc9e398b..b13b5f54 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Type `git status` to see your changes, if there are any, you can reset them with ## Configuration -1. Duplicate `config/config.js.sample` to `config/config.js`. +1. Duplicate `config/config.js.sample` to `config/config.js`. **Note:** If you used the installer script. This step is already done for you. 2. Modify your required settings. The following properties can be configured: From 08cbac62773daf3fdd4670565096ac2e22fa2b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 21 Jan 2017 11:04:11 -0300 Subject: [PATCH 067/257] minor fix textual --- tests/functions/compare-version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functions/compare-version.js b/tests/functions/compare-version.js index 77efa422..3baaacd0 100644 --- a/tests/functions/compare-version.js +++ b/tests/functions/compare-version.js @@ -3,7 +3,7 @@ var expect = chai.expect; var classMM = require('../../js/class.js'); // require for load module.js var moduleMM = require('../../js/module.js') -describe('Test function cmpVersions into js/module.js', function() { +describe('Test function cmpVersions in js/module.js', function() { it('Should be return -1 ', function() { expect(moduleMM._test.cmpVersions('2.1', '2.2')).to.equal(-1); From 63819c5757b0e0cc3c5d0003c4f4c5671407e6d5 Mon Sep 17 00:00:00 2001 From: Joseph Bethge Date: Sat, 21 Jan 2017 16:05:29 +0100 Subject: [PATCH 068/257] fix calendar issues --- CHANGELOG.md | 2 +- modules/default/calendar/vendor/ical.js/ical.js | 12 +++++++++++- modules/default/calendar/vendor/ical.js/node-ical.js | 11 ++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e8571f..3211d200 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Installer: Use init config.js from config.js.sample. -- Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) +- Switched out `rrule` package for `rrule-alt` and fixes in `ical.js` in order to fix calendar issues. ([#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. - Scaled the splash screen down to make it a bit more subtle. - Replace HTML tables with markdown tables in README files. diff --git a/modules/default/calendar/vendor/ical.js/ical.js b/modules/default/calendar/vendor/ical.js/ical.js index 252e426b..f60c5357 100644 --- a/modules/default/calendar/vendor/ical.js/ical.js +++ b/modules/default/calendar/vendor/ical.js/ical.js @@ -90,7 +90,6 @@ return dt } - var dateParam = function(name){ return function(val, params, curr){ @@ -143,6 +142,16 @@ } } + var exdateParam = function(name){ + return function(val, params, curr){ + var date = dateParam(name)(val, params, curr); + if (date.exdates === undefined) { + date.exdates = []; + } + date.exdates.push(date.exdate); + return date; + } + } var geoParam = function(name){ return function(val, params, curr){ @@ -240,6 +249,7 @@ , 'LOCATION' : storeParam('location') , 'DTSTART' : dateParam('start') , 'DTEND' : dateParam('end') + , 'EXDATE' : exdateParam('exdate') ,' CLASS' : storeParam('class') , 'TRANSP' : storeParam('transparency') , 'GEO' : geoParam('geo') diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index e2c4a319..c954e722 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -18,6 +18,7 @@ exports.parseFile = function(filename){ var rrule = require('rrule-alt').RRule +var rrulestr = rrule.rrulestr ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ curr.rrule = line; @@ -26,7 +27,7 @@ ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ var originalEnd = ical.objectHandlers['END']; ical.objectHandlers['END'] = function(val, params, curr, stack){ if (curr.rrule) { - var rule = curr.rrule.replace('RRULE:', ''); + var rule = curr.rrule; if (rule.indexOf('DTSTART') === -1) { if (curr.start.length === 8) { @@ -36,10 +37,14 @@ ical.objectHandlers['END'] = function(val, params, curr, stack){ } } - rule += ';DTSTART=' + curr.start.toISOString().replace(/[-:]/g, ''); + rule += ' DTSTART:' + curr.start.toISOString().replace(/[-:]/g, ''); rule = rule.replace(/\.[0-9]{3}/, ''); } - curr.rrule = rrule.fromString(rule); + for (var i in curr.exdates) { + rule += ' EXDATE:' + curr.exdates[i].toISOString().replace(/[-:]/g, ''); + rule = rule.replace(/\.[0-9]{3}/, ''); + } + curr.rrule = rrulestr(rule); } return originalEnd.call(this, val, params, curr, stack); } From 782bfd058bb3a5408498ac3bbeee244bc5b5d43b Mon Sep 17 00:00:00 2001 From: villevirtanen Date: Sun, 22 Jan 2017 10:46:28 +0200 Subject: [PATCH 069/257] Update fi.json DAYAFTERTOMORROW, UPDATE_NOTIFICATION and UPDATE_NOTIFICATION_MODULE added. --- translations/fi.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/translations/fi.json b/translations/fi.json index b753039e..59fa0180 100644 --- a/translations/fi.json +++ b/translations/fi.json @@ -5,6 +5,7 @@ /* CALENDAR */ "TODAY": "Tänään", "TOMORROW": "Huomenna", + "DAYAFTERTOMORROW": "Ylihuomenna", "RUNNING": "Meneillään", "EMPTY": "Ei tulevia tapahtumia.", @@ -24,5 +25,9 @@ "W": "L", "WNW": "LPL", "NW": "PL", - "NNW": "PPL" + "NNW": "PPL", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² päivitys saatavilla.", + "UPDATE_NOTIFICATION_MODULE": "Päivitys saatavilla moduulille MODULE_NAME." } From 3dd3afd21f8b5f5f8471f138e93a6ea612eb3d91 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sun, 22 Jan 2017 12:23:11 +0100 Subject: [PATCH 070/257] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e8571f..4856fc25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Make mouse events pass through the region fullscreen_above to modules below. - Scaled the splash screen down to make it a bit more subtle. - Replace HTML tables with markdown tables in README files. +- Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION` and `UPDATE_NOTIFICATION_MODULE` to Finnish translations. ### Added - Add loaded function to modules, providing an async callback. From b893ae7c14b5bb6986a1816e019d4577ba9cdff2 Mon Sep 17 00:00:00 2001 From: Rodrigo Ramez Norambuena Date: Sun, 22 Jan 2017 23:45:02 -0300 Subject: [PATCH 071/257] Fix path for script MagicMirror on pm2 --- installers/pm2_MagicMirror.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/pm2_MagicMirror.json b/installers/pm2_MagicMirror.json index 55f8df31..3f0b27bd 100644 --- a/installers/pm2_MagicMirror.json +++ b/installers/pm2_MagicMirror.json @@ -1,7 +1,7 @@ { apps : [{ name : "MagicMirror", - script : "/home/pi/MagicMirror/installer/mm.sh", + script : "/home/pi/MagicMirror/installers/mm.sh", watch : ["/home/pi/MagicMirror/config/config.js"] }] } From 5087dbd7565d3bee14b1792a7cc161f922e87713 Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Mon, 23 Jan 2017 09:44:09 +0100 Subject: [PATCH 072/257] Update hu.json Remove + line. --- translations/hu.json | 1 - 1 file changed, 1 deletion(-) diff --git a/translations/hu.json b/translations/hu.json index a957a2e6..0fa5ea5e 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -32,4 +32,3 @@ "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." } - \ No newline at end of file From 9758f3c9d264b80fb8e3180e158b0c3ed15ac6ff Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Mon, 23 Jan 2017 11:38:48 +0100 Subject: [PATCH 073/257] Add the Hungarian translation. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9491fb15..e2ca6d03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add postinstall script to notify user that MagicMirror installed successfully despite warnings from NPM. - Init tests using mocha. - Option to use RegExp in Calendar's titleReplace. +- Hungarian Translation. ### Fixed - Update .gitignore to not ignore default modules folder. From 00197d131d645ad6f1cc44fc9e70bb529dbce06a Mon Sep 17 00:00:00 2001 From: kthorri Date: Mon, 23 Jan 2017 14:51:59 +0000 Subject: [PATCH 074/257] Adding Icelandic translation to translation.js --- translations/translations.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/translations/translations.js b/translations/translations.js index d572c803..51b90e62 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -19,11 +19,12 @@ var translations = { "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska "it" : "translations/it.json", // Italian - "zh_cn" : "translations/zh_cn.json", // Simplified Chinese + "zh_cn" : "translations/zh_cn.jsona", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese "ja" : "translations/ja.json", // Japanese "pl" : "translations/pl.json", // Polish "gr" : "translations/gr.json", // Greek "da" : "translations/da.json", // Danish "tr" : "translations/tr.json", // Turkish + "is" : "translations/is.json", // Icelandic }; From 9a983e7565ec18e6dfecddcfac9494eb294d1542 Mon Sep 17 00:00:00 2001 From: kthorri Date: Mon, 23 Jan 2017 14:53:18 +0000 Subject: [PATCH 075/257] Adding icelandic translation json file --- translations/is.json | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 translations/is.json diff --git a/translations/is.json b/translations/is.json new file mode 100644 index 00000000..d3e6d6cb --- /dev/null +++ b/translations/is.json @@ -0,0 +1,34 @@ +{ + /* GENERAL */ + "LOADING": "Hleð upp …", + + /* CALENDAR */ + "TODAY": "Í dag", + "TOMORROW": "Á morgun", + "DAYAFTERTOMORROW": "Ekki á morgun, heldur hinn", + "RUNNING": "Endar eftir", + "EMPTY": "Ekkert framundan.", + + /* WEATHER */ + "N": "N", + "NNE": "NNA", + "NE": "NA", + "ENE": "ANA", + "E": "A", + "ESE": "ASA", + "SE": "SA", + "SSE": "SSA", + "S": "S", + "SSW": "SSV", + "SW": "SV", + "WSW": "VSV", + "W": "V", + "WNW": "VNV", + "NW": "NV", + "NNW": "NNV", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² uppfærsla í boði.", + "UPDATE_NOTIFICATION_MODULE": "Uppfærsla í boði fyrir MODULE_NAME module.", + "UPDATE_INFO": "Núverandi kerfi er COMMIT_COUNT á eftir BRANCH_NAME branchinu." +} From 5e860b685069822afe674da7d19751dc21725940 Mon Sep 17 00:00:00 2001 From: kthorri Date: Mon, 23 Jan 2017 14:53:57 +0000 Subject: [PATCH 076/257] Added icelandic translation to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..ad182002 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Added +- Icelandic translation. - Finnish translation. - Danish translation. - Turkish translation. From 47a87a14f5475f547bcba571beb9b583ccb3da92 Mon Sep 17 00:00:00 2001 From: kthorri Date: Mon, 23 Jan 2017 14:55:24 +0000 Subject: [PATCH 077/257] Fixing typo --- translations/translations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/translations.js b/translations/translations.js index 51b90e62..c3e15bca 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -19,7 +19,7 @@ var translations = { "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska "it" : "translations/it.json", // Italian - "zh_cn" : "translations/zh_cn.jsona", // Simplified Chinese + "zh_cn" : "translations/zh_cn.json", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese "ja" : "translations/ja.json", // Japanese "pl" : "translations/pl.json", // Polish From d9c7ee8976b69c8306ab133e20dc4c7d47ed1afc Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Mon, 23 Jan 2017 16:18:42 +0100 Subject: [PATCH 078/257] Fixed Changelog to match the correct version. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe43a1df..d845fec7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Init tests using mocha. - Option to use RegExp in Calendar's titleReplace. - Hungarian Translation. +- Icelandic Translation. ### Fixed - Update .gitignore to not ignore default modules folder. @@ -38,7 +39,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Added -- Icelandic translation. - Finnish translation. - Danish translation. - Turkish translation. From 690567659cc7bbc8d11ae1618c1c0ac67cc1132d Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Mon, 23 Jan 2017 09:46:50 -0800 Subject: [PATCH 079/257] Minor clean up for test suite @roramirez thanks for starting adding tests. I figured that we might as well grunt them and follow same rules for linting as we do for rest of JS code in the repo. I've made following minor modifications: - added tests to the grunt target - fixed indentation in package.json - made tests a bit more descriptive - fixed eslint errors surfaced by grunt --- Gruntfile.js | 4 ++-- package.json | 2 +- tests/functions/compare-version.js | 21 ++++++++++----------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index ec3128ef..5dca05d9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -7,8 +7,8 @@ module.exports = function(grunt) { configFile: ".eslintrc.json" }, target: ["js/*.js", "modules/default/*.js", "modules/default/*/*.js", - "serveronly/*.js", "*.js", "!modules/default/alert/notificationFx.js", - "!modules/default/alert/modernizr.custom.js", "!modules/default/alert/classie.js" + "serveronly/*.js", "*.js", "tests/*/*.js", "!modules/default/alert/notificationFx.js", + "!modules/default/alert/modernizr.custom.js", "!modules/default/alert/classie.js", ] }, stylelint: { diff --git a/package.json b/package.json index 0cc8f497..4cff0689 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "electron js/electron.js", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha tests --recursive" + "test": "./node_modules/mocha/bin/mocha tests --recursive" }, "repository": { "type": "git", diff --git a/tests/functions/compare-version.js b/tests/functions/compare-version.js index 3baaacd0..8cc22101 100644 --- a/tests/functions/compare-version.js +++ b/tests/functions/compare-version.js @@ -1,21 +1,20 @@ -var chai = require('chai'); +var chai = require("chai"); var expect = chai.expect; -var classMM = require('../../js/class.js'); // require for load module.js -var moduleMM = require('../../js/module.js') +var classMM = require("../../js/class.js"); // require for load module.js +var moduleMM = require("../../js/module.js") -describe('Test function cmpVersions in js/module.js', function() { +describe("Test function cmpVersions in js/module.js", function() { - it('Should be return -1 ', function() { - expect(moduleMM._test.cmpVersions('2.1', '2.2')).to.equal(-1); + it("should return -1 when comparing 2.1 to 2.2", function() { + expect(moduleMM._test.cmpVersions("2.1", "2.2")).to.equal(-1); }); - it('Should be return 0 ', function() { - expect(moduleMM._test.cmpVersions('2.2', '2.2')).to.equal(0); + it("should be return 0 when comparing 2.2 to 2.2", function() { + expect(moduleMM._test.cmpVersions("2.2", "2.2")).to.equal(0); }); - it('Should be return 1', function() { - expect(moduleMM._test.cmpVersions('1.1', '1.0')).to.equal(1); + it("should be return 1 when comparing 1.1 to 1.0", function() { + expect(moduleMM._test.cmpVersions("1.1", "1.0")).to.equal(1); }); - }); From f59f035a7ec5e64ab9e629521b39a548a6430b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 23 Jan 2017 18:00:54 -0300 Subject: [PATCH 080/257] Add config/* to the Grunt target. Also, this change can be check config errors by syntax. --- Gruntfile.js | 1 + config/config.js.sample | 52 ++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 5dca05d9..a3edb053 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -9,6 +9,7 @@ module.exports = function(grunt) { target: ["js/*.js", "modules/default/*.js", "modules/default/*/*.js", "serveronly/*.js", "*.js", "tests/*/*.js", "!modules/default/alert/notificationFx.js", "!modules/default/alert/modernizr.custom.js", "!modules/default/alert/classie.js", + "config/*", ] }, stylelint: { diff --git a/config/config.js.sample b/config/config.js.sample index 913dbc43..eab22972 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -8,61 +8,61 @@ var config = { port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: 'en', + language: "en", timeFormat: 24, - units: 'metric', + units: "metric", modules: [ { - module: 'alert', + module: "alert", }, { module: "updatenotification", position: "top_bar" }, { - module: 'clock', - position: 'top_left' + module: "clock", + position: "top_left" }, { - module: 'calendar', - header: 'US Holidays', - position: 'top_left', + module: "calendar", + header: "US Holidays", + position: "top_left", config: { calendars: [ { - symbol: 'calendar-check-o ', - url: 'webcal://www.calendarlabs.com/templates/ical/US-Holidays.ics' + symbol: "calendar-check-o ", + url: "webcal://www.calendarlabs.com/templates/ical/US-Holidays.ics" } ] } }, { - module: 'compliments', - position: 'lower_third' + module: "compliments", + position: "lower_third" }, { - module: 'currentweather', - position: 'top_right', + module: "currentweather", + position: "top_right", config: { - location: 'New York', - locationID: '', //ID from http://www.openweathermap.org - appid: 'YOUR_OPENWEATHER_API_KEY' + location: "New York", + locationID: "", //ID from http://www.openweathermap.org + appid: "YOUR_OPENWEATHER_API_KEY" } }, { - module: 'weatherforecast', - position: 'top_right', - header: 'Weather Forecast', + module: "weatherforecast", + position: "top_right", + header: "Weather Forecast", config: { - location: 'New York', - locationID: '5128581', //ID from http://www.openweathermap.org - appid: 'YOUR_OPENWEATHER_API_KEY' + location: "New York", + locationID: "5128581", //ID from http://www.openweathermap.org + appid: "YOUR_OPENWEATHER_API_KEY" } }, { - module: 'newsfeed', - position: 'bottom_bar', + module: "newsfeed", + position: "bottom_bar", config: { feeds: [ { @@ -79,4 +79,4 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== 'undefined') {module.exports = config;} +if (typeof module !== "undefined") {module.exports = config;} From 566ea9a1106fc7e18a670ad57f3e93f28895c015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 24 Jan 2017 02:12:36 -0300 Subject: [PATCH 081/257] Use script for start MagicMirror --- CHANGELOG.md | 1 + package.json | 2 +- run-start.sh | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 run-start.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d4563d3..795bce1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Option to use RegExp in Calendar's titleReplace. - Hungarian Translation. - Icelandic Translation. +- Add use a script to prevent when is run by SSH session set DISPLAY enviroment. ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/package.json b/package.json index 4cff0689..9d94a012 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A modular interface for smart mirrors.", "main": "js/electron.js", "scripts": { - "start": "electron js/electron.js", + "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", "test": "./node_modules/mocha/bin/mocha tests --recursive" }, diff --git a/run-start.sh b/run-start.sh new file mode 100644 index 00000000..6c4d4003 --- /dev/null +++ b/run-start.sh @@ -0,0 +1,4 @@ +if [ -z "$DISPLAY" ]; then #If not set DISPLAY is SSH remote or tty + export DISPLAY=:0 # Set by defaul display +fi +electron js/electron.js From 86e553e756fed4f327ff9b014b1dcf760309638e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 24 Jan 2017 02:59:20 -0300 Subject: [PATCH 082/257] Set configuration file by enviroment variable: Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. --- CHANGELOG.md | 1 + js/app.js | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d4563d3..347099e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Option to use RegExp in Calendar's titleReplace. - Hungarian Translation. - Icelandic Translation. +- Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/js/app.js b/js/app.js index 91149906..2eda7d1e 100644 --- a/js/app.js +++ b/js/app.js @@ -17,6 +17,10 @@ console.log("Starting MagicMirror: v" + global.version); // global absolute root path global.root_path = path.resolve(__dirname + "/../"); +if (process.env.MM_CONFIG_FILE) { + global.configuration_file = process.env.MM_CONFIG_FILE; +} + // The next part is here to prevent a major exception when there // is no internet connection. This could probable be solved better. process.on("uncaughtException", function (err) { @@ -41,7 +45,16 @@ var App = function() { var loadConfig = function(callback) { console.log("Loading config ..."); var defaults = require(__dirname + "/defaults.js"); - var configFilename = path.resolve(global.root_path + "/config/config.js"); + + // For this check proposed to TestSuite + // https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8 + console.log(global.configuration_file); + if (global.configuration_file === undefined ) { + var configFilename = path.resolve(global.root_path + "/config/config.js"); + } else { + var configFilename = path.resolve(global.configuration_file); + } + try { fs.accessSync(configFilename, fs.F_OK); var c = require(configFilename); From 9670d74345d6d6a6db8d2a2c8505f8c3b2d1636f Mon Sep 17 00:00:00 2001 From: zoliaz1993 Date: Tue, 24 Jan 2017 08:54:39 +0100 Subject: [PATCH 083/257] Update Hungarian language. Add Alert module Hun translation. Text aligned formality. --- modules/default/alert/translations/hu | 4 ++++ translations/hu.json | 2 +- translations/translations.js | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 modules/default/alert/translations/hu diff --git a/modules/default/alert/translations/hu b/modules/default/alert/translations/hu new file mode 100644 index 00000000..be618365 --- /dev/null +++ b/modules/default/alert/translations/hu @@ -0,0 +1,4 @@ +{ + "sysTitle": "MagicMirror értesítés", + "welcome": "Üdvözöljük, indulás sikeres!" +} diff --git a/translations/hu.json b/translations/hu.json index 0fa5ea5e..069ad1ad 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -31,4 +31,4 @@ "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés!", "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." -} +} \ No newline at end of file diff --git a/translations/translations.js b/translations/translations.js index 0eaed850..ebfd48d7 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -28,6 +28,6 @@ var translations = { "tr" : "translations/tr.json", // Turkish "ru" : "translations/ru.json", // Russian "af" : "translations/af.json", // Afrikaans - "hu" : "translations/hu.json", // Hungarian - "is" : "translations/is.json", // Icelandic -}; + "hu" : "translations/hu.json", // Hungarian + "is" : "translations/is.json", // Icelandic +}; \ No newline at end of file From 105e4f990df21ede561c4ba5e53bd4eee867dba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20R=C3=B3nai?= Date: Tue, 24 Jan 2017 08:59:37 +0100 Subject: [PATCH 084/257] Update translations.js Text aligned. --- translations/translations.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/translations.js b/translations/translations.js index ebfd48d7..c10da418 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -28,6 +28,6 @@ var translations = { "tr" : "translations/tr.json", // Turkish "ru" : "translations/ru.json", // Russian "af" : "translations/af.json", // Afrikaans - "hu" : "translations/hu.json", // Hungarian - "is" : "translations/is.json", // Icelandic -}; \ No newline at end of file + "hu" : "translations/hu.json", // Hungarian + "is" : "translations/is.json", // Icelandic +}; From 8181b9a31ce3a25fa7581182d3b02607e012660a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20R=C3=B3nai?= Date: Tue, 24 Jan 2017 09:09:13 +0100 Subject: [PATCH 085/257] Rename hu to hu.json extension (**.json) --- modules/default/alert/translations/{hu => hu.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/default/alert/translations/{hu => hu.json} (100%) diff --git a/modules/default/alert/translations/hu b/modules/default/alert/translations/hu.json similarity index 100% rename from modules/default/alert/translations/hu rename to modules/default/alert/translations/hu.json From b13c6f283a7a7d8ee9041e8f34a914e87014313d Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Mon, 23 Jan 2017 17:38:25 +0100 Subject: [PATCH 086/257] Run npm test on Travis --- .travis.yml | 4 +++- CHANGELOG.md | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b37becb1..da3fb099 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,9 @@ node_js: - "5.1" before_script: - npm install grunt-cli -g -script: grunt +script: +- grunt +- npm test cache: directories: - node_modules diff --git a/CHANGELOG.md b/CHANGELOG.md index d845fec7..7d4563d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Scaled the splash screen down to make it a bit more subtle. - Replace HTML tables with markdown tables in README files. - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION` and `UPDATE_NOTIFICATION_MODULE` to Finnish translations. +- Run `npm test` on Travis automatically ### Added - Add loaded function to modules, providing an async callback. From 7dbfa0b2030d75cdb8d6e51d29bb2e621cc2859d Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Tue, 24 Jan 2017 12:22:43 +0100 Subject: [PATCH 087/257] Add root_path testing --- tests/global_vars/root_path.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/global_vars/root_path.js diff --git a/tests/global_vars/root_path.js b/tests/global_vars/root_path.js new file mode 100644 index 00000000..bcb6c509 --- /dev/null +++ b/tests/global_vars/root_path.js @@ -0,0 +1,24 @@ +var fs = require("fs"); +var path = require("path"); +var chai = require("chai"); +var expect = chai.expect; +var appMM = require("../../js/app.js") + +describe("Test global.root_path, set in js/app.js", function() { + var expectedSubPaths = [ + 'modules', + 'serveronly', + 'js', + 'js/app.js', + 'js/main.js', + 'js/electron.js', + 'config' + ]; + + expectedSubPaths.forEach(subpath => { + it(`should contain a file/folder "${subpath}"`, function() { + expect(fs.existsSync(path.join(global.root_path, subpath))).to.equal(true); + }); + }); +}); + From 422349c2d135e7926bb1d71932eb15eecce95e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 24 Jan 2017 17:22:17 -0300 Subject: [PATCH 088/257] Change of examples configuration in README modules. This change is related commit f59f035a7ec5e64ab9e629521b39a548a6430b8b Now is used grunt for check ESLint syntax validation of config/* files --- modules/default/alert/README.md | 2 +- modules/default/calendar/README.md | 4 +-- modules/default/clock/README.md | 4 +-- modules/default/compliments/README.md | 28 ++++++++++---------- modules/default/currentweather/README.md | 10 +++---- modules/default/helloworld/README.md | 6 ++--- modules/default/newsfeed/README.md | 4 +-- modules/default/updatenotification/README.md | 4 +-- modules/default/weatherforecast/README.md | 10 +++---- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 89505d16..58be0570 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -7,7 +7,7 @@ To use this module, add it to the modules array in the config/config.js file: ``` modules: [ { - module: 'alert', + module: "alert", config: { // The config property is optional. // See 'Configuration options' for more information. diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 06b7dd9c..d7eabe78 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -8,8 +8,8 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'calendar', - position: 'top_left', // This can be any of the regions. Best results in left or right regions. + module: "calendar", + position: "top_left", // This can be any of the regions. Best results in left or right regions. config: { // The config property is optional. // If no config is set, an example calendar is shown. diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 9bd0bafd..5570ff5a 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -8,8 +8,8 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'clock', - position: 'top_left', // This can be any of the regions. + module: "clock", + position: "top_left", // This can be any of the regions. config: { // The config property is optional. // See 'Configuration options' for more information. diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index d8be85d2..8ef9e2fb 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -8,8 +8,8 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'compliments', - position: 'lower_third', // This can be any of the regions. + module: "compliments", + position: "lower_third", // This can be any of the regions. // Best results in one of the middle regions like: lower_third config: { // The config property is optional. @@ -60,14 +60,14 @@ If use the currentweather is possible use a actual weather for set compliments. config: { compliments: { day_sunny: [ - 'Today is a sunny day', - 'It\'s a beautiful day' + "Today is a sunny day", + "It's a beautiful day" ], snow: [ - 'Snowball battle!' + "Snowball battle!" ], rain: [ - 'Don\'t forget your umbrella' + "Don't forget your umbrella" ] } } @@ -79,19 +79,19 @@ config: { config: { compliments: { morning: [ - 'Good morning, handsome!', - 'Enjoy your day!', - 'How was your sleep?' + "Good morning, handsome!", + "Enjoy your day!", + "How was your sleep?" ], afternoon: [ - 'Hello, beauty!', + "Hello, beauty!", 'You look sexy!', - 'Looking good today!' + "Looking good today!" ], evening: [ - 'Wow, you look hot!', - 'You look nice!', - 'Hi, sexy!' + "Wow, you look hot!", + "You look nice!", + "Hi, sexy!" ] } } diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 36a8a436..65913d82 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -8,14 +8,14 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'currentweather', - position: 'top_right', // This can be any of the regions. + module: "currentweather", + position: "top_right", // This can be any of the regions. // Best results in left or right regions. config: { // See 'Configuration options' for more information. - location: 'Amsterdam,Netherlands', - locationID: '', //Location ID from http://openweathermap.org/help/city_list.txt - appid: 'abcde12345abcde12345abcde12345ab' //openweathermap.org API key. + location: "Amsterdam,Netherlands", + locationID: "", //Location ID from http://openweathermap.org/help/city_list.txt + appid: "abcde12345abcde12345abcde12345ab" //openweathermap.org API key. } } ] diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index bcbd57fc..d86fce3d 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -6,11 +6,11 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'helloworld', - position: 'bottom_bar', // This can be any of the regions. + module: "helloworld", + position: "bottom_bar", // This can be any of the regions. config: { // See 'Configuration options' for more information. - text: 'Hello world!' + text: "Hello world!" } } ] diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 20840806..bfaa1aad 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -9,8 +9,8 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'newsfeed', - position: 'bottom_bar', // This can be any of the regions. Best results in center regions. + module: "newsfeed", + position: "bottom_bar", // This can be any of the regions. Best results in center regions. config: { // The config property is optional. // If no config is set, an example calendar is shown. diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index 16a1b0c2..54ba213a 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -8,8 +8,8 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'updatenotification', - position: 'top_center', // This can be any of the regions. + module: "updatenotification", + position: "top_center", // This can be any of the regions. config: { // The config property is optional. // See 'Configuration options' for more information. diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index e2cc5028..9298c0cc 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -8,14 +8,14 @@ To use this module, add it to the modules array in the `config/config.js` file: ````javascript modules: [ { - module: 'weatherforecast', - position: 'top_right', // This can be any of the regions. + module: "weatherforecast", + position: "top_right", // This can be any of the regions. // Best results in left or right regions. config: { // See 'Configuration options' for more information. - location: 'Amsterdam,Netherlands', - locationID: '', //Location ID from http://openweathermap.org/help/city_list.txt - appid: 'abcde12345abcde12345abcde12345ab' //openweathermap.org API key. + location: "Amsterdam,Netherlands", + locationID: "", //Location ID from http://openweathermap.org/help/city_list.txt + appid: "abcde12345abcde12345abcde12345ab" //openweathermap.org API key. } } ] From 36ead2251a98ee058a748dddc868dca23c59ebca Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 25 Jan 2017 11:58:20 +0100 Subject: [PATCH 089/257] Fix grunt errors --- tests/global_vars/root_path.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/global_vars/root_path.js b/tests/global_vars/root_path.js index bcb6c509..04edc03f 100644 --- a/tests/global_vars/root_path.js +++ b/tests/global_vars/root_path.js @@ -2,17 +2,18 @@ var fs = require("fs"); var path = require("path"); var chai = require("chai"); var expect = chai.expect; -var appMM = require("../../js/app.js") describe("Test global.root_path, set in js/app.js", function() { + var appMM = require("../../js/app.js") + var expectedSubPaths = [ - 'modules', - 'serveronly', - 'js', - 'js/app.js', - 'js/main.js', - 'js/electron.js', - 'config' + "modules", + "serveronly", + "js", + "js/app.js", + "js/main.js", + "js/electron.js", + "config" ]; expectedSubPaths.forEach(subpath => { From ae41ed1d518d26847d79c65e403fcac1be117cb8 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 25 Jan 2017 12:00:38 +0100 Subject: [PATCH 090/257] Fix syntax in DA translation --- translations/da.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/da.json b/translations/da.json index 4b346437..5ad271fe 100644 --- a/translations/da.json +++ b/translations/da.json @@ -25,7 +25,7 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", /* UPDATE INFO */ From 3818e48218d89c79d43caad062cf27146cb4627a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 25 Jan 2017 19:05:40 -0300 Subject: [PATCH 091/257] remove console.log --- js/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/app.js b/js/app.js index 2eda7d1e..83d637b2 100644 --- a/js/app.js +++ b/js/app.js @@ -48,7 +48,6 @@ var App = function() { // For this check proposed to TestSuite // https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8 - console.log(global.configuration_file); if (global.configuration_file === undefined ) { var configFilename = path.resolve(global.root_path + "/config/config.js"); } else { From 1e9b35d18f65a63ab85cc01d20ee6551f3fe2ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 26 Jan 2017 21:13:58 -0300 Subject: [PATCH 092/257] Fix bug validation when is not set MM_CONFIG_FILE enviroment variable --- js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/app.js b/js/app.js index 9f992b29..6466fe3f 100644 --- a/js/app.js +++ b/js/app.js @@ -49,7 +49,7 @@ var App = function() { // For this check proposed to TestSuite // https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8 var configFilename = path.resolve(global.root_path + "/config/config.js"); - if (typeof(global.configuration_file) === "undefined" ) { + if (typeof(global.configuration_file) !== "undefined") { configFilename = path.resolve(global.configuration_file); } From 2f9a27269628364c22ec6f824f83b955aab0444e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 26 Jan 2017 18:33:37 -0300 Subject: [PATCH 093/257] Improvement of code block about from discussion Pull Request #653 https://github.com/MichMich/MagicMirror/pull/653 --- js/app.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/js/app.js b/js/app.js index 83d637b2..9f992b29 100644 --- a/js/app.js +++ b/js/app.js @@ -48,10 +48,9 @@ var App = function() { // For this check proposed to TestSuite // https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8 - if (global.configuration_file === undefined ) { - var configFilename = path.resolve(global.root_path + "/config/config.js"); - } else { - var configFilename = path.resolve(global.configuration_file); + var configFilename = path.resolve(global.root_path + "/config/config.js"); + if (typeof(global.configuration_file) === "undefined" ) { + configFilename = path.resolve(global.configuration_file); } try { From de69fe17457b6790014ea4af255e96f716d7155e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 27 Jan 2017 13:42:20 -0300 Subject: [PATCH 094/257] Show splash screen image on reboot and halt. --- CHANGELOG.md | 1 + splashscreen/MagicMirror.script | 17 +++++++++++------ splashscreen/splash_halt.png | Bin 0 -> 22304 bytes 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 splashscreen/splash_halt.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 706299cd..6a3d7332 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Replace HTML tables with markdown tables in README files. - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION` and `UPDATE_NOTIFICATION_MODULE` to Finnish translations. - Run `npm test` on Travis automatically +- Show the splash screen image even when is reboot or halted. ### Added - Add loaded function to modules, providing an async callback. diff --git a/splashscreen/MagicMirror.script b/splashscreen/MagicMirror.script index 9b614389..6e2f5643 100644 --- a/splashscreen/MagicMirror.script +++ b/splashscreen/MagicMirror.script @@ -1,7 +1,15 @@ screen_width = Window.GetWidth(); screen_height = Window.GetHeight(); -theme_image = Image("splash.png"); +if (Plymouth.GetMode() != "shutdown") +{ + theme_image = Image("splash.png"); +} +else +{ + theme_image = Image("splash_halt.png"); +} + image_width = theme_image.GetWidth(); image_height = theme_image.GetHeight(); @@ -30,11 +38,8 @@ else image_y = (screen_height - image_height) / 2; } -if (Plymouth.GetMode() != "shutdown") -{ - sprite = Sprite (resized_image); - sprite.SetPosition (image_x, image_y, -100); -} +sprite = Sprite (resized_image); +sprite.SetPosition (image_x, image_y, -100); message_sprite = Sprite(); message_sprite.SetPosition(screen_width * 0.1, screen_height * 0.9, 10000); diff --git a/splashscreen/splash_halt.png b/splashscreen/splash_halt.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf9d8be0de9cc11079c61ef6e57c5d52f9cab15 GIT binary patch literal 22304 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%0A(dduSt; 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 cwGPx# literal 0 HcmV?d00001 From 90616c82b67af98fe4769fec14b1c0a282f96f41 Mon Sep 17 00:00:00 2001 From: Olexandr Savchuk Date: Wed, 14 Dec 2016 18:54:44 +0100 Subject: [PATCH 095/257] Added console warning for deprecated config options --- CHANGELOG.md | 1 + config/.gitignore | 1 + config/deprecated.js | 12 ++++++++++++ js/app.js | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 config/deprecated.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 706299cd..237315d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added ability to configure electronOptions - Calendar module: option to hide private events - Add root_path for global vars +- Added console warning on startup when deprecated config options are used ### Updated - Modified translations for Frysk. diff --git a/config/.gitignore b/config/.gitignore index d85e3bd4..daeb6336 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -1,2 +1,3 @@ * !config.js.sample +!deprecated.js diff --git a/config/deprecated.js b/config/deprecated.js new file mode 100644 index 00000000..cf305582 --- /dev/null +++ b/config/deprecated.js @@ -0,0 +1,12 @@ +/* Magic Mirror Deprecated Config Options List + * + * By Michael Teeuw http://michaelteeuw.nl + * MIT Licensed. + */ + +var deprecated = [ + 'kioskmode' +]; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== 'undefined') {module.exports = deprecated;} diff --git a/js/app.js b/js/app.js index 9f992b29..56216238 100644 --- a/js/app.js +++ b/js/app.js @@ -56,6 +56,7 @@ var App = function() { try { fs.accessSync(configFilename, fs.F_OK); var c = require(configFilename); + checkDeprecatedOptions(c); var config = Object.assign(defaults, c); callback(config); } catch (e) { @@ -72,6 +73,21 @@ var App = function() { } }; + var checkDeprecatedOptions = function(userConfig) { + var deprecatedOptions = require(__dirname + "/../config/deprecated.js"); + var usedDeprecated = []; + + deprecatedOptions.forEach(function(option) { + if (userConfig.hasOwnProperty(option)) { + usedDeprecated.push(option); + } + }); + + if (usedDeprecated.length > 0) { + console.error("WARNING! Your config is using deprecated options: " + usedDeprecated.join(", ") + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality."); + } + } + /* loadModule(module) * Loads a specific module. * From d3c0b9a4385ca7542837df002e8ff7e27fea7726 Mon Sep 17 00:00:00 2001 From: Joseph Bethge Date: Sat, 28 Jan 2017 12:26:52 +0100 Subject: [PATCH 096/257] fix module hidden status --- CHANGELOG.md | 1 + js/main.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a3d7332..9f233c2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix an issue where the analog clock looked scrambled. ([#611](https://github.com/MichMich/MagicMirror/issues/611)) - If units is set to imperial, the showRainAmount option of weatherforecast will show the correct unit. - Module currentWeather: check if temperature received from api is defined. +- Fix an issue with module hidden status changing to `true` although lock string prevented showing it ## [2.1.0] - 2016-12-31 diff --git a/js/main.js b/js/main.js index 325a7efe..fde5564d 100644 --- a/js/main.js +++ b/js/main.js @@ -232,6 +232,8 @@ var MM = (function() { return; } + module.hidden = false; + // If forced show, clean current lockstrings. if (module.lockStrings.length !== 0 && options.force === true) { Log.log("Force show of module: " + module.name); @@ -504,7 +506,7 @@ var MM = (function() { * argument options object - Optional settings for the hide method. */ showModule: function(module, speed, callback, options) { - module.hidden = false; + // do not change module.hidden yet, only if we really show it later showModule(module, speed, callback, options); } }; From 09ba1e2470b1be709d185ef4e45898460c8d1fc0 Mon Sep 17 00:00:00 2001 From: Jeremias Arnstadt Date: Sat, 28 Jan 2017 18:01:37 +0100 Subject: [PATCH 097/257] added possibility to color max and min temprature --- modules/default/weatherforecast/weatherforecast.css | 8 ++++++++ modules/default/weatherforecast/weatherforecast.js | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/modules/default/weatherforecast/weatherforecast.css b/modules/default/weatherforecast/weatherforecast.css index 62c9767f..85d65685 100644 --- a/modules/default/weatherforecast/weatherforecast.css +++ b/modules/default/weatherforecast/weatherforecast.css @@ -17,3 +17,11 @@ padding-left: 20px; padding-right: 0; } + +.weatherforecast tr.colored .min-temp { + color: #BCDDFF; +} + +.weatherforecast tr.colored .max-temp { + color: #FF8E99; +} diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 9bd15ba8..32daec30 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -23,6 +23,7 @@ Module.register("weatherforecast",{ lang: config.language, fade: true, fadePoint: 0.25, // Start on 1/4th of the list. + colored: false, initialLoadDelay: 2500, // 2.5 seconds delay. This delay is used to keep the OpenWeather API happy. retryDelay: 2500, @@ -120,6 +121,9 @@ Module.register("weatherforecast",{ var forecast = this.forecast[f]; var row = document.createElement("tr"); + if (this.config.colored) { + row.className = "colored"; + } table.appendChild(row); var dayCell = document.createElement("td"); From ce3ee909bf45d6e044cd7671191b62ecfc756ff5 Mon Sep 17 00:00:00 2001 From: Jeremias Arnstadt Date: Sat, 28 Jan 2017 18:21:02 +0100 Subject: [PATCH 098/257] added possibility to give each calendar another color --- modules/default/calendar/calendar.js | 32 +++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index b636b30b..d74d1f96 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -27,6 +27,7 @@ Module.register("calendar", { getRelative: 6, fadePoint: 0.25, // Start on 1/4th of the list. hidePrivate: false, + colored: false, calendars: [ { symbol: "calendar", @@ -114,6 +115,11 @@ Module.register("calendar", { var event = events[e]; var eventWrapper = document.createElement("tr"); + + if (this.config.colored) { + eventWrapper.style.cssText = 'color:' + this.colorForUrl(event.url); + } + eventWrapper.className = "normal"; if (this.config.displaySymbol) { @@ -142,7 +148,13 @@ Module.register("calendar", { } titleWrapper.innerHTML = this.titleTransform(event.title) + repeatingCountTitle; - titleWrapper.className = "title bright"; + + if (!this.config.colored) { + titleWrapper.className = "title bright"; + } else { + titleWrapper.className = "title"; + } + eventWrapper.appendChild(titleWrapper); var timeWrapper = document.createElement("td"); @@ -323,6 +335,24 @@ Module.register("calendar", { return this.config.defaultSymbol; }, + + /* colorForUrl(url) + * Retrieves the color for a specific url. + * + * argument url sting - Url to look for. + * + * return string - The Color + */ + colorForUrl: function (url) { + for (var c in this.config.calendars) { + var calendar = this.config.calendars[c]; + if (calendar.url === url && typeof calendar.color === "string") { + return calendar.color; + } + } + + return '#fff'; + }, /* countTitleForUrl(url) * Retrieves the name for a specific url. * From 4214293b76ca79458a1bac8482a2a8566f5295a3 Mon Sep 17 00:00:00 2001 From: Jeremias Arnstadt Date: Sat, 28 Jan 2017 18:32:06 +0100 Subject: [PATCH 099/257] updated README of weatherforecast and calendar module for color options --- modules/default/calendar/README.md | 8 ++++++++ modules/default/weatherforecast/README.md | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index c5745152..c4c330b8 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -174,10 +174,12 @@ The following properties can be configured: ### Calendar configuration The `calendars` property contains an array of the configured calendars. +The `colored` property gives the option for an individual color for each calendar. #### Default value: ````javascript config: { + colored: false, calendars: [ { url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics', @@ -210,6 +212,12 @@ config: {
Possible values: See
Font Awesome website. + + color + The font color of an event from this calendar. This property should be set if the config is set to colored: true.
+
Possible values: HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). + + repeatingCountTitle The count title for yearly repating events in this calendar.
diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 2842af54..6b5e3930 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -191,5 +191,11 @@ The following properties can be configured: } + + colored + If set 'colored' to true the min-temp get a blue tone and the max-temp get a red tone.
+
Default value: false + + From ebb2db17f35a83e0e20ba4a0607eea602af93691 Mon Sep 17 00:00:00 2001 From: snille Date: Sun, 29 Jan 2017 00:06:06 +0100 Subject: [PATCH 100/257] Fixed the Swedish translation. --- translations/sv.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/translations/sv.json b/translations/sv.json index 9643a07b..8db89752 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -5,6 +5,7 @@ /* CALENDAR */ "TODAY": "Idag", "TOMORROW": "Imorgon", + "DAYAFTERTOMORROW": "Iövermorgon", "RUNNING": "Slutar", "EMPTY": "Inga kommande händelser.", @@ -25,4 +26,9 @@ "WNW": "VNV", "NW": "NV", "NNW": "NNV" + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² uppdatering finns tillgänglig.", + "UPDATE_NOTIFICATION_MODULE": "Uppdatering finns tillgänglig av MODULE_NAME modulen.", + "UPDATE_INFO": "Denna installation ligger COMMIT_COUNT steg bakom BRANCH_NAME grenen." } From e738ee0812fb70fb7cb75c250ed6282a53d01201 Mon Sep 17 00:00:00 2001 From: Erik Pettersson Date: Sun, 29 Jan 2017 00:09:51 +0100 Subject: [PATCH 101/257] Added information about the sv.json update. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f233c2a..2aa0ec6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION` and `UPDATE_NOTIFICATION_MODULE` to Finnish translations. - Run `npm test` on Travis automatically - Show the splash screen image even when is reboot or halted. +- Added some missing translaton strings in the sv.json file. ### Added - Add loaded function to modules, providing an async callback. From 5c0b04bfc8ae70da9d5e9cf0c3c9a1f493ed3c37 Mon Sep 17 00:00:00 2001 From: Jeremias Arnstadt Date: Sun, 29 Jan 2017 00:59:38 +0100 Subject: [PATCH 102/257] fixed linting issues --- modules/default/calendar/calendar.js | 26 +++++++++---------- .../weatherforecast/weatherforecast.js | 8 +++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 1ca137ca..5ea57e07 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -27,7 +27,7 @@ Module.register("calendar", { getRelative: 6, fadePoint: 0.25, // Start on 1/4th of the list. hidePrivate: false, - colored: false, + colored: false, calendars: [ { symbol: "calendar", @@ -116,9 +116,9 @@ Module.register("calendar", { var eventWrapper = document.createElement("tr"); - if (this.config.colored) { - eventWrapper.style.cssText = 'color:' + this.colorForUrl(event.url); - } + if (this.config.colored) { + eventWrapper.style.cssText = "color:" + this.colorForUrl(event.url); + } eventWrapper.className = "normal"; @@ -149,11 +149,11 @@ Module.register("calendar", { titleWrapper.innerHTML = this.titleTransform(event.title) + repeatingCountTitle; - if (!this.config.colored) { - titleWrapper.className = "title bright"; - } else { - titleWrapper.className = "title"; - } + if (!this.config.colored) { + titleWrapper.className = "title bright"; + } else { + titleWrapper.className = "title"; + } eventWrapper.appendChild(titleWrapper); @@ -285,8 +285,8 @@ Module.register("calendar", { var event = calendar[e]; if(this.config.hidePrivate) { if(event.class === "PRIVATE") { - // do not add the current event, skip it - continue; + // do not add the current event, skip it + continue; } } event.url = c; @@ -336,7 +336,7 @@ Module.register("calendar", { return this.config.defaultSymbol; }, - /* colorForUrl(url) + /* colorForUrl(url) * Retrieves the color for a specific url. * * argument url sting - Url to look for. @@ -351,7 +351,7 @@ Module.register("calendar", { } } - return '#fff'; + return "#fff"; }, /* countTitleForUrl(url) * Retrieves the name for a specific url. diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 211e5082..b269a44a 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -23,7 +23,7 @@ Module.register("weatherforecast",{ lang: config.language, fade: true, fadePoint: 0.25, // Start on 1/4th of the list. - colored: false, + colored: false, initialLoadDelay: 2500, // 2.5 seconds delay. This delay is used to keep the OpenWeather API happy. retryDelay: 2500, @@ -121,9 +121,9 @@ Module.register("weatherforecast",{ var forecast = this.forecast[f]; var row = document.createElement("tr"); - if (this.config.colored) { - row.className = "colored"; - } + if (this.config.colored) { + row.className = "colored"; + } table.appendChild(row); var dayCell = document.createElement("td"); From e249092f91d162a5beb215b894042f8c6427f9e8 Mon Sep 17 00:00:00 2001 From: Jeremias Arnstadt Date: Sun, 29 Jan 2017 11:17:00 +0100 Subject: [PATCH 103/257] used mardown in calendar README --- modules/default/calendar/README.md | 55 ++++++------------------------ 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index a40d78d1..d671c741 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -65,48 +65,13 @@ config: { #### Calendar configuration options: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
urlThe url of the calendar .ical. This property is required.
-
Possible values: Any public accessble .ical calendar. -
symbolThe symbol to show in front of an event. This property is optional.
-
Possible values: See Font Awesome website. -
colorThe font color of an event from this calendar. This property should be set if the config is set to colored: true.
-
Possible values: HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). -
repeatingCountTitleThe count title for yearly repating events in this calendar.
-
Example:
- 'Birthday' -
userThe username for HTTP Basic authentication.
passThe password for HTTP Basic authentication.
+ +-| Option | Description + -| --------------------- | ----------- + -| `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. + -| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. + -| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). + -| `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` + -| `user` | The username for HTTP Basic authentication. + -| `pass` | The password for HTTP Basic authentication. + From bbdc43c750de3d6099b11198fb60fa266649cded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 28 Jan 2017 21:37:12 -0300 Subject: [PATCH 104/257] Use configuration file in index.html when is set MM_CONFIG_FILE --- index.html | 2 +- js/server.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 86a69a4a..606f5aac 100644 --- a/index.html +++ b/index.html @@ -33,7 +33,7 @@
- + diff --git a/js/server.js b/js/server.js index f1de2420..5c775f69 100644 --- a/js/server.js +++ b/js/server.js @@ -46,6 +46,12 @@ var Server = function(config, callback) { var html = fs.readFileSync(path.resolve(global.root_path + "/index.html"), {encoding: "utf8"}); html = html.replace("#VERSION#", global.version); + configFile = "config/config.js"; + if (typeof(global.configuration_file) !== "undefined") { + configFile = global.configuration_file; + } + html = html.replace("#CONFIG_FILE#", configFile); + res.send(html); }); From 110a1a640d62232baa5b8531b11dd70e62d49f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 29 Jan 2017 17:14:09 -0300 Subject: [PATCH 105/257] fix .stylelintrc in jsonlint check --- Gruntfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index a3edb053..02c9402d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -22,7 +22,7 @@ module.exports = function(grunt) { }, jsonlint: { main: { - src: ["package.json", ".eslintrc.json", ".stylelint"], + src: ["package.json", ".eslintrc.json", ".stylelintrc"], options: { reporter: "jshint" } From a0fa3a6063ef94b011a926ff083293d5f627a1f5 Mon Sep 17 00:00:00 2001 From: Jopyth Date: Mon, 30 Jan 2017 09:28:37 +0100 Subject: [PATCH 106/257] missing comma in sv.json translation --- translations/sv.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/sv.json b/translations/sv.json index 8db89752..8a1440f0 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -25,7 +25,7 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² uppdatering finns tillgänglig.", From ed12deae2547962a13c8a892d7ef146536d69b2c Mon Sep 17 00:00:00 2001 From: artifactdev Date: Mon, 30 Jan 2017 13:17:44 +0100 Subject: [PATCH 107/257] Update CHANGELOG.md Added color options for calendar and weather forecast to changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 706299cd..c7fea933 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Icelandic Translation. - Add use a script to prevent when is run by SSH session set DISPLAY enviroment. - Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. +- Option to give each calendar a different color +- Option for colored min-temp and max-temp ### Fixed - Update .gitignore to not ignore default modules folder. From 0d8d8f042692b249f046a1d488ca58782656373d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 28 Jan 2017 23:23:32 -0300 Subject: [PATCH 108/257] Add tests configs directory as express route. --- js/server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/server.js b/js/server.js index 5c775f69..e7050021 100644 --- a/js/server.js +++ b/js/server.js @@ -37,6 +37,7 @@ var Server = function(config, callback) { app.use("/modules", express.static(path.resolve(global.root_path + "/modules"))); app.use("/vendor", express.static(path.resolve(global.root_path + "/vendor"))); app.use("/translations", express.static(path.resolve(global.root_path + "/translations"))); + app.use("/tests/confs", express.static(path.resolve(global.root_path + "/tests/confs"))); app.get("/version", function(req,res) { res.send(global.version); From 52b8dbcbb11d891c84c81df3c7d92c5f30331740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 28 Jan 2017 23:25:43 -0300 Subject: [PATCH 109/257] separate test type. Create directory for End-to-end testing. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d94a012..927cd2bc 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha tests --recursive" + "test": "./node_modules/mocha/bin/mocha $(find tests -path '*js*' ! -ipath '*e2e*')", + "test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive" }, "repository": { "type": "git", From d474d518cae0882dffbb32638605a038d2a8c0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 12:24:49 -0300 Subject: [PATCH 110/257] test e2e module helloworld --- CHANGELOG.md | 1 + package.json | 1 + tests/confs/helloworld.js | 32 +++++++++++++++++++++++++ tests/e2e/modules/helloworld.js | 42 +++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 tests/confs/helloworld.js create mode 100644 tests/e2e/modules/helloworld.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aa0ec6b..9c6b1a48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Icelandic Translation. - Add use a script to prevent when is run by SSH session set DISPLAY enviroment. - Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. +- Add test e2e helloworld ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/package.json b/package.json index 927cd2bc..92202936 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "grunt-stylelint": "latest", "grunt-yamllint": "latest", "mocha": "^3.2.0", + "spectron": "^3.4.1", "stylelint-config-standard": "latest", "time-grunt": "latest" }, diff --git a/tests/confs/helloworld.js b/tests/confs/helloworld.js new file mode 100644 index 00000000..6b617cf2 --- /dev/null +++ b/tests/confs/helloworld.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config sample module hello world + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "helloworld", + position: "bottom_bar", + config: { + text: "Test HelloWorld Module" + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/helloworld.js b/tests/e2e/modules/helloworld.js new file mode 100644 index 00000000..960917c3 --- /dev/null +++ b/tests/e2e/modules/helloworld.js @@ -0,0 +1,42 @@ +const Application = require("spectron").Application; +const path = require('path'); +const chai = require('chai'); +const chaiAsPromised = require('chai-as-promised'); + +// Set config sample for use in test +process.env.MM_CONFIG_FILE = 'tests/confs/helloworld.js'; + +var electronPath = path.join(__dirname, '../../../', 'node_modules', '.bin', 'electron'); + +if (process.platform === 'win32') { + electronPath += '.cmd'; +} + +var appPath = path.join(__dirname, '../../../js/electron.js'); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe('Test helloworld module', function () { + this.timeout(10000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it('Test message helloworld module', function () { + return app.client.waitUntilWindowLoaded() + .getText('.helloworld').should.eventually.equal('Test HelloWorld Module'); + }); +}); From c75ee042a8cd58013cd7d739c85ddffee04144be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 12:29:32 -0300 Subject: [PATCH 111/257] add e2e test enviroment --- CHANGELOG.md | 1 + tests/confs/env.js | 25 +++++++++++++++++++++++ tests/e2e/env.js | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 tests/confs/env.js create mode 100644 tests/e2e/env.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c6b1a48..17da5a9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add use a script to prevent when is run by SSH session set DISPLAY enviroment. - Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. - Add test e2e helloworld +- Add test e2e enviroment ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/tests/confs/env.js b/tests/confs/env.js new file mode 100644 index 00000000..252934d7 --- /dev/null +++ b/tests/confs/env.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample enviroment + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/env.js b/tests/e2e/env.js new file mode 100644 index 00000000..0046ddec --- /dev/null +++ b/tests/e2e/env.js @@ -0,0 +1,49 @@ +const Application = require("spectron").Application; +const path = require('path'); +const chai = require('chai'); +const chaiAsPromised = require('chai-as-promised'); + +// Set config sample for use in test +process.env.MM_CONFIG_FILE = 'tests/confs/env.js'; + +var electronPath = path.join(__dirname, '../../', 'node_modules', '.bin', 'electron'); + +if (process.platform === 'win32') { + electronPath += '.cmd'; +} + +var appPath = path.join(__dirname, '../../js/electron.js'); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe('Test enviroment app electron', function () { + this.timeout(10000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + + it('open a window app and test if is open', function () { + return app.client.waitUntilWindowLoaded() + .getWindowCount().should.eventually.equal(1); + }); + + it('tests the title', function () { + return app.client.waitUntilWindowLoaded() + .getTitle().should.eventually.equal('Magic Mirror'); + }); + +}); From e2dc5ef4f2c14ac22ad69162a27206f71a119f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 12:42:04 -0300 Subject: [PATCH 112/257] fix eslint change single quote by double quote --- tests/e2e/env.js | 24 ++++++++++++------------ tests/e2e/modules/helloworld.js | 22 +++++++++++----------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/e2e/env.js b/tests/e2e/env.js index 0046ddec..41386499 100644 --- a/tests/e2e/env.js +++ b/tests/e2e/env.js @@ -1,18 +1,18 @@ const Application = require("spectron").Application; -const path = require('path'); -const chai = require('chai'); -const chaiAsPromised = require('chai-as-promised'); +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); // Set config sample for use in test -process.env.MM_CONFIG_FILE = 'tests/confs/env.js'; +process.env.MM_CONFIG_FILE = "tests/confs/env.js"; -var electronPath = path.join(__dirname, '../../', 'node_modules', '.bin', 'electron'); +var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); -if (process.platform === 'win32') { - electronPath += '.cmd'; +if (process.platform === "win32") { + electronPath += ".cmd"; } -var appPath = path.join(__dirname, '../../js/electron.js'); +var appPath = path.join(__dirname, "../../js/electron.js"); var app = new Application({ path: electronPath, @@ -24,7 +24,7 @@ global.before(function () { chai.use(chaiAsPromised); }); -describe('Test enviroment app electron', function () { +describe("Test enviroment app electron", function () { this.timeout(10000); beforeEach(function (done) { @@ -36,14 +36,14 @@ describe('Test enviroment app electron', function () { }); - it('open a window app and test if is open', function () { + it("open a window app and test if is open", function () { return app.client.waitUntilWindowLoaded() .getWindowCount().should.eventually.equal(1); }); - it('tests the title', function () { + it("tests the title", function () { return app.client.waitUntilWindowLoaded() - .getTitle().should.eventually.equal('Magic Mirror'); + .getTitle().should.eventually.equal("Magic Mirror"); }); }); diff --git a/tests/e2e/modules/helloworld.js b/tests/e2e/modules/helloworld.js index 960917c3..ebf8a8d1 100644 --- a/tests/e2e/modules/helloworld.js +++ b/tests/e2e/modules/helloworld.js @@ -1,18 +1,18 @@ const Application = require("spectron").Application; -const path = require('path'); -const chai = require('chai'); -const chaiAsPromised = require('chai-as-promised'); +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); // Set config sample for use in test -process.env.MM_CONFIG_FILE = 'tests/confs/helloworld.js'; +process.env.MM_CONFIG_FILE = "tests/confs/helloworld.js"; -var electronPath = path.join(__dirname, '../../../', 'node_modules', '.bin', 'electron'); +var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); -if (process.platform === 'win32') { - electronPath += '.cmd'; +if (process.platform === "win32") { + electronPath += ".cmd"; } -var appPath = path.join(__dirname, '../../../js/electron.js'); +var appPath = path.join(__dirname, "../../../js/electron.js"); var app = new Application({ path: electronPath, @@ -24,7 +24,7 @@ global.before(function () { chai.use(chaiAsPromised); }); -describe('Test helloworld module', function () { +describe("Test helloworld module", function () { this.timeout(10000); beforeEach(function (done) { @@ -35,8 +35,8 @@ describe('Test helloworld module', function () { app.stop().then(function() { done(); }); }); - it('Test message helloworld module', function () { + it("Test message helloworld module", function () { return app.client.waitUntilWindowLoaded() - .getText('.helloworld').should.eventually.equal('Test HelloWorld Module'); + .getText(".helloworld").should.eventually.equal("Test HelloWorld Module"); }); }); From b4271da13ed163b631b6ffe2e899280cdca6d447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 13:17:36 -0300 Subject: [PATCH 113/257] add translations/translations.js eslint check --- Gruntfile.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Gruntfile.js b/Gruntfile.js index 02c9402d..a4d2f43a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,6 +10,8 @@ module.exports = function(grunt) { "serveronly/*.js", "*.js", "tests/*/*.js", "!modules/default/alert/notificationFx.js", "!modules/default/alert/modernizr.custom.js", "!modules/default/alert/classie.js", "config/*", + "translations/translations.js" + ] }, stylelint: { From 1032e97d5845a9ef01a79d98a0c708bf66bc13dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 13:32:52 -0300 Subject: [PATCH 114/257] Fix string russian translation module alert --- modules/default/alert/translations/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/alert/translations/ru.json b/modules/default/alert/translations/ru.json index ef7ee708..60ddf3d8 100644 --- a/modules/default/alert/translations/ru.json +++ b/modules/default/alert/translations/ru.json @@ -1,4 +1,4 @@ { "sysTitle": "MagicMirror Уведомление", - "welcome": "Добро пожаловать, старт был успешным!"" + "welcome": "Добро пожаловать, старт был успешным!" } From cb71667336c6263e5edbcf3d196155c2b2553edb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 30 Jan 2017 13:34:51 -0300 Subject: [PATCH 115/257] Use jsonlint task to check translation files --- CHANGELOG.md | 1 + Gruntfile.js | 2 +- translations/af.json | 4 ---- translations/da.json | 4 ---- translations/de.json | 4 ---- translations/en.json | 4 ---- translations/es.json | 4 ---- translations/fi.json | 4 ---- translations/fr.json | 3 --- translations/fy.json | 3 --- translations/gr.json | 3 --- translations/hu.json | 6 +----- translations/is.json | 4 ---- translations/it.json | 3 --- translations/ja.json | 5 +---- translations/nb.json | 3 --- translations/nl.json | 4 ---- translations/nn.json | 3 --- translations/pl.json | 4 ---- translations/pt.json | 3 --- translations/pt_br.json | 3 --- translations/ru.json | 4 ---- translations/sv.json | 4 ---- translations/tr.json | 3 --- translations/zh_cn.json | 3 --- translations/zh_tw.json | 3 --- 26 files changed, 4 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aa0ec6b..4bf38a33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Run `npm test` on Travis automatically - Show the splash screen image even when is reboot or halted. - Added some missing translaton strings in the sv.json file. +- Run task jsonlint to check translation files. ### Added - Add loaded function to modules, providing an async callback. diff --git a/Gruntfile.js b/Gruntfile.js index a4d2f43a..5aa68811 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -24,7 +24,7 @@ module.exports = function(grunt) { }, jsonlint: { main: { - src: ["package.json", ".eslintrc.json", ".stylelintrc"], + src: ["package.json", ".eslintrc.json", ".stylelintrc", "translations/*.json", "modules/default/*/translations/*.json"], options: { reporter: "jshint" } diff --git a/translations/af.json b/translations/af.json index 894b14ea..0995bdf0 100644 --- a/translations/af.json +++ b/translations/af.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Besig om te laai …", - /* CALENDAR */ "TODAY": "Vandag", "TOMORROW": "Môre", "DAYAFTERTOMORROW": "Oormôre", "RUNNING": "Eindig in", "EMPTY": "Geen komende gebeurtenisse.", - /* WEATHER */ "N": "N", "NNE": "NNO", "NE": "NO", @@ -27,7 +24,6 @@ "NW": "NW", "NNW": "NNW", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² update beskikbaar.", "UPDATE_NOTIFICATION_MODULE": "Update beskikbaar vir MODULE_NAME module.", "UPDATE_INFO": "Die huidige installasie is COMMIT_COUNT agter op die BRANCH_NAME branch." diff --git a/translations/da.json b/translations/da.json index 5ad271fe..68c544a6 100644 --- a/translations/da.json +++ b/translations/da.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Indlæser …", - /* CALENDAR */ "TODAY": "I dag", "TOMORROW": "I morgen", "DAYAFTERTOMORROW": "I overmorgen", "RUNNING": "Slutter om", "EMPTY": "Ingen kommende begivenheder.", - /* WEATHER */ "N": "N", "NNE": "NNØ", "NE": "NØ", @@ -28,7 +25,6 @@ "NNW": "NNV", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² opdatering tilgængelig.", "UPDATE_NOTIFICATION_MODULE": "Opdatering tilgængelig for MODULE_NAME modulet.", "UPDATE_INFO": "Den nuværende installation er COMMIT_COUNT bagud på BRANCH_NAME branch'en." diff --git a/translations/de.json b/translations/de.json index 54ac5015..eb67d41a 100644 --- a/translations/de.json +++ b/translations/de.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Lade …", - /* CALENDAR */ "TODAY": "Heute", "TOMORROW": "Morgen", "DAYAFTERTOMORROW": "Übermorgen", "RUNNING": "noch", "EMPTY": "Keine Termine.", - /* WEATHER */ "N": "N", "NNE": "NNO", "NE": "NO", @@ -27,7 +24,6 @@ "NW": "NW", "NNW": "NNW", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "Aktualisierung für MagicMirror² verfügbar.", "UPDATE_NOTIFICATION_MODULE": "Aktualisierung für das MODULE_NAME Modul verfügbar.", "UPDATE_INFO": "Die aktuelle Installation ist COMMIT_COUNT hinter dem BRANCH_NAME branch." diff --git a/translations/en.json b/translations/en.json index 45609f61..46061738 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Loading …", - /* CALENDAR */ "TODAY": "Today", "TOMORROW": "Tomorrow", "DAYAFTERTOMORROW": "The day after tomorrow", "RUNNING": "Ends in", "EMPTY": "No upcoming events.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", @@ -27,7 +24,6 @@ "NW": "NW", "NNW": "NNW", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² update available.", "UPDATE_NOTIFICATION_MODULE": "Update available for MODULE_NAME module.", "UPDATE_INFO": "The current installation is COMMIT_COUNT behind on the BRANCH_NAME branch." diff --git a/translations/es.json b/translations/es.json index 9b80b45a..914a72ce 100644 --- a/translations/es.json +++ b/translations/es.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Cargando …", - /* CALENDAR */ "TODAY": "Hoy", "TOMORROW": "Mañana", "DAYAFTERTOMORROW": "Pasado mañana", "RUNNING": "Termina en", "EMPTY": "No hay eventos programados.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", @@ -27,7 +24,6 @@ "NW": "NO", "NNW": "NNO", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² actualización disponible.", "UPDATE_NOTIFICATION_MODULE": "Disponible una actualización para el módulo MODULE_NAME.", "UPDATE_INFO": "Tu actual instalación está COMMIT_COUNT cambios detrás de la rama BRANCH_NAME." diff --git a/translations/fi.json b/translations/fi.json index 59fa0180..08bc4060 100644 --- a/translations/fi.json +++ b/translations/fi.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Lataa …", - /* CALENDAR */ "TODAY": "Tänään", "TOMORROW": "Huomenna", "DAYAFTERTOMORROW": "Ylihuomenna", "RUNNING": "Meneillään", "EMPTY": "Ei tulevia tapahtumia.", - /* WEATHER */ "N": "P", "NNE": "PPI", "NE": "PI", @@ -27,7 +24,6 @@ "NW": "PL", "NNW": "PPL", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² päivitys saatavilla.", "UPDATE_NOTIFICATION_MODULE": "Päivitys saatavilla moduulille MODULE_NAME." } diff --git a/translations/fr.json b/translations/fr.json index 2701eb08..d27bc7e6 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Chargement …", - /* CALENDAR */ "TODAY": "Aujourd'hui", "TOMORROW": "Demain", "RUNNING": "Se termine dans", "EMPTY": "Aucun RDV.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/fy.json b/translations/fy.json index 44f1b476..f1735382 100644 --- a/translations/fy.json +++ b/translations/fy.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Bezich mei laden …", - /* CALENDAR */ "TODAY": "Hjoed", "TOMORROW": "Moarn", "DAYAFTERTOMORROW": "Oaremoarn", "RUNNING": "Einigest oer", "EMPTY": "Gjin plande ôfspraken.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/gr.json b/translations/gr.json index 6b9c92ac..a8f5ccbd 100644 --- a/translations/gr.json +++ b/translations/gr.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Φόρτωση …", - /* CALENDAR */ "TODAY": "Σήμερα", "TOMORROW": "Αύριο", "RUNNING": "Λήγει σε", "EMPTY": "Δεν υπάρχουν προσεχείς εκδηλώσεις.", - /* WEATHER */ "N": "B", "NNE": "BBA", "NE": "BA", diff --git a/translations/hu.json b/translations/hu.json index 069ad1ad..de18d82e 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Betöltés …", - /* CALENDAR */ "TODAY": "Ma", "TOMORROW": "Holnap", "DAYAFTERTOMORROW": "Holnapután", "RUNNING": "Vége lesz", "EMPTY": "Nincs közelgő esemény.", - /* WEATHER */ "N": "É", "NNE": "ÉÉK", "NE": "ÉK", @@ -27,8 +24,7 @@ "NW": "ÉNy", "NNW": "ÉÉNy", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés!", "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." -} \ No newline at end of file +} diff --git a/translations/is.json b/translations/is.json index d3e6d6cb..aabc3997 100644 --- a/translations/is.json +++ b/translations/is.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Hleð upp …", - /* CALENDAR */ "TODAY": "Í dag", "TOMORROW": "Á morgun", "DAYAFTERTOMORROW": "Ekki á morgun, heldur hinn", "RUNNING": "Endar eftir", "EMPTY": "Ekkert framundan.", - /* WEATHER */ "N": "N", "NNE": "NNA", "NE": "NA", @@ -27,7 +24,6 @@ "NW": "NV", "NNW": "NNV", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² uppfærsla í boði.", "UPDATE_NOTIFICATION_MODULE": "Uppfærsla í boði fyrir MODULE_NAME module.", "UPDATE_INFO": "Núverandi kerfi er COMMIT_COUNT á eftir BRANCH_NAME branchinu." diff --git a/translations/it.json b/translations/it.json index bde608b4..4e3041da 100644 --- a/translations/it.json +++ b/translations/it.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Caricamento in corso …", - /* CALENDAR */ "TODAY": "Oggi", "TOMORROW": "Domani", "RUNNING": "Termina entro", "EMPTY": "Nessun evento in arrivo.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/ja.json b/translations/ja.json index 72849559..ff15687b 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -1,14 +1,11 @@ { - /* GENERAL */ - "LOADING": "ローディング …", + "LOADING": "ローディング …", - /* CALENDAR */ "TODAY": "今日", "TOMORROW": "明日", "RUNNING": "で終わります", "EMPTY": "直近のイベントはありません", - /* WEATHER */ "N": "北", "NNE": "北北東", "NE": "北東", diff --git a/translations/nb.json b/translations/nb.json index 48f0ac6f..1b57a5fa 100644 --- a/translations/nb.json +++ b/translations/nb.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Laster …", - /* CALENDAR */ "TODAY": "I dag", "TOMORROW": "I morgen", "RUNNING": "Slutter om", "EMPTY": "Ingen kommende arrangementer.", - /* WEATHER */ "N": "N", "NNE": "NNØ", "NE": "NØ", diff --git a/translations/nl.json b/translations/nl.json index 803db06c..c615903b 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Bezig met laden …", - /* CALENDAR */ "TODAY": "Vandaag", "TOMORROW": "Morgen", "DAYAFTERTOMORROW": "Overmorgen", "RUNNING": "Eindigt over", "EMPTY": "Geen geplande afspraken.", - /* WEATHER */ "N": "N", "NNE": "NNO", "NE": "NO", @@ -27,7 +24,6 @@ "NW": "NW", "NNW": "NNW", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² update beschikbaar.", "UPDATE_NOTIFICATION_MODULE": "Update beschikbaar voor MODULE_NAME module.", "UPDATE_INFO": "De huidige installatie loopt COMMIT_COUNT achter op de BRANCH_NAME branch." diff --git a/translations/nn.json b/translations/nn.json index b7dbe3ea..107bec9d 100644 --- a/translations/nn.json +++ b/translations/nn.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Lastar …", - /* CALENDAR */ "TODAY": "I dag", "TOMORROW": "I morgon", "RUNNING": "Sluttar om", "EMPTY": "Ingen komande hendingar.", - /* WEATHER */ "N": "N", "NNE": "NNA", "NE": "NA", diff --git a/translations/pl.json b/translations/pl.json index 06bf3b5c..0c79835f 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Ładowanie …", - /* CALENDAR */ "TODAY": "Dziś", "TOMORROW": "Jutro", "RUNNING": "Koniec za", "EMPTY": "Brak wydarzeń.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", @@ -26,7 +23,6 @@ "NW": "NW", "NNW": "NNW", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "Dostępna jest aktualizacja MagicMirror².", "UPDATE_NOTIFICATION_MODULE": "Dostępna jest aktualizacja modułu MODULE_NAME.", "UPDATE_INFO": "Zainstalowana wersja odbiega o COMMIT_COUNT commitów od gałęzi BRANCH_NAME." diff --git a/translations/pt.json b/translations/pt.json index f8797f0f..35de1326 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "A carregar …", - /* CALENDAR */ "TODAY": "Hoje", "TOMORROW": "Amanhã", "RUNNING": "Termina em", "EMPTY": "Sem eventos a chegar.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/pt_br.json b/translations/pt_br.json index 17d3e636..92002b54 100644 --- a/translations/pt_br.json +++ b/translations/pt_br.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Carregando …", - /* CALENDAR */ "TODAY": "Hoje", "TOMORROW": "Amanhã", "RUNNING": "Acaba em", "EMPTY": "Nenhum evento novo.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/ru.json b/translations/ru.json index 053385ee..48c49fd9 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Загрузка …", - /* CALENDAR */ "TODAY": "Сегодня", "TOMORROW": "Завтра", "DAYAFTERTOMORROW": "Послезавтра", "RUNNING": "Заканчивается через", "EMPTY": "Нет предстоящих событий", - /* WEATHER */ "N": "С", "NNE": "ССВ", "NE": "СВ", @@ -27,7 +24,6 @@ "NW": "СЗ", "NNW": "ССЗ", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "Есть обновление для MagicMirror².", "UPDATE_NOTIFICATION_MODULE": "Есть обновление для MODULE_NAME модуля.", "UPDATE_INFO": "Данная инсталляция позади BRANCH_NAME ветки на COMMIT_COUNT коммитов." diff --git a/translations/sv.json b/translations/sv.json index 8a1440f0..1fe3d48d 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -1,15 +1,12 @@ { - /* GENERAL */ "LOADING": "Laddar …", - /* CALENDAR */ "TODAY": "Idag", "TOMORROW": "Imorgon", "DAYAFTERTOMORROW": "Iövermorgon", "RUNNING": "Slutar", "EMPTY": "Inga kommande händelser.", - /* WEATHER */ "N": "N", "NNE": "NNO", "NE": "NO", @@ -27,7 +24,6 @@ "NW": "NV", "NNW": "NNV", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "MagicMirror² uppdatering finns tillgänglig.", "UPDATE_NOTIFICATION_MODULE": "Uppdatering finns tillgänglig av MODULE_NAME modulen.", "UPDATE_INFO": "Denna installation ligger COMMIT_COUNT steg bakom BRANCH_NAME grenen." diff --git a/translations/tr.json b/translations/tr.json index a0d61ac7..c79956b8 100644 --- a/translations/tr.json +++ b/translations/tr.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "Yükleniyor …", - /* CALENDAR */ "TODAY": "Bugün", "TOMORROW": "Yarın", "RUNNING": "Biten", "EMPTY": "Yakında etkinlik yok.", - /* WEATHER */ "N": "K", "NNE": "KKD", "NE": "KD", diff --git a/translations/zh_cn.json b/translations/zh_cn.json index a8c32d70..e7f69616 100644 --- a/translations/zh_cn.json +++ b/translations/zh_cn.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "正在加载 …", - /* CALENDAR */ "TODAY": "今天", "TOMORROW": "明天", "RUNNING": "结束日期", "EMPTY": "没有更多的活动。", - /* WEATHER */ "N": "北风", "NNE": "北偏东风", "NE": "东北风", diff --git a/translations/zh_tw.json b/translations/zh_tw.json index 1a5827be..550de453 100644 --- a/translations/zh_tw.json +++ b/translations/zh_tw.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "正在加載 …", - /* CALENDAR */ "TODAY": "今天", "TOMORROW": "明天", "RUNNING": "結束日期", "EMPTY": "沒有更多的活動。", - /* WEATHER */ "N": "北風", "NNE": "北偏東風", "NE": "東北風", From 14cc642e54885cdfe2ab2ce6b65df972d33537bd Mon Sep 17 00:00:00 2001 From: Kyle Carson Date: Mon, 30 Jan 2017 16:26:42 -0600 Subject: [PATCH 116/257] Support calendar-specific maximumEntries and maximumNumberOfDays --- CHANGELOG.md | 1 + modules/default/calendar/README.md | 3 ++- modules/default/calendar/calendar.js | 14 ++++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92f80d7e..6fdbafa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added some missing translaton strings in the sv.json file. ### Added +- Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays` - Add loaded function to modules, providing an async callback. - Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) - Add use pm2 for manager process into Installer RaspberryPi script diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index d671c741..afbf3085 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -74,4 +74,5 @@ config: { -| `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` -| `user` | The username for HTTP Basic authentication. -| `pass` | The password for HTTP Basic authentication. - + -| `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100` + -| `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 5ea57e07..72808c1f 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -69,7 +69,13 @@ Module.register("calendar", { for (var c in this.config.calendars) { var calendar = this.config.calendars[c]; calendar.url = calendar.url.replace("webcal://", "http://"); - this.addCalendar(calendar.url, calendar.user, calendar.pass); + + var calendarConfig = { + maximumEntries: calendar.maximumEntries, + maximumNumberOfDays: calendar.maximumNumberOfDays, + }; + + this.addCalendar(calendar.url, calendar.user, calendar.pass, calendarConfig); } this.calendarData = {}; @@ -307,11 +313,11 @@ Module.register("calendar", { * * argument url sting - Url to add. */ - addCalendar: function (url, user, pass) { + addCalendar: function (url, user, pass, calendarConfig) { this.sendSocketNotification("ADD_CALENDAR", { url: url, - maximumEntries: this.config.maximumEntries, - maximumNumberOfDays: this.config.maximumNumberOfDays, + maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries, + maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays, fetchInterval: this.config.fetchInterval, user: user, pass: pass From 9f659eef1b2b163b0c22fd796ee38ee4f2bf1ab5 Mon Sep 17 00:00:00 2001 From: Kyle Carson Date: Mon, 30 Jan 2017 16:35:21 -0600 Subject: [PATCH 117/257] Fix formatting --- modules/default/calendar/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index afbf3085..57a989a8 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -65,14 +65,13 @@ config: { #### Calendar configuration options: - --| Option | Description - -| --------------------- | ----------- - -| `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. - -| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. - -| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). - -| `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` - -| `user` | The username for HTTP Basic authentication. - -| `pass` | The password for HTTP Basic authentication. - -| `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100` - -| `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting +| Option | Description +| --------------------- | ----------- +| `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. +| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. +| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). +| `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` +| `user` | The username for HTTP Basic authentication. +| `pass` | The password for HTTP Basic authentication. +| `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100` +| `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting From 7731878f36e02246c44c7c0603338c88199c0488 Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Mon, 30 Jan 2017 15:29:25 -0800 Subject: [PATCH 118/257] Add missing 'chai-as-promised' dependency When I attempted to run e2e tests I got following error: ``` $npm run test:e2e > magicmirror@2.1.1 test:e2e /Users/sergeym/localDev/MagicMirror > ./node_modules/mocha/bin/mocha tests/e2e --recursive module.js:471 throw err; ^ Error: Cannot find module 'chai-as-promised' ... ``` Adding `chai-as-promised` to `package.json` and running npm install fixes it. --- CHANGELOG.md | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92f80d7e..52e7235c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Option for colored min-temp and max-temp - Add test e2e helloworld - Add test e2e enviroment +- Add `chai-as-promised` npm module to devDependencies ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/package.json b/package.json index 92202936..c5f6db99 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "homepage": "https://github.com/MichMich/MagicMirror#readme", "devDependencies": { "chai": "^3.5.0", + "chai-as-promised": "^6.0.0", "grunt": "latest", "grunt-eslint": "latest", "grunt-jsonlint": "latest", From 354b745c39a19915c3a8547445a5049555bd37ff Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Tue, 31 Jan 2017 11:41:40 +0100 Subject: [PATCH 119/257] Added Docker support --- .dockerignore | 72 ++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 2 +- Dockerfile | 15 +++++++++ README.md | 22 +++++++++++++- docker-entrypoint.sh | 11 +++++++ js/defaults.js | 2 +- 6 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..3b406630 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,72 @@ +# Various Node ignoramuses. + +logs +*.log +npm-debug.log* +pids +*.pid +*.seed +lib-cov +coverage +.grunt +.lock-wscript +build/Release +node_modules +jspm_modules +.npm +.node_repl_history + +# Various Windows ignoramuses. +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp +*.lnk + +# Various OSX ignoramuses. +.DS_Store +.AppleDouble +.LSOverride +Icon +._* +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Various Linux ignoramuses. + +.fuse_hidden* +.directory +.Trash-* + +# Various Magic Mirror ignoramuses and anti-ignoramuses. + +# Don't ignore the node_helper core module. +!/modules/node_helper +!/modules/node_helper/** + +# Ignore all modules except the default modules. +/modules/** +!/modules/default/** + +# Ignore changes to the custom css files. +/css/custom.css + +# Ignore unnecessary files for docker +CHANGELOG.md +LICENSE.md +README.md +Gruntfile.js +.* diff --git a/.gitignore b/.gitignore index 67feae54..b8935c93 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,7 @@ Temporary Items # Various Magic Mirror ignoramuses and anti-ignoramuses. -# Don't ignore the node_helper nore module. +# Don't ignore the node_helper core module. !/modules/node_helper !/modules/node_helper/** diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..d845bac0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:latest + +WORKDIR /opt/magic_mirror +COPY . . +COPY /modules unmount_modules +COPY /config unmount_config + +ENV NODE_ENV production +ENV MM_PORT 8080 + +RUN npm install +RUN ["chmod", "+x", "docker-entrypoint.sh"] + +EXPOSE $MM_PORT +ENTRYPOINT ["/opt/magic_mirror/docker-entrypoint.sh"] diff --git a/README.md b/README.md index 7c5286dd..4fb1fce5 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,28 @@ curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installer **Note:** if you want to debug on Raspberry Pi you can use `npm start dev` which will start the MagicMirror app with Dev Tools enabled. ### Server Only +In some cases, you want to start the application without an actual app window. In this case, you can start MagicMirror² in server only mode. This will start the server, after which you can open the application in your browser of choice. -In some cases, you want to start the application without an actual app window. In this case, execute the following command from the MagicMirror folder: `node serveronly`. This will start the server, after which you can open the application in your browser of choice. +#### Docker + +The simplest way to start MagicMirror² in server only mode is using [Docker](https://docker.com). After a successful [Docker installation](https://docs.docker.com/engine/installation/) you just need to execute the following command in the shell: + +```bash +docker run -d \ + --publish 80:8080 \ + --restart always \ + --volume ~/Documents/docker_volumes/mm/config:/opt/magic_mirror/config \ + --volume ~/Documents/docker_volumes/mm/modules:/opt/magic_mirror/modules \ + --name magic_mirror \ + magic_mirror +``` + +#### Manual + +1. Download and install the latest Node.js version. +2. Clone the repository and check out the beta branch: `git clone https://github.com/MichMich/MagicMirror` +3. Enter the repository: `cd ~/MagicMirror` +4. Install and run the app: `node serveronly` ### Raspberry Configuration & Auto Start. diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 00000000..9d91492f --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +if [ ! -f /opt/magic_mirror/modules ]; then + cp -R /opt/magic_mirror/unmount_modules/. /opt/magic_mirror/modules +fi + +if [ ! -f /opt/magic_mirror/config ]; then + cp -R /opt/magic_mirror/unmount_config/. /opt/magic_mirror/config +fi + +node serveronly diff --git a/js/defaults.js b/js/defaults.js index 4639e2b3..677edc98 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -8,7 +8,7 @@ */ var defaults = { - port: 8080, + port: process.env.MM_PORT || 8080, kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], From a78973702b11b1eea199fe9fc84b913033beeb29 Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Tue, 31 Jan 2017 16:36:01 +0100 Subject: [PATCH 120/257] Added Docker install documentation --- README.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4fb1fce5..87bbb8b8 100644 --- a/README.md +++ b/README.md @@ -50,16 +50,29 @@ In some cases, you want to start the application without an actual app window. I #### Docker -The simplest way to start MagicMirror² in server only mode is using [Docker](https://docker.com). After a successful [Docker installation](https://docs.docker.com/engine/installation/) you just need to execute the following command in the shell: +MagicMirror² in server only mode can be deployed using [Docker](https://docker.com). After a successful [Docker installation](https://docs.docker.com/engine/installation/) you just need to execute the following command in the shell: ```bash docker run -d \ --publish 80:8080 \ --restart always \ - --volume ~/Documents/docker_volumes/mm/config:/opt/magic_mirror/config \ - --volume ~/Documents/docker_volumes/mm/modules:/opt/magic_mirror/modules \ + --volume ~/magic_mirror/config:/opt/magic_mirror/config \ + --volume ~/magic_mirror/modules:/opt/magic_mirror/modules \ --name magic_mirror \ - magic_mirror + MichMich/MagicMirror +``` + +| **Volumes** | **Description** | +| --- | --- | +| `/opt/magic_mirror/config` | Mount this volume to insert your own config into the docker container. | +| `/opt/magic_mirror/modules` | Mount this volume to add your own custom modules into the docker container. | + +You may need to add your Docker Host IP to your `ipWhitelist` option. If you have some issues setting up this configuration, check [this forum post](https://forum.magicmirror.builders/topic/1326/ipwhitelist-howto). + +```javascript +var config = { + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:172.17.0.1"] +}; ``` #### Manual From e6a2b9f06e93a96bf4b329281bd6d51243139be8 Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Tue, 31 Jan 2017 19:40:49 +0100 Subject: [PATCH 121/257] Added the Docker support changes to changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9551b79..bf8e9c76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [2.1.1] - 2017-01-31 + +### Added +- Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673)) + ## [2.1.0] - 2016-12-31 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` From a3eaf9f473082e1401b27070fd0499b4a30121c4 Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Tue, 31 Jan 2017 19:41:42 +0100 Subject: [PATCH 122/257] Fixed typos and some description changes --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 87bbb8b8..3320e8c6 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installer ### Manual Installation 1. Download and install the latest Node.js version. -2. Clone the repository and check out the beta branch: `git clone https://github.com/MichMich/MagicMirror` +2. Clone the repository and check out the master branch: `git clone https://github.com/MichMich/MagicMirror` 3. Enter the repository: `cd ~/MagicMirror` 4. Install and run the app: `npm install && npm start` @@ -46,7 +46,7 @@ curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installer **Note:** if you want to debug on Raspberry Pi you can use `npm start dev` which will start the MagicMirror app with Dev Tools enabled. ### Server Only -In some cases, you want to start the application without an actual app window. In this case, you can start MagicMirror² in server only mode. This will start the server, after which you can open the application in your browser of choice. +In some cases, you want to start the application without an actual app window. In this case, you can start MagicMirror² in server only mode by manually running `node serveronly` or using Docker. This will start the server, after which you can open the application in your browser of choice. Detailed description below. #### Docker @@ -78,9 +78,9 @@ var config = { #### Manual 1. Download and install the latest Node.js version. -2. Clone the repository and check out the beta branch: `git clone https://github.com/MichMich/MagicMirror` +2. Clone the repository and check out the master branch: `git clone https://github.com/MichMich/MagicMirror` 3. Enter the repository: `cd ~/MagicMirror` -4. Install and run the app: `node serveronly` +4. Install and run the app: `npm install && node serveronly` ### Raspberry Configuration & Auto Start. From 86fdd91597b7a1d46647be6ac081049f0b954f09 Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Tue, 31 Jan 2017 10:37:03 -0800 Subject: [PATCH 123/257] Restructured Test Suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - separated tests into e2e and unit directories - created configs directory structure to support test framework - added/modified `npm run test`, `npm run test:unit` and `npm run test:e2e` to target all, unit and e2e tests respectively - modified some of the test names to be more descriptive New structure of the Test Suite has following directory tree: ``` tests ├── configs │   ├── env.js │   └── modules │   ├── clock │   │   ├── clock_12hr.js │   │   ├── clock_24hr.js │   │   └── clock_showPeriodUpper.js │   └── helloworld │   └── helloworld.js ├── e2e │   ├── env_spec.js │   └── modules │   ├── clock_spec.js │   └── helloworld_spec.js └── unit ├── functions │   └── cmp_versions_spec.js └── global_vars └── root_path_spec.js ``` --- CHANGELOG.md | 2 + js/server.js | 2 +- package.json | 3 +- tests/{confs => configs}/env.js | 0 tests/configs/modules/clock/clock_12hr.js | 29 +++++ tests/configs/modules/clock/clock_24hr.js | 29 +++++ .../modules/clock/clock_showPeriodUpper.js | 32 ++++++ .../modules/helloworld}/helloworld.js | 0 tests/e2e/{env.js => env_spec.js} | 14 ++- tests/e2e/modules/clock_spec.js | 103 ++++++++++++++++++ .../{helloworld.js => helloworld_spec.js} | 8 +- .../functions/cmp_versions_spec.js} | 4 +- .../global_vars/root_path_spec.js} | 6 +- 13 files changed, 217 insertions(+), 15 deletions(-) rename tests/{confs => configs}/env.js (100%) create mode 100644 tests/configs/modules/clock/clock_12hr.js create mode 100644 tests/configs/modules/clock/clock_24hr.js create mode 100644 tests/configs/modules/clock/clock_showPeriodUpper.js rename tests/{confs => configs/modules/helloworld}/helloworld.js (100%) rename tests/e2e/{env.js => env_spec.js} (77%) create mode 100644 tests/e2e/modules/clock_spec.js rename tests/e2e/modules/{helloworld.js => helloworld_spec.js} (86%) rename tests/{functions/compare-version.js => unit/functions/cmp_versions_spec.js} (80%) rename tests/{global_vars/root_path.js => unit/global_vars/root_path_spec.js} (68%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb9e8f0..2f91f570 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Show the splash screen image even when is reboot or halted. - Added some missing translaton strings in the sv.json file. - Run task jsonlint to check translation files. +- Restructured Test Suite ### Added - Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays` @@ -37,6 +38,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add test e2e helloworld - Add test e2e enviroment - Add `chai-as-promised` npm module to devDependencies +- Basic set of tests for clock module ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/js/server.js b/js/server.js index e7050021..36cfe8d2 100644 --- a/js/server.js +++ b/js/server.js @@ -37,7 +37,7 @@ var Server = function(config, callback) { app.use("/modules", express.static(path.resolve(global.root_path + "/modules"))); app.use("/vendor", express.static(path.resolve(global.root_path + "/vendor"))); app.use("/translations", express.static(path.resolve(global.root_path + "/translations"))); - app.use("/tests/confs", express.static(path.resolve(global.root_path + "/tests/confs"))); + app.use("/tests/configs", express.static(path.resolve(global.root_path + "/tests/configs"))); app.get("/version", function(req,res) { res.send(global.version); diff --git a/package.json b/package.json index c5f6db99..4be053c6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha $(find tests -path '*js*' ! -ipath '*e2e*')", + "test": "./node_modules/mocha/bin/mocha tests/unit --recursive", + "test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive" }, "repository": { diff --git a/tests/confs/env.js b/tests/configs/env.js similarity index 100% rename from tests/confs/env.js rename to tests/configs/env.js diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js new file mode 100644 index 00000000..31f9e4ea --- /dev/null +++ b/tests/configs/modules/clock/clock_12hr.js @@ -0,0 +1,29 @@ +/* Magic Mirror Test config for default clock module + * + * By Sergey Morozov + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center" + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js new file mode 100644 index 00000000..e5dd89f6 --- /dev/null +++ b/tests/configs/modules/clock/clock_24hr.js @@ -0,0 +1,29 @@ +/* Magic Mirror Test config for default clock module + * + * By Sergey Morozov + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center" + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js new file mode 100644 index 00000000..e7ee7d0a --- /dev/null +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config for default clock module + * + * By Sergey Morozov + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center", + config: { + showPeriodUpper: true + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/confs/helloworld.js b/tests/configs/modules/helloworld/helloworld.js similarity index 100% rename from tests/confs/helloworld.js rename to tests/configs/modules/helloworld/helloworld.js diff --git a/tests/e2e/env.js b/tests/e2e/env_spec.js similarity index 77% rename from tests/e2e/env.js rename to tests/e2e/env_spec.js index 41386499..77cd418b 100644 --- a/tests/e2e/env.js +++ b/tests/e2e/env_spec.js @@ -3,9 +3,6 @@ const path = require("path"); const chai = require("chai"); const chaiAsPromised = require("chai-as-promised"); -// Set config sample for use in test -process.env.MM_CONFIG_FILE = "tests/confs/env.js"; - var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); if (process.platform === "win32") { @@ -24,9 +21,14 @@ global.before(function () { chai.use(chaiAsPromised); }); -describe("Test enviroment app electron", function () { +describe("Electron app environment", function () { this.timeout(10000); + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + }); + beforeEach(function (done) { app.start().then(function() { done(); } ); }); @@ -36,12 +38,12 @@ describe("Test enviroment app electron", function () { }); - it("open a window app and test if is open", function () { + it("is set to open new app window", function () { return app.client.waitUntilWindowLoaded() .getWindowCount().should.eventually.equal(1); }); - it("tests the title", function () { + it("sets correct window title", function () { return app.client.waitUntilWindowLoaded() .getTitle().should.eventually.equal("Magic Mirror"); }); diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js new file mode 100644 index 00000000..0275aec1 --- /dev/null +++ b/tests/e2e/modules/clock_spec.js @@ -0,0 +1,103 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + + + +var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Clock module", function () { + this.timeout(10000); + + describe("with default 24hr clock config", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_24hr.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .date").should.eventually.match(dateRegex); + }); + + it("shows time in 24hr format", function() { + const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/ + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); + + describe("with default 12hr clock config", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_12hr.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .date").should.eventually.match(dateRegex); + }); + + it("shows time in 12hr format", function() { + const timeRegex = /^(?:1[0-2]|[0]\d):[0-5]\d[0-5]\d[ap]m$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); + + describe("with showPeriodUpper config enabled", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showPeriodUpper.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows 12hr time with upper case AM/PM", function() { + const timeRegex = /^(?:1[0-2]|[0]\d):[0-5]\d[0-5]\d[AP]M$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); +}); diff --git a/tests/e2e/modules/helloworld.js b/tests/e2e/modules/helloworld_spec.js similarity index 86% rename from tests/e2e/modules/helloworld.js rename to tests/e2e/modules/helloworld_spec.js index ebf8a8d1..7bb13381 100644 --- a/tests/e2e/modules/helloworld.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -3,8 +3,7 @@ const path = require("path"); const chai = require("chai"); const chaiAsPromised = require("chai-as-promised"); -// Set config sample for use in test -process.env.MM_CONFIG_FILE = "tests/confs/helloworld.js"; + var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); @@ -27,6 +26,11 @@ global.before(function () { describe("Test helloworld module", function () { this.timeout(10000); + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld.js"; + }); + beforeEach(function (done) { app.start().then(function() { done(); } ); }); diff --git a/tests/functions/compare-version.js b/tests/unit/functions/cmp_versions_spec.js similarity index 80% rename from tests/functions/compare-version.js rename to tests/unit/functions/cmp_versions_spec.js index 8cc22101..9f3793c0 100644 --- a/tests/functions/compare-version.js +++ b/tests/unit/functions/cmp_versions_spec.js @@ -1,7 +1,7 @@ var chai = require("chai"); var expect = chai.expect; -var classMM = require("../../js/class.js"); // require for load module.js -var moduleMM = require("../../js/module.js") +var classMM = require("../../../js/class.js"); // require for load module.js +var moduleMM = require("../../../js/module.js") describe("Test function cmpVersions in js/module.js", function() { diff --git a/tests/global_vars/root_path.js b/tests/unit/global_vars/root_path_spec.js similarity index 68% rename from tests/global_vars/root_path.js rename to tests/unit/global_vars/root_path_spec.js index 04edc03f..f21d3e44 100644 --- a/tests/global_vars/root_path.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -3,8 +3,8 @@ var path = require("path"); var chai = require("chai"); var expect = chai.expect; -describe("Test global.root_path, set in js/app.js", function() { - var appMM = require("../../js/app.js") +describe("'global.root_path' set in js/app.js", function() { + var appMM = require("../../../js/app.js") var expectedSubPaths = [ "modules", @@ -17,7 +17,7 @@ describe("Test global.root_path, set in js/app.js", function() { ]; expectedSubPaths.forEach(subpath => { - it(`should contain a file/folder "${subpath}"`, function() { + it(`contains a file/folder "${subpath}"`, function() { expect(fs.existsSync(path.join(global.root_path, subpath))).to.equal(true); }); }); From aeb3ccaf093c8ad3ffdb991fbdade7c91fd358ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 31 Jan 2017 17:02:18 -0300 Subject: [PATCH 124/257] Remove extra spaces and lines in tests. --- tests/e2e/modules/clock_spec.js | 12 +++++------- tests/e2e/modules/helloworld_spec.js | 2 -- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 860cc6f0..69e940ac 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -3,8 +3,6 @@ const path = require("path"); const chai = require("chai"); const chaiAsPromised = require("chai-as-promised"); - - var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); if (process.platform === "win32") { @@ -43,13 +41,13 @@ describe("Clock module", function () { it("shows date with correct format", function () { const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; return app.client.waitUntilWindowLoaded() - .getText(".clock .date").should.eventually.match(dateRegex); + .getText(".clock .date").should.eventually.match(dateRegex); }); it("shows time in 24hr format", function() { const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/ return app.client.waitUntilWindowLoaded() - .getText(".clock .time").should.eventually.match(timeRegex); + .getText(".clock .time").should.eventually.match(timeRegex); }); }); @@ -70,13 +68,13 @@ describe("Clock module", function () { it("shows date with correct format", function () { const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; return app.client.waitUntilWindowLoaded() - .getText(".clock .date").should.eventually.match(dateRegex); + .getText(".clock .date").should.eventually.match(dateRegex); }); it("shows time in 12hr format", function() { const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; return app.client.waitUntilWindowLoaded() - .getText(".clock .time").should.eventually.match(timeRegex); + .getText(".clock .time").should.eventually.match(timeRegex); }); }); @@ -97,7 +95,7 @@ describe("Clock module", function () { it("shows 12hr time with upper case AM/PM", function() { const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; return app.client.waitUntilWindowLoaded() - .getText(".clock .time").should.eventually.match(timeRegex); + .getText(".clock .time").should.eventually.match(timeRegex); }); }); }); diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js index 7bb13381..fc3b3291 100644 --- a/tests/e2e/modules/helloworld_spec.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -3,8 +3,6 @@ const path = require("path"); const chai = require("chai"); const chaiAsPromised = require("chai-as-promised"); - - var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); if (process.platform === "win32") { From 42b806b5009fcafb3934df401a84e03fa0cac2bd Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Tue, 31 Jan 2017 21:19:37 +0100 Subject: [PATCH 125/257] Fixed whitespace --- js/defaults.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/defaults.js b/js/defaults.js index 677edc98..e7e96036 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -8,7 +8,7 @@ */ var defaults = { - port: process.env.MM_PORT || 8080, + port: process.env.MM_PORT || 8080, kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], From fc2a554415922b61baab72f8e62743d504b1165d Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Tue, 31 Jan 2017 12:24:11 -0800 Subject: [PATCH 126/257] fix for 12hr regex thanks to @roramirez for testing and catching it. --- tests/e2e/modules/clock_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 0275aec1..860cc6f0 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -74,7 +74,7 @@ describe("Clock module", function () { }); it("shows time in 12hr format", function() { - const timeRegex = /^(?:1[0-2]|[0]\d):[0-5]\d[0-5]\d[ap]m$/; + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; return app.client.waitUntilWindowLoaded() .getText(".clock .time").should.eventually.match(timeRegex); }); @@ -95,7 +95,7 @@ describe("Clock module", function () { }); it("shows 12hr time with upper case AM/PM", function() { - const timeRegex = /^(?:1[0-2]|[0]\d):[0-5]\d[0-5]\d[AP]M$/; + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; return app.client.waitUntilWindowLoaded() .getText(".clock .time").should.eventually.match(timeRegex); }); From 6fc1141477bf4be6328fa8a4f24733a205872bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 31 Jan 2017 18:38:25 -0300 Subject: [PATCH 127/257] Run tests e2e in Travis --- .travis.yml | 3 +++ CHANGELOG.md | 1 + package.json | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index da3fb099..0727182b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,9 @@ node_js: - "5.1" before_script: - npm install grunt-cli -g + - "export DISPLAY=:99.0" + - "sh -e /etc/init.d/xvfb start" + - sleep 5 script: - grunt - npm test diff --git a/CHANGELOG.md b/CHANGELOG.md index 28ca9bb3..6c6e31e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add test e2e enviroment - Add `chai-as-promised` npm module to devDependencies - Basic set of tests for clock module +- Run e2e test in Travis ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/package.json b/package.json index 4be053c6..d8c10032 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha tests/unit --recursive", + "test": "./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive" }, From ee0418e7197547765d9427f6ed6f9531d85f9a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 31 Jan 2017 21:58:46 -0300 Subject: [PATCH 128/257] hotfix PL #673 --- js/app.js | 5 +++++ js/defaults.js | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/js/app.js b/js/app.js index 6466fe3f..57035541 100644 --- a/js/app.js +++ b/js/app.js @@ -21,6 +21,11 @@ if (process.env.MM_CONFIG_FILE) { global.configuration_file = process.env.MM_CONFIG_FILE; } +//Hotfix PullRequest #673 +if (process.env.MM_PORT) { + global.mmPort = process.env.MM_PORT; +} + // The next part is here to prevent a major exception when there // is no internet connection. This could probable be solved better. process.on("uncaughtException", function (err) { diff --git a/js/defaults.js b/js/defaults.js index e7e96036..66926de7 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -7,8 +7,12 @@ * MIT Licensed. */ +var port = 8080; +if (typeof(mmPort) !== "undefined") { + port = mmPort; +} var defaults = { - port: process.env.MM_PORT || 8080, + port: port, kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], From c6f5c120baa5299913a4cfab6f714f8eda964375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 1 Feb 2017 14:10:12 -0300 Subject: [PATCH 129/257] add tests clock module variant language es --- tests/configs/modules/clock/es/clock_12hr.js | 29 +++++ tests/configs/modules/clock/es/clock_24hr.js | 29 +++++ .../modules/clock/es/clock_showPeriodUpper.js | 32 ++++++ tests/e2e/modules/clock_es_spec.js | 101 ++++++++++++++++++ 4 files changed, 191 insertions(+) create mode 100644 tests/configs/modules/clock/es/clock_12hr.js create mode 100644 tests/configs/modules/clock/es/clock_24hr.js create mode 100644 tests/configs/modules/clock/es/clock_showPeriodUpper.js create mode 100644 tests/e2e/modules/clock_es_spec.js diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js new file mode 100644 index 00000000..d546e608 --- /dev/null +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -0,0 +1,29 @@ +/* Magic Mirror Test config for default clock module + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "es", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center" + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js new file mode 100644 index 00000000..abdf7a44 --- /dev/null +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -0,0 +1,29 @@ +/* Magic Mirror Test config for default clock module + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "es", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center" + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js new file mode 100644 index 00000000..6bb396db --- /dev/null +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config for default clock module + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "es", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center", + config: { + showPeriodUpper: true + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js new file mode 100644 index 00000000..72aee74c --- /dev/null +++ b/tests/e2e/modules/clock_es_spec.js @@ -0,0 +1,101 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Clock set to spanish language module", function () { + this.timeout(10000); + + describe("with default 24hr clock config", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_24hr.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sabado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .date").should.eventually.match(dateRegex); + }); + + it("shows time in 24hr format", function() { + const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/ + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); + + describe("with default 12hr clock config", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_12hr.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sabado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .date").should.eventually.match(dateRegex); + }); + + it("shows time in 12hr format", function() { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); + + describe("with showPeriodUpper config enabled", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_showPeriodUpper.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows 12hr time with upper case AM/PM", function() { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); +}); From 6f95b2c2adefaa575ad502cac1df5fedceb30336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 1 Feb 2017 14:33:17 -0300 Subject: [PATCH 130/257] add test with displaySeconds config disabled for clock module --- .../clock/clock_displaySeconds_false.js | 32 +++++++++++++++++++ tests/e2e/modules/clock_spec.js | 22 +++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/configs/modules/clock/clock_displaySeconds_false.js diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js new file mode 100644 index 00000000..91bbebba --- /dev/null +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config for default clock module + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center", + config: { + displaySeconds: false + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 860cc6f0..6b686a1e 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -100,4 +100,26 @@ describe("Clock module", function () { .getText(".clock .time").should.eventually.match(timeRegex); }); }); + + describe("with displaySeconds config disabled", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_displaySeconds_false.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows 12hr time without seconds am/pm", function() { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[ap]m$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .time").should.eventually.match(timeRegex); + }); + }); + }); From 42ffe213fddec06db063da56e0633424bfa84969 Mon Sep 17 00:00:00 2001 From: EdgardosReis Date: Thu, 2 Feb 2017 00:04:48 +0000 Subject: [PATCH 131/257] Update pt.json --- translations/pt.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/translations/pt.json b/translations/pt.json index f8797f0f..fec223a9 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -6,7 +6,7 @@ "TODAY": "Hoje", "TOMORROW": "Amanhã", "RUNNING": "Termina em", - "EMPTY": "Sem eventos a chegar.", + "EMPTY": "Sem eventos programados.", /* WEATHER */ "N": "N", @@ -24,5 +24,10 @@ "W": "O", "WNW": "ONO", "NW": "NO", - "NNW": "NNO" + "NNW": "NNO", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "Atualização do MagicMirror² disponível.", + "UPDATE_NOTIFICATION_MODULE": "Atualização para o módulo MODULE_NAME disponível.", + "UPDATE_INFO": "A instalação atual está COMMIT_COUNT atrasada no branch BRANCH_NAME." } From 123392c54934e49a397d586c1fb8dbcc4cc5d12b Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 25 Jan 2017 21:00:06 +0100 Subject: [PATCH 132/257] Translations test --- tests/unit/translations/same_keys.js | 96 ++++++++++++++++++++++++++++ translations/translations.js | 2 + 2 files changed, 98 insertions(+) create mode 100644 tests/unit/translations/same_keys.js diff --git a/tests/unit/translations/same_keys.js b/tests/unit/translations/same_keys.js new file mode 100644 index 00000000..99c4e85d --- /dev/null +++ b/tests/unit/translations/same_keys.js @@ -0,0 +1,96 @@ +var fs = require("fs"); +var path = require("path"); +var chai = require("chai"); +var expect = chai.expect; + +// Disabled for now, because of too many errors +// Remove .skip from it to enable + +describe("Translations have the same keys as en.js", function() { + var translations = require("../../../translations/translations.js"); + var base = JSON.parse(stripComments(fs.readFileSync("translations/en.json", "utf8"))); + var baseKeys = Object.keys(base).sort(); + + Object.keys(translations).forEach(function(tr) { + var fileName = translations[tr]; + it.skip(fileName + " should match", function() { + var fileContent = stripComments(fs.readFileSync(fileName, "utf8")); + var fileTranslations = JSON.parse(fileContent); + var fileKeys = Object.keys(fileTranslations).sort(); + expect(fileKeys).to.deep.equal(baseKeys); + }); + }); +}); + +// Copied from js/translator.js +function stripComments(str, opts) { + // strip comments copied from: https://github.com/sindresorhus/strip-json-comments + + var singleComment = 1; + var multiComment = 2; + + function stripWithoutWhitespace() { + return ""; + } + + function stripWithWhitespace(str, start, end) { + return str.slice(start, end).replace(/\S/g, " "); + } + + opts = opts || {}; + + var currentChar; + var nextChar; + var insideString = false; + var insideComment = false; + var offset = 0; + var ret = ""; + var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; + + for (var i = 0; i < str.length; i++) { + currentChar = str[i]; + nextChar = str[i + 1]; + + if (!insideComment && currentChar === "\"") { + var escaped = str[i - 1] === "\\" && str[i - 2] !== "\\"; + if (!escaped) { + insideString = !insideString; + } + } + + if (insideString) { + continue; + } + + if (!insideComment && currentChar + nextChar === "//") { + ret += str.slice(offset, i); + offset = i; + insideComment = singleComment; + i++; + } else if (insideComment === singleComment && currentChar + nextChar === "\r\n") { + i++; + insideComment = false; + ret += strip(str, offset, i); + offset = i; + continue; + } else if (insideComment === singleComment && currentChar === "\n") { + insideComment = false; + ret += strip(str, offset, i); + offset = i; + } else if (!insideComment && currentChar + nextChar === "/*") { + ret += str.slice(offset, i); + offset = i; + insideComment = multiComment; + i++; + continue; + } else if (insideComment === multiComment && currentChar + nextChar === "*/") { + i++; + insideComment = false; + ret += strip(str, offset, i + 1); + offset = i + 1; + continue; + } + } + + return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset)); +} diff --git a/translations/translations.js b/translations/translations.js index c10da418..d28e9713 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -31,3 +31,5 @@ var translations = { "hu" : "translations/hu.json", // Hungarian "is" : "translations/is.json", // Icelandic }; + +if (typeof module !== "undefined") {module.exports = translations;} From cd8bee1371ffc6cce7b7bf44f85cd03705e4c1bd Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Wed, 25 Jan 2017 22:42:04 +0100 Subject: [PATCH 133/257] Run App in vm --- tests/unit/global_vars/root_path_spec.js | 46 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/tests/unit/global_vars/root_path_spec.js b/tests/unit/global_vars/root_path_spec.js index f21d3e44..3da29be1 100644 --- a/tests/unit/global_vars/root_path_spec.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -2,10 +2,42 @@ var fs = require("fs"); var path = require("path"); var chai = require("chai"); var expect = chai.expect; +var vm = require("vm"); + +before(function() { + var basedir = path.join(__dirname, "../../.."); + + var fileName = "js/app.js"; + var filePath = path.join(basedir, fileName); + var code = fs.readFileSync(filePath); + + this.sandbox = { + module: {}, + __dirname: path.dirname(filePath), + global: {}, + console: { + log: function() { /*console.log("console.log(", arguments, ")");*/ } + }, + process: { + on: function() { /*console.log("process.on called with: ", arguments);*/ }, + env: {} + } + }; + + this.sandbox.require = function(filename) { + // This modifies the global slightly, + // but supplies vm with essential code + return require(filename); + }; + + vm.runInNewContext(code, this.sandbox, fileName); +}); + +after(function() { + //console.log(global); +}); describe("'global.root_path' set in js/app.js", function() { - var appMM = require("../../../js/app.js") - var expectedSubPaths = [ "modules", "serveronly", @@ -18,8 +50,16 @@ describe("'global.root_path' set in js/app.js", function() { expectedSubPaths.forEach(subpath => { it(`contains a file/folder "${subpath}"`, function() { - expect(fs.existsSync(path.join(global.root_path, subpath))).to.equal(true); + expect(fs.existsSync(path.join(this.sandbox.global.root_path, subpath))).to.equal(true); }); }); + + it("should not modify global.root_path for testing", function() { + expect(global.root_path).to.equal(undefined); + }); + + it("should not modify global.version for testing", function() { + expect(global.version).to.equal(undefined); + }); }); From 406ae4e8c37cbf7e31c89f5341d7715bacbcf0d2 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Thu, 2 Feb 2017 14:28:59 +0100 Subject: [PATCH 134/257] Skip translation test on fail --- tests/unit/translations/same_keys.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/unit/translations/same_keys.js b/tests/unit/translations/same_keys.js index 99c4e85d..3c051f5f 100644 --- a/tests/unit/translations/same_keys.js +++ b/tests/unit/translations/same_keys.js @@ -13,11 +13,24 @@ describe("Translations have the same keys as en.js", function() { Object.keys(translations).forEach(function(tr) { var fileName = translations[tr]; - it.skip(fileName + " should match", function() { + it(fileName + " should match", function() { var fileContent = stripComments(fs.readFileSync(fileName, "utf8")); var fileTranslations = JSON.parse(fileContent); var fileKeys = Object.keys(fileTranslations).sort(); - expect(fileKeys).to.deep.equal(baseKeys); + + // TODO: when all translations are fixed, use + // expect(fileKeys).to.deep.equal(baseKeys); + + // Then delete this block: + try { + expect(fileKeys).to.deep.equal(baseKeys); + } catch(e) { + if (e instanceof chai.AssertionError) { + this.skip(); + } else { + throw e; + } + } }); }); }); From d004c0ccd16a83c715153a3d30fc5a55c8b612c9 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Fri, 3 Feb 2017 10:10:03 +0100 Subject: [PATCH 135/257] Split translation key testing All keys in a translation file should be in the base file (en.json). When there are keys in the base file that are not in a translation, the translation file test is skipped. --- tests/unit/translations/same_keys.js | 42 ++++++++++++++++------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/tests/unit/translations/same_keys.js b/tests/unit/translations/same_keys.js index 3c051f5f..67ed7170 100644 --- a/tests/unit/translations/same_keys.js +++ b/tests/unit/translations/same_keys.js @@ -3,9 +3,6 @@ var path = require("path"); var chai = require("chai"); var expect = chai.expect; -// Disabled for now, because of too many errors -// Remove .skip from it to enable - describe("Translations have the same keys as en.js", function() { var translations = require("../../../translations/translations.js"); var base = JSON.parse(stripComments(fs.readFileSync("translations/en.json", "utf8"))); @@ -13,24 +10,33 @@ describe("Translations have the same keys as en.js", function() { Object.keys(translations).forEach(function(tr) { var fileName = translations[tr]; - it(fileName + " should match", function() { - var fileContent = stripComments(fs.readFileSync(fileName, "utf8")); - var fileTranslations = JSON.parse(fileContent); - var fileKeys = Object.keys(fileTranslations).sort(); + var fileContent = stripComments(fs.readFileSync(fileName, "utf8")); + var fileTranslations = JSON.parse(fileContent); + var fileKeys = Object.keys(fileTranslations).sort(); - // TODO: when all translations are fixed, use - // expect(fileKeys).to.deep.equal(baseKeys); + it(fileName + " keys should be in base", function() { + fileKeys.forEach(function(key) { + expect( baseKeys.indexOf(key) ).to.be.at.least(0); + }); + }); - // Then delete this block: - try { - expect(fileKeys).to.deep.equal(baseKeys); - } catch(e) { - if (e instanceof chai.AssertionError) { - this.skip(); - } else { - throw e; + it(fileName + " should contain all base keys", function() { + var test = this; + baseKeys.forEach(function(key) { + // TODO: when all translations are fixed, use + // expect(fileKeys).to.deep.equal(baseKeys); + // instead of the try-catch-block + + try { + expect(fileKeys).to.deep.equal(baseKeys); + } catch(e) { + if (e instanceof chai.AssertionError) { + test.skip(); + } else { + throw e; + } } - } + }); }); }); }); From 8c2fafecd75532431c38699bdb57c1b6d0087a90 Mon Sep 17 00:00:00 2001 From: EdgardosReis Date: Fri, 3 Feb 2017 15:40:33 +0000 Subject: [PATCH 136/257] Update pt.json removed comments --- translations/pt.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/translations/pt.json b/translations/pt.json index fec223a9..2a174251 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -1,14 +1,11 @@ { - /* GENERAL */ "LOADING": "A carregar …", - /* CALENDAR */ "TODAY": "Hoje", "TOMORROW": "Amanhã", "RUNNING": "Termina em", "EMPTY": "Sem eventos programados.", - /* WEATHER */ "N": "N", "NNE": "NNE", "NE": "NE", From 43a4c6198c8b8dd46ae6e963c1033f955cfb1947 Mon Sep 17 00:00:00 2001 From: EdgardosReis Date: Fri, 3 Feb 2017 15:41:11 +0000 Subject: [PATCH 137/257] Update pt.json --- translations/pt.json | 1 - 1 file changed, 1 deletion(-) diff --git a/translations/pt.json b/translations/pt.json index 2a174251..9167dbc3 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -23,7 +23,6 @@ "NW": "NO", "NNW": "NNO", - /* UPDATE INFO */ "UPDATE_NOTIFICATION": "Atualização do MagicMirror² disponível.", "UPDATE_NOTIFICATION_MODULE": "Atualização para o módulo MODULE_NAME disponível.", "UPDATE_INFO": "A instalação atual está COMMIT_COUNT atrasada no branch BRANCH_NAME." From 83f7cb2033a108f330ac966da02ba0e72b6d2862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 3 Feb 2017 13:32:44 -0300 Subject: [PATCH 138/257] fix when is set dev parameter option in "npm start dev". issue #684 --- run-start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-start.sh b/run-start.sh index 6c4d4003..a039ec4d 100644 --- a/run-start.sh +++ b/run-start.sh @@ -1,4 +1,4 @@ if [ -z "$DISPLAY" ]; then #If not set DISPLAY is SSH remote or tty export DISPLAY=:0 # Set by defaul display fi -electron js/electron.js +electron js/electron.js $1 From 75f47716164dfa2e33b52b29a552a5a0f5e801b5 Mon Sep 17 00:00:00 2001 From: "LAPTOP-KAUR\\race2" Date: Sun, 5 Feb 2017 05:12:31 +0200 Subject: [PATCH 139/257] Added estonian translations --- translations/et.json | 30 ++++++++++++++++++++++++++++++ translations/translations.js | 1 + 2 files changed, 31 insertions(+) create mode 100644 translations/et.json diff --git a/translations/et.json b/translations/et.json new file mode 100644 index 00000000..89b31556 --- /dev/null +++ b/translations/et.json @@ -0,0 +1,30 @@ +{ + "LOADING": "Laen …", + + "TODAY": "Täna", + "TOMORROW": "Homme", + "DAYAFTERTOMORROW": "Ülehomme", + "RUNNING": "Teoksil", + "EMPTY": "Pole tulevasi sündmuseid.", + + "N": "Põhi", + "NNE": "PõhiKirre", + "NE": "Kirre", + "ENE": "Idakirre", + "E": "Ida", + "ESE": "Idakagu", + "SE": "Kagu", + "SSE": "Lõunakagu", + "S": "Lõuna", + "SSW": "Lõunaedel", + "SW": "Edel", + "WSW": "Lääneedel", + "W": "Lääs", + "WNW": "Lääneloe", + "NW": "Loe", + "NNW": "Põhjaloe", + + "UPDATE_NOTIFICATION": "MagicMirror²´le uuendus saadaval.", + "UPDATE_NOTIFICATION_MODULE": "Uuendus saadaval MODULE_NAME moodulile.", + "UPDATE_INFO": "Praegune paigaldus on COMMIT_COUNT tagapool BRANCH_NAME harul." +} diff --git a/translations/translations.js b/translations/translations.js index c10da418..cc514cda 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -30,4 +30,5 @@ var translations = { "af" : "translations/af.json", // Afrikaans "hu" : "translations/hu.json", // Hungarian "is" : "translations/is.json", // Icelandic + "et" : "translations/et.json", // Estonian }; From 42f22119f2c2564314279b640ca0bd6884e31ed5 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Sun, 5 Feb 2017 11:38:01 +0100 Subject: [PATCH 140/257] Add test for 'dev' argument --- tests/e2e/dev_console.js | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/e2e/dev_console.js diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js new file mode 100644 index 00000000..50a0b5d9 --- /dev/null +++ b/tests/e2e/dev_console.js @@ -0,0 +1,52 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../js/electron.js"); + +var app = new Application({ + path: electronPath +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Argument 'dev'", function () { + this.timeout(10000); + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("should not open dev console when absent", function () { + app.args = [appPath]; + + return app.start().then(function() { + return app.client.waitUntilWindowLoaded() + .getWindowCount().should.eventually.equal(1); + }); + }); + + it("should open dev console when provided", function () { + app.args = [appPath, 'dev']; + + return app.start().then(function() { + return app.client.waitUntilWindowLoaded() + .getWindowCount().should.eventually.equal(2); + }); + }); +}); From 14c0307c09c57bb8614b6141d6f0c25c324edfce Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Sun, 5 Feb 2017 12:26:42 +0100 Subject: [PATCH 141/257] Fix grunt error --- tests/e2e/dev_console.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 50a0b5d9..de9a7c02 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -42,7 +42,7 @@ describe("Argument 'dev'", function () { }); it("should open dev console when provided", function () { - app.args = [appPath, 'dev']; + app.args = [appPath, "dev"]; return app.start().then(function() { return app.client.waitUntilWindowLoaded() From 14b1b649cb64bca9853c97a3f1dac1a57d080b2b Mon Sep 17 00:00:00 2001 From: fewieden Date: Mon, 6 Feb 2017 01:19:03 +0100 Subject: [PATCH 142/257] bugfix --- modules/default/newsfeed/newsfeed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index aed917f8..7c31717a 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -112,7 +112,7 @@ Module.register("newsfeed",{ //Remove selected tags from the beginning of rss feed items (title or description) - if (this.config.removeStartTags == "title" || "both") { + if (this.config.removeStartTags == "title" || this.config.removeStartTags == "both") { for (f=0; f Date: Mon, 6 Feb 2017 02:08:59 +0100 Subject: [PATCH 143/257] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c6e31e3..4fd18e16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - If units is set to imperial, the showRainAmount option of weatherforecast will show the correct unit. - Module currentWeather: check if temperature received from api is defined. - Fix an issue with module hidden status changing to `true` although lock string prevented showing it +- Fix newsfeed module bug (removeStartTags) ## [2.1.0] - 2016-12-31 From 79c79146a5df730cb8e8eee1cc1008639a2c21c7 Mon Sep 17 00:00:00 2001 From: Kyle Carson Date: Sun, 5 Feb 2017 19:28:42 -0600 Subject: [PATCH 144/257] Support `anytime` compliment group. --- modules/default/compliments/compliments.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 9f514ff1..3cbad1a6 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -12,6 +12,9 @@ Module.register("compliments",{ // Module config defaults. defaults: { compliments: { + anytime: [ + "Hey there sexy!" + ], morning: [ "Good morning, handsome!", "Enjoy your day!", @@ -107,6 +110,9 @@ Module.register("compliments",{ if ( this.currentWeatherType in this.config.compliments) { compliments.push.apply(compliments, this.config.compliments[this.currentWeatherType]); } + + compliments.push.apply(compliments, this.config.compliments.anytime); + return compliments; }, From a2892ad097d2928b8d74ab5dc7e9ff1d511afce8 Mon Sep 17 00:00:00 2001 From: Kyle Carson Date: Sun, 5 Feb 2017 19:29:35 -0600 Subject: [PATCH 145/257] Update Readme and changelog --- CHANGELOG.md | 1 + modules/default/compliments/README.md | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c6e31e3..b2efe4eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Changed +- Add `anytime` group for Compliments module. - Installer: Use init config.js from config.js.sample. - Switched out `rrule` package for `rrule-alt` and fixes in `ical.js` in order to fix calendar issues. ([#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index 8ef9e2fb..171c86c0 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -29,12 +29,12 @@ The following properties can be configured: | ---------------- | ----------- | `updateInterval` | How often does the compliment have to change? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `30000` (30 seconds) | `fadeSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `4000` (4 seconds) -| `compliments` | The list of compliments.

**Possible values:** An object with three arrays: `morning`, `afternoon` and`evening`. See _compliment configuration_ below.
**Default value:** See _compliment configuration_ below. -| `remoteFile` | External file from which to load the compliments

**Possible values:** Path to a JSON file containing compliments, configured as per the value of the _compliments configuration_ (see below). An object with three arrays: `morning`, `afternoon` and `evening`. - `compliments.json`
**Default value:** `null` (Do not load from file) +| `compliments` | The list of compliments.

**Possible values:** An object with four arrays: `morning`, `afternoon`, `evening` and `anytime`. See _compliment configuration_ below.
**Default value:** See _compliment configuration_ below. +| `remoteFile` | External file from which to load the compliments

**Possible values:** Path to a JSON file containing compliments, configured as per the value of the _compliments configuration_ (see below). An object with four arrays: `morning`, `afternoon`, `evening` and `anytime`. - `compliments.json`
**Default value:** `null` (Do not load from file) ### Compliment configuration -The `compliments` property contains an object with three arrays: morning, afternoon andevening. Based on the time of the day, the compliments will be picked out of one of these arrays. The arrays contain one or multiple compliments. +The `compliments` property contains an object with four arrays: morning, afternoon, evening and anytime. Based on the time of the day, the compliments will be picked out of one of these arrays. The arrays contain one or multiple compliments. If use the currentweather is possible use a actual weather for set compliments. The availables properties are: @@ -78,6 +78,9 @@ config: { ````javascript config: { compliments: { + anytime: [ + "Hey there sexy!" + ], morning: [ "Good morning, handsome!", "Enjoy your day!", @@ -107,6 +110,9 @@ around them ("morning", "afternoon", "evening", "snow", "rain", etc.). #### Example compliments.json file: ````json { + "anytime" : [ + "Hey there sexy!" + ], "morning" : [ "Good morning, sunshine!", "Who needs coffee when you have your smile?", From 6fcaec3ca8e848097f257d44e8f8e7e80a529ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 5 Feb 2017 19:35:33 -0300 Subject: [PATCH 146/257] add test parts of day for compliments module --- CHANGELOG.md | 1 + .../compliments/compliments_parts_day.js | 42 ++++++++++++++ tests/e2e/modules/compliments_spec.js | 58 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 tests/configs/modules/compliments/compliments_parts_day.js create mode 100644 tests/e2e/modules/compliments_spec.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c6e31e3..ce6b3fc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add `chai-as-promised` npm module to devDependencies - Basic set of tests for clock module - Run e2e test in Travis +- Add test for compliments module for parts of day ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js new file mode 100644 index 00000000..bee79283 --- /dev/null +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -0,0 +1,42 @@ +/* Magic Mirror Test config for default compliments + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "compliments", + position: "middle_center", + config: { + compliments: { + morning: [ + "Morning test" + ], + afternoon: [ + "Afternoon test" + ], + evening: [ + "Evening test" + ] + } + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js new file mode 100644 index 00000000..0c152b8d --- /dev/null +++ b/tests/e2e/modules/compliments_spec.js @@ -0,0 +1,58 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); +const moment = require("../../../vendor/moment/moment-with-locales.js"); + +var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Compliments module", function () { + this.timeout(10000); + + describe("parts of days", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_parts_day.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows correct compliments for part of day", function () { + + var hour = moment().hour(); + if (hour >= 3 && hour < 12) { + compliment = "Morning test"; + } else if (hour >= 12 && hour < 17) { + compliment = "Afternoon test"; + } else { + compliment = "Evening test"; + } + + return app.client.waitUntilWindowLoaded() + .getText(".compliments").should.eventually.equal(compliment); + }); + }); + +}); From 03f5d9b102825c2033c51fccf2c7e644cb49ed0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 7 Feb 2017 16:00:35 -0300 Subject: [PATCH 147/257] Split test for parts of day in compliments module --- .../compliments/compliments_parts_day.js | 6 +-- tests/e2e/modules/compliments_spec.js | 42 ++++++++++++++----- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index bee79283..8d47fe22 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -24,13 +24,13 @@ var config = { config: { compliments: { morning: [ - "Morning test" + "Hi", "Good Morning", "Morning test" ], afternoon: [ - "Afternoon test" + "Hello", "Good Afternoon", "Afternoon test" ], evening: [ - "Evening test" + "Hello There", "Good Evening", "Evening test" ] } } diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 0c152b8d..15790177 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,8 +1,8 @@ const Application = require("spectron").Application; const path = require("path"); const chai = require("chai"); +const expect = chai.expect; const chaiAsPromised = require("chai-as-promised"); -const moment = require("../../../vendor/moment/moment-with-locales.js"); var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); @@ -39,20 +39,40 @@ describe("Compliments module", function () { app.stop().then(function() { done(); }); }); - it("shows correct compliments for part of day", function () { - var hour = moment().hour(); + it("if Morning compliments for that part of day", function () { + var hour = new Date().getHours(); if (hour >= 3 && hour < 12) { - compliment = "Morning test"; - } else if (hour >= 12 && hour < 17) { - compliment = "Afternoon test"; - } else { - compliment = "Evening test"; + // if morning check + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Hi", "Good Morning", "Morning test"]); + }) } - - return app.client.waitUntilWindowLoaded() - .getText(".compliments").should.eventually.equal(compliment); }); + + it("if Afternoon show Compliments for that part of day", function () { + var hour = new Date().getHours(); + if (hour >= 12 && hour < 17) { + // if morning check + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Hello", "Good Afternoon", "Afternoon test"]); + }) + } + }); + + it("if Evening show Compliments for that part of day", function () { + var hour = new Date().getHours(); + if (!(hour >= 3 && hour < 12) && !(hour >= 12 && hour < 17)) { + // if evening check + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Hello There", "Good Evening", "Evening test"]); + }) + } + }); + }); }); From f57ad57e6270a144185bfa3e4c665e4cbcfc996b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 7 Feb 2017 19:35:51 -0300 Subject: [PATCH 148/257] unit test global.version --- tests/unit/global_vars/root_path_spec.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/unit/global_vars/root_path_spec.js b/tests/unit/global_vars/root_path_spec.js index 3da29be1..197ee6a7 100644 --- a/tests/unit/global_vars/root_path_spec.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -61,5 +61,11 @@ describe("'global.root_path' set in js/app.js", function() { it("should not modify global.version for testing", function() { expect(global.version).to.equal(undefined); }); + + it("should expect the global.version equals package.json file", function() { + version_package = JSON.parse(fs.readFileSync("package.json", "utf8")).version; + expect(this.sandbox.global.version).to.equal(version_package); + }); + }); From 2f71a43420a41aa174d86eeda4e81e146c331f2a Mon Sep 17 00:00:00 2001 From: fewieden Date: Tue, 7 Feb 2017 23:51:13 +0100 Subject: [PATCH 149/257] dry pattern --- js/main.js | 77 ++++++++++----------- js/module.js | 59 ++++++++-------- modules/default/calendar/calendar.js | 52 +++++++------- modules/default/calendar/calendarfetcher.js | 8 ++- modules/default/clock/clock.js | 56 +++++++-------- 5 files changed, 119 insertions(+), 133 deletions(-) diff --git a/js/main.js b/js/main.js index fde5564d..4e2d2d21 100644 --- a/js/main.js +++ b/js/main.js @@ -308,65 +308,58 @@ var MM = (function() { var setSelectionMethodsForModules = function(modules) { /* withClass(className) - * filters a collection of modules based on classname(s). + * calls modulesByClass to filter modules with the specified classes. * * argument className string/array - one or multiple classnames. (array or space divided) * * return array - Filtered collection of modules. */ var withClass = function(className) { - var searchClasses = className; - if (typeof className === "string") { - searchClasses = className.split(" "); - } - - var newModules = modules.filter(function(module) { - var classes = module.data.classes.toLowerCase().split(" "); - - for (var c in searchClasses) { - var searchClass = searchClasses[c]; - if (classes.indexOf(searchClass.toLowerCase()) !== -1) { - return true; - } - } - - return false; - }); - - setSelectionMethodsForModules(newModules); - return newModules; + return modulesByClass(className, true); }; /* exceptWithClass(className) - * filters a collection of modules based on classname(s). (NOT) + * calls modulesByClass to filter modules without the specified classes. * * argument className string/array - one or multiple classnames. (array or space divided) * * return array - Filtered collection of modules. */ var exceptWithClass = function(className) { - var searchClasses = className; - if (typeof className === "string") { - searchClasses = className.split(" "); - } - - var newModules = modules.filter(function(module) { - var classes = module.data.classes.toLowerCase().split(" "); - - for (var c in searchClasses) { - var searchClass = searchClasses[c]; - if (classes.indexOf(searchClass.toLowerCase()) !== -1) { - return false; - } - } - - return true; - }); - - setSelectionMethodsForModules(newModules); - return newModules; + return modulesByClass(className, false); }; + /* modulesByClass(className, include) + * filters a collection of modules based on classname(s). + * + * argument className string/array - one or multiple classnames. (array or space divided) + * argument include boolean - if the filter should include or exclude the modules with the specific classes. + * + * return array - Filtered collection of modules. + */ + var modulesByClass = function(className, include) { + var searchClasses = className; + if (typeof className === "string") { + searchClasses = className.split(" "); + } + + var newModules = modules.filter(function(module) { + var classes = module.data.classes.toLowerCase().split(" "); + + for (var c in searchClasses) { + var searchClass = searchClasses[c]; + if (classes.indexOf(searchClass.toLowerCase()) !== -1) { + return include; + } + } + + return !include; + }); + + setSelectionMethodsForModules(newModules); + return newModules; + }; + /* exceptModule(module) * Removes a module instance from the collection. * diff --git a/js/module.js b/js/module.js index dfd5f2bc..ffe49416 100644 --- a/js/module.js +++ b/js/module.js @@ -203,22 +203,7 @@ var Module = Class.extend({ * argument callback function - Function called when done. */ loadStyles: function (callback) { - var self = this; - var styles = this.getStyles(); - - var loadNextStyle = function () { - if (styles.length > 0) { - var nextStyle = styles[0]; - Loader.loadFile(nextStyle, self, function () { - styles = styles.slice(1); - loadNextStyle(); - }); - } else { - callback(); - } - }; - - loadNextStyle(); + this.loadDependencies("getStyles", callback); }, /* loadScripts() @@ -227,24 +212,34 @@ var Module = Class.extend({ * argument callback function - Function called when done. */ loadScripts: function (callback) { - var self = this; - var scripts = this.getScripts(); - - var loadNextScript = function () { - if (scripts.length > 0) { - var nextScript = scripts[0]; - Loader.loadFile(nextScript, self, function () { - scripts = scripts.slice(1); - loadNextScript(); - }); - } else { - callback(); - } - }; - - loadNextScript(); + this.loadDependencies("getScripts", callback); }, + /* loadDependencies(funcName, callback) + * Helper method to load all dependencies. + * + * argument funcName string - Function name to call to get scripts or styles. + * argument callback function - Function called when done. + */ + loadDependencies: function (funcName, callback) { + var self = this; + var dependencies = this[funcName](); + + var loadNextDependency = function () { + if (dependencies.length > 0) { + var nextDependency = dependencies[0]; + Loader.loadFile(nextDependency, self, function () { + dependencies = dependencies.slice(1); + loadNextDependency(); + }); + } else { + callback(); + } + }; + + loadNextDependency(); + }, + /* loadScripts() * Load all required scripts by requesting the MM object to load the files. * diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 72808c1f..70352885 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -327,54 +327,54 @@ Module.register("calendar", { /* symbolForUrl(url) * Retrieves the symbol for a specific url. * - * argument url sting - Url to look for. + * argument url string - Url to look for. * * return string - The Symbol */ symbolForUrl: function (url) { - for (var c in this.config.calendars) { - var calendar = this.config.calendars[c]; - if (calendar.url === url && typeof calendar.symbol === "string") { - return calendar.symbol; - } - } - - return this.config.defaultSymbol; + return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol); }, /* colorForUrl(url) * Retrieves the color for a specific url. * - * argument url sting - Url to look for. + * argument url string - Url to look for. * * return string - The Color */ colorForUrl: function (url) { - for (var c in this.config.calendars) { - var calendar = this.config.calendars[c]; - if (calendar.url === url && typeof calendar.color === "string") { - return calendar.color; - } - } - - return "#fff"; + return this.getCalendarProperty(url, "color", "#fff"); }, + /* countTitleForUrl(url) * Retrieves the name for a specific url. * - * argument url sting - Url to look for. + * argument url string - Url to look for. * * return string - The Symbol */ countTitleForUrl: function (url) { - for (var c in this.config.calendars) { - var calendar = this.config.calendars[c]; - if (calendar.url === url && typeof calendar.repeatingCountTitle === "string") { - return calendar.repeatingCountTitle; - } - } + return this.getCalendarProperty(url, "repeatingCountTitle", this.config.defaultRepeatingCountTitle); + }, - return this.config.defaultRepeatingCountTitle; + /* getCalendarProperty(url, property, defaultValue) + * Helper method to retrieve the property for a specific url. + * + * argument url string - Url to look for. + * argument property string - Property to look for. + * argument defaultValue string - Value if property is not found. + * + * return string - The Property + */ + getCalendarProperty: function (url, property, defaultValue) { + for (var c in this.config.calendars) { + var calendar = this.config.calendars[c]; + if (calendar.url === url && typeof calendar[property] === "string") { + return calendar[property]; + } + } + + return defaultValue; }, /* shorten(string, maxLength) diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index e24ee004..d5ca075e 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -52,6 +52,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe var limitFunction = function(date, i) {return i < maximumEntries;}; + var eventDate = function(event, time) { + return (event[time].length === 8) ? moment(event[time], "YYYYMMDD") : moment(new Date(event[time])); + }; + for (var e in data) { var event = data[e]; var now = new Date(); @@ -70,10 +74,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe if (event.type === "VEVENT") { - var startDate = (event.start.length === 8) ? moment(event.start, "YYYYMMDD") : moment(new Date(event.start)); + var startDate = eventDate(event, "start"); var endDate; if (typeof event.end !== "undefined") { - endDate = (event.end.length === 8) ? moment(event.end, "YYYYMMDD") : moment(new Date(event.end)); + endDate = eventDate(event, "end"); } else { if (!isFacebookBirthday) { endDate = startDate; diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 1882c52e..6824ae8f 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -74,23 +74,18 @@ Module.register("clock",{ if (this.config.timezone) { now.tz(this.config.timezone); } + + var hourSymbol = "HH"; + if (this.config.timeFormat !== 24) { + hourSymbol = "h"; + } + if (this.config.clockBold === true) { - timeString = now.format("HH[]mm[]"); + timeString = now.format(hourSymbol + "[]mm[]"); } else { - timeString = now.format("HH:mm"); + timeString = now.format(hourSymbol + ":mm"); } - if (this.config.timeFormat !== 24) { - // var now = new Date(); - // var hours = now.getHours() % 12 || 12; - if (this.config.clockBold === true) { - //timeString = hours + moment().format("[]mm[]"); - timeString = now.format("h[]mm[]"); - } else { - //timeString = hours + moment().format(":mm"); - timeString = now.format("h:mm"); - } - } if(this.config.showDate){ dateWrapper.innerHTML = now.format("dddd, LL"); } @@ -203,30 +198,29 @@ Module.register("clock",{ digitalWrapper.appendChild(dateWrapper); digitalWrapper.appendChild(timeWrapper); + var appendClocks = function(condition, pos1, pos2) { + var padding = [0,0,0,0]; + padding[(placement === condition) ? pos1 : pos2] = "20px"; + analogWrapper.style.padding = padding.join(" "); + if (placement === condition) { + wrapper.appendChild(analogWrapper); + wrapper.appendChild(digitalWrapper); + } else { + wrapper.appendChild(digitalWrapper); + wrapper.appendChild(analogWrapper); + } + } + if (placement === "left" || placement === "right") { digitalWrapper.style.display = "inline-block"; digitalWrapper.style.verticalAlign = "top"; analogWrapper.style.display = "inline-block"; - if (placement === "left") { - analogWrapper.style.padding = "0 20px 0 0"; - wrapper.appendChild(analogWrapper); - wrapper.appendChild(digitalWrapper); - } else { - analogWrapper.style.padding = "0 0 0 20px"; - wrapper.appendChild(digitalWrapper); - wrapper.appendChild(analogWrapper); - } + + appendClocks("left", 1, 3); } else { digitalWrapper.style.textAlign = "center"; - if (placement === "top") { - analogWrapper.style.padding = "0 0 20px 0"; - wrapper.appendChild(analogWrapper); - wrapper.appendChild(digitalWrapper); - } else { - analogWrapper.style.padding = "20px 0 0 0"; - wrapper.appendChild(digitalWrapper); - wrapper.appendChild(analogWrapper); - } + + appendClocks("top", 2, 0); } } From 6cb3cf8747dc215109d67b44df85eeb6234e8d4c Mon Sep 17 00:00:00 2001 From: fewieden Date: Wed, 8 Feb 2017 00:05:28 +0100 Subject: [PATCH 150/257] fix indentation --- js/main.js | 36 ++++++++++++++-------------- js/module.js | 34 +++++++++++++------------- modules/default/calendar/calendar.js | 18 +++++++------- modules/default/clock/clock.js | 30 +++++++++++------------ 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/js/main.js b/js/main.js index 4e2d2d21..e1a13d8a 100644 --- a/js/main.js +++ b/js/main.js @@ -326,7 +326,7 @@ var MM = (function() { * return array - Filtered collection of modules. */ var exceptWithClass = function(className) { - return modulesByClass(className, false); + return modulesByClass(className, false); }; /* modulesByClass(className, include) @@ -338,27 +338,27 @@ var MM = (function() { * return array - Filtered collection of modules. */ var modulesByClass = function(className, include) { - var searchClasses = className; - if (typeof className === "string") { - searchClasses = className.split(" "); - } + var searchClasses = className; + if (typeof className === "string") { + searchClasses = className.split(" "); + } - var newModules = modules.filter(function(module) { - var classes = module.data.classes.toLowerCase().split(" "); + var newModules = modules.filter(function(module) { + var classes = module.data.classes.toLowerCase().split(" "); - for (var c in searchClasses) { - var searchClass = searchClasses[c]; - if (classes.indexOf(searchClass.toLowerCase()) !== -1) { - return include; - } - } + for (var c in searchClasses) { + var searchClass = searchClasses[c]; + if (classes.indexOf(searchClass.toLowerCase()) !== -1) { + return include; + } + } - return !include; - }); + return !include; + }); - setSelectionMethodsForModules(newModules); - return newModules; - }; + setSelectionMethodsForModules(newModules); + return newModules; + }; /* exceptModule(module) * Removes a module instance from the collection. diff --git a/js/module.js b/js/module.js index ffe49416..457b9772 100644 --- a/js/module.js +++ b/js/module.js @@ -203,7 +203,7 @@ var Module = Class.extend({ * argument callback function - Function called when done. */ loadStyles: function (callback) { - this.loadDependencies("getStyles", callback); + this.loadDependencies("getStyles", callback); }, /* loadScripts() @@ -221,24 +221,24 @@ var Module = Class.extend({ * argument funcName string - Function name to call to get scripts or styles. * argument callback function - Function called when done. */ - loadDependencies: function (funcName, callback) { - var self = this; - var dependencies = this[funcName](); + loadDependencies: function (funcName, callback) { + var self = this; + var dependencies = this[funcName](); - var loadNextDependency = function () { - if (dependencies.length > 0) { - var nextDependency = dependencies[0]; - Loader.loadFile(nextDependency, self, function () { - dependencies = dependencies.slice(1); - loadNextDependency(); - }); - } else { - callback(); - } - }; + var loadNextDependency = function () { + if (dependencies.length > 0) { + var nextDependency = dependencies[0]; + Loader.loadFile(nextDependency, self, function () { + dependencies = dependencies.slice(1); + loadNextDependency(); + }); + } else { + callback(); + } + }; - loadNextDependency(); - }, + loadNextDependency(); + }, /* loadScripts() * Load all required scripts by requesting the MM object to load the files. diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 70352885..19440998 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -332,7 +332,7 @@ Module.register("calendar", { * return string - The Symbol */ symbolForUrl: function (url) { - return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol); + return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol); }, /* colorForUrl(url) @@ -343,7 +343,7 @@ Module.register("calendar", { * return string - The Color */ colorForUrl: function (url) { - return this.getCalendarProperty(url, "color", "#fff"); + return this.getCalendarProperty(url, "color", "#fff"); }, /* countTitleForUrl(url) @@ -367,14 +367,14 @@ Module.register("calendar", { * return string - The Property */ getCalendarProperty: function (url, property, defaultValue) { - for (var c in this.config.calendars) { - var calendar = this.config.calendars[c]; - if (calendar.url === url && typeof calendar[property] === "string") { - return calendar[property]; - } - } + for (var c in this.config.calendars) { + var calendar = this.config.calendars[c]; + if (calendar.url === url && typeof calendar[property] === "string") { + return calendar[property]; + } + } - return defaultValue; + return defaultValue; }, /* shorten(string, maxLength) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 6824ae8f..b1439a5d 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -76,9 +76,9 @@ Module.register("clock",{ } var hourSymbol = "HH"; - if (this.config.timeFormat !== 24) { - hourSymbol = "h"; - } + if (this.config.timeFormat !== 24) { + hourSymbol = "h"; + } if (this.config.clockBold === true) { timeString = now.format(hourSymbol + "[]mm[]"); @@ -199,17 +199,17 @@ Module.register("clock",{ digitalWrapper.appendChild(timeWrapper); var appendClocks = function(condition, pos1, pos2) { - var padding = [0,0,0,0]; - padding[(placement === condition) ? pos1 : pos2] = "20px"; - analogWrapper.style.padding = padding.join(" "); - if (placement === condition) { - wrapper.appendChild(analogWrapper); - wrapper.appendChild(digitalWrapper); - } else { - wrapper.appendChild(digitalWrapper); - wrapper.appendChild(analogWrapper); - } - } + var padding = [0,0,0,0]; + padding[(placement === condition) ? pos1 : pos2] = "20px"; + analogWrapper.style.padding = padding.join(" "); + if (placement === condition) { + wrapper.appendChild(analogWrapper); + wrapper.appendChild(digitalWrapper); + } else { + wrapper.appendChild(digitalWrapper); + wrapper.appendChild(analogWrapper); + } + }; if (placement === "left" || placement === "right") { digitalWrapper.style.display = "inline-block"; @@ -220,7 +220,7 @@ Module.register("clock",{ } else { digitalWrapper.style.textAlign = "center"; - appendClocks("top", 2, 0); + appendClocks("top", 2, 0); } } From e69908abef2c9544dc73950c1056647df1e4510c Mon Sep 17 00:00:00 2001 From: fewieden Date: Wed, 8 Feb 2017 00:10:44 +0100 Subject: [PATCH 151/257] fix indentation --- modules/default/clock/clock.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index b1439a5d..e15fbbbd 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -209,7 +209,7 @@ Module.register("clock",{ wrapper.appendChild(digitalWrapper); wrapper.appendChild(analogWrapper); } - }; + }; if (placement === "left" || placement === "right") { digitalWrapper.style.display = "inline-block"; From 62e4e13f5af24774049dadd8f622ad878cf1edae Mon Sep 17 00:00:00 2001 From: "LAPTOP-KAUR\\race2" Date: Wed, 8 Feb 2017 02:33:03 +0200 Subject: [PATCH 152/257] case correction; added changelog.md entry --- CHANGELOG.md | 2 ++ translations/et.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ae626a6..eaf47b55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add `chai-as-promised` npm module to devDependencies - Basic set of tests for clock module - Run e2e test in Travis +- Estonian Translation. + ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/translations/et.json b/translations/et.json index 89b31556..2597ed7b 100644 --- a/translations/et.json +++ b/translations/et.json @@ -8,7 +8,7 @@ "EMPTY": "Pole tulevasi sündmuseid.", "N": "Põhi", - "NNE": "PõhiKirre", + "NNE": "Põhikirre", "NE": "Kirre", "ENE": "Idakirre", "E": "Ida", From cbafaf5d5614e255e6a0babf7966e262fcc612bc Mon Sep 17 00:00:00 2001 From: "LAPTOP-KAUR\\race2" Date: Wed, 8 Feb 2017 02:35:09 +0200 Subject: [PATCH 153/257] compliments,js handles remoteFile without default daytimes defined --- CHANGELOG.md | 1 + modules/default/compliments/compliments.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaf47b55..b61657d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Add `anytime` group for Compliments module. +- Compliments module can use remoteFile without default daytime arrays defined - Installer: Use init config.js from config.js.sample. - Switched out `rrule` package for `rrule-alt` and fixes in `ical.js` in order to fix calendar issues. ([#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 3cbad1a6..ad3b9e77 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -107,6 +107,8 @@ Module.register("compliments",{ compliments = this.config.compliments.evening; } + if (typeof compliments === 'undefined' ) compliments = new Array(); + if ( this.currentWeatherType in this.config.compliments) { compliments.push.apply(compliments, this.config.compliments[this.currentWeatherType]); } From 90f60f95f77236c2b58e34350781a400fa3ec411 Mon Sep 17 00:00:00 2001 From: "LAPTOP-KAUR\\race2" Date: Wed, 8 Feb 2017 19:29:52 +0200 Subject: [PATCH 154/257] formating fix so that grunt passes --- modules/default/compliments/compliments.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index ad3b9e77..b9f2011e 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -6,8 +6,7 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - -Module.register("compliments",{ +Module.register("compliments", { // Module config defaults. defaults: { @@ -97,7 +96,7 @@ Module.register("compliments",{ */ complimentArray: function() { var hour = moment().hour(); - var compliments = null; + var compliments = null; if (hour >= 3 && hour < 12) { compliments = this.config.compliments.morning; @@ -107,9 +106,11 @@ Module.register("compliments",{ compliments = this.config.compliments.evening; } - if (typeof compliments === 'undefined' ) compliments = new Array(); + if (typeof compliments === "undefined") { + compliments = new Array(); + } - if ( this.currentWeatherType in this.config.compliments) { + if (this.currentWeatherType in this.config.compliments) { compliments.push.apply(compliments, this.config.compliments[this.currentWeatherType]); } @@ -126,7 +127,7 @@ Module.register("compliments",{ var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open("GET", this.file(this.config.remoteFile), true); - xobj.onreadystatechange = function () { + xobj.onreadystatechange = function() { if (xobj.readyState == 4 && xobj.status == "200") { callback(xobj.responseText); } @@ -192,4 +193,4 @@ Module.register("compliments",{ } }, -}); +}); \ No newline at end of file From b8889c6a1fd13fc5c153d13a3bfc44231652c449 Mon Sep 17 00:00:00 2001 From: APPLEH0LIC Date: Thu, 9 Feb 2017 17:54:47 +0900 Subject: [PATCH 155/257] Update translations.js Added Korean Translation --- translations/translations.js | 1 + 1 file changed, 1 insertion(+) diff --git a/translations/translations.js b/translations/translations.js index ca5e2cec..0d12a604 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -31,6 +31,7 @@ var translations = { "hu" : "translations/hu.json", // Hungarian "is" : "translations/is.json", // Icelandic "et" : "translations/et.json", // Estonian + "kr" : "translations/kr.json", // Korean }; if (typeof module !== "undefined") {module.exports = translations;} From 49a534a61b4923d8e6723352cabeb0ed6f2a6086 Mon Sep 17 00:00:00 2001 From: APPLEH0LIC Date: Thu, 9 Feb 2017 17:56:06 +0900 Subject: [PATCH 156/257] Add kr.json file Added Korean Translation kr.json file. --- translations/kr.json | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 translations/kr.json diff --git a/translations/kr.json b/translations/kr.json new file mode 100644 index 00000000..4bfc9662 --- /dev/null +++ b/translations/kr.json @@ -0,0 +1,34 @@ +{ + /* GENERAL - 일반 */ + "LOADING": "로드 중 …", + + /* CALENDAR - 달력-일정 */ + "TODAY": "오늘", + "TOMORROW": "내일", + "DAYAFTERTOMORROW": "모레", + "RUNNING": "종료 일", + "EMPTY": "예정된 이벤트가 없습니다.", + + /* WEATHER - 날시 */ + "N": "북풍", + "NNE": "북북동풍", + "NE": "북동풍", + "ENE": "동북동풍", + "E": "동풍", + "ESE": "동남동풍", + "SE": "남동풍", + "SSE": "남남동풍", + "S": "남풍", + "SSW": "남남서풍", + "SW": "남서풍", + "WSW": "서남서풍", + "W": "서풍", + "WNW": "서북서풍", + "NW": "북서풍", + "NNW": "북북서풍", + + /* UPDATE INFO - 업데이트 정보 */ + "UPDATE_NOTIFICATION": "새로운 MagicMirror² 업데이트가 있습니다.", + "UPDATE_NOTIFICATION_MODULE": "MODULE_NAME 모듈에서 사용 가능한 업데이트 입니다.", + "UPDATE_INFO": "설치할 COMMIT_COUNT 는 BRANCH_NAME 분기에 해당됩니다." +} From 1ccf74bca1607d2be87bc9e190846f5357640ab2 Mon Sep 17 00:00:00 2001 From: APPLEH0LIC Date: Thu, 9 Feb 2017 17:56:56 +0900 Subject: [PATCH 157/257] Update CHANGELOG.md added Korean Translation. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0204550d..e2652931 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Run e2e test in Travis - Estonian Translation. - Add test for compliments module for parts of day +- Korean Translation. ### Fixed From 64b34e98c7dc9bd92c515df7829f556986e839d1 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Thu, 9 Feb 2017 13:28:20 +0100 Subject: [PATCH 158/257] Remove comments. --- translations/kr.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/translations/kr.json b/translations/kr.json index 4bfc9662..e998d97f 100644 --- a/translations/kr.json +++ b/translations/kr.json @@ -1,15 +1,12 @@ { - /* GENERAL - 일반 */ "LOADING": "로드 중 …", - /* CALENDAR - 달력-일정 */ "TODAY": "오늘", "TOMORROW": "내일", "DAYAFTERTOMORROW": "모레", "RUNNING": "종료 일", "EMPTY": "예정된 이벤트가 없습니다.", - /* WEATHER - 날시 */ "N": "북풍", "NNE": "북북동풍", "NE": "북동풍", @@ -27,7 +24,6 @@ "NW": "북서풍", "NNW": "북북서풍", - /* UPDATE INFO - 업데이트 정보 */ "UPDATE_NOTIFICATION": "새로운 MagicMirror² 업데이트가 있습니다.", "UPDATE_NOTIFICATION_MODULE": "MODULE_NAME 모듈에서 사용 가능한 업데이트 입니다.", "UPDATE_INFO": "설치할 COMMIT_COUNT 는 BRANCH_NAME 분기에 해당됩니다." From f914b728ff557e1b342f3803b559dd73a5afd4c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 9 Feb 2017 13:27:22 -0300 Subject: [PATCH 159/257] add note for pull request about update develop branch --- .github/PULL_REQUEST_TEMPLATE.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index acecd6f9..1462d111 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,13 @@ > Please send your pull requests the develop branch. > Don't forget to add the change to CHANGELOG.md. +**Note**: Sometimes the development moves very fast. It is highly +recommended that you update your branch of `develop` before creating a +pull request to send us your changes. This makes everyone's lives +easier (including yours) and helps us out on the development team. +Thanks! + + * Does the pull request solve a **related** issue? * If so, can you reference the issue? * What does the pull request accomplish? Use a list if needed. From 5fc16bdbfb479f356d68d1050558132e0d27dbd8 Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Sat, 11 Feb 2017 13:41:00 +0100 Subject: [PATCH 160/257] Fix sabado in clock_es_spec.js test Fixes #712 --- tests/e2e/modules/clock_es_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js index 72aee74c..54e0b278 100644 --- a/tests/e2e/modules/clock_es_spec.js +++ b/tests/e2e/modules/clock_es_spec.js @@ -39,7 +39,7 @@ describe("Clock set to spanish language module", function () { }); it("shows date with correct format", function () { - const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sabado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; return app.client.waitUntilWindowLoaded() .getText(".clock .date").should.eventually.match(dateRegex); }); @@ -66,7 +66,7 @@ describe("Clock set to spanish language module", function () { }); it("shows date with correct format", function () { - const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sabado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; return app.client.waitUntilWindowLoaded() .getText(".clock .date").should.eventually.match(dateRegex); }); From 9064769185c4f2686ef699036c3263c4b2e0bbdf Mon Sep 17 00:00:00 2001 From: Chris van Marle Date: Tue, 7 Feb 2017 22:29:51 +0100 Subject: [PATCH 161/257] Check for dev console --- tests/e2e/dev_console.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index de9a7c02..65837844 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -1,6 +1,7 @@ const Application = require("spectron").Application; const path = require("path"); const chai = require("chai"); +const expect = chai.expect; const chaiAsPromised = require("chai-as-promised"); var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); @@ -36,8 +37,7 @@ describe("Argument 'dev'", function () { app.args = [appPath]; return app.start().then(function() { - return app.client.waitUntilWindowLoaded() - .getWindowCount().should.eventually.equal(1); + return expect(app.browserWindow.isDevToolsOpened()).to.eventually.equal(false); }); }); @@ -45,8 +45,7 @@ describe("Argument 'dev'", function () { app.args = [appPath, "dev"]; return app.start().then(function() { - return app.client.waitUntilWindowLoaded() - .getWindowCount().should.eventually.equal(2); + return expect(app.browserWindow.isDevToolsOpened()).to.eventually.equal(true); }); }); }); From fb754f9bc76464ed43d6be575dc44a56bd2b7a5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 11 Feb 2017 19:34:43 -0300 Subject: [PATCH 162/257] fixed minor word mistake --- modules/default/calendar/calendar.js | 6 +++--- modules/node_modules/node_helper/index.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 19440998..644fc1f6 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -262,7 +262,7 @@ Module.register("calendar", { /* hasCalendarURL(url) * Check if this config contains the calendar url. * - * argument url sting - Url to look for. + * argument url string - Url to look for. * * return bool - Has calendar url */ @@ -311,7 +311,7 @@ Module.register("calendar", { /* createEventList(url) * Requests node helper to add calendar url. * - * argument url sting - Url to add. + * argument url string - Url to add. */ addCalendar: function (url, user, pass, calendarConfig) { this.sendSocketNotification("ADD_CALENDAR", { @@ -378,7 +378,7 @@ Module.register("calendar", { }, /* shorten(string, maxLength) - * Shortens a sting if it's longer than maxLenthg. + * Shortens a string if it's longer than maxLenthg. * Adds an ellipsis to the end. * * argument string string - The string to shorten. diff --git a/modules/node_modules/node_helper/index.js b/modules/node_modules/node_helper/index.js index bdeccf8b..8d0372bd 100644 --- a/modules/node_modules/node_helper/index.js +++ b/modules/node_modules/node_helper/index.js @@ -26,7 +26,7 @@ NodeHelper = Class.extend({ /* socketNotificationReceived(notification, payload) * This method is called when a socket notification arrives. * - * argument notification string - The identifier of the noitication. + * argument notification string - The identifier of the notification. * argument payload mixed - The payload of the notification. */ socketNotificationReceived: function(notification, payload) { @@ -54,7 +54,7 @@ NodeHelper = Class.extend({ /* sendSocketNotification(notification, payload) * Send a socket notification to the node helper. * - * argument notification string - The identifier of the noitication. + * argument notification string - The identifier of the notification. * argument payload mixed - The payload of the notification. */ sendSocketNotification: function(notification, payload) { From fd9963e7eb6ef5c269079a0df97599857f680cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Feb 2017 02:19:38 -0300 Subject: [PATCH 163/257] Testing default modules --- tests/configs/without_modules.js | 23 +++++++++++ tests/e2e/without_modules.js | 68 ++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 tests/configs/without_modules.js create mode 100644 tests/e2e/without_modules.js diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js new file mode 100644 index 00000000..921e71d7 --- /dev/null +++ b/tests/configs/without_modules.js @@ -0,0 +1,23 @@ +/* Magic Mirror Test default config for modules + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + } + +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/without_modules.js b/tests/e2e/without_modules.js new file mode 100644 index 00000000..828891ba --- /dev/null +++ b/tests/e2e/without_modules.js @@ -0,0 +1,68 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + + + +describe("Check configuration without modules", function () { + this.timeout(20000); + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/without_modules.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("Show the message MagicMirror title", function () { + return app.client.waitUntilWindowLoaded() + .getText("#module_1_helloworld .module-content").should.eventually.equal("Magic Mirror2") + }); + + it("Show the message create file config", function () { + return app.client.waitUntilWindowLoaded() + .getText("#module_2_helloworld .module-content").should.eventually.equal("Please create a config file.") + }); + + it("Show the message See more information in README", function () { + return app.client.waitUntilWindowLoaded() + .getText("#module_3_helloworld .module-content").should.eventually.equal("See README for more information.") + }); + + it("Show the message recomended use a linter for Javascript for check configuration", function () { + return app.client.waitUntilWindowLoaded() + .getText("#module_4_helloworld .module-content").should.eventually.equal("If you get this message while your config file is already\ncreated, your config file probably contains an error.\nUse a JavaScript linter to validate your file.") + }); + + it("Show the text Michael's website", function () { + return app.client.waitUntilWindowLoaded() + .getText("#module_5_helloworld .module-content").should.eventually.equal("www.michaelteeuw.nl"); + }); + +}); + From 8bda91aafbe6e2e0835e1c33181a1a1c72dce557 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 12 Feb 2017 13:06:11 -0300 Subject: [PATCH 164/257] Prevent crash system if cannot load a js script or style sheet. --- js/loader.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/js/loader.js b/js/loader.js index 0c7c643a..42b42952 100644 --- a/js/loader.js +++ b/js/loader.js @@ -186,6 +186,11 @@ var Loader = (function() { script.onload = function() { if (typeof callback === "function") {callback();} }; + script.onerror = function() { + console.error("Error on loading script:", fileName); + if (typeof callback === "function") {callback();} + }; + document.getElementsByTagName("body")[0].appendChild(script); break; case "css": @@ -197,6 +202,11 @@ var Loader = (function() { stylesheet.onload = function() { if (typeof callback === "function") {callback();} }; + stylesheet.onerror = function() { + console.error("Error on loading stylesheet:", fileName); + if (typeof callback === "function") {callback();} + }; + document.getElementsByTagName("head")[0].appendChild(stylesheet); break; } From 1d024cc339c92fb79a03be731451915cccc19de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 12 Feb 2017 13:29:36 -0300 Subject: [PATCH 165/257] remove extra spaces alert README --- modules/default/alert/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 58be0570..3abf2fcd 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -10,7 +10,7 @@ modules: [ module: "alert", config: { // The config property is optional. - // See 'Configuration options' for more information. + // See 'Configuration options' for more information. } } ] @@ -34,12 +34,12 @@ The following properties can be configured: For notifications use: ``` -self.sendNotification("SHOW_ALERT", {type: "notification"}); +self.sendNotification("SHOW_ALERT", {type: "notification"}); ``` For alerts use: ``` -self.sendNotification("SHOW_ALERT", {}); +self.sendNotification("SHOW_ALERT", {}); ``` ### Notification params From e62df3b3b18cc98b65656194fa5baa53b9110fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 12 Feb 2017 15:36:18 -0300 Subject: [PATCH 166/257] Increment timeout e2e test to 20000 ms --- tests/e2e/dev_console.js | 2 +- tests/e2e/env_spec.js | 2 +- tests/e2e/modules/clock_es_spec.js | 2 +- tests/e2e/modules/clock_spec.js | 2 +- tests/e2e/modules/compliments_spec.js | 2 +- tests/e2e/modules/helloworld_spec.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 65837844..b430e9e4 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -22,7 +22,7 @@ global.before(function () { }); describe("Argument 'dev'", function () { - this.timeout(10000); + this.timeout(20000); before(function() { // Set config sample for use in test diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 77cd418b..4a6bbaef 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -22,7 +22,7 @@ global.before(function () { }); describe("Electron app environment", function () { - this.timeout(10000); + this.timeout(20000); before(function() { // Set config sample for use in test diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js index 54e0b278..4b44d9e7 100644 --- a/tests/e2e/modules/clock_es_spec.js +++ b/tests/e2e/modules/clock_es_spec.js @@ -22,7 +22,7 @@ global.before(function () { }); describe("Clock set to spanish language module", function () { - this.timeout(10000); + this.timeout(20000); describe("with default 24hr clock config", function() { before(function() { diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index f93d9a9d..e2f5cd27 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -22,7 +22,7 @@ global.before(function () { }); describe("Clock module", function () { - this.timeout(10000); + this.timeout(20000); describe("with default 24hr clock config", function() { before(function() { diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 15790177..794ed400 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -23,7 +23,7 @@ global.before(function () { }); describe("Compliments module", function () { - this.timeout(10000); + this.timeout(20000); describe("parts of days", function() { before(function() { diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js index fc3b3291..d567edad 100644 --- a/tests/e2e/modules/helloworld_spec.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -22,7 +22,7 @@ global.before(function () { }); describe("Test helloworld module", function () { - this.timeout(10000); + this.timeout(20000); before(function() { // Set config sample for use in test From f5595dd4c3d34baa43144276a6569f90a60e9253 Mon Sep 17 00:00:00 2001 From: slametps Date: Fri, 17 Feb 2017 13:45:29 +0700 Subject: [PATCH 167/257] added Indonesian translation added Indonesian translation --- translations/id.json | 30 ++++++++++++++++++++++++++++++ translations/translations.js | 1 + 2 files changed, 31 insertions(+) create mode 100644 translations/id.json diff --git a/translations/id.json b/translations/id.json new file mode 100644 index 00000000..f144e959 --- /dev/null +++ b/translations/id.json @@ -0,0 +1,30 @@ +{ + "LOADING": "Memuat …", + + "TODAY": "Hari ini", + "TOMORROW": "Besok", + "DAYAFTERTOMORROW": "Lusa", + "RUNNING": "Berakhir dalam", + "EMPTY": "Tidak ada agenda.", + + "N": "U", + "NNE": "UUT", + "NE": "NE", + "ENE": "TUT", + "E": "T", + "ESE": "TST", + "SE": "ST", + "SSE": "SST", + "S": "S", + "SSW": "SSB", + "SW": "SB", + "WSW": "BSB", + "W": "B", + "WNW": "BUB", + "NW": "UB", + "NNW": "UUB", + + "UPDATE_NOTIFICATION": "Update MagicMirror² tersedia.", + "UPDATE_NOTIFICATION_MODULE": "Update tersedia untuk modul MODULE_NAME.", + "UPDATE_INFO": "Instalasi saat ini tertinggal COMMIT_COUNT pada cabang BRANCH_NAME." +} diff --git a/translations/translations.js b/translations/translations.js index 0d12a604..8441ed8e 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -18,6 +18,7 @@ var translations = { "pt" : "translations/pt.json", // Português "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska + "id" : "translations/id.json", // Indonesian "it" : "translations/it.json", // Italian "zh_cn" : "translations/zh_cn.json", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese From 1a296a8ca12af38154201336ba30a23ee90451ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 18 Feb 2017 23:38:39 -0300 Subject: [PATCH 168/257] Test anytime compliments module. feature introduced 79c79146a5df730cb8e8eee1cc1008639a2c21c7 --- .../compliments/compliments_anytime.js | 38 +++++++++++++++++++ tests/e2e/modules/compliments_spec.js | 23 +++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/configs/modules/compliments/compliments_anytime.js diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js new file mode 100644 index 00000000..06878f52 --- /dev/null +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -0,0 +1,38 @@ +/* Magic Mirror Test config compliments with anytime type + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "compliments", + position: "middle_center", + config: { + compliments: { + morning: ["Good Morning"], + afternoon: ["Good Afternoon"], + evening: ["Good Evening"], + anytime: ["Anytime here"] + + } + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 794ed400..f2840f9d 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -75,4 +75,27 @@ describe("Compliments module", function () { }); + + describe("Tests anytime for compliments", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_anytime.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("Show anytime or parts of day compliments", function () { + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Good Morning", "Good Evening", "Good Afternoon", "Anytime here"]); + }) + }); + }); + }); From 692ddc60c7ce5b1121bf802ee1b7bb949f62d8a3 Mon Sep 17 00:00:00 2001 From: slametps Date: Sun, 19 Feb 2017 22:23:16 +0700 Subject: [PATCH 169/257] remove period remove period --- translations/id.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/id.json b/translations/id.json index f144e959..a311f960 100644 --- a/translations/id.json +++ b/translations/id.json @@ -5,7 +5,7 @@ "TOMORROW": "Besok", "DAYAFTERTOMORROW": "Lusa", "RUNNING": "Berakhir dalam", - "EMPTY": "Tidak ada agenda.", + "EMPTY": "Tidak ada agenda", "N": "U", "NNE": "UUT", From 75c4ca77c22c981205e022b5251ccfb7cf601c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Feb 2017 19:57:21 -0300 Subject: [PATCH 170/257] Update socket.io to 1.7.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d8c10032..e687ecb8 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "request": "^2.78.0", "rrule-alt": "^2.2.3", "simple-git": "^1.62.0", - "socket.io": "^1.5.1", + "socket.io": "^1.7.3", "valid-url": "latest", "walk": "latest" } From b3fd01fe044531f1102014f3c75d4e5d011dbea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Feb 2017 20:02:31 -0300 Subject: [PATCH 171/257] Add version Node 7 in travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0727182b..5f6f2821 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: node_js node_js: + - "7" - "6" - "5.1" before_script: From 3773d402014893d62b5663d5dda7c9a6382d85a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Feb 2017 21:06:38 -0300 Subject: [PATCH 172/257] Refactoring some e2e tests. Now is use a global-setup instead of repeat repeat code to setup tests enviroment. --- tests/e2e/env_spec.js | 24 ++----------------- tests/e2e/global-setup.js | 34 +++++++++++++++++++++++++++ tests/e2e/modules/clock_es_spec.js | 24 ++----------------- tests/e2e/modules/clock_spec.js | 24 ++----------------- tests/e2e/modules/compliments_spec.js | 23 ++---------------- tests/e2e/modules/helloworld_spec.js | 24 ++----------------- 6 files changed, 44 insertions(+), 109 deletions(-) create mode 100644 tests/e2e/global-setup.js diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 4a6bbaef..99a7f657 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,25 +1,5 @@ -const Application = require("spectron").Application; -const path = require("path"); -const chai = require("chai"); -const chaiAsPromised = require("chai-as-promised"); - -var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); - -if (process.platform === "win32") { - electronPath += ".cmd"; -} - -var appPath = path.join(__dirname, "../../js/electron.js"); - -var app = new Application({ - path: electronPath, - args: [appPath] -}); - -global.before(function () { - chai.should(); - chai.use(chaiAsPromised); -}); +const globalSetup = require("./global-setup"); +const app = globalSetup.app; describe("Electron app environment", function () { this.timeout(20000); diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js new file mode 100644 index 00000000..7b94ec40 --- /dev/null +++ b/tests/e2e/global-setup.js @@ -0,0 +1,34 @@ +/* + * Magic Mirror + * + * Global Setup Test Suite + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + * +*/ + +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +exports.app = app; diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js index 4b44d9e7..f90263cf 100644 --- a/tests/e2e/modules/clock_es_spec.js +++ b/tests/e2e/modules/clock_es_spec.js @@ -1,25 +1,5 @@ -const Application = require("spectron").Application; -const path = require("path"); -const chai = require("chai"); -const chaiAsPromised = require("chai-as-promised"); - -var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); - -if (process.platform === "win32") { - electronPath += ".cmd"; -} - -var appPath = path.join(__dirname, "../../../js/electron.js"); - -var app = new Application({ - path: electronPath, - args: [appPath] -}); - -global.before(function () { - chai.should(); - chai.use(chaiAsPromised); -}); +const globalSetup = require("../global-setup"); +const app = globalSetup.app; describe("Clock set to spanish language module", function () { this.timeout(20000); diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index e2f5cd27..8c6d9ff6 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -1,25 +1,5 @@ -const Application = require("spectron").Application; -const path = require("path"); -const chai = require("chai"); -const chaiAsPromised = require("chai-as-promised"); - -var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); - -if (process.platform === "win32") { - electronPath += ".cmd"; -} - -var appPath = path.join(__dirname, "../../../js/electron.js"); - -var app = new Application({ - path: electronPath, - args: [appPath] -}); - -global.before(function () { - chai.should(); - chai.use(chaiAsPromised); -}); +const globalSetup = require("../global-setup"); +const app = globalSetup.app; describe("Clock module", function () { this.timeout(20000); diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 794ed400..c09a9068 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,26 +1,7 @@ -const Application = require("spectron").Application; -const path = require("path"); +const globalSetup = require("../global-setup"); +const app = globalSetup.app; const chai = require("chai"); const expect = chai.expect; -const chaiAsPromised = require("chai-as-promised"); - -var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); - -if (process.platform === "win32") { - electronPath += ".cmd"; -} - -var appPath = path.join(__dirname, "../../../js/electron.js"); - -var app = new Application({ - path: electronPath, - args: [appPath] -}); - -global.before(function () { - chai.should(); - chai.use(chaiAsPromised); -}); describe("Compliments module", function () { this.timeout(20000); diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js index d567edad..f956effb 100644 --- a/tests/e2e/modules/helloworld_spec.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -1,25 +1,5 @@ -const Application = require("spectron").Application; -const path = require("path"); -const chai = require("chai"); -const chaiAsPromised = require("chai-as-promised"); - -var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); - -if (process.platform === "win32") { - electronPath += ".cmd"; -} - -var appPath = path.join(__dirname, "../../../js/electron.js"); - -var app = new Application({ - path: electronPath, - args: [appPath] -}); - -global.before(function () { - chai.should(); - chai.use(chaiAsPromised); -}); +const globalSetup = require("../global-setup"); +const app = globalSetup.app; describe("Test helloworld module", function () { this.timeout(20000); From 97ab88b39a36b6704bfcc7b87c106fa5625825f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 20 Feb 2017 01:52:07 -0300 Subject: [PATCH 173/257] Modified test compliments anytime this follow configuration: { morning: [], afternoon: [], evening: [], anytime: ["Anytime here"] } --- tests/configs/modules/compliments/compliments_anytime.js | 6 +++--- tests/e2e/modules/compliments_spec.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 06878f52..1d2818bc 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -23,9 +23,9 @@ var config = { position: "middle_center", config: { compliments: { - morning: ["Good Morning"], - afternoon: ["Good Afternoon"], - evening: ["Good Evening"], + morning: [], + afternoon: [], + evening: [], anytime: ["Anytime here"] } diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index f2840f9d..d71b07c6 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -90,10 +90,10 @@ describe("Compliments module", function () { app.stop().then(function() { done(); }); }); - it("Show anytime or parts of day compliments", function () { + it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function () { return app.client.waitUntilWindowLoaded() .getText(".compliments").then(function (text) { - expect(text).to.be.oneOf(["Good Morning", "Good Evening", "Good Afternoon", "Anytime here"]); + expect(text).to.be.oneOf(["Anytime here"]); }) }); }); From 474695643f714d7638127d6dc538d9778ff00d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 20 Feb 2017 04:59:15 -0300 Subject: [PATCH 174/257] Second test case anytime feature module compliments Suggested by @fewieden PL #725 --- .../compliments/compliments_only_anytime.js | 35 ++++++++++++++++ tests/e2e/modules/compliments_spec.js | 40 ++++++++++++++----- 2 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 tests/configs/modules/compliments/compliments_only_anytime.js diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js new file mode 100644 index 00000000..f0189652 --- /dev/null +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -0,0 +1,35 @@ +/* Magic Mirror Test config compliments with anytime type + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "compliments", + position: "middle_center", + config: { + compliments: { + anytime: ["Anytime here"] + + } + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 972d4c3b..f82cd89d 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -57,11 +57,7 @@ describe("Compliments module", function () { }); - describe("Tests anytime for compliments", function() { - before(function() { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_anytime.js"; - }); + describe("Feature anytime in compliments module", function() { beforeEach(function (done) { app.start().then(function() { done(); } ); @@ -71,12 +67,36 @@ describe("Compliments module", function () { app.stop().then(function() { done(); }); }); - it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function () { - return app.client.waitUntilWindowLoaded() - .getText(".compliments").then(function (text) { - expect(text).to.be.oneOf(["Anytime here"]); - }) + + describe("Set anytime and empty compliments for morning, evening and afternoon ", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_anytime.js"; + }); + + it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function () { + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Anytime here"]); + }) + }); }); + + describe("Only anytime present in configuration compliments", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_only_anytime.js"; + }); + + it("Show anytime compliments", function () { + return app.client.waitUntilWindowLoaded() + .getText(".compliments").then(function (text) { + expect(text).to.be.oneOf(["Anytime here"]); + }) + }); + }); + + }); }); From 5af2768d33f4132dd405cf6945cb8dcfc93e7aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 20 Feb 2017 05:25:16 -0300 Subject: [PATCH 175/257] refactor afterEach and beforeEach compliments_spec --- tests/e2e/modules/compliments_spec.js | 29 ++++++++++----------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index f82cd89d..0dd2c411 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -6,21 +6,23 @@ const expect = chai.expect; describe("Compliments module", function () { this.timeout(20000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + describe("parts of days", function() { + before(function() { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_parts_day.js"; }); - beforeEach(function (done) { - app.start().then(function() { done(); } ); - }); - - afterEach(function (done) { - app.stop().then(function() { done(); }); - }); - - it("if Morning compliments for that part of day", function () { var hour = new Date().getHours(); if (hour >= 3 && hour < 12) { @@ -59,15 +61,6 @@ describe("Compliments module", function () { describe("Feature anytime in compliments module", function() { - beforeEach(function (done) { - app.start().then(function() { done(); } ); - }); - - afterEach(function (done) { - app.stop().then(function() { done(); }); - }); - - describe("Set anytime and empty compliments for morning, evening and afternoon ", function() { before(function() { // Set config sample for use in test From ab226d16c8f8bba0fcf3421fa966e23d266c6ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 20 Feb 2017 20:32:12 -0300 Subject: [PATCH 176/257] refactor code for include multiples routes on js/server.js --- js/server.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/js/server.js b/js/server.js index 36cfe8d2..901e0350 100644 --- a/js/server.js +++ b/js/server.js @@ -31,13 +31,12 @@ var Server = function(config, callback) { app.use(helmet()); app.use("/js", express.static(__dirname)); - app.use("/config", express.static(path.resolve(global.root_path + "/config"))); - app.use("/css", express.static(path.resolve(global.root_path + "/css"))); - app.use("/fonts", express.static(path.resolve(global.root_path + "/fonts"))); - app.use("/modules", express.static(path.resolve(global.root_path + "/modules"))); - app.use("/vendor", express.static(path.resolve(global.root_path + "/vendor"))); - app.use("/translations", express.static(path.resolve(global.root_path + "/translations"))); - app.use("/tests/configs", express.static(path.resolve(global.root_path + "/tests/configs"))); + var directories = ["/config", "/css", "/fonts", "/modules", "/vendor", "/translations", "/tests/configs"]; + var directory; + for (i in directories) { + directory = directories[i]; + app.use(directory, express.static(path.resolve(global.root_path + directory))); + } app.get("/version", function(req,res) { res.send(global.version); From 27253c360b670b8e9e973e25b823aa1bdf6ed44c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 21 Feb 2017 19:03:39 -0300 Subject: [PATCH 177/257] fix format kiosk mode options setted in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a94a7db5..9cadb364 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ The following properties can be configured: | `timeFormat` | The form of time notation that will be used. Possible values are `12` or `24`. The default is `24`. | | `units` | The units that will be used in the default weather modules. Possible values are `metric` or `imperial`. The default is `metric`. | | `modules` | An array of active modules. **The array must contain objects. See the next table below for more information.** | -| `electronOptions` | An optional array of Electron (browser) options. This allows configuration of e.g. the browser screen size and position (example: `electronOptions: { fullscreen: false, width: 800, height: 600 }`). Kiosk mode can be enabled by setting `.kiosk = true`, `.autoHideMenuBar = false`, `.fullscreen = false`. More options can be found [here](https://github.com/electron/electron/blob/master/docs/api/browser-window.md). | +| `electronOptions` | An optional array of Electron (browser) options. This allows configuration of e.g. the browser screen size and position (example: `electronOptions: { fullscreen: false, width: 800, height: 600 }`). Kiosk mode can be enabled by setting `kiosk = true`, `autoHideMenuBar = false` and `fullscreen = false`. More options can be found [here](https://github.com/electron/electron/blob/master/docs/api/browser-window.md). | Module configuration: From db0b663a3dbad2d4bcb1fa8a5e0a9eca0b277341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 21 Feb 2017 19:28:53 -0300 Subject: [PATCH 178/257] Put file deprecated into js directory Request in Pull Request #569 Initial work by @olexs --- CHANGELOG.md | 2 +- config/.gitignore | 1 - js/app.js | 8 ++++++-- {config => js}/deprecated.js | 10 ++++++---- 4 files changed, 13 insertions(+), 8 deletions(-) rename {config => js}/deprecated.js (52%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56bd5fc1..1138da27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Estonian Translation. - Add test for compliments module for parts of day - Korean Translation. +- Added console warning on startup when deprecated config options are used ### Fixed @@ -92,7 +93,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added ability to configure electronOptions - Calendar module: option to hide private events - Add root_path for global vars -- Added console warning on startup when deprecated config options are used ### Updated - Modified translations for Frysk. diff --git a/config/.gitignore b/config/.gitignore index daeb6336..d85e3bd4 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -1,3 +1,2 @@ * !config.js.sample -!deprecated.js diff --git a/js/app.js b/js/app.js index 792b9047..5582df58 100644 --- a/js/app.js +++ b/js/app.js @@ -79,7 +79,7 @@ var App = function() { }; var checkDeprecatedOptions = function(userConfig) { - var deprecatedOptions = require(__dirname + "/../config/deprecated.js"); + var deprecatedOptions = require(global.root_path + "/js/deprecated.js").configs; var usedDeprecated = []; deprecatedOptions.forEach(function(option) { @@ -89,7 +89,11 @@ var App = function() { }); if (usedDeprecated.length > 0) { - console.error("WARNING! Your config is using deprecated options: " + usedDeprecated.join(", ") + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality."); + console.warn( + "WARNING! Your config is using deprecated options: ", + usedDeprecated.join(", "), + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality." + ); } } diff --git a/config/deprecated.js b/js/deprecated.js similarity index 52% rename from config/deprecated.js rename to js/deprecated.js index cf305582..8632d775 100644 --- a/config/deprecated.js +++ b/js/deprecated.js @@ -2,11 +2,13 @@ * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. + * + * Olex S. original idea this deprecated option */ -var deprecated = [ - 'kioskmode' -]; +var deprecated = { + configs: ["kioskmode"] +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== 'undefined') {module.exports = deprecated;} +if (typeof module !== "undefined") {module.exports = deprecated;} From bd0da63f4c9d9222f0423efa4b14f4869e0c62a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 21 Feb 2017 20:21:46 -0300 Subject: [PATCH 179/257] use colors for warning message in deprecated options --- js/app.js | 12 +++++++----- js/deprecated.js | 5 ++++- package.json | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/js/app.js b/js/app.js index 5582df58..9c1ef74d 100644 --- a/js/app.js +++ b/js/app.js @@ -79,7 +79,9 @@ var App = function() { }; var checkDeprecatedOptions = function(userConfig) { - var deprecatedOptions = require(global.root_path + "/js/deprecated.js").configs; + var deprecated = require(global.root_path + "/js/deprecated.js"); + var deprecatedOptions = deprecated.configs; + var usedDeprecated = []; deprecatedOptions.forEach(function(option) { @@ -89,10 +91,10 @@ var App = function() { }); if (usedDeprecated.length > 0) { - console.warn( - "WARNING! Your config is using deprecated options: ", - usedDeprecated.join(", "), - ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality." + console.warn(deprecated.colors.warn( + "WARNING! Your config is using deprecated options: " + + usedDeprecated.join(", ") + + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality.") ); } } diff --git a/js/deprecated.js b/js/deprecated.js index 8632d775..5df1d71f 100644 --- a/js/deprecated.js +++ b/js/deprecated.js @@ -5,9 +5,12 @@ * * Olex S. original idea this deprecated option */ +var colors = require("colors/safe"); +colors.setTheme({warn: "yellow"}) var deprecated = { - configs: ["kioskmode"] + configs: ["kioskmode"], + colors: colors }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/package.json b/package.json index e687ecb8..704f8394 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "time-grunt": "latest" }, "dependencies": { + "colors": "^1.1.2", "electron": "^1.4.7", "express": "^4.14.0", "express-ipfilter": "latest", From 365bc900b0323dec2ae872d8b496918a07d03040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 24 Feb 2017 18:52:33 -0300 Subject: [PATCH 180/257] Add more information and tag FIXME on Hotfix code --- js/app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/app.js b/js/app.js index 57035541..c21935ea 100644 --- a/js/app.js +++ b/js/app.js @@ -21,7 +21,8 @@ if (process.env.MM_CONFIG_FILE) { global.configuration_file = process.env.MM_CONFIG_FILE; } -//Hotfix PullRequest #673 +// FIXME: Hotfix Pull Request +// https://github.com/MichMich/MagicMirror/pull/673 if (process.env.MM_PORT) { global.mmPort = process.env.MM_PORT; } From ddff2b2982f93ecfa6e316c824a4b723895e4951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 28 Feb 2017 01:41:21 -0300 Subject: [PATCH 181/257] Move colors into utils file --- js/app.js | 4 ++-- js/deprecated.js | 3 --- js/utils.js | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 js/utils.js diff --git a/js/app.js b/js/app.js index 43cbc5c9..6c1f6ea2 100644 --- a/js/app.js +++ b/js/app.js @@ -7,6 +7,7 @@ var fs = require("fs"); var Server = require(__dirname + "/server.js"); +var Utils = require(__dirname + "/utils.js"); var defaultModules = require(__dirname + "/../modules/default/defaultmodules.js"); var path = require("path"); @@ -90,9 +91,8 @@ var App = function() { usedDeprecated.push(option); } }); - if (usedDeprecated.length > 0) { - console.warn(deprecated.colors.warn( + console.warn(Utils.colors.warn( "WARNING! Your config is using deprecated options: " + usedDeprecated.join(", ") + ". Check README and CHANGELOG for more up-to-date ways of getting the same functionality.") diff --git a/js/deprecated.js b/js/deprecated.js index 5df1d71f..96f081cd 100644 --- a/js/deprecated.js +++ b/js/deprecated.js @@ -5,12 +5,9 @@ * * Olex S. original idea this deprecated option */ -var colors = require("colors/safe"); -colors.setTheme({warn: "yellow"}) var deprecated = { configs: ["kioskmode"], - colors: colors }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 00000000..7f548afa --- /dev/null +++ b/js/utils.js @@ -0,0 +1,17 @@ +/* exported Utils */ +/* Magic Mirror + * Utils + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var colors = require("colors/safe"); + +var Utils = { + colors: { + warn: colors.yellow + } +}; + +if (typeof module !== "undefined") {module.exports = Utils;} From 16499d2fb81a30d8e678a8fc3d5cb2e81a726abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 1 Mar 2017 22:12:09 -0300 Subject: [PATCH 182/257] Use JSON format for configuration pm2 control process file on installer file. Also, add to validate format on Gruntfile --- Gruntfile.js | 3 ++- installers/pm2_MagicMirror.json | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 5aa68811..97cb1902 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -24,7 +24,8 @@ module.exports = function(grunt) { }, jsonlint: { main: { - src: ["package.json", ".eslintrc.json", ".stylelintrc", "translations/*.json", "modules/default/*/translations/*.json"], + src: ["package.json", ".eslintrc.json", ".stylelintrc", "translations/*.json", + "modules/default/*/translations/*.json", "installers/pm2_MagicMirror.json"], options: { reporter: "jshint" } diff --git a/installers/pm2_MagicMirror.json b/installers/pm2_MagicMirror.json index 3f0b27bd..3f905020 100644 --- a/installers/pm2_MagicMirror.json +++ b/installers/pm2_MagicMirror.json @@ -1,7 +1,7 @@ { - apps : [{ - name : "MagicMirror", - script : "/home/pi/MagicMirror/installers/mm.sh", - watch : ["/home/pi/MagicMirror/config/config.js"] + "apps" : [{ + "name" : "MagicMirror", + "script" : "/home/pi/MagicMirror/installers/mm.sh", + "watch" : ["/home/pi/MagicMirror/config/config.js"] }] } From db444f5d7ea7e897c19761e29ac17458161f7afc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 2 Mar 2017 09:22:32 -0300 Subject: [PATCH 183/257] Fix format comments on installer script --- installers/raspberry.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/installers/raspberry.sh b/installers/raspberry.sh index 718f78b6..2df89a5f 100644 --- a/installers/raspberry.sh +++ b/installers/raspberry.sh @@ -21,10 +21,10 @@ echo -e "\e[0m" # Define the tested version of Node.js. NODE_TESTED="v5.1.0" -#Determine which Pi is running. +# Determine which Pi is running. ARM=$(uname -m) -#Check the Raspberry Pi version. +# Check the Raspberry Pi version. if [ "$ARM" != "armv7l" ]; then echo -e "\e[91mSorry, your Raspberry Pi is not supported." echo -e "\e[91mPlease run MagicMirror on a Raspberry Pi 2 or 3." @@ -32,7 +32,7 @@ if [ "$ARM" != "armv7l" ]; then exit; fi -#define helper methods. +# Define helper methods. function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; } function command_exists () { type "$1" &> /dev/null ;} @@ -56,8 +56,8 @@ if command_exists node; then echo -e "\e[96mNode should be upgraded.\e[0m" NODE_INSTALL=true - #Check if a node process is currenlty running. - #If so abort installation. + # Check if a node process is currenlty running. + # If so abort installation. if pgrep "node" > /dev/null; then echo -e "\e[91mA Node process is currently running. Can't upgrade." echo "Please quit all Node processes and restart the installer." @@ -78,9 +78,9 @@ if $NODE_INSTALL; then echo -e "\e[96mInstalling Node.js ...\e[90m" - #Fetch the latest version of Node.js from the selected branch - #The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x) - #Only tested (stable) versions are recommended as newer versions could break MagicMirror. + # Fetch the latest version of Node.js from the selected branch + # The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x) + # Only tested (stable) versions are recommended as newer versions could break MagicMirror. NODE_STABLE_BRANCH="6.x" curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash - @@ -88,7 +88,7 @@ if $NODE_INSTALL; then echo -e "\e[92mNode.js installation Done!\e[0m" fi -#Install magic mirror +# Install MagicMirror cd ~ if [ -d "$HOME/MagicMirror" ] ; then echo -e "\e[93mIt seems like MagicMirror is already installed." From 25b5daf6a5860e9d2ce4c55a6b9d33143a9800e9 Mon Sep 17 00:00:00 2001 From: Felix Wiedemann Date: Fri, 3 Mar 2017 13:06:32 +0100 Subject: [PATCH 184/257] fix problems when building the docker image on windows --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index d845bac0..ddf6d9d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM node:latest +RUN apt-get update && apt-get -y install dos2unix + WORKDIR /opt/magic_mirror COPY . . COPY /modules unmount_modules @@ -9,6 +11,8 @@ ENV NODE_ENV production ENV MM_PORT 8080 RUN npm install + +RUN ["dos2unix", "docker-entrypoint.sh"] RUN ["chmod", "+x", "docker-entrypoint.sh"] EXPOSE $MM_PORT From 1027efd6e5b96719323bf8414df6c003e725f149 Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Sun, 5 Mar 2017 19:50:48 +0100 Subject: [PATCH 185/257] small fixes in hu translation --- translations/hu.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/hu.json b/translations/hu.json index de18d82e..4723fe9a 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -24,7 +24,7 @@ "NW": "ÉNy", "NNW": "ÉÉNy", - "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés!", - "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", - "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." + "UPDATE_NOTIFICATION": "Elérhető MagicMirror² frissítés.", + "UPDATE_NOTIFICATION_MODULE": "Frissítés érhető el a MODULE_NAME modulhoz.", + "UPDATE_INFO": "A jelenlegi telepített verzió COMMIT_COUNT commit-al régebbi a BRANCH_NAME branch-en." } From c2e90864ac21d4405bb7c37cd3253c59e8e67940 Mon Sep 17 00:00:00 2001 From: Cato Antonsen Date: Sun, 5 Mar 2017 22:23:05 +0100 Subject: [PATCH 186/257] Fixed missing animations on this.show() when module is alone in a region --- CHANGELOG.md | 1 + js/main.js | 17 +++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) mode change 100644 => 100755 CHANGELOG.md mode change 100644 => 100755 js/main.js diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 index 1138da27..d3918091 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Module currentWeather: check if temperature received from api is defined. - Fix an issue with module hidden status changing to `true` although lock string prevented showing it - Fix newsfeed module bug (removeStartTags) +- Fixed missing animation on `this.show(speed)` when module is alone in a region. ## [2.1.0] - 2016-12-31 diff --git a/js/main.js b/js/main.js old mode 100644 new mode 100755 index e1a13d8a..a81e3530 --- a/js/main.js +++ b/js/main.js @@ -245,15 +245,20 @@ var MM = (function() { moduleWrapper.style.transition = "opacity " + speed / 1000 + "s"; // Restore the postition. See hideModule() for more info. moduleWrapper.style.position = "static"; - moduleWrapper.style.opacity = 1; - + updateWrapperStates(); - clearTimeout(module.showHideTimer); - module.showHideTimer = setTimeout(function() { - if (typeof callback === "function") { callback(); } - }, speed); + // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. + setTimeout(function(){ + moduleWrapper.style.opacity = 1; + + + clearTimeout(module.showHideTimer); + module.showHideTimer = setTimeout(function() { + if (typeof callback === "function") { callback(); } + }, speed); + }, 0); } }; From 347a2977fad56891750431856df877377c562e51 Mon Sep 17 00:00:00 2001 From: Cato Antonsen Date: Sun, 5 Mar 2017 22:46:48 +0100 Subject: [PATCH 187/257] Removed trailing spaces --- js/main.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/js/main.js b/js/main.js index a81e3530..57f9ac25 100755 --- a/js/main.js +++ b/js/main.js @@ -245,15 +245,13 @@ var MM = (function() { moduleWrapper.style.transition = "opacity " + speed / 1000 + "s"; // Restore the postition. See hideModule() for more info. moduleWrapper.style.position = "static"; - + updateWrapperStates(); // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. setTimeout(function(){ moduleWrapper.style.opacity = 1; - - clearTimeout(module.showHideTimer); module.showHideTimer = setTimeout(function() { if (typeof callback === "function") { callback(); } From 120b50536167ac59b3f5d2c779ad0d065d324f94 Mon Sep 17 00:00:00 2001 From: Cato Antonsen Date: Sun, 5 Mar 2017 23:36:24 +0100 Subject: [PATCH 188/257] Implemented another way of waiting for refresh of region before animation --- js/main.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/js/main.js b/js/main.js index 57f9ac25..4aa64a79 100755 --- a/js/main.js +++ b/js/main.js @@ -249,14 +249,14 @@ var MM = (function() { updateWrapperStates(); // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. - setTimeout(function(){ - moduleWrapper.style.opacity = 1; + var dummy = moduleWrapper.parentElement.parentElement.offsetHeight; + + moduleWrapper.style.opacity = 1; - clearTimeout(module.showHideTimer); - module.showHideTimer = setTimeout(function() { - if (typeof callback === "function") { callback(); } - }, speed); - }, 0); + clearTimeout(module.showHideTimer); + module.showHideTimer = setTimeout(function() { + if (typeof callback === "function") { callback(); } + }, speed); } }; From 219021873df330ea418031b95a06754cd944fe70 Mon Sep 17 00:00:00 2001 From: Cato Antonsen Date: Sun, 5 Mar 2017 23:42:13 +0100 Subject: [PATCH 189/257] Removed trailing space --- js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/main.js b/js/main.js index 4aa64a79..ad1486ca 100755 --- a/js/main.js +++ b/js/main.js @@ -249,8 +249,8 @@ var MM = (function() { updateWrapperStates(); // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. - var dummy = moduleWrapper.parentElement.parentElement.offsetHeight; - + var dummy = moduleWrapper.parentElement.parentElement.offsetHeight; + moduleWrapper.style.opacity = 1; clearTimeout(module.showHideTimer); From 21688383659b902e7e9fee22fb812ffb52f4a4ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 5 Mar 2017 22:05:54 -0300 Subject: [PATCH 190/257] Use just one callback statement in case of failure on loader of the configuration file. --- js/app.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/js/app.js b/js/app.js index 6c1f6ea2..f8825f7e 100644 --- a/js/app.js +++ b/js/app.js @@ -69,14 +69,12 @@ var App = function() { } catch (e) { if (e.code == "ENOENT") { console.error("WARNING! Could not find config file. Please create one. Starting with default configuration."); - callback(defaults); } else if (e instanceof ReferenceError || e instanceof SyntaxError) { console.error("WARNING! Could not validate config file. Please correct syntax errors. Starting with default configuration."); - callback(defaults); } else { console.error("WARNING! Could not load config file. Starting with default configuration. Error found: " + e); - callback(defaults); } + callback(defaults); } }; From 1e3b866c8b6b40752efc85ffc9d98930eb43cc09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 5 Mar 2017 22:20:35 -0300 Subject: [PATCH 191/257] Use color red for error when the configuration file is not found. --- js/app.js | 6 +++--- js/utils.js | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/js/app.js b/js/app.js index f8825f7e..138fec70 100644 --- a/js/app.js +++ b/js/app.js @@ -68,11 +68,11 @@ var App = function() { callback(config); } catch (e) { if (e.code == "ENOENT") { - console.error("WARNING! Could not find config file. Please create one. Starting with default configuration."); + console.error(Utils.colors.error("WARNING! Could not find config file. Please create one. Starting with default configuration.")); } else if (e instanceof ReferenceError || e instanceof SyntaxError) { - console.error("WARNING! Could not validate config file. Please correct syntax errors. Starting with default configuration."); + console.error(Utils.colors.error("WARNING! Could not validate config file. Please correct syntax errors. Starting with default configuration.")); } else { - console.error("WARNING! Could not load config file. Starting with default configuration. Error found: " + e); + console.error(Utils.colors.error("WARNING! Could not load config file. Starting with default configuration. Error found: " + e)); } callback(defaults); } diff --git a/js/utils.js b/js/utils.js index 7f548afa..76eb2703 100644 --- a/js/utils.js +++ b/js/utils.js @@ -10,7 +10,8 @@ var colors = require("colors/safe"); var Utils = { colors: { - warn: colors.yellow + warn: colors.yellow, + error: colors.red } }; From d97571ce0c322779f3cac1c98e2030e75c80103b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 6 Mar 2017 02:11:27 -0300 Subject: [PATCH 192/257] Fix tab documentacion calendar for colored option --- modules/default/calendar/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 57a989a8..bc2e9771 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -53,7 +53,7 @@ The `colored` property gives the option for an individual color for each calenda #### Default value: ````javascript config: { - colored: false, + colored: false, calendars: [ { url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics', From 9848f8063047854e35a6bc7a27302428e22c51ab Mon Sep 17 00:00:00 2001 From: Beh Date: Tue, 7 Mar 2017 00:12:43 +0100 Subject: [PATCH 193/257] Added support for more authentication methods for the default calendar module HTTP Basic, Digest and OAuth2/Bearer authentications are now supported by the calendar module --- modules/default/calendar.zip | Bin 0 -> 41893 bytes modules/default/calendar/README.md | 21 ++++++++++++---- modules/default/calendar/calendar.js | 17 +++++++++---- modules/default/calendar/calendarfetcher.js | 26 ++++++++++++++------ modules/default/calendar/debug.js | 14 ++++++++--- modules/default/calendar/node_helper.js | 6 ++--- 6 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 modules/default/calendar.zip diff --git a/modules/default/calendar.zip b/modules/default/calendar.zip new file mode 100644 index 0000000000000000000000000000000000000000..91ccaeab853bae16bd5108022f1095733d8b4a33 GIT binary patch literal 41893 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 CVfNVo literal 0 HcmV?d00001 diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 57a989a8..655ab89c 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -53,25 +53,36 @@ The `colored` property gives the option for an individual color for each calenda #### Default value: ````javascript config: { - colored: false, + colored: false, calendars: [ { url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics', symbol: 'calendar', + auth: { + user: 'username', + pass: 'superstrongpassword', + method: 'basic' + } }, ], } ```` - #### Calendar configuration options: | Option | Description | --------------------- | ----------- | `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. | `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. -| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). +| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). | `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` -| `user` | The username for HTTP Basic authentication. -| `pass` | The password for HTTP Basic authentication. | `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100` | `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting +| `auth` | The object containing options for authentication against the calendar. + + +#### Calendar authentication options: +| Option | Description +| --------------------- | ----------- +| `user` | The username for HTTP authentication. +| `pass` | The password for HTTP authentication. (If you use Bearer authentication, this should be your BearerToken.) +| `method` | Which authentication method should be used. HTTP Basic, Digest and Bearer authentication methods are supported. Basic authentication is used by default if this option is omitted. **Possible values:** `digest`, `basic`, `bearer` **Default value:** `basic` diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 644fc1f6..79e9edca 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -72,10 +72,18 @@ Module.register("calendar", { var calendarConfig = { maximumEntries: calendar.maximumEntries, - maximumNumberOfDays: calendar.maximumNumberOfDays, + maximumNumberOfDays: calendar.maximumNumberOfDays }; - this.addCalendar(calendar.url, calendar.user, calendar.pass, calendarConfig); + // we check user and password here for backwards compatibility with old configs + if(calendar.user && calendar.pass){ + calendar.auth = { + user: calendar.user, + pass: calendar.pass + } + } + + this.addCalendar(calendar.url, calendar.auth, calendarConfig); } this.calendarData = {}; @@ -313,14 +321,13 @@ Module.register("calendar", { * * argument url string - Url to add. */ - addCalendar: function (url, user, pass, calendarConfig) { + addCalendar: function (url, auth, calendarConfig) { this.sendSocketNotification("ADD_CALENDAR", { url: url, maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries, maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays, fetchInterval: this.config.fetchInterval, - user: user, - pass: pass + auth: auth }); }, diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index d5ca075e..4728ffae 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -8,7 +8,7 @@ var ical = require("./vendor/ical.js"); var moment = require("moment"); -var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, user, pass) { +var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, auth) { var self = this; var reloadTimer = null; @@ -32,11 +32,23 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe } }; - if (user && pass) { - opts.auth = { - user: user, - pass: pass, - sendImmediately: true + if (auth) { + if(auth.method === 'bearer'){ + opts.auth = { + bearer: auth.pass + } + + }else{ + opts.auth = { + user: auth.user, + pass: auth.pass + }; + + if(auth.method === 'digest'){ + opts.auth.sendImmediately = false; + }else{ + opts.auth.sendImmediately = true; + } } } @@ -47,7 +59,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe return; } - //console.log(data); + // console.log(data); newEvents = []; var limitFunction = function(date, i) {return i < maximumEntries;}; diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index 9b72d51d..ddf0fb42 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -8,14 +8,22 @@ var CalendarFetcher = require("./calendarfetcher.js"); -var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; +var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; // Standard test URL +// var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events/"; // URL for Bearer auth (must be configured in Google OAuth2 first) var fetchInterval = 60 * 60 * 1000; var maximumEntries = 10; var maximumNumberOfDays = 365; +var user = "magicmirror"; +var pass = "MyStrongPass"; + +var auth = { + user: user, + pass: pass +}; console.log("Create fetcher ..."); -fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays); +fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth); fetcher.onReceive(function(fetcher) { console.log(fetcher.events()); @@ -29,4 +37,4 @@ fetcher.onError(function(fetcher, error) { fetcher.startFetch(); -console.log("Create fetcher done! "); +console.log("Create fetcher done! "); \ No newline at end of file diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index cc511659..90c286c8 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -24,7 +24,7 @@ module.exports = NodeHelper.create({ socketNotificationReceived: function(notification, payload) { if (notification === "ADD_CALENDAR") { //console.log('ADD_CALENDAR: '); - this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.user, payload.pass); + this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth); } }, @@ -36,7 +36,7 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass) { + createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth) { var self = this; if (!validUrl.isUri(url)) { @@ -47,7 +47,7 @@ module.exports = NodeHelper.create({ var fetcher; if (typeof self.fetchers[url] === "undefined") { console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); - fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass); + fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth); fetcher.onReceive(function(fetcher) { //console.log('Broadcast events.'); From f8d80422b27a40acadc80a603884cb3217e99f20 Mon Sep 17 00:00:00 2001 From: Beh Date: Tue, 7 Mar 2017 00:34:17 +0100 Subject: [PATCH 194/257] Fixed Travis CI errors Changed indentation from spaces to tabs changed strings from single quote to double quote --- modules/default/calendar/calendarfetcher.js | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 4728ffae..9655f21e 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -33,22 +33,22 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe }; if (auth) { - if(auth.method === 'bearer'){ - opts.auth = { - bearer: auth.pass - } + if(auth.method === "bearer"){ + opts.auth = { + bearer: auth.pass + } - }else{ - opts.auth = { - user: auth.user, - pass: auth.pass - }; + }else{ + opts.auth = { + user: auth.user, + pass: auth.pass + }; - if(auth.method === 'digest'){ - opts.auth.sendImmediately = false; - }else{ - opts.auth.sendImmediately = true; - } + if(auth.method === "digest"){ + opts.auth.sendImmediately = false; + }else{ + opts.auth.sendImmediately = true; + } } } From a3836b5e171ec6c3b81619485bf49c4a030f3984 Mon Sep 17 00:00:00 2001 From: Cato Antonsen Date: Tue, 7 Mar 2017 18:06:26 +0100 Subject: [PATCH 195/257] Updated Norwegian translations (nn and nb) --- CHANGELOG.md | 2 +- translations/nb.json | 7 ++++++- translations/nn.json | 7 ++++++- 3 files changed, 13 insertions(+), 3 deletions(-) mode change 100644 => 100755 CHANGELOG.md mode change 100644 => 100755 translations/nb.json mode change 100644 => 100755 translations/nn.json diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 index 1138da27..69b00ff6 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,7 +48,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add test for compliments module for parts of day - Korean Translation. - Added console warning on startup when deprecated config options are used - +- Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/translations/nb.json b/translations/nb.json old mode 100644 new mode 100755 index 1b57a5fa..9a3060be --- a/translations/nb.json +++ b/translations/nb.json @@ -3,6 +3,7 @@ "TODAY": "I dag", "TOMORROW": "I morgen", + "DAYAFTERTOMORROW": "I overmorgen", "RUNNING": "Slutter om", "EMPTY": "Ingen kommende arrangementer.", @@ -21,5 +22,9 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", + + "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengelig.", + "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengelig for modulen MODULE_NAME.", + "UPDATE_INFO": "Nåværende installasjon er COMMIT_COUNT bak BRANCH_NAME grenen." } diff --git a/translations/nn.json b/translations/nn.json old mode 100644 new mode 100755 index 107bec9d..ebe4cee7 --- a/translations/nn.json +++ b/translations/nn.json @@ -3,6 +3,7 @@ "TODAY": "I dag", "TOMORROW": "I morgon", + "DAYAFTERTOMORROW": "I overmorgon", "RUNNING": "Sluttar om", "EMPTY": "Ingen komande hendingar.", @@ -21,5 +22,9 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", + + "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengeleg.", + "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengeleg for modulen MODULE_NAME.", + "UPDATE_INFO": "noverande installasjon er COMMIT_COUNT bak BRANCH_NAME greinen." } From a15b8077a37963911161c311942be2eb00e4b93c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 7 Mar 2017 16:21:15 -0300 Subject: [PATCH 196/257] Add test without access by ipWhistelist This test set a invalid IP address for not have access to MagicMirror. Creates a request to localhost and port added in configuration and check if gets 403 HTTP code. --- tests/configs/noIpWhiteList.js | 25 +++++++++++++++++++++++++ tests/e2e/ipWhistlist_spec.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 tests/configs/noIpWhiteList.js create mode 100644 tests/e2e/ipWhistlist_spec.js diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js new file mode 100644 index 00000000..79366e09 --- /dev/null +++ b/tests/configs/noIpWhiteList.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample ipWhitelist + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["x.x.x.x"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/ipWhistlist_spec.js b/tests/e2e/ipWhistlist_spec.js new file mode 100644 index 00000000..01ab6787 --- /dev/null +++ b/tests/e2e/ipWhistlist_spec.js @@ -0,0 +1,30 @@ +const globalSetup = require("./global-setup"); +const app = globalSetup.app; +const request = require("request"); +const chai = require("chai"); +const expect = chai.expect; + +describe("Set ipWhitelist without access", function () { + + this.timeout(20000); + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/noIpWhiteList.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("should return 403", function (done) { + request.get("http://localhost:8080", function (err, res, body) { + expect(res.statusCode).to.equal(403); + done(); + }); + }); +}); From db1022600570f238749e1017fe4876e85775b9de Mon Sep 17 00:00:00 2001 From: Slamet PS Date: Wed, 8 Mar 2017 10:37:27 +0700 Subject: [PATCH 197/257] update spaces to tab --- translations/translations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/translations.js b/translations/translations.js index 8441ed8e..61701ab9 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -18,7 +18,7 @@ var translations = { "pt" : "translations/pt.json", // Português "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska - "id" : "translations/id.json", // Indonesian + "id" : "translations/id.json", // Indonesian "it" : "translations/it.json", // Italian "zh_cn" : "translations/zh_cn.json", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese From 11fe6cfbb0674572a7724e4283a3437b00fa8e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 7 Mar 2017 21:22:27 -0300 Subject: [PATCH 198/257] Add test ipWhistelist = [] This test ipWhistelist on [] to access all IPs Creates a request to localhost and port added in configuration and check if gets 200 HTTP code. --- tests/configs/empty_ipWhiteList.js | 25 +++++++++++++++++++++ tests/e2e/ipWhistlist_spec.js | 36 +++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 tests/configs/empty_ipWhiteList.js diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js new file mode 100644 index 00000000..232836c3 --- /dev/null +++ b/tests/configs/empty_ipWhiteList.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample ipWhitelist + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: [], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/ipWhistlist_spec.js b/tests/e2e/ipWhistlist_spec.js index 01ab6787..46fc4cff 100644 --- a/tests/e2e/ipWhistlist_spec.js +++ b/tests/e2e/ipWhistlist_spec.js @@ -4,15 +4,11 @@ const request = require("request"); const chai = require("chai"); const expect = chai.expect; -describe("Set ipWhitelist without access", function () { + +describe("ipWhitelist directive configuration", function () { this.timeout(20000); - before(function() { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/noIpWhiteList.js"; - }); - beforeEach(function (done) { app.start().then(function() { done(); } ); }); @@ -21,10 +17,30 @@ describe("Set ipWhitelist without access", function () { app.stop().then(function() { done(); }); }); - it("should return 403", function (done) { - request.get("http://localhost:8080", function (err, res, body) { - expect(res.statusCode).to.equal(403); - done(); + describe("Set ipWhitelist without access", function () { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/noIpWhiteList.js"; + }); + it("should return 403", function (done) { + request.get("http://localhost:8080", function (err, res, body) { + expect(res.statusCode).to.equal(403); + done(); + }); }); }); + + describe("Set ipWhitelist []", function () { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/empty_ipWhiteList.js"; + }); + it("should return 200", function (done) { + request.get("http://localhost:8080", function (err, res, body) { + expect(res.statusCode).to.equal(200); + done(); + }); + }); + }); + }); From afe2b934def61a633f29ebaa140364c37fb5391d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Wed, 8 Mar 2017 10:36:08 -0300 Subject: [PATCH 199/257] test env requst http://localhost:8080 This test expect get 200 HTTP code on get request to http://localhost:8080 --- tests/e2e/env_spec.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 99a7f657..04bb5542 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,5 +1,8 @@ const globalSetup = require("./global-setup"); const app = globalSetup.app; +const request = require("request"); +const chai = require("chai"); +const expect = chai.expect; describe("Electron app environment", function () { this.timeout(20000); @@ -17,7 +20,6 @@ describe("Electron app environment", function () { app.stop().then(function() { done(); }); }); - it("is set to open new app window", function () { return app.client.waitUntilWindowLoaded() .getWindowCount().should.eventually.equal(1); @@ -28,4 +30,11 @@ describe("Electron app environment", function () { .getTitle().should.eventually.equal("Magic Mirror"); }); + it("get request from http://localhost:8080 should return 200", function (done) { + request.get("http://localhost:8080", function (err, res, body) { + expect(res.statusCode).to.equal(200); + done(); + }); + }); + }); From 5770b9dc0e07749c6e64596cb0673f4e37b1f970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 9 Mar 2017 17:10:32 -0300 Subject: [PATCH 200/257] Test env 404 not found request http://localhost:8080/nothing This test expect gets 404 HTTP code on get request to http://localhost:8080/nothing --- tests/e2e/env_spec.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 04bb5542..202bd5e4 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -37,4 +37,11 @@ describe("Electron app environment", function () { }); }); + it("get request from http://localhost:8080/nothing should return 404", function (done) { + request.get("http://localhost:8080/nothing", function (err, res, body) { + expect(res.statusCode).to.equal(404); + done(); + }); + }); + }); From 34f04b1946a2f339e24236d9b58e05f9b4bc9d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 7 Mar 2017 14:12:48 -0300 Subject: [PATCH 201/257] Add note to allow all IP addresses. ipWhitelist configuration directive. --- README.md | 2 +- config/config.js.sample | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9cadb364..e7b7a841 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ The following properties can be configured: | --- | --- | | `port` | The port on which the MagicMirror² server will run on. The default value is `8080`. | | `address` | The ip address the accept connections. The default open bind `::` is IPv6 is available or `0.0.0.0` IPv4 run on. Example config: `192.168.10.100`. | -| `ipWhitelist` | The list of IPs from which you are allowed to access the MagicMirror². The default value is `["127.0.0.1", "::ffff:127.0.0.1", "::1"]`. It is possible to specify IPs with subnet masks (`["127.0.0.1", "127.0.0.1/24"]`) or define ip ranges (`["127.0.0.1", ["192.168.0.1", "192.168.0.100"]]`).| +| `ipWhitelist` | The list of IPs from which you are allowed to access the MagicMirror². The default value is `["127.0.0.1", "::ffff:127.0.0.1", "::1"]`. It is possible to specify IPs with subnet masks (`["127.0.0.1", "127.0.0.1/24"]`) or define ip ranges (`["127.0.0.1", ["192.168.0.1", "192.168.0.100"]]`). Set `[]` to allow all IP addresses.| | `zoom` | This allows to scale the mirror contents with a given zoom factor. The default value is `1.0`| | `language` | The language of the interface. (Note: Not all elements will be localized.) Possible values are `en`, `nl`, `ru`, `fr`, etc., but the default value is `en`. | | `timeFormat` | The form of time notation that will be used. Possible values are `12` or `24`. The default is `24`. | diff --git a/config/config.js.sample b/config/config.js.sample index eab22972..797f4d75 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -6,7 +6,7 @@ var config = { port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses. language: "en", timeFormat: 24, From 4fdd12bc48d95a562b92fa297c7a11cd41a0066d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 9 Mar 2017 21:12:19 -0300 Subject: [PATCH 202/257] Test change port configuration This test change to 8090 port on configuration and check if system response there. --- tests/configs/port_8090.js | 25 +++++++++++++++++++++++++ tests/e2e/port_config.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 tests/configs/port_8090.js create mode 100644 tests/e2e/port_config.js diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js new file mode 100644 index 00000000..6646dff7 --- /dev/null +++ b/tests/configs/port_8090.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample enviroment set por 8090 + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8090, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js new file mode 100644 index 00000000..c0806e85 --- /dev/null +++ b/tests/e2e/port_config.js @@ -0,0 +1,32 @@ +const globalSetup = require("./global-setup"); +const app = globalSetup.app; +const request = require("request"); +const chai = require("chai"); +const expect = chai.expect; + + +describe("port directive configuration", function () { + + this.timeout(20000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + describe("Set port 8090", function () { + before(function() { + // Set config sample for use in this test + process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; + }); + it("should return 200", function (done) { + request.get("http://localhost:8090", function (err, res, body) { + expect(res.statusCode).to.equal(200); + done(); + }); + }); + }); +}); From aa1f515fcf5f83750b211aa3a3d28c046645d17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 00:27:47 -0300 Subject: [PATCH 203/257] Remote extra space main.js --- js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/main.js b/js/main.js index e1a13d8a..604dd410 100644 --- a/js/main.js +++ b/js/main.js @@ -66,7 +66,7 @@ var MM = (function() { var classes = position.replace("_"," "); var parentWrapper = document.getElementsByClassName(classes); if (parentWrapper.length > 0) { - var wrapper = parentWrapper[0].getElementsByClassName("container"); + var wrapper = parentWrapper[0].getElementsByClassName("container"); if (wrapper.length > 0) { return wrapper[0]; } From cfc8117c3c067150ad133c24f7b84dc01c8763db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 00:52:43 -0300 Subject: [PATCH 204/257] Remove tests case from without_modules with much hardcode This test retain * Check title. * Check footer with Michael website. --- tests/e2e/without_modules.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/tests/e2e/without_modules.js b/tests/e2e/without_modules.js index 828891ba..73e845f8 100644 --- a/tests/e2e/without_modules.js +++ b/tests/e2e/without_modules.js @@ -44,21 +44,6 @@ describe("Check configuration without modules", function () { .getText("#module_1_helloworld .module-content").should.eventually.equal("Magic Mirror2") }); - it("Show the message create file config", function () { - return app.client.waitUntilWindowLoaded() - .getText("#module_2_helloworld .module-content").should.eventually.equal("Please create a config file.") - }); - - it("Show the message See more information in README", function () { - return app.client.waitUntilWindowLoaded() - .getText("#module_3_helloworld .module-content").should.eventually.equal("See README for more information.") - }); - - it("Show the message recomended use a linter for Javascript for check configuration", function () { - return app.client.waitUntilWindowLoaded() - .getText("#module_4_helloworld .module-content").should.eventually.equal("If you get this message while your config file is already\ncreated, your config file probably contains an error.\nUse a JavaScript linter to validate your file.") - }); - it("Show the text Michael's website", function () { return app.client.waitUntilWindowLoaded() .getText("#module_5_helloworld .module-content").should.eventually.equal("www.michaelteeuw.nl"); From 1c235aa7611dd4f8912bce2b01e2abdba16eef26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 03:25:16 -0300 Subject: [PATCH 205/257] Add test default calendar --- tests/configs/data/calendar_test.ics | 190 ++++++++++++++++++++++ tests/configs/modules/calendar/default.js | 37 +++++ tests/e2e/modules/calendar_spec.js | 29 ++++ 3 files changed, 256 insertions(+) create mode 100644 tests/configs/data/calendar_test.ics create mode 100644 tests/configs/modules/calendar/default.js create mode 100644 tests/e2e/modules/calendar_spec.js diff --git a/tests/configs/data/calendar_test.ics b/tests/configs/data/calendar_test.ics new file mode 100644 index 00000000..63e001ce --- /dev/null +++ b/tests/configs/data/calendar_test.ics @@ -0,0 +1,190 @@ +BEGIN:VCALENDAR +PRODID:-//Google Inc//Google Calendar 70.9054//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALNAME:MagicMirrorTest +X-WR-TIMEZONE:America/Santiago +X-WR-CALDESC:Testing propose MagicMirror +BEGIN:VTIMEZONE +TZID:America/Santiago +X-LIC-LOCATION:America/Santiago +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:-04 +DTSTART:19700510T000000 +RDATE:19700510T030000 +RDATE:19710509T030000 +RDATE:19720514T030000 +RDATE:19730513T030000 +RDATE:19740512T030000 +RDATE:19750511T030000 +RDATE:19760509T030000 +RDATE:19770515T030000 +RDATE:19780514T030000 +RDATE:19790513T030000 +RDATE:19800511T030000 +RDATE:19810510T030000 +RDATE:19820509T030000 +RDATE:19830515T030000 +RDATE:19840513T030000 +RDATE:19850512T030000 +RDATE:19860511T030000 +RDATE:19870510T030000 +RDATE:19880515T030000 +RDATE:19890514T030000 +RDATE:19900513T030000 +RDATE:19910512T030000 +RDATE:19920510T030000 +RDATE:19930509T030000 +RDATE:19940515T030000 +RDATE:19950514T030000 +RDATE:19960512T030000 +RDATE:19970511T030000 +RDATE:19980510T030000 +RDATE:19990509T030000 +RDATE:20000514T030000 +RDATE:20010513T030000 +RDATE:20020512T030000 +RDATE:20030511T030000 +RDATE:20040509T030000 +RDATE:20050515T030000 +RDATE:20060514T030000 +RDATE:20070513T030000 +RDATE:20080511T030000 +RDATE:20090510T030000 +RDATE:20100509T030000 +RDATE:20110515T030000 +RDATE:20120513T030000 +RDATE:20130512T030000 +RDATE:20140511T030000 +RDATE:20150510T030000 +RDATE:20160515T030000 +RDATE:20170514T030000 +RDATE:20180513T030000 +RDATE:20190512T030000 +RDATE:20200510T030000 +RDATE:20210509T030000 +RDATE:20220515T030000 +RDATE:20230514T030000 +RDATE:20240512T030000 +RDATE:20250511T030000 +RDATE:20260510T030000 +RDATE:20270509T030000 +RDATE:20280514T030000 +RDATE:20290513T030000 +RDATE:20300512T030000 +RDATE:20310511T030000 +RDATE:20320509T030000 +RDATE:20330515T030000 +RDATE:20340514T030000 +RDATE:20350513T030000 +RDATE:20360511T030000 +RDATE:20370510T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:-04 +DTSTART:20380509T000000 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:-03 +DTSTART:19700809T000000 +RDATE:19700809T040000 +RDATE:19710815T040000 +RDATE:19720813T040000 +RDATE:19730812T040000 +RDATE:19740811T040000 +RDATE:19750810T040000 +RDATE:19760815T040000 +RDATE:19770814T040000 +RDATE:19780813T040000 +RDATE:19790812T040000 +RDATE:19800810T040000 +RDATE:19810809T040000 +RDATE:19820815T040000 +RDATE:19830814T040000 +RDATE:19840812T040000 +RDATE:19850811T040000 +RDATE:19860810T040000 +RDATE:19870809T040000 +RDATE:19880814T040000 +RDATE:19890813T040000 +RDATE:19900812T040000 +RDATE:19910811T040000 +RDATE:19920809T040000 +RDATE:19930815T040000 +RDATE:19940814T040000 +RDATE:19950813T040000 +RDATE:19960811T040000 +RDATE:19970810T040000 +RDATE:19980809T040000 +RDATE:19990815T040000 +RDATE:20000813T040000 +RDATE:20010812T040000 +RDATE:20020811T040000 +RDATE:20030810T040000 +RDATE:20040815T040000 +RDATE:20050814T040000 +RDATE:20060813T040000 +RDATE:20070812T040000 +RDATE:20080810T040000 +RDATE:20090809T040000 +RDATE:20100815T040000 +RDATE:20110814T040000 +RDATE:20120812T040000 +RDATE:20130811T040000 +RDATE:20140810T040000 +RDATE:20150809T040000 +RDATE:20160814T040000 +RDATE:20170813T040000 +RDATE:20180812T040000 +RDATE:20190811T040000 +RDATE:20200809T040000 +RDATE:20210815T040000 +RDATE:20220814T040000 +RDATE:20230813T040000 +RDATE:20240811T040000 +RDATE:20250810T040000 +RDATE:20260809T040000 +RDATE:20270815T040000 +RDATE:20280813T040000 +RDATE:20290812T040000 +RDATE:20300811T040000 +RDATE:20310810T040000 +RDATE:20320815T040000 +RDATE:20330814T040000 +RDATE:20340813T040000 +RDATE:20350812T040000 +RDATE:20360810T040000 +RDATE:20370809T040000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:-03 +DTSTART:20380815T000000 +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SU +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID=America/Santiago:20170309T100000 +DTEND;TZID=America/Santiago:20170309T110000 +RRULE:FREQ=MONTHLY;INTERVAL=30;BYMONTHDAY=9 +DTSTAMP:20170310T172720Z +UID:80rl9kuu5bq49gme99eklov27k@google.com +CREATED:20170310T172400Z +DESCRIPTION: +LAST-MODIFIED:20170310T172400Z +LOCATION: +SEQUENCE:0 +STATUS:CONFIRMED +SUMMARY:TestEvent +TRANSP:OPAQUE +END:VEVENT +END:VCALENDAR diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js new file mode 100644 index 00000000..3f70d930 --- /dev/null +++ b/tests/configs/modules/calendar/default.js @@ -0,0 +1,37 @@ +/* Magic Mirror Test config default calendar + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8080/tests/configs/data/calendar_test.ics" + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js new file mode 100644 index 00000000..f8535231 --- /dev/null +++ b/tests/e2e/modules/calendar_spec.js @@ -0,0 +1,29 @@ +const globalSetup = require("../global-setup"); +const app = globalSetup.app; +const chai = require("chai"); +const expect = chai.expect; + +describe("Calendar module", function () { + + this.timeout(20000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + describe("Default configuration", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/default.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + +}); From ceb4ef2642b81423bae99d42a410d280c7b88d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 04:33:27 -0300 Subject: [PATCH 206/257] Add test basic-auth --- package.json | 1 + tests/configs/modules/calendar/basic-auth.js | 42 ++++++++++++++++++++ tests/e2e/modules/calendar_spec.js | 16 ++++++++ tests/servers/basic-auth.js | 31 +++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 tests/configs/modules/calendar/basic-auth.js create mode 100644 tests/servers/basic-auth.js diff --git a/package.json b/package.json index 704f8394..66886cad 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "grunt-markdownlint": "^1.0.13", "grunt-stylelint": "latest", "grunt-yamllint": "latest", + "http-auth": "^3.1.3", "mocha": "^3.2.0", "spectron": "^3.4.1", "stylelint-config-standard": "latest", diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js new file mode 100644 index 00000000..1b210102 --- /dev/null +++ b/tests/configs/modules/calendar/basic-auth.js @@ -0,0 +1,42 @@ +/* Magic Mirror Test config default calendar + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8010/tests/configs/data/calendar_test.ics", + auth: { + user: "MagicMirror", + pass: "CallMeADog", + method: "basic" + } + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index f8535231..3b4ac736 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -1,4 +1,5 @@ const globalSetup = require("../global-setup"); +const serverBasicAuth = require("../../servers/basic-auth.js"); const app = globalSetup.app; const chai = require("chai"); const expect = chai.expect; @@ -26,4 +27,19 @@ describe("Calendar module", function () { }); }); + + describe("Basic auth", function() { + before(function() { + serverBasicAuth.listen(8010); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/basic-auth.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + + }); diff --git a/tests/servers/basic-auth.js b/tests/servers/basic-auth.js new file mode 100644 index 00000000..6077cf8c --- /dev/null +++ b/tests/servers/basic-auth.js @@ -0,0 +1,31 @@ +var http = require("http"); +var path = require("path"); +var auth = require("http-auth"); +var express = require("express") + +var basic = auth.basic({ + realm: "MagicMirror Area restricted." + }, (username, password, callback) => { + callback(username === "MagicMirror" && password === "CallMeADog"); + } +); + +this.server = express(); +this.server.use(auth.connect(basic)); + +// Set directories availables +var directories = ["/tests/configs"]; +var directory; +root_path = path.resolve(__dirname + "/../../"); +for (i in directories) { + directory = directories[i]; + this.server.use(directory, express.static(path.resolve(root_path + directory))); +} + +exports.listen = function () { + this.server.listen.apply(this.server, arguments); +}; + +exports.close = function (callback) { + this.server.close(callback); +}; From f5c57e84c77d14da5c450b748d3f4e11f8fd7eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 04:36:09 -0300 Subject: [PATCH 207/257] Add test calendar without auth method. Should be set by default basic. --- .../configs/modules/calendar/auth-default.js | 41 +++++++++++++++++++ tests/e2e/modules/calendar_spec.js | 12 ++++++ 2 files changed, 53 insertions(+) create mode 100644 tests/configs/modules/calendar/auth-default.js diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js new file mode 100644 index 00000000..3fee5015 --- /dev/null +++ b/tests/configs/modules/calendar/auth-default.js @@ -0,0 +1,41 @@ +/* Magic Mirror Test config default calendar with auth by default + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8011/tests/configs/data/calendar_test.ics", + auth: { + user: "MagicMirror", + pass: "CallMeADog" + } + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index 3b4ac736..9bb68baa 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -41,5 +41,17 @@ describe("Calendar module", function () { }); + describe("Basic auth by default", function() { + before(function() { + serverBasicAuth.listen(8011); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/auth-default.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + }); From b129fe908c6ade3adf9e06ddd50372caa830b2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 04:40:59 -0300 Subject: [PATCH 208/257] Test check backward backward compatibility authentication method basic on calendar module Fix travis basic-auth server --- .../modules/calendar/old-basic-auth.js | 39 +++++++++++++++++++ tests/e2e/modules/calendar_spec.js | 13 +++++++ tests/servers/basic-auth.js | 15 ++++--- 3 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 tests/configs/modules/calendar/old-basic-auth.js diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js new file mode 100644 index 00000000..76e2df3a --- /dev/null +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -0,0 +1,39 @@ +/* Magic Mirror Test config default calendar + * with authenticacion old config + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8012/tests/configs/data/calendar_test.ics", + user: "MagicMirror", + pass: "CallMeADog" + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index 9bb68baa..21939f06 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -53,5 +53,18 @@ describe("Calendar module", function () { }); }); + describe("Basic auth backward compatibilty configuration", function() { + before(function() { + serverBasicAuth.listen(8012); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/old-basic-auth.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + }); diff --git a/tests/servers/basic-auth.js b/tests/servers/basic-auth.js index 6077cf8c..238bdc26 100644 --- a/tests/servers/basic-auth.js +++ b/tests/servers/basic-auth.js @@ -5,10 +5,9 @@ var express = require("express") var basic = auth.basic({ realm: "MagicMirror Area restricted." - }, (username, password, callback) => { - callback(username === "MagicMirror" && password === "CallMeADog"); - } -); +}, (username, password, callback) => { + callback(username === "MagicMirror" && password === "CallMeADog"); +}); this.server = express(); this.server.use(auth.connect(basic)); @@ -16,16 +15,16 @@ this.server.use(auth.connect(basic)); // Set directories availables var directories = ["/tests/configs"]; var directory; -root_path = path.resolve(__dirname + "/../../"); +rootPath = path.resolve(__dirname + "/../../"); for (i in directories) { directory = directories[i]; - this.server.use(directory, express.static(path.resolve(root_path + directory))); + this.server.use(directory, express.static(path.resolve(rootPath + directory))); } exports.listen = function () { - this.server.listen.apply(this.server, arguments); + this.server.listen.apply(this.server, arguments); }; exports.close = function (callback) { - this.server.close(callback); + this.server.close(callback); }; From 50f2dded64e0ea8c4a69c48ce87a005debf6e60f Mon Sep 17 00:00:00 2001 From: BeatIdo Date: Fri, 10 Mar 2017 16:42:43 +0100 Subject: [PATCH 209/257] Complete OWM city list URL --- config/config.js.sample | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index eab22972..d50b6428 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -46,7 +46,7 @@ var config = { position: "top_right", config: { location: "New York", - locationID: "", //ID from http://www.openweathermap.org + locationID: "", //ID from http://www.openweathermap.org/help/city_list.txt appid: "YOUR_OPENWEATHER_API_KEY" } }, @@ -56,7 +56,7 @@ var config = { header: "Weather Forecast", config: { location: "New York", - locationID: "5128581", //ID from http://www.openweathermap.org + locationID: "5128581", //ID from http://www.openweathermap.org/help/city_list.txt appid: "YOUR_OPENWEATHER_API_KEY" } }, From 81aca500b39377ac31c93f268fedcc94319c8ec3 Mon Sep 17 00:00:00 2001 From: BeatIdo Date: Fri, 10 Mar 2017 16:56:28 +0100 Subject: [PATCH 210/257] Hide News Feed loading option Configuration option to hide News Feed module if feed is empty instead of showing LOADING status --- modules/default/newsfeed/newsfeed.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 7c31717a..c2f53d85 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -21,6 +21,7 @@ Module.register("newsfeed",{ showSourceTitle: true, showPublishDate: true, showDescription: false, + hideLoading: false, reloadInterval: 5 * 60 * 1000, // every 5 minutes updateInterval: 10 * 1000, animationSpeed: 2.5 * 1000, @@ -179,12 +180,18 @@ Module.register("newsfeed",{ fullArticle.src = this.newsItems[this.activeItem].url; wrapper.appendChild(fullArticle); } - - - + + if (this.config.hideLoading) { + this.show(); + } + } else { - wrapper.innerHTML = this.translate("LOADING"); - wrapper.className = "small dimmed"; + if (this.config.hideLoading) { + this.hide(); + } else { + wrapper.innerHTML = this.translate("LOADING"); + wrapper.className = "small dimmed"; + } } return wrapper; From 0f27d646bb44702117f9b69f3e1e1b7ea705bd42 Mon Sep 17 00:00:00 2001 From: BeatIdo Date: Fri, 10 Mar 2017 17:03:14 +0100 Subject: [PATCH 211/257] removed trailing spaces --- modules/default/newsfeed/newsfeed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index c2f53d85..e62888dc 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -180,11 +180,11 @@ Module.register("newsfeed",{ fullArticle.src = this.newsItems[this.activeItem].url; wrapper.appendChild(fullArticle); } - + if (this.config.hideLoading) { this.show(); } - + } else { if (this.config.hideLoading) { this.hide(); From 989ee0e28149de7c0a4048bfeaefcd821e674b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 16:27:05 -0300 Subject: [PATCH 212/257] Add link for tutorial ipWhitelist HowTo of @mochman --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b7a841..98ca4154 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ The following properties can be configured: | --- | --- | | `port` | The port on which the MagicMirror² server will run on. The default value is `8080`. | | `address` | The ip address the accept connections. The default open bind `::` is IPv6 is available or `0.0.0.0` IPv4 run on. Example config: `192.168.10.100`. | -| `ipWhitelist` | The list of IPs from which you are allowed to access the MagicMirror². The default value is `["127.0.0.1", "::ffff:127.0.0.1", "::1"]`. It is possible to specify IPs with subnet masks (`["127.0.0.1", "127.0.0.1/24"]`) or define ip ranges (`["127.0.0.1", ["192.168.0.1", "192.168.0.100"]]`). Set `[]` to allow all IP addresses.| +| `ipWhitelist` | The list of IPs from which you are allowed to access the MagicMirror². The default value is `["127.0.0.1", "::ffff:127.0.0.1", "::1"]`. It is possible to specify IPs with subnet masks (`["127.0.0.1", "127.0.0.1/24"]`) or define ip ranges (`["127.0.0.1", ["192.168.0.1", "192.168.0.100"]]`). Set `[]` to allow all IP addresses. For more information about how configure this directive see the [follow post ipWhitelist HowTo](https://forum.magicmirror.builders/topic/1326/ipwhitelist-howto) | | `zoom` | This allows to scale the mirror contents with a given zoom factor. The default value is `1.0`| | `language` | The language of the interface. (Note: Not all elements will be localized.) Possible values are `en`, `nl`, `ru`, `fr`, etc., but the default value is `en`. | | `timeFormat` | The form of time notation that will be used. Possible values are `12` or `24`. The default is `24`. | From 1bdc46969c3d54379ddf6bccc8fc31b5cbb66574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 16:36:17 -0300 Subject: [PATCH 213/257] Add information message when the ipWhitelist is configurate with [] --- js/server.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/server.js b/js/server.js index 901e0350..beb8b84c 100644 --- a/js/server.js +++ b/js/server.js @@ -19,6 +19,10 @@ var Server = function(config, callback) { server.listen(config.port, config.address ? config.address : null); + if (config.ipWhitelist instanceof Array && config.ipWhitelist.length == 0) { + console.info("You're using a full whitelist configuration to allow for all IPs") + } + app.use(function(req, res, next) { var result = ipfilter(config.ipWhitelist, {mode: "allow", log: false})(req, res, function(err) { if (err === undefined) { From 6802873cd18235a8a4aa129817d85388ab4aa7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 16:45:45 -0300 Subject: [PATCH 214/257] Add test module calendar fail basic auth --- .../modules/calendar/fail-basic-auth.js | 44 +++++++++++++++++++ tests/e2e/modules/calendar_spec.js | 11 +++++ 2 files changed, 55 insertions(+) create mode 100644 tests/configs/modules/calendar/fail-basic-auth.js diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js new file mode 100644 index 00000000..ad22046a --- /dev/null +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -0,0 +1,44 @@ +/* Magic Mirror Test calendar calendar + * + * This configuration is a wrong authentication + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8020/tests/configs/data/calendar_test.ics", + auth: { + user: "MagicMirror", + pass: "StairwayToHeaven", + method: "basic" + } + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index 21939f06..c701ed3c 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -65,6 +65,17 @@ describe("Calendar module", function () { }); }); + describe("Fail Basic auth", function() { + before(function() { + serverBasicAuth.listen(8020); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/fail-basic-auth.js"; + }); + + it("Should return No upcoming events", function () { + return app.client.waitUntilTextExists(".calendar", "No upcoming events.", 10000); + }); + }); }); From 72d18fd7e1e52f237dbafba17358cd65170e2a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 17:52:40 -0300 Subject: [PATCH 215/257] Add test module position using helloworld Also is using a configuration with "exotic content" --- tests/configs/modules/positions.js | 43 ++++++++++++++++++++++++++++++ tests/e2e/modules_position_spec.js | 42 +++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 tests/configs/modules/positions.js create mode 100644 tests/e2e/modules_position_spec.js diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js new file mode 100644 index 00000000..7d0188c2 --- /dev/null +++ b/tests/configs/modules/positions.js @@ -0,0 +1,43 @@ +/* Magic Mirror Test config for position setters module + * + * For this case is using helloworld module + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + ipWhitelist: [], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + modules: + // Using exotic content. This is why dont accept go to JSON configuration file + (function() { + var positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", + "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", + "bottom_bar", "fullscreen_above", "fullscreen_below"]; + var modules = Array(); + for (idx in positions) { + modules.push({ + module: "helloworld", + position: positions[idx], + config: { + text: "Text in " + positions[idx] + } + }); + } + return modules; + })(), +}; +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules_position_spec.js b/tests/e2e/modules_position_spec.js new file mode 100644 index 00000000..a781388a --- /dev/null +++ b/tests/e2e/modules_position_spec.js @@ -0,0 +1,42 @@ +const globalSetup = require("./global-setup"); +const app = globalSetup.app; +const chai = require("chai"); +const expect = chai.expect; + +describe("Position of modules", function () { + this.timeout(20000); + + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + + describe("Using helloworld", function() { + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/positions.js"; + }); + + var positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", + "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", + "bottom_bar", "fullscreen_above", "fullscreen_below"]; + + var position; + var className; + for (idx in positions) { + position = positions[idx]; + className = position.replace("_", "."); + it("show text in " + position , function () { + return app.client.waitUntilWindowLoaded() + .getText("." + className).should.eventually.equal("Text in " + position); + }); + } + }); + +}); From c282bb2fe1e79a585c31c4d80d0174949b8d6400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 18:20:11 -0300 Subject: [PATCH 216/257] Fix if MM_PORT enviroment variable is set --- CHANGELOG.md | 1 + js/server.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1138da27..bdc8783b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Module currentWeather: check if temperature received from api is defined. - Fix an issue with module hidden status changing to `true` although lock string prevented showing it - Fix newsfeed module bug (removeStartTags) +- Fix when is set MM_PORT enviroment variable. ## [2.1.0] - 2016-12-31 diff --git a/js/server.js b/js/server.js index 901e0350..53d00235 100644 --- a/js/server.js +++ b/js/server.js @@ -15,9 +15,15 @@ var fs = require("fs"); var helmet = require("helmet"); var Server = function(config, callback) { - console.log("Starting server op port " + config.port + " ... "); - server.listen(config.port, config.address ? config.address : null); + var port = config.port; + if (process.env.MM_PORT) { + port = process.env.MM_PORT; + } + + console.log("Starting server op port " + port + " ... "); + + server.listen(port, config.address ? config.address : null); app.use(function(req, res, next) { var result = ipfilter(config.ipWhitelist, {mode: "allow", log: false})(req, res, function(err) { From c6fa0cc0723f6304ab1c0528e5ae229d18396f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 10 Mar 2017 18:21:06 -0300 Subject: [PATCH 217/257] Add test for check MM_PORT enviroment variable --- tests/e2e/port_config.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index c0806e85..e44a2207 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -29,4 +29,19 @@ describe("port directive configuration", function () { }); }); }); + + describe("Set port 8100 on enviroment variable MM_PORT", function () { + before(function() { + process.env.MM_PORT = 8100; + // Set config sample for use in this test + process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; + }); + it("should return 200", function (done) { + request.get("http://localhost:8100", function (err, res, body) { + expect(res.statusCode).to.equal(200); + done(); + }); + }); + }); + }); From afe0e3c1d682fdd9c92eb23ee3c2e707b39b8e20 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Sat, 11 Mar 2017 17:36:47 -0600 Subject: [PATCH 218/257] Add in option to have single line news --- css/main.css | 6 ++++++ modules/default/newsfeed/README.md | 2 ++ modules/default/newsfeed/newsfeed.js | 6 ++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/css/main.css b/css/main.css index f1c07fa0..01d40aec 100644 --- a/css/main.css +++ b/css/main.css @@ -121,6 +121,12 @@ sup { margin-bottom: 0; } +.no-wrap { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + /** * Region Definitions. */ diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index bfaa1aad..7758bb10 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -63,6 +63,8 @@ The following properties can be configured: | `showSourceTitle` | Display the title of the source.

**Possible values:** `true` or `false`
**Default value:** `true` | `showPublishDate` | Display the publish date of an headline.

**Possible values:** `true` or `false`
**Default value:** `true` | `showDescription` | Display the description of an item.

**Possible values:** `true` or `false`
**Default value:** `false` +| `wrapTitle` | Wrap the title of the item to multiple lines.

**Possible values:** `true` or `false`
**Default value:** `true` +| `wrapDescription` | Wrap the description of the item to multiple lines.

**Possible values:** `true` or `false`
**Default value:** `true` | `reloadInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | `updateInterval` | How often do you want to display a new headline? (Milliseconds)

**Possible values:**`1000` - `60000`
**Default value:** `10000` (10 seconds) | `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `2500` (2.5 seconds) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 7c31717a..738b3130 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -21,6 +21,8 @@ Module.register("newsfeed",{ showSourceTitle: true, showPublishDate: true, showDescription: false, + wrapTitle: true, + wrapDescription: true, reloadInterval: 5 * 60 * 1000, // every 5 minutes updateInterval: 10 * 1000, animationSpeed: 2.5 * 1000, @@ -155,14 +157,14 @@ Module.register("newsfeed",{ if(!this.config.showFullArticle){ var title = document.createElement("div"); - title.className = "bright medium light"; + title.className = "bright medium light" + (!this.config.wrapTitle ? " no-wrap" : ""); title.innerHTML = this.newsItems[this.activeItem].title; wrapper.appendChild(title); } if (this.config.showDescription) { var description = document.createElement("div"); - description.className = "small light"; + description.className = "small light" + (!this.config.wrapDescription ? " no-wrap" : ""); description.innerHTML = this.newsItems[this.activeItem].description; wrapper.appendChild(description); } From a5dc3cd018d0f82d2b0a97a6d7ce2dda9fab2f64 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Sat, 11 Mar 2017 17:40:24 -0600 Subject: [PATCH 219/257] Update CHANGELOG to reflect updates to the codebase --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..3d22fe82 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Added ability to disable wrapping of news items ### Fixed - Update .gitignore to not ignore default modules folder. From 5df818a19c43f4d6237bff3402e665881c4f4d99 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Sun, 12 Mar 2017 11:36:40 -0500 Subject: [PATCH 220/257] Add in support to hide and exclude events based on a filter --- modules/default/calendar/README.md | 1 + modules/default/calendar/calendar.js | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index bc2e9771..81981243 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -44,6 +44,7 @@ The following properties can be configured: | `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates

**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)

**Default value:** `7` | `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.

**Possible values:** `true`, `false`

**Default value:** `true` | `hidePrivate` | Hides private calendar events.

**Possible values:** `true` or `false`
**Default value:** `false` +| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.

**Example:** `['Birthday', 'Hide This Event']`
**Default value:** `[""]` ### Calendar configuration diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 644fc1f6..7c075d1c 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -38,7 +38,10 @@ Module.register("calendar", { "De verjaardag van ": "", "'s birthday": "" }, - broadcastEvents: true + broadcastEvents: true, + excludedEvents: [ + "" + ] }, // Define required scripts. @@ -120,6 +123,19 @@ Module.register("calendar", { for (var e in events) { var event = events[e]; + var excluded = false; + for (var f in this.config.excludedEvents) { + var filter = this.config.excludedEvents[f]; + if (event.title.toLowerCase().includes(filter.toLowerCase())) { + excluded = true; + break; + } + } + + if (excluded) { + continue; + } + var eventWrapper = document.createElement("tr"); if (this.config.colored) { From 873125abe10bb39895f97460f169c97518df3ae5 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Sun, 12 Mar 2017 11:39:05 -0500 Subject: [PATCH 221/257] Add changes to CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..4b209397 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Added in the ability to hide events in the calendar module based on simple string filters. ### Fixed - Update .gitignore to not ignore default modules folder. From 328f15c2eabcf74d3bf260a69d3acad8d3f58baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 12 Mar 2017 21:55:08 -0300 Subject: [PATCH 222/257] Add font-awesome using npm on vendors: This can updated libs and clean repository code. --- Gruntfile.js | 3 +- package.json | 2 + vendor/font-awesome-4.5.0/HELP-US-OUT.txt | 7 - .../font-awesome-4.5.0/css/font-awesome.css | 2086 ----------------- .../css/font-awesome.min.css | 4 - .../font-awesome-4.5.0/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../fonts/fontawesome-webfont.svg | 655 ------ .../fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes vendor/font-awesome-4.5.0/less/animated.less | 34 - .../less/bordered-pulled.less | 25 - vendor/font-awesome-4.5.0/less/core.less | 12 - .../font-awesome-4.5.0/less/fixed-width.less | 6 - .../font-awesome-4.5.0/less/font-awesome.less | 17 - vendor/font-awesome-4.5.0/less/icons.less | 697 ------ vendor/font-awesome-4.5.0/less/larger.less | 13 - vendor/font-awesome-4.5.0/less/list.less | 19 - vendor/font-awesome-4.5.0/less/mixins.less | 26 - vendor/font-awesome-4.5.0/less/path.less | 15 - .../less/rotated-flipped.less | 20 - vendor/font-awesome-4.5.0/less/stacked.less | 20 - vendor/font-awesome-4.5.0/less/variables.less | 708 ------ vendor/font-awesome-4.5.0/scss/_animated.scss | 34 - .../scss/_bordered-pulled.scss | 25 - vendor/font-awesome-4.5.0/scss/_core.scss | 12 - .../font-awesome-4.5.0/scss/_fixed-width.scss | 6 - vendor/font-awesome-4.5.0/scss/_icons.scss | 697 ------ vendor/font-awesome-4.5.0/scss/_larger.scss | 13 - vendor/font-awesome-4.5.0/scss/_list.scss | 19 - vendor/font-awesome-4.5.0/scss/_mixins.scss | 26 - vendor/font-awesome-4.5.0/scss/_path.scss | 15 - .../scss/_rotated-flipped.scss | 20 - vendor/font-awesome-4.5.0/scss/_stacked.scss | 20 - .../font-awesome-4.5.0/scss/_variables.scss | 708 ------ .../font-awesome-4.5.0/scss/font-awesome.scss | 17 - vendor/package.json | 16 + vendor/vendor.js | 2 +- 39 files changed, 21 insertions(+), 5978 deletions(-) delete mode 100644 vendor/font-awesome-4.5.0/HELP-US-OUT.txt delete mode 100644 vendor/font-awesome-4.5.0/css/font-awesome.css delete mode 100644 vendor/font-awesome-4.5.0/css/font-awesome.min.css delete mode 100644 vendor/font-awesome-4.5.0/fonts/FontAwesome.otf delete mode 100644 vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.eot delete mode 100644 vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.svg delete mode 100644 vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.ttf delete mode 100644 vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.woff delete mode 100644 vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.woff2 delete mode 100644 vendor/font-awesome-4.5.0/less/animated.less delete mode 100644 vendor/font-awesome-4.5.0/less/bordered-pulled.less delete mode 100644 vendor/font-awesome-4.5.0/less/core.less delete mode 100644 vendor/font-awesome-4.5.0/less/fixed-width.less delete mode 100644 vendor/font-awesome-4.5.0/less/font-awesome.less delete mode 100644 vendor/font-awesome-4.5.0/less/icons.less delete mode 100644 vendor/font-awesome-4.5.0/less/larger.less delete mode 100644 vendor/font-awesome-4.5.0/less/list.less delete mode 100644 vendor/font-awesome-4.5.0/less/mixins.less delete mode 100644 vendor/font-awesome-4.5.0/less/path.less delete mode 100644 vendor/font-awesome-4.5.0/less/rotated-flipped.less delete mode 100644 vendor/font-awesome-4.5.0/less/stacked.less delete mode 100644 vendor/font-awesome-4.5.0/less/variables.less delete mode 100644 vendor/font-awesome-4.5.0/scss/_animated.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_bordered-pulled.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_core.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_fixed-width.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_icons.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_larger.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_list.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_mixins.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_path.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_rotated-flipped.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_stacked.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/_variables.scss delete mode 100644 vendor/font-awesome-4.5.0/scss/font-awesome.scss create mode 100644 vendor/package.json diff --git a/Gruntfile.js b/Gruntfile.js index 97cb1902..73836ba4 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -25,7 +25,8 @@ module.exports = function(grunt) { jsonlint: { main: { src: ["package.json", ".eslintrc.json", ".stylelintrc", "translations/*.json", - "modules/default/*/translations/*.json", "installers/pm2_MagicMirror.json"], + "modules/default/*/translations/*.json", "installers/pm2_MagicMirror.json", + "vendor/package.js"], options: { reporter: "jshint" } diff --git a/package.json b/package.json index 704f8394..e22a6b0b 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "js/electron.js", "scripts": { "start": "sh run-start.sh", + "install": "npm install --prefix vendor", "postinstall": "sh installers/postinstall/postinstall.sh", "test": "./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive", @@ -49,6 +50,7 @@ "express": "^4.14.0", "express-ipfilter": "latest", "feedme": "latest", + "font-awesome": "^4.7.0", "helmet": "^3.1.0", "iconv-lite": "latest", "moment": "latest", diff --git a/vendor/font-awesome-4.5.0/HELP-US-OUT.txt b/vendor/font-awesome-4.5.0/HELP-US-OUT.txt deleted file mode 100644 index cfd9d9f3..00000000 --- a/vendor/font-awesome-4.5.0/HELP-US-OUT.txt +++ /dev/null @@ -1,7 +0,0 @@ -I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, -Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, -comprehensive icon sets or copy and paste your own. - -Please. Check it out. - --Dave Gandy diff --git a/vendor/font-awesome-4.5.0/css/font-awesome.css b/vendor/font-awesome-4.5.0/css/font-awesome.css deleted file mode 100644 index b2a5fe2f..00000000 --- a/vendor/font-awesome-4.5.0/css/font-awesome.css +++ /dev/null @@ -1,2086 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-feed:before, -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-intersex:before, -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-yc:before, -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-battery-4:before, -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battery-2:before, -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-1:before, -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-0:before, -.fa-battery-empty:before { - content: "\f244"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-sticky-note-o:before { - content: "\f24a"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-hourglass-o:before { - content: "\f250"; -} -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: "\f255"; -} -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: "\f256"; -} -.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa-hand-spock-o:before { - content: "\f259"; -} -.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-tv:before, -.fa-television:before { - content: "\f26c"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa-calendar-times-o:before { - content: "\f273"; -} -.fa-calendar-check-o:before { - content: "\f274"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-map-o:before { - content: "\f278"; -} -.fa-map:before { - content: "\f279"; -} -.fa-commenting:before { - content: "\f27a"; -} -.fa-commenting-o:before { - content: "\f27b"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-vimeo:before { - content: "\f27d"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-credit-card-alt:before { - content: "\f283"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-pause-circle-o:before { - content: "\f28c"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stop-circle-o:before { - content: "\f28e"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-percent:before { - content: "\f295"; -} diff --git a/vendor/font-awesome-4.5.0/css/font-awesome.min.css b/vendor/font-awesome-4.5.0/css/font-awesome.min.css deleted file mode 100644 index d0603cb4..00000000 --- a/vendor/font-awesome-4.5.0/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.5.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} diff --git a/vendor/font-awesome-4.5.0/fonts/FontAwesome.otf b/vendor/font-awesome-4.5.0/fonts/FontAwesome.otf deleted file mode 100644 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 diff --git a/vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.svg b/vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e9..00000000 --- a/vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.ttf b/vendor/font-awesome-4.5.0/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n zR85WCMp8<;snu)zXP=G#Xp%p5&d~RHxMxCJ%JB}XSeUWMFU9vZy3ei-xcz(F8k=rp zdyPM(m0MZZ60|zi?q$sAj;xPPN%hK%PyX-8mZZEy{;|=m@WRkFXXA z5nF70;)1&WoP37EU9F}3icj&lSaW?;#r|w_SUit?N9L1_cPc}*K5%Pkt1n=2nYaoV z5-=GAhF=RUdZ;btZBMs=_tMe1fL6m~K|7*rAS?BN=yO0|fNo_f%Xms&H32%tGnW7tmw`>^wOMdk3PM6+%w}g8kf6c?98ir#!ZcT z6o%=3F`@>TLafTh+!$%g~lJN`>1|lZ=iJwyN^0%@(IsRoHUw zXOYP(ZdllU&ZNn)iuxBGyy(%3XGgV=Sf4qC*5@Qi3JMh0*%4vsObbtU5^D;iN4f2+6Pgs9+! zFz?f{)81^a-WuIAtL^JIp2gF?`W~IPb9;TI)2_;waI30XdAik>bo0GGa#)5+^8=>@C#`nkbj4_os-y*V4S)O3m!b~)n1PK0yhRG zFCJ|6G}v5j#sj`KX03`vTutn(_3VN5 z+jvzt8c-Y+F6Z`3c*MuR6w?^XLbtJ2dJqEK;y5OhaA?dRX0TBf2N9BH2;omVj@`T+ z^e@r&*zC(kl9AaEDNC?)S}@R=cpwzOCJcry4fQ4&6xF~GAsBB@;n}6;*v^6QRoWg8 zmk+GV=2fTF+_>bjCM&~&JLS0QRv8vO7%|2E@y5S;%&}E#98){9N+hCWJEuCFZdD$V zWEJX=F;^A3s@{Y#=a7TP%7%Q=9Ol$GSJb7Q2iiMdczoWehupLEUvB@rtXEs~1@o46 zsE#VTWBUd%=EqK?$92fTuAtm8E*(tN)^lE8n+TrrqTpS|$TNgyty~Tx|^+cZ~{(HPNg(I^#1 zVW}f>9LN9dc8|4B_^|xw@h%_j^0CHs(c+Ih(*Mv{e^?vG-XGiM5qK$wo$~ZY8s!g^ z(~Z>}Q`<=FZEAE{Lu2!&g7@)1S#p!guN_B00#_m7EtYS!sLR#tlSo$^xU z>4D*T+0~~?4*g~Lsxnfb?CPl>6MFbDxZ+Gucp!wyAOrYSSm1ut(Ku;za(<`FY79W3 z5wk*YrXv47#=-B@M6-{Jqav=9r$@@j17t=)k4Nd?|InV5^;d$T;p9FR<^F=ihaAcJ zf8EDE>Y$Jcy3j=R;79EuKOChROj8l0467IwI+S(h)JaTPv5yiYEHrV84<6jk^V<)yeZDG(Gfe`bCa>ye`<^P@Ik^2vw%4yh3t-B{ zz?*=+(&6h;Bemd~;7vMO!BS-y1`@n1xD>(L;>D>j0n@Np5PGuQmi{eU`jsumaxB}= zK~20bI;v&S(|zR@kcx*2ZYjWYJuix~nBRGvia8ZL5<5*oWR;F&&ey4%I6w2gwaYzlJw+ck|KivfE=bq4#PSkz^X%0T>+mLh5R}I@eibEuNdbVuPoKBJn!rUAw#N!`*sw91@KDTTQVbuvE?d>K@c{R;?l5RPTg2jmZOKO~DO*D>KV z-vN2Y)&pDnxD@jmk9%WYwr1(U?L&b7gWKio^bQzvI3~J$;Sd>btm%;fV%Ds?p^wE1 zea3*YdbKgI8uoDqqO1?qboKH4a6N?|J#W^s{a~f;@uC_{GmSvj^xWt~Egt?7v>2$0 zM_04h>L_XfJ1t;_^aJ4co28Xv^_F#QqOg|-7eZD5rFDg#k?1%a@|(I#*w@8$%^wo0 zo~-S=b+WW05Qoq#pyo*@iapP6><7w-_*u@+>y1LGpMGbR8mUuCy?oVgb5?jPR`!~a1HNd=-@4m) zCT!=v%UU#^iKJAQ%*BFZKN<%=LI-H8>hs6sMJJqE4Pz!er>b*r$lC zD_T&NcXxP3ZB7}YxAHl)IW;Zt=Fm?ndMb=%6&07`%yfP`PM25kHO6;JT{NfC#)qfU zz*O2~3ws66RJK2_@+Oi*pdIBIyVH0WGMwO-ah*HtfwQ$shV? z<^7}ICi;^TIF0;*I)n@geSm|Cps`FL8HuJkI_01GBN2aLvQ-(ehgYoX)qY3hST^GD z^B1hP!b-t82+Fmv(rz*97czEuRgA9xG_MhbIy$xCx1Ib>{(?Vp(wirrrU@wQh!iG^ zw(Km*3gM)6Qd?+pL_f9VW`rTI_yB!V&^Z21V#=w9TEP5%{p9v2~JL`pI$?%RFaUI7BAW< z-)Mp2O7t8D)pGi`qZv=pFqs|ZPuZ;HjS=HiS`(w&GPV)J{Vjj*=>Cp*5jsm=vyuj{ zEx-vBl715@h&g9v#1wVbg;6ZR7_Bk&g^?*r@iR(894Y((8dr&WbOJ|nJRdsokn)uJ z2T)9sm4{5rag*v7TcxtE@DBI;{ZG+ML;&S~K;kLC^3%dQg?B{KyoBpi#;kKC>b$sE zrzv_XGeQR#D9ce5RpaM=)FLWJ1$-a9f!@UNYZjn_Vk}B9NxDM`8yj{5P?qM7hz*~7 zieMyWIu^lDuyvHdo|307i@~R!(g5<_C1jx0>K_(p$>cezVYo#2Nf??zz&~wY{J6Ei&_gZ9Au?vEARo4!<& zn=H)%#SF+HpegyFF-UE}9B3d5(Hhez1bZ^X*`*TLf1%|_l(mw~Kl8%Gk*tERciJjyarf|+v3 zn6AKlW#2pXL&KF+evpyksJ;~K zrpd{Oh*`4-re-B@S_8^`#!6b=zw-Mp#u;{qI9}}E`9V$QKgBa}=oKZ!BlIj8T7Q5E z_3)T~44!~K;U^3e0<7?Et_qt<02T0}=^s<{^HyW$6kNOeulU~Hvxh4AUv7UAY_uAK znbYs!5A!=Rcmhi3V%0D4TOYfv;6Cr1y+8OCKe}q~&;yS{LHUC5Tj2;(!zQz8N@1E| zmzDt?wNQ#71L&=fWA6j*6LK}O*X|JF2T(=OK55d7_Cl5=Q>leyf>7876N)=YAF?o& zGJehT?K5DRl38f{Dsfq&7x(TGh6;O9sRgNxC_rXqz;zilUwj|YTI5?o+ytlvS}m~1 z5)&mjLN%W(Y)iMdrBOdi7P9R#X0-FX@oT(4)t*W5JCi)yfg;J|LcD+_7iREwmcrZd zKw(=wy)OgYx=_tZab!vz8z#NXjlbAUAbV{gY9c?aUx}(jM^F{Nv%a$fT}|@L2egIS zN^6PU`7GXRj=FQ&>e31rp)8~djsIgxC9S)KS~if;;8L7Yg_;N&RJT$)gAC! zBiJdcpL+2&wvQ+glq#nI!bAg6OMobbc>s`WV)+qYfO#*`U4&jR^ANiI#b$i4woK4`G|M`MbI43tIiX5 ztAA0ihSZB_w9~ZXbnO;ae5Yv0Y1+-Rr)&t{cgki{`!J71do%)Gu^xwkb$Epg0}w_` zg}sK+*VT}RLqVVLFz6Q<2D=TJJZDe3D#{n%#U&L6B7%n!?<%c9v)Jyg2G+USn) z((s+~y^VMjNDg7a32R2vQ--MFa#~CFx2Nd>XjH#RsPpmUAai(_JmO#WL46Vk;Nasv zo6Yr_%VtAJkZ-vB>R3AD_@AG5`2)`9odG|)m~VDy7K`R6?6bMSwL+AMAK>0B{0lbxS$XT-PUUQjA5uvCK?omDKi(5Pq4U1k|vfLj9UAR zd?K2UCXB9syD`#?ndHCdYG{t!@SO(s3<#>OhU1vnK0!@={rp>RJ%7`*TyEMXO0loI zd|&NiujKQ_xUR~oDtY~5wOvcP@K^g7Y6V5rXF?jxA+j#ttm0?B#sUUg;(v>XFU~B@bd`&WCfFQJ7FiioqM3%DMKu^L1mCV%?{6T5X;Ykzu zyz$!ac4E<21gq8rb~F8J5uOUP7;pXh)qw~0xc7!VI3@J?G=k zZ|?l+SHApU+LjK~r7P0YV;&iHO&1=#Jy-#3Rk6l@{RXC8ux`Nk&gRR;s|&Kd*-)ff zacNGyeo@C{zcS0#mbv;Tk8V%++_E*Dw57da>*`%wg^UC1268huEJP*p(WB`wcQ4q8 z2L#ehhlPMs1qKhNYZTHYjcC?RNE6TO>pOGeOogqyYxl}dGuI=VxqhKLpo8LHyzBhs z^X9E;>&r3LxMJ(gpI=wHvgVfJ6&iBTZ#3>o4*pniiGt*$(l8Q{gghL6oB(z)7c>#A zV9Ed|z;PPxlXXG|&S5Qg;Eic!OqgkJ9QYW!pS{BFFFYF!-0+oXLv-ia0r|4PT}HZa z)JWeI2;9Yf3H$J0-o>+TZ`*L~Hz?@LH?G~V?d_NT@)tg-A^MdY0?}yT?48C>X4U_} zc#DPJsGn8;1`8Q~dV}QVC;HLW0nj~_@U)sKodwA6gautYY;=5M+nJwD}x6J>%{@ za&92-3HAbWp0}#Q=2Ihynz-yqK5`4Iu&{g}J!ikM?KcZvVV7Qe^=GDE@Gq0TclY%C zChDhQ@XJTK`DdMftKc|vo@WlKT{zcIGsHucPqnVM(KRE*duxc5c`9(UcV#%w0hlcE&*^t)wcbIG_E}7eNE)V}ie{WvxYtQ#SR+#5^ z^=V9YvLU1J9j~j;%I!mkbdS@q*2*&QvI<+^5u9_XkM{RwX(ywYNf^tM?V!n;n=GKu zl&*%{FK$|KC&!#2-4@o};`*@grihPmuT;Ks%)K&yFmQ##>|T601;m_#Gv5H~gDX+q z=pUQr1LAs)jxZEQNf?cbk|Pc^C^LK=rkY4Y(^x_l4ADuBk>7edTxXyUV&(}~L`fFQ zQg!elVX+~J#aP}v<0_A_7-=hw0UU?EAc~-&F_aj-yy&<@RjWAmkxr)1JoZZF{)+Xi z4uFg4gk7ivU-1?NduWmUB}_wfKC;jRwrJ^&&KjkSMuwiwgN0+7r5);N6B;z z=E=jQ`9o6|g=*T`7LFUBoonEjs=<$s^x3hET`SvrTYK6kS4}AvA#doCs~;6PAx&63 zwW%W3Qr$Rn+BxU%m}S;6=3?n7rFQkRXLQbMtQKODAs5u%d8obfjLEtyT-P!!eg0R) zeQbzuos_qi3e-%U-qO9fXXTD1XSc=0!=tX4#W8MJSEPRdIwaB*1PMrVO$821r8B9H z6zzd(Cxu4nX4o_pT^ckl`s#FF$AbmzgdLEEbvKQQWeNTQcFUmU#{5F>U`X?|gp!=gfJ-N>Ou=e6@kmnFPjGwx!rKx4v)bVDPf)A0)wwa^AL?bz# z&wbB${@G_)&-X+LKy50dC?R5m@C3hjq-gnLG;kQll~Pc9N{NwtI0=yj`HmO4%A$^H z9|>$vmIlA{WJ$XFq(9^5Z$QdlPZ(y5VXn<91z*@ZwO z@Gl3iOzQ@*?c^v}ebUvb!2Cm5i(OZEK9X{?EaHX18#Wcm^Q_0(uk)PS$iu`Fj=i{6 z$kR2yQ_h#3z#3O_Baaw; zVh%umU=PaymdSq_^1ejT+CnLw$zxDg$!--)OObvBz1K;W#%70c2>v-2xx|+NXp}>;$Qlq03pd!>2fGKQ@#{QwTnm}X1otMZ%7qMdFND{X9AhA zN9>KY6IHnrX{WC?n9_?dg9#C~_JEnOa19kFMXB4h`gnHru3f7cj=X>MF1f!T@^YT8 z#&)5G;+&p?HRP9?P!s0M+?Q!KO{;engyoT=$ z2~tY7E@K=V%C9**&G;9U6<-{~%jebB8(Z7vMrvy7*XmQUb!LfLVE?kG($VAYf}2)*zrD;&}Kmc1UNez9?=9YA#=XCXXAd%6=8Zjj~- z_A&Gygu>cPA;)tV0sO1d-z5N}nIY#Xj$c?BOUHA-c*k;bu7Ju|?s!hg(HsJHss0I4 z7By=+RJJ-87ZA%~kehT$K?)3mabRfBm2?6-(+!R#-7yw;5S(eotjZa)r>#EcI`!t? zo>{$WeCDG0)gfmjxM|kb`y&+(d~wUa-?e@sc;hCRI|#cb8Fn4=BbC;MMJZ>`b>~$3 z^{s1LyRMqXD*3`~E{igK8Cxl@nY;ay2Uqy4XD~kU)Ip37=Azhss9;%1v*>N>tS3~_ znW3Ik!g#H79fgPO{#S-4aK`OjaoCzm@e9#H8h=6s&E4|5(QKXJ5P z%r^DGWRPfrDR3OwZ|lNY1d}eP7&x|)!vruH>nyo<)+lloCSd-?rX^$wMrZlo)_JYz zx@NiWwdmrehG=2!Gl!md>3P=L|HMnTvJ3m<6&_& zB=5RdT?;+j(6l(pAHDUZC;D0I^DjMd=o#bTKDim2oOhi~TeNIt51KDw(VuX`-fa*w zjoF=G9lkbYC%5#v0)c?5*TQ!yZ9d0?4?4YViqhRxywTRE zDLa%luk*o=TD};@=!77`0l=`G0yU0=ao;y=epXT6IANyE=Fn@l>nr_^%f?r@ZJ)3O z&(kd*tFqc$i$mj570hcNE^4Pa({fs?kI{-v09JvNDMZk>jBozy*(pYG+OEInTWmJFkC)@9Qd-v|b?j1j#SJ99RrZk3| zil*tZ%fobQ!?~Va%E}e12X9-naPF(abT^i)4j;eGBavpXO6%ir9l>ds6T%jbo{~5a z{pyCzBi%-#6HA1a3H@sb#*0B1F|2`#m^?ngUy&;dDJ@}309vSBd1`U1(chQti&P{V zL!C;ha$KS@jaVVhWcB#)1ofx4UYl2I>V27jJJy_=Xib4S{rugD^ZUMe-PVvXKnR!l z66+^VtO%!?(`_qmn=|2=4F{g0s#84IwrKJXrmR~Nx#nZd;aO^HEK{HG6>^&Hws`sc z&qQiG^B2TgXID=1vek+67Q_>aW(Gs+7v1^T8O;p~Gd!1BSaIvZOy#w^nvyg2Y&-wL z1Aq&nD}mgAr*%k*wv57P7zNsZF&s1|z*@RX6*NzcN-lmpOoFadhWuEG7^0yP*oUk} z@f$A*Pf0FGid;Q7Jfg$H)f{sNGQRp6b=^6+TYn0pr}5QEXDsGPHzvkarj*W5W3nQG z@nn6ii*pAyJTsxb{AD7cg@3}7^$Fu$F=nyQ*4*=#Zn^6VY^t2HPE^EXqztKk zHSNBxcbym3fW7kC1tef(K$%|SqIdI|m*UXwd zBN<<}{On-sqFdpGNTb#;Zrmfg)kW(=!I_H^@dbh&_=22Oi5~}@bW*@!IXgDMusU$; zyC(+}E?<}A_X^KCSR%-RONTNE33v<=KLl75TnY(13FeCNleJv)%)ZqdcC4RQ;p_HQ z%v-->!|J}7&EMp+`K)i{5J1^?n%K(n=a*hTzs1wGXl67Niq2fr=4qLK{nDquS$LU` z|JKtKVA*%7(96a4Vl#|^WNeVK#AAgZULKigOt5*OXrelq*T_Zc74|qKfH1XVJO}S9 zH=;-pVMGz7idm9=uozH~SF*&AmJBn9tvo7mCYQUc~o6zvNla70GJ zB23FPj(`Jik+CCg&kGDR0O}5Z96YA6yp4MutV-=QE{midzL54Z5puEp!iRZ3gMz^3-{q3Y;~CO-G1+Jjp-|w_G{rR-ONf)52Bv=47`bHsN##K5 z42uX#y2lagV=fv%6J}agoAJ|fnA>LxTTLA#zv~%HAsH?5J`+M@kj)Qp%zmVg-Rg91Vlk;XbuP9E7RuKqr9bn-FRps7+i7DW?KK zcJ;yS)*9xcg9U z`Q0yF*_26DPn)@Lo6j|bDcQDg=CtZmrs>L;?p}^aYOysv935k^hAw{h<3H|O{PcT$ zKYqOW>BG6X_ia5>?P#o9)Yh?J)ohvuS9bQQ1s!dR>KZ%LGq>J1HwVp^kYYleNpY2m z{1f?#gy1cbgqE;Px*PaILj(obucu+Mjzqec4VRs9Hyo(fGVN_hQ6ZW$tb-Qvw@r5g zC8j&lDNx$5D{H~Hgux`$$nZTDeikikJXUuNm=*CaPlt&h#*Y@#u(*Kju{fMoi^I`s zwOV{uYeu!$WZ7nmYBnqU!>v0NH+BurRD2Y}JDJB6k4Jvt;PwHJH)Ly{v})~)#xs*= zL^q~W=f7~iCv#Qxxa66Q*|n=CHCTfadS-7BB zGqj41GjBcX+Ot+&X>F*eh(zqMGptvx!i8IwbW~^wP_504u?9u9x?J#e?Fxreenob#{`Ul48F-_ci1d8n_~4Z4ov;yl;%rjcI}?gchkhm zP(`R>ZRMobCp~+~%|F|oyKCr^*MEP~Z@X}9{`yd5Vt(%I#SeXF=hQbR`+EaR7udL> zSP@u~zcB93s+#B-5qS6~eat!`ToLM+IRC%@d~-v8WB8nL)uGzN89!%%JD)VZdAxI6 zb@dhVE6xo!Jl1%{&klcW#*}G`C)n1n2(Jv=yk1*KYj~K(gwa97F@VMxI10VTK$uh- z)RTx&01lBpBtf1OMAy||Y-oHa$>8N({KVYRlFxv94Q`GyZ($ zgnGHg?$g`4S}V_~a_PQ$dn)FZt6h_3PO|Ai*8A_fd7Z1u>g#Hq8gNxNDV3Av_~&Rc zYp6P>vbC#C_t|UY`Uz(;Z*I{#>yp}RTh;0{>x1?Hyq^4XCRHj;)vmzQ)-Ip5%2mgA z|9dYB>NeEvs+Qfcl)c^uxrvGMML$j3_|bdQNe*aA--sW`n%|T>V`!UErP3Zlen0&s zuOKW~0bgdE5>42%LO|9TX8sQhSdxP}=riY?$3EjYZR8T^c#7>m>nvlVy7Gf#mXMHZFdRjnAkv${6^v;5DXD^(5fPuk<4EBeeEk7{JiO}_<)x~`<++)R8V%We zle;{+-w~28ytk7(HNA0Sqb(rI6_Kj2%|0R1GD}sRx{ps~lRm9Y@HJK@Jd^eX!Tpqz zJnS61YH5yE%K_Vr9$jb5*7p!q#ckm zc4#YRUch=k`Ks}g&l^WxuWx?+nMpgZA@(a(lz>2{%0oQtQ(s)C%8E|M^|#V%b-rE@Jl||FLQEgRYzSNzgk2HfK=3A}Am^H;nKY!f#T` zrC`pKf(S}j%9w%tLD`CUHFCaW-%oLG@?8yO5d*(L;cW0u02Ab_IqVZ|*hr9+wHfa= zWxK=g3X0hTAqe^!lp%Jx5X8L{gDf7@28g~fKhxp#Yp_0X`rpT~k4ZU(de`)fxTWIq zz<|?#9Ev2~hagLSgcr+^w4EA4ZJ_TDO+%(6(*-p|1PZ1R>sd(g5M2i=*ryKP;ZkDc zo�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 li { position: relative; } -} -.@{fa-css-prefix}-li { - position: absolute; - left: -@fa-li-width; - width: @fa-li-width; - top: (2em / 14); - text-align: center; - &.@{fa-css-prefix}-lg { - left: (-@fa-li-width + (4em / 14)); - } -} diff --git a/vendor/font-awesome-4.5.0/less/mixins.less b/vendor/font-awesome-4.5.0/less/mixins.less deleted file mode 100644 index d5a43a14..00000000 --- a/vendor/font-awesome-4.5.0/less/mixins.less +++ /dev/null @@ -1,26 +0,0 @@ -// Mixins -// -------------------------- - -.fa-icon() { - display: inline-block; - font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -} - -.fa-icon-rotate(@degrees, @rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); - -webkit-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); - transform: rotate(@degrees); -} - -.fa-icon-flip(@horiz, @vert, @rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); - -webkit-transform: scale(@horiz, @vert); - -ms-transform: scale(@horiz, @vert); - transform: scale(@horiz, @vert); -} diff --git a/vendor/font-awesome-4.5.0/less/path.less b/vendor/font-awesome-4.5.0/less/path.less deleted file mode 100644 index 9211e665..00000000 --- a/vendor/font-awesome-4.5.0/less/path.less +++ /dev/null @@ -1,15 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); - src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), - url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), - url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), - url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), - url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); -// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; -} diff --git a/vendor/font-awesome-4.5.0/less/rotated-flipped.less b/vendor/font-awesome-4.5.0/less/rotated-flipped.less deleted file mode 100644 index f6ba8147..00000000 --- a/vendor/font-awesome-4.5.0/less/rotated-flipped.less +++ /dev/null @@ -1,20 +0,0 @@ -// Rotated & Flipped Icons -// ------------------------- - -.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } -.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } -.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } - -.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } -.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } - -// Hook for IE8-9 -// ------------------------- - -:root .@{fa-css-prefix}-rotate-90, -:root .@{fa-css-prefix}-rotate-180, -:root .@{fa-css-prefix}-rotate-270, -:root .@{fa-css-prefix}-flip-horizontal, -:root .@{fa-css-prefix}-flip-vertical { - filter: none; -} diff --git a/vendor/font-awesome-4.5.0/less/stacked.less b/vendor/font-awesome-4.5.0/less/stacked.less deleted file mode 100644 index fc53fb0e..00000000 --- a/vendor/font-awesome-4.5.0/less/stacked.less +++ /dev/null @@ -1,20 +0,0 @@ -// Stacked Icons -// ------------------------- - -.@{fa-css-prefix}-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.@{fa-css-prefix}-stack-1x { line-height: inherit; } -.@{fa-css-prefix}-stack-2x { font-size: 2em; } -.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/vendor/font-awesome-4.5.0/less/variables.less b/vendor/font-awesome-4.5.0/less/variables.less deleted file mode 100644 index 37c4b80a..00000000 --- a/vendor/font-awesome-4.5.0/less/variables.less +++ /dev/null @@ -1,708 +0,0 @@ -// Variables -// -------------------------- - -@fa-font-path: "../fonts"; -@fa-font-size-base: 14px; -@fa-line-height-base: 1; -//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.5.0/fonts"; // for referencing Bootstrap CDN font files directly -@fa-css-prefix: fa; -@fa-version: "4.5.0"; -@fa-border-color: #eee; -@fa-inverse: #fff; -@fa-li-width: (30em / 14); - -@fa-var-500px: "\f26e"; -@fa-var-adjust: "\f042"; -@fa-var-adn: "\f170"; -@fa-var-align-center: "\f037"; -@fa-var-align-justify: "\f039"; -@fa-var-align-left: "\f036"; -@fa-var-align-right: "\f038"; -@fa-var-amazon: "\f270"; -@fa-var-ambulance: "\f0f9"; -@fa-var-anchor: "\f13d"; -@fa-var-android: "\f17b"; -@fa-var-angellist: "\f209"; -@fa-var-angle-double-down: "\f103"; -@fa-var-angle-double-left: "\f100"; -@fa-var-angle-double-right: "\f101"; -@fa-var-angle-double-up: "\f102"; -@fa-var-angle-down: "\f107"; -@fa-var-angle-left: "\f104"; -@fa-var-angle-right: "\f105"; -@fa-var-angle-up: "\f106"; -@fa-var-apple: "\f179"; -@fa-var-archive: "\f187"; -@fa-var-area-chart: "\f1fe"; -@fa-var-arrow-circle-down: "\f0ab"; -@fa-var-arrow-circle-left: "\f0a8"; -@fa-var-arrow-circle-o-down: "\f01a"; -@fa-var-arrow-circle-o-left: "\f190"; -@fa-var-arrow-circle-o-right: "\f18e"; -@fa-var-arrow-circle-o-up: "\f01b"; -@fa-var-arrow-circle-right: "\f0a9"; -@fa-var-arrow-circle-up: "\f0aa"; -@fa-var-arrow-down: "\f063"; -@fa-var-arrow-left: "\f060"; -@fa-var-arrow-right: "\f061"; -@fa-var-arrow-up: "\f062"; -@fa-var-arrows: "\f047"; -@fa-var-arrows-alt: "\f0b2"; -@fa-var-arrows-h: "\f07e"; -@fa-var-arrows-v: "\f07d"; -@fa-var-asterisk: "\f069"; -@fa-var-at: "\f1fa"; -@fa-var-automobile: "\f1b9"; -@fa-var-backward: "\f04a"; -@fa-var-balance-scale: "\f24e"; -@fa-var-ban: "\f05e"; -@fa-var-bank: "\f19c"; -@fa-var-bar-chart: "\f080"; -@fa-var-bar-chart-o: "\f080"; -@fa-var-barcode: "\f02a"; -@fa-var-bars: "\f0c9"; -@fa-var-battery-0: "\f244"; -@fa-var-battery-1: "\f243"; -@fa-var-battery-2: "\f242"; -@fa-var-battery-3: "\f241"; -@fa-var-battery-4: "\f240"; -@fa-var-battery-empty: "\f244"; -@fa-var-battery-full: "\f240"; -@fa-var-battery-half: "\f242"; -@fa-var-battery-quarter: "\f243"; -@fa-var-battery-three-quarters: "\f241"; -@fa-var-bed: "\f236"; -@fa-var-beer: "\f0fc"; -@fa-var-behance: "\f1b4"; -@fa-var-behance-square: "\f1b5"; -@fa-var-bell: "\f0f3"; -@fa-var-bell-o: "\f0a2"; -@fa-var-bell-slash: "\f1f6"; -@fa-var-bell-slash-o: "\f1f7"; -@fa-var-bicycle: "\f206"; -@fa-var-binoculars: "\f1e5"; -@fa-var-birthday-cake: "\f1fd"; -@fa-var-bitbucket: "\f171"; -@fa-var-bitbucket-square: "\f172"; -@fa-var-bitcoin: "\f15a"; -@fa-var-black-tie: "\f27e"; -@fa-var-bluetooth: "\f293"; -@fa-var-bluetooth-b: "\f294"; -@fa-var-bold: "\f032"; -@fa-var-bolt: "\f0e7"; -@fa-var-bomb: "\f1e2"; -@fa-var-book: "\f02d"; -@fa-var-bookmark: "\f02e"; -@fa-var-bookmark-o: "\f097"; -@fa-var-briefcase: "\f0b1"; -@fa-var-btc: "\f15a"; -@fa-var-bug: "\f188"; -@fa-var-building: "\f1ad"; -@fa-var-building-o: "\f0f7"; -@fa-var-bullhorn: "\f0a1"; -@fa-var-bullseye: "\f140"; -@fa-var-bus: "\f207"; -@fa-var-buysellads: "\f20d"; -@fa-var-cab: "\f1ba"; -@fa-var-calculator: "\f1ec"; -@fa-var-calendar: "\f073"; -@fa-var-calendar-check-o: "\f274"; -@fa-var-calendar-minus-o: "\f272"; -@fa-var-calendar-o: "\f133"; -@fa-var-calendar-plus-o: "\f271"; -@fa-var-calendar-times-o: "\f273"; -@fa-var-camera: "\f030"; -@fa-var-camera-retro: "\f083"; -@fa-var-car: "\f1b9"; -@fa-var-caret-down: "\f0d7"; -@fa-var-caret-left: "\f0d9"; -@fa-var-caret-right: "\f0da"; -@fa-var-caret-square-o-down: "\f150"; -@fa-var-caret-square-o-left: "\f191"; -@fa-var-caret-square-o-right: "\f152"; -@fa-var-caret-square-o-up: "\f151"; -@fa-var-caret-up: "\f0d8"; -@fa-var-cart-arrow-down: "\f218"; -@fa-var-cart-plus: "\f217"; -@fa-var-cc: "\f20a"; -@fa-var-cc-amex: "\f1f3"; -@fa-var-cc-diners-club: "\f24c"; -@fa-var-cc-discover: "\f1f2"; -@fa-var-cc-jcb: "\f24b"; -@fa-var-cc-mastercard: "\f1f1"; -@fa-var-cc-paypal: "\f1f4"; -@fa-var-cc-stripe: "\f1f5"; -@fa-var-cc-visa: "\f1f0"; -@fa-var-certificate: "\f0a3"; -@fa-var-chain: "\f0c1"; -@fa-var-chain-broken: "\f127"; -@fa-var-check: "\f00c"; -@fa-var-check-circle: "\f058"; -@fa-var-check-circle-o: "\f05d"; -@fa-var-check-square: "\f14a"; -@fa-var-check-square-o: "\f046"; -@fa-var-chevron-circle-down: "\f13a"; -@fa-var-chevron-circle-left: "\f137"; -@fa-var-chevron-circle-right: "\f138"; -@fa-var-chevron-circle-up: "\f139"; -@fa-var-chevron-down: "\f078"; -@fa-var-chevron-left: "\f053"; -@fa-var-chevron-right: "\f054"; -@fa-var-chevron-up: "\f077"; -@fa-var-child: "\f1ae"; -@fa-var-chrome: "\f268"; -@fa-var-circle: "\f111"; -@fa-var-circle-o: "\f10c"; -@fa-var-circle-o-notch: "\f1ce"; -@fa-var-circle-thin: "\f1db"; -@fa-var-clipboard: "\f0ea"; -@fa-var-clock-o: "\f017"; -@fa-var-clone: "\f24d"; -@fa-var-close: "\f00d"; -@fa-var-cloud: "\f0c2"; -@fa-var-cloud-download: "\f0ed"; -@fa-var-cloud-upload: "\f0ee"; -@fa-var-cny: "\f157"; -@fa-var-code: "\f121"; -@fa-var-code-fork: "\f126"; -@fa-var-codepen: "\f1cb"; -@fa-var-codiepie: "\f284"; -@fa-var-coffee: "\f0f4"; -@fa-var-cog: "\f013"; -@fa-var-cogs: "\f085"; -@fa-var-columns: "\f0db"; -@fa-var-comment: "\f075"; -@fa-var-comment-o: "\f0e5"; -@fa-var-commenting: "\f27a"; -@fa-var-commenting-o: "\f27b"; -@fa-var-comments: "\f086"; -@fa-var-comments-o: "\f0e6"; -@fa-var-compass: "\f14e"; -@fa-var-compress: "\f066"; -@fa-var-connectdevelop: "\f20e"; -@fa-var-contao: "\f26d"; -@fa-var-copy: "\f0c5"; -@fa-var-copyright: "\f1f9"; -@fa-var-creative-commons: "\f25e"; -@fa-var-credit-card: "\f09d"; -@fa-var-credit-card-alt: "\f283"; -@fa-var-crop: "\f125"; -@fa-var-crosshairs: "\f05b"; -@fa-var-css3: "\f13c"; -@fa-var-cube: "\f1b2"; -@fa-var-cubes: "\f1b3"; -@fa-var-cut: "\f0c4"; -@fa-var-cutlery: "\f0f5"; -@fa-var-dashboard: "\f0e4"; -@fa-var-dashcube: "\f210"; -@fa-var-database: "\f1c0"; -@fa-var-dedent: "\f03b"; -@fa-var-delicious: "\f1a5"; -@fa-var-desktop: "\f108"; -@fa-var-deviantart: "\f1bd"; -@fa-var-diamond: "\f219"; -@fa-var-digg: "\f1a6"; -@fa-var-dollar: "\f155"; -@fa-var-dot-circle-o: "\f192"; -@fa-var-download: "\f019"; -@fa-var-dribbble: "\f17d"; -@fa-var-dropbox: "\f16b"; -@fa-var-drupal: "\f1a9"; -@fa-var-edge: "\f282"; -@fa-var-edit: "\f044"; -@fa-var-eject: "\f052"; -@fa-var-ellipsis-h: "\f141"; -@fa-var-ellipsis-v: "\f142"; -@fa-var-empire: "\f1d1"; -@fa-var-envelope: "\f0e0"; -@fa-var-envelope-o: "\f003"; -@fa-var-envelope-square: "\f199"; -@fa-var-eraser: "\f12d"; -@fa-var-eur: "\f153"; -@fa-var-euro: "\f153"; -@fa-var-exchange: "\f0ec"; -@fa-var-exclamation: "\f12a"; -@fa-var-exclamation-circle: "\f06a"; -@fa-var-exclamation-triangle: "\f071"; -@fa-var-expand: "\f065"; -@fa-var-expeditedssl: "\f23e"; -@fa-var-external-link: "\f08e"; -@fa-var-external-link-square: "\f14c"; -@fa-var-eye: "\f06e"; -@fa-var-eye-slash: "\f070"; -@fa-var-eyedropper: "\f1fb"; -@fa-var-facebook: "\f09a"; -@fa-var-facebook-f: "\f09a"; -@fa-var-facebook-official: "\f230"; -@fa-var-facebook-square: "\f082"; -@fa-var-fast-backward: "\f049"; -@fa-var-fast-forward: "\f050"; -@fa-var-fax: "\f1ac"; -@fa-var-feed: "\f09e"; -@fa-var-female: "\f182"; -@fa-var-fighter-jet: "\f0fb"; -@fa-var-file: "\f15b"; -@fa-var-file-archive-o: "\f1c6"; -@fa-var-file-audio-o: "\f1c7"; -@fa-var-file-code-o: "\f1c9"; -@fa-var-file-excel-o: "\f1c3"; -@fa-var-file-image-o: "\f1c5"; -@fa-var-file-movie-o: "\f1c8"; -@fa-var-file-o: "\f016"; -@fa-var-file-pdf-o: "\f1c1"; -@fa-var-file-photo-o: "\f1c5"; -@fa-var-file-picture-o: "\f1c5"; -@fa-var-file-powerpoint-o: "\f1c4"; -@fa-var-file-sound-o: "\f1c7"; -@fa-var-file-text: "\f15c"; -@fa-var-file-text-o: "\f0f6"; -@fa-var-file-video-o: "\f1c8"; -@fa-var-file-word-o: "\f1c2"; -@fa-var-file-zip-o: "\f1c6"; -@fa-var-files-o: "\f0c5"; -@fa-var-film: "\f008"; -@fa-var-filter: "\f0b0"; -@fa-var-fire: "\f06d"; -@fa-var-fire-extinguisher: "\f134"; -@fa-var-firefox: "\f269"; -@fa-var-flag: "\f024"; -@fa-var-flag-checkered: "\f11e"; -@fa-var-flag-o: "\f11d"; -@fa-var-flash: "\f0e7"; -@fa-var-flask: "\f0c3"; -@fa-var-flickr: "\f16e"; -@fa-var-floppy-o: "\f0c7"; -@fa-var-folder: "\f07b"; -@fa-var-folder-o: "\f114"; -@fa-var-folder-open: "\f07c"; -@fa-var-folder-open-o: "\f115"; -@fa-var-font: "\f031"; -@fa-var-fonticons: "\f280"; -@fa-var-fort-awesome: "\f286"; -@fa-var-forumbee: "\f211"; -@fa-var-forward: "\f04e"; -@fa-var-foursquare: "\f180"; -@fa-var-frown-o: "\f119"; -@fa-var-futbol-o: "\f1e3"; -@fa-var-gamepad: "\f11b"; -@fa-var-gavel: "\f0e3"; -@fa-var-gbp: "\f154"; -@fa-var-ge: "\f1d1"; -@fa-var-gear: "\f013"; -@fa-var-gears: "\f085"; -@fa-var-genderless: "\f22d"; -@fa-var-get-pocket: "\f265"; -@fa-var-gg: "\f260"; -@fa-var-gg-circle: "\f261"; -@fa-var-gift: "\f06b"; -@fa-var-git: "\f1d3"; -@fa-var-git-square: "\f1d2"; -@fa-var-github: "\f09b"; -@fa-var-github-alt: "\f113"; -@fa-var-github-square: "\f092"; -@fa-var-gittip: "\f184"; -@fa-var-glass: "\f000"; -@fa-var-globe: "\f0ac"; -@fa-var-google: "\f1a0"; -@fa-var-google-plus: "\f0d5"; -@fa-var-google-plus-square: "\f0d4"; -@fa-var-google-wallet: "\f1ee"; -@fa-var-graduation-cap: "\f19d"; -@fa-var-gratipay: "\f184"; -@fa-var-group: "\f0c0"; -@fa-var-h-square: "\f0fd"; -@fa-var-hacker-news: "\f1d4"; -@fa-var-hand-grab-o: "\f255"; -@fa-var-hand-lizard-o: "\f258"; -@fa-var-hand-o-down: "\f0a7"; -@fa-var-hand-o-left: "\f0a5"; -@fa-var-hand-o-right: "\f0a4"; -@fa-var-hand-o-up: "\f0a6"; -@fa-var-hand-paper-o: "\f256"; -@fa-var-hand-peace-o: "\f25b"; -@fa-var-hand-pointer-o: "\f25a"; -@fa-var-hand-rock-o: "\f255"; -@fa-var-hand-scissors-o: "\f257"; -@fa-var-hand-spock-o: "\f259"; -@fa-var-hand-stop-o: "\f256"; -@fa-var-hashtag: "\f292"; -@fa-var-hdd-o: "\f0a0"; -@fa-var-header: "\f1dc"; -@fa-var-headphones: "\f025"; -@fa-var-heart: "\f004"; -@fa-var-heart-o: "\f08a"; -@fa-var-heartbeat: "\f21e"; -@fa-var-history: "\f1da"; -@fa-var-home: "\f015"; -@fa-var-hospital-o: "\f0f8"; -@fa-var-hotel: "\f236"; -@fa-var-hourglass: "\f254"; -@fa-var-hourglass-1: "\f251"; -@fa-var-hourglass-2: "\f252"; -@fa-var-hourglass-3: "\f253"; -@fa-var-hourglass-end: "\f253"; -@fa-var-hourglass-half: "\f252"; -@fa-var-hourglass-o: "\f250"; -@fa-var-hourglass-start: "\f251"; -@fa-var-houzz: "\f27c"; -@fa-var-html5: "\f13b"; -@fa-var-i-cursor: "\f246"; -@fa-var-ils: "\f20b"; -@fa-var-image: "\f03e"; -@fa-var-inbox: "\f01c"; -@fa-var-indent: "\f03c"; -@fa-var-industry: "\f275"; -@fa-var-info: "\f129"; -@fa-var-info-circle: "\f05a"; -@fa-var-inr: "\f156"; -@fa-var-instagram: "\f16d"; -@fa-var-institution: "\f19c"; -@fa-var-internet-explorer: "\f26b"; -@fa-var-intersex: "\f224"; -@fa-var-ioxhost: "\f208"; -@fa-var-italic: "\f033"; -@fa-var-joomla: "\f1aa"; -@fa-var-jpy: "\f157"; -@fa-var-jsfiddle: "\f1cc"; -@fa-var-key: "\f084"; -@fa-var-keyboard-o: "\f11c"; -@fa-var-krw: "\f159"; -@fa-var-language: "\f1ab"; -@fa-var-laptop: "\f109"; -@fa-var-lastfm: "\f202"; -@fa-var-lastfm-square: "\f203"; -@fa-var-leaf: "\f06c"; -@fa-var-leanpub: "\f212"; -@fa-var-legal: "\f0e3"; -@fa-var-lemon-o: "\f094"; -@fa-var-level-down: "\f149"; -@fa-var-level-up: "\f148"; -@fa-var-life-bouy: "\f1cd"; -@fa-var-life-buoy: "\f1cd"; -@fa-var-life-ring: "\f1cd"; -@fa-var-life-saver: "\f1cd"; -@fa-var-lightbulb-o: "\f0eb"; -@fa-var-line-chart: "\f201"; -@fa-var-link: "\f0c1"; -@fa-var-linkedin: "\f0e1"; -@fa-var-linkedin-square: "\f08c"; -@fa-var-linux: "\f17c"; -@fa-var-list: "\f03a"; -@fa-var-list-alt: "\f022"; -@fa-var-list-ol: "\f0cb"; -@fa-var-list-ul: "\f0ca"; -@fa-var-location-arrow: "\f124"; -@fa-var-lock: "\f023"; -@fa-var-long-arrow-down: "\f175"; -@fa-var-long-arrow-left: "\f177"; -@fa-var-long-arrow-right: "\f178"; -@fa-var-long-arrow-up: "\f176"; -@fa-var-magic: "\f0d0"; -@fa-var-magnet: "\f076"; -@fa-var-mail-forward: "\f064"; -@fa-var-mail-reply: "\f112"; -@fa-var-mail-reply-all: "\f122"; -@fa-var-male: "\f183"; -@fa-var-map: "\f279"; -@fa-var-map-marker: "\f041"; -@fa-var-map-o: "\f278"; -@fa-var-map-pin: "\f276"; -@fa-var-map-signs: "\f277"; -@fa-var-mars: "\f222"; -@fa-var-mars-double: "\f227"; -@fa-var-mars-stroke: "\f229"; -@fa-var-mars-stroke-h: "\f22b"; -@fa-var-mars-stroke-v: "\f22a"; -@fa-var-maxcdn: "\f136"; -@fa-var-meanpath: "\f20c"; -@fa-var-medium: "\f23a"; -@fa-var-medkit: "\f0fa"; -@fa-var-meh-o: "\f11a"; -@fa-var-mercury: "\f223"; -@fa-var-microphone: "\f130"; -@fa-var-microphone-slash: "\f131"; -@fa-var-minus: "\f068"; -@fa-var-minus-circle: "\f056"; -@fa-var-minus-square: "\f146"; -@fa-var-minus-square-o: "\f147"; -@fa-var-mixcloud: "\f289"; -@fa-var-mobile: "\f10b"; -@fa-var-mobile-phone: "\f10b"; -@fa-var-modx: "\f285"; -@fa-var-money: "\f0d6"; -@fa-var-moon-o: "\f186"; -@fa-var-mortar-board: "\f19d"; -@fa-var-motorcycle: "\f21c"; -@fa-var-mouse-pointer: "\f245"; -@fa-var-music: "\f001"; -@fa-var-navicon: "\f0c9"; -@fa-var-neuter: "\f22c"; -@fa-var-newspaper-o: "\f1ea"; -@fa-var-object-group: "\f247"; -@fa-var-object-ungroup: "\f248"; -@fa-var-odnoklassniki: "\f263"; -@fa-var-odnoklassniki-square: "\f264"; -@fa-var-opencart: "\f23d"; -@fa-var-openid: "\f19b"; -@fa-var-opera: "\f26a"; -@fa-var-optin-monster: "\f23c"; -@fa-var-outdent: "\f03b"; -@fa-var-pagelines: "\f18c"; -@fa-var-paint-brush: "\f1fc"; -@fa-var-paper-plane: "\f1d8"; -@fa-var-paper-plane-o: "\f1d9"; -@fa-var-paperclip: "\f0c6"; -@fa-var-paragraph: "\f1dd"; -@fa-var-paste: "\f0ea"; -@fa-var-pause: "\f04c"; -@fa-var-pause-circle: "\f28b"; -@fa-var-pause-circle-o: "\f28c"; -@fa-var-paw: "\f1b0"; -@fa-var-paypal: "\f1ed"; -@fa-var-pencil: "\f040"; -@fa-var-pencil-square: "\f14b"; -@fa-var-pencil-square-o: "\f044"; -@fa-var-percent: "\f295"; -@fa-var-phone: "\f095"; -@fa-var-phone-square: "\f098"; -@fa-var-photo: "\f03e"; -@fa-var-picture-o: "\f03e"; -@fa-var-pie-chart: "\f200"; -@fa-var-pied-piper: "\f1a7"; -@fa-var-pied-piper-alt: "\f1a8"; -@fa-var-pinterest: "\f0d2"; -@fa-var-pinterest-p: "\f231"; -@fa-var-pinterest-square: "\f0d3"; -@fa-var-plane: "\f072"; -@fa-var-play: "\f04b"; -@fa-var-play-circle: "\f144"; -@fa-var-play-circle-o: "\f01d"; -@fa-var-plug: "\f1e6"; -@fa-var-plus: "\f067"; -@fa-var-plus-circle: "\f055"; -@fa-var-plus-square: "\f0fe"; -@fa-var-plus-square-o: "\f196"; -@fa-var-power-off: "\f011"; -@fa-var-print: "\f02f"; -@fa-var-product-hunt: "\f288"; -@fa-var-puzzle-piece: "\f12e"; -@fa-var-qq: "\f1d6"; -@fa-var-qrcode: "\f029"; -@fa-var-question: "\f128"; -@fa-var-question-circle: "\f059"; -@fa-var-quote-left: "\f10d"; -@fa-var-quote-right: "\f10e"; -@fa-var-ra: "\f1d0"; -@fa-var-random: "\f074"; -@fa-var-rebel: "\f1d0"; -@fa-var-recycle: "\f1b8"; -@fa-var-reddit: "\f1a1"; -@fa-var-reddit-alien: "\f281"; -@fa-var-reddit-square: "\f1a2"; -@fa-var-refresh: "\f021"; -@fa-var-registered: "\f25d"; -@fa-var-remove: "\f00d"; -@fa-var-renren: "\f18b"; -@fa-var-reorder: "\f0c9"; -@fa-var-repeat: "\f01e"; -@fa-var-reply: "\f112"; -@fa-var-reply-all: "\f122"; -@fa-var-retweet: "\f079"; -@fa-var-rmb: "\f157"; -@fa-var-road: "\f018"; -@fa-var-rocket: "\f135"; -@fa-var-rotate-left: "\f0e2"; -@fa-var-rotate-right: "\f01e"; -@fa-var-rouble: "\f158"; -@fa-var-rss: "\f09e"; -@fa-var-rss-square: "\f143"; -@fa-var-rub: "\f158"; -@fa-var-ruble: "\f158"; -@fa-var-rupee: "\f156"; -@fa-var-safari: "\f267"; -@fa-var-save: "\f0c7"; -@fa-var-scissors: "\f0c4"; -@fa-var-scribd: "\f28a"; -@fa-var-search: "\f002"; -@fa-var-search-minus: "\f010"; -@fa-var-search-plus: "\f00e"; -@fa-var-sellsy: "\f213"; -@fa-var-send: "\f1d8"; -@fa-var-send-o: "\f1d9"; -@fa-var-server: "\f233"; -@fa-var-share: "\f064"; -@fa-var-share-alt: "\f1e0"; -@fa-var-share-alt-square: "\f1e1"; -@fa-var-share-square: "\f14d"; -@fa-var-share-square-o: "\f045"; -@fa-var-shekel: "\f20b"; -@fa-var-sheqel: "\f20b"; -@fa-var-shield: "\f132"; -@fa-var-ship: "\f21a"; -@fa-var-shirtsinbulk: "\f214"; -@fa-var-shopping-bag: "\f290"; -@fa-var-shopping-basket: "\f291"; -@fa-var-shopping-cart: "\f07a"; -@fa-var-sign-in: "\f090"; -@fa-var-sign-out: "\f08b"; -@fa-var-signal: "\f012"; -@fa-var-simplybuilt: "\f215"; -@fa-var-sitemap: "\f0e8"; -@fa-var-skyatlas: "\f216"; -@fa-var-skype: "\f17e"; -@fa-var-slack: "\f198"; -@fa-var-sliders: "\f1de"; -@fa-var-slideshare: "\f1e7"; -@fa-var-smile-o: "\f118"; -@fa-var-soccer-ball-o: "\f1e3"; -@fa-var-sort: "\f0dc"; -@fa-var-sort-alpha-asc: "\f15d"; -@fa-var-sort-alpha-desc: "\f15e"; -@fa-var-sort-amount-asc: "\f160"; -@fa-var-sort-amount-desc: "\f161"; -@fa-var-sort-asc: "\f0de"; -@fa-var-sort-desc: "\f0dd"; -@fa-var-sort-down: "\f0dd"; -@fa-var-sort-numeric-asc: "\f162"; -@fa-var-sort-numeric-desc: "\f163"; -@fa-var-sort-up: "\f0de"; -@fa-var-soundcloud: "\f1be"; -@fa-var-space-shuttle: "\f197"; -@fa-var-spinner: "\f110"; -@fa-var-spoon: "\f1b1"; -@fa-var-spotify: "\f1bc"; -@fa-var-square: "\f0c8"; -@fa-var-square-o: "\f096"; -@fa-var-stack-exchange: "\f18d"; -@fa-var-stack-overflow: "\f16c"; -@fa-var-star: "\f005"; -@fa-var-star-half: "\f089"; -@fa-var-star-half-empty: "\f123"; -@fa-var-star-half-full: "\f123"; -@fa-var-star-half-o: "\f123"; -@fa-var-star-o: "\f006"; -@fa-var-steam: "\f1b6"; -@fa-var-steam-square: "\f1b7"; -@fa-var-step-backward: "\f048"; -@fa-var-step-forward: "\f051"; -@fa-var-stethoscope: "\f0f1"; -@fa-var-sticky-note: "\f249"; -@fa-var-sticky-note-o: "\f24a"; -@fa-var-stop: "\f04d"; -@fa-var-stop-circle: "\f28d"; -@fa-var-stop-circle-o: "\f28e"; -@fa-var-street-view: "\f21d"; -@fa-var-strikethrough: "\f0cc"; -@fa-var-stumbleupon: "\f1a4"; -@fa-var-stumbleupon-circle: "\f1a3"; -@fa-var-subscript: "\f12c"; -@fa-var-subway: "\f239"; -@fa-var-suitcase: "\f0f2"; -@fa-var-sun-o: "\f185"; -@fa-var-superscript: "\f12b"; -@fa-var-support: "\f1cd"; -@fa-var-table: "\f0ce"; -@fa-var-tablet: "\f10a"; -@fa-var-tachometer: "\f0e4"; -@fa-var-tag: "\f02b"; -@fa-var-tags: "\f02c"; -@fa-var-tasks: "\f0ae"; -@fa-var-taxi: "\f1ba"; -@fa-var-television: "\f26c"; -@fa-var-tencent-weibo: "\f1d5"; -@fa-var-terminal: "\f120"; -@fa-var-text-height: "\f034"; -@fa-var-text-width: "\f035"; -@fa-var-th: "\f00a"; -@fa-var-th-large: "\f009"; -@fa-var-th-list: "\f00b"; -@fa-var-thumb-tack: "\f08d"; -@fa-var-thumbs-down: "\f165"; -@fa-var-thumbs-o-down: "\f088"; -@fa-var-thumbs-o-up: "\f087"; -@fa-var-thumbs-up: "\f164"; -@fa-var-ticket: "\f145"; -@fa-var-times: "\f00d"; -@fa-var-times-circle: "\f057"; -@fa-var-times-circle-o: "\f05c"; -@fa-var-tint: "\f043"; -@fa-var-toggle-down: "\f150"; -@fa-var-toggle-left: "\f191"; -@fa-var-toggle-off: "\f204"; -@fa-var-toggle-on: "\f205"; -@fa-var-toggle-right: "\f152"; -@fa-var-toggle-up: "\f151"; -@fa-var-trademark: "\f25c"; -@fa-var-train: "\f238"; -@fa-var-transgender: "\f224"; -@fa-var-transgender-alt: "\f225"; -@fa-var-trash: "\f1f8"; -@fa-var-trash-o: "\f014"; -@fa-var-tree: "\f1bb"; -@fa-var-trello: "\f181"; -@fa-var-tripadvisor: "\f262"; -@fa-var-trophy: "\f091"; -@fa-var-truck: "\f0d1"; -@fa-var-try: "\f195"; -@fa-var-tty: "\f1e4"; -@fa-var-tumblr: "\f173"; -@fa-var-tumblr-square: "\f174"; -@fa-var-turkish-lira: "\f195"; -@fa-var-tv: "\f26c"; -@fa-var-twitch: "\f1e8"; -@fa-var-twitter: "\f099"; -@fa-var-twitter-square: "\f081"; -@fa-var-umbrella: "\f0e9"; -@fa-var-underline: "\f0cd"; -@fa-var-undo: "\f0e2"; -@fa-var-university: "\f19c"; -@fa-var-unlink: "\f127"; -@fa-var-unlock: "\f09c"; -@fa-var-unlock-alt: "\f13e"; -@fa-var-unsorted: "\f0dc"; -@fa-var-upload: "\f093"; -@fa-var-usb: "\f287"; -@fa-var-usd: "\f155"; -@fa-var-user: "\f007"; -@fa-var-user-md: "\f0f0"; -@fa-var-user-plus: "\f234"; -@fa-var-user-secret: "\f21b"; -@fa-var-user-times: "\f235"; -@fa-var-users: "\f0c0"; -@fa-var-venus: "\f221"; -@fa-var-venus-double: "\f226"; -@fa-var-venus-mars: "\f228"; -@fa-var-viacoin: "\f237"; -@fa-var-video-camera: "\f03d"; -@fa-var-vimeo: "\f27d"; -@fa-var-vimeo-square: "\f194"; -@fa-var-vine: "\f1ca"; -@fa-var-vk: "\f189"; -@fa-var-volume-down: "\f027"; -@fa-var-volume-off: "\f026"; -@fa-var-volume-up: "\f028"; -@fa-var-warning: "\f071"; -@fa-var-wechat: "\f1d7"; -@fa-var-weibo: "\f18a"; -@fa-var-weixin: "\f1d7"; -@fa-var-whatsapp: "\f232"; -@fa-var-wheelchair: "\f193"; -@fa-var-wifi: "\f1eb"; -@fa-var-wikipedia-w: "\f266"; -@fa-var-windows: "\f17a"; -@fa-var-won: "\f159"; -@fa-var-wordpress: "\f19a"; -@fa-var-wrench: "\f0ad"; -@fa-var-xing: "\f168"; -@fa-var-xing-square: "\f169"; -@fa-var-y-combinator: "\f23b"; -@fa-var-y-combinator-square: "\f1d4"; -@fa-var-yahoo: "\f19e"; -@fa-var-yc: "\f23b"; -@fa-var-yc-square: "\f1d4"; -@fa-var-yelp: "\f1e9"; -@fa-var-yen: "\f157"; -@fa-var-youtube: "\f167"; -@fa-var-youtube-play: "\f16a"; -@fa-var-youtube-square: "\f166"; - diff --git a/vendor/font-awesome-4.5.0/scss/_animated.scss b/vendor/font-awesome-4.5.0/scss/_animated.scss deleted file mode 100644 index 8a020dbf..00000000 --- a/vendor/font-awesome-4.5.0/scss/_animated.scss +++ /dev/null @@ -1,34 +0,0 @@ -// Spinning Icons -// -------------------------- - -.#{$fa-css-prefix}-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.#{$fa-css-prefix}-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} diff --git a/vendor/font-awesome-4.5.0/scss/_bordered-pulled.scss b/vendor/font-awesome-4.5.0/scss/_bordered-pulled.scss deleted file mode 100644 index d4b85a02..00000000 --- a/vendor/font-awesome-4.5.0/scss/_bordered-pulled.scss +++ /dev/null @@ -1,25 +0,0 @@ -// Bordered & Pulled -// ------------------------- - -.#{$fa-css-prefix}-border { - padding: .2em .25em .15em; - border: solid .08em $fa-border-color; - border-radius: .1em; -} - -.#{$fa-css-prefix}-pull-left { float: left; } -.#{$fa-css-prefix}-pull-right { float: right; } - -.#{$fa-css-prefix} { - &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } - &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } -} - -/* Deprecated as of 4.4.0 */ -.pull-right { float: right; } -.pull-left { float: left; } - -.#{$fa-css-prefix} { - &.pull-left { margin-right: .3em; } - &.pull-right { margin-left: .3em; } -} diff --git a/vendor/font-awesome-4.5.0/scss/_core.scss b/vendor/font-awesome-4.5.0/scss/_core.scss deleted file mode 100644 index 7425ef85..00000000 --- a/vendor/font-awesome-4.5.0/scss/_core.scss +++ /dev/null @@ -1,12 +0,0 @@ -// Base Class Definition -// ------------------------- - -.#{$fa-css-prefix} { - display: inline-block; - font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -} diff --git a/vendor/font-awesome-4.5.0/scss/_fixed-width.scss b/vendor/font-awesome-4.5.0/scss/_fixed-width.scss deleted file mode 100644 index b221c981..00000000 --- a/vendor/font-awesome-4.5.0/scss/_fixed-width.scss +++ /dev/null @@ -1,6 +0,0 @@ -// Fixed Width Icons -// ------------------------- -.#{$fa-css-prefix}-fw { - width: (18em / 14); - text-align: center; -} diff --git a/vendor/font-awesome-4.5.0/scss/_icons.scss b/vendor/font-awesome-4.5.0/scss/_icons.scss deleted file mode 100644 index 6f937598..00000000 --- a/vendor/font-awesome-4.5.0/scss/_icons.scss +++ /dev/null @@ -1,697 +0,0 @@ -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ - -.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } -.#{$fa-css-prefix}-music:before { content: $fa-var-music; } -.#{$fa-css-prefix}-search:before { content: $fa-var-search; } -.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } -.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } -.#{$fa-css-prefix}-star:before { content: $fa-var-star; } -.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } -.#{$fa-css-prefix}-user:before { content: $fa-var-user; } -.#{$fa-css-prefix}-film:before { content: $fa-var-film; } -.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } -.#{$fa-css-prefix}-th:before { content: $fa-var-th; } -.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } -.#{$fa-css-prefix}-check:before { content: $fa-var-check; } -.#{$fa-css-prefix}-remove:before, -.#{$fa-css-prefix}-close:before, -.#{$fa-css-prefix}-times:before { content: $fa-var-times; } -.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } -.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } -.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } -.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } -.#{$fa-css-prefix}-gear:before, -.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } -.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } -.#{$fa-css-prefix}-home:before { content: $fa-var-home; } -.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } -.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } -.#{$fa-css-prefix}-road:before { content: $fa-var-road; } -.#{$fa-css-prefix}-download:before { content: $fa-var-download; } -.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } -.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } -.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } -.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } -.#{$fa-css-prefix}-rotate-right:before, -.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } -.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } -.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } -.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } -.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } -.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } -.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } -.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } -.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } -.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } -.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } -.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } -.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } -.#{$fa-css-prefix}-book:before { content: $fa-var-book; } -.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } -.#{$fa-css-prefix}-print:before { content: $fa-var-print; } -.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } -.#{$fa-css-prefix}-font:before { content: $fa-var-font; } -.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } -.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } -.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } -.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } -.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } -.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } -.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } -.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } -.#{$fa-css-prefix}-list:before { content: $fa-var-list; } -.#{$fa-css-prefix}-dedent:before, -.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } -.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } -.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } -.#{$fa-css-prefix}-photo:before, -.#{$fa-css-prefix}-image:before, -.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } -.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } -.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } -.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } -.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } -.#{$fa-css-prefix}-edit:before, -.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } -.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } -.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } -.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } -.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } -.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } -.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } -.#{$fa-css-prefix}-play:before { content: $fa-var-play; } -.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } -.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } -.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } -.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } -.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } -.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } -.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } -.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } -.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } -.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } -.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } -.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } -.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } -.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } -.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } -.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } -.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } -.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } -.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } -.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } -.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } -.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } -.#{$fa-css-prefix}-mail-forward:before, -.#{$fa-css-prefix}-share:before { content: $fa-var-share; } -.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } -.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } -.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } -.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } -.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } -.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } -.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } -.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } -.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } -.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } -.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } -.#{$fa-css-prefix}-warning:before, -.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } -.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } -.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } -.#{$fa-css-prefix}-random:before { content: $fa-var-random; } -.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } -.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } -.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } -.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } -.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } -.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } -.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } -.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } -.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } -.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } -.#{$fa-css-prefix}-bar-chart-o:before, -.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } -.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } -.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } -.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } -.#{$fa-css-prefix}-key:before { content: $fa-var-key; } -.#{$fa-css-prefix}-gears:before, -.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } -.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } -.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } -.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } -.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } -.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } -.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } -.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } -.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } -.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } -.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } -.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } -.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } -.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } -.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } -.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } -.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } -.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } -.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } -.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } -.#{$fa-css-prefix}-facebook-f:before, -.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } -.#{$fa-css-prefix}-github:before { content: $fa-var-github; } -.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } -.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } -.#{$fa-css-prefix}-feed:before, -.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } -.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } -.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } -.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } -.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } -.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } -.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } -.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } -.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } -.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } -.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } -.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } -.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } -.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } -.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } -.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } -.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } -.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } -.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } -.#{$fa-css-prefix}-group:before, -.#{$fa-css-prefix}-users:before { content: $fa-var-users; } -.#{$fa-css-prefix}-chain:before, -.#{$fa-css-prefix}-link:before { content: $fa-var-link; } -.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } -.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } -.#{$fa-css-prefix}-cut:before, -.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } -.#{$fa-css-prefix}-copy:before, -.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } -.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } -.#{$fa-css-prefix}-save:before, -.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } -.#{$fa-css-prefix}-square:before { content: $fa-var-square; } -.#{$fa-css-prefix}-navicon:before, -.#{$fa-css-prefix}-reorder:before, -.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } -.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } -.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } -.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } -.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } -.#{$fa-css-prefix}-table:before { content: $fa-var-table; } -.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } -.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } -.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } -.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } -.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } -.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } -.#{$fa-css-prefix}-money:before { content: $fa-var-money; } -.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } -.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } -.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } -.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } -.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } -.#{$fa-css-prefix}-unsorted:before, -.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } -.#{$fa-css-prefix}-sort-down:before, -.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } -.#{$fa-css-prefix}-sort-up:before, -.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } -.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } -.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } -.#{$fa-css-prefix}-rotate-left:before, -.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } -.#{$fa-css-prefix}-legal:before, -.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } -.#{$fa-css-prefix}-dashboard:before, -.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } -.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } -.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } -.#{$fa-css-prefix}-flash:before, -.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } -.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } -.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } -.#{$fa-css-prefix}-paste:before, -.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } -.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } -.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } -.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } -.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } -.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } -.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } -.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } -.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } -.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } -.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } -.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } -.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } -.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } -.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } -.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } -.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } -.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } -.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } -.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } -.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } -.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } -.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } -.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } -.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } -.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } -.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } -.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } -.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } -.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } -.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } -.#{$fa-css-prefix}-mobile-phone:before, -.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } -.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } -.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } -.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } -.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } -.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } -.#{$fa-css-prefix}-mail-reply:before, -.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } -.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } -.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } -.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } -.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } -.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } -.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } -.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } -.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } -.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } -.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } -.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } -.#{$fa-css-prefix}-code:before { content: $fa-var-code; } -.#{$fa-css-prefix}-mail-reply-all:before, -.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } -.#{$fa-css-prefix}-star-half-empty:before, -.#{$fa-css-prefix}-star-half-full:before, -.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } -.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } -.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } -.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } -.#{$fa-css-prefix}-unlink:before, -.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } -.#{$fa-css-prefix}-question:before { content: $fa-var-question; } -.#{$fa-css-prefix}-info:before { content: $fa-var-info; } -.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } -.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } -.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } -.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } -.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } -.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } -.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } -.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } -.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } -.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } -.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } -.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } -.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } -.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } -.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } -.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } -.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } -.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } -.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } -.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } -.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } -.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } -.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } -.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } -.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } -.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } -.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } -.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } -.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } -.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } -.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } -.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } -.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } -.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } -.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } -.#{$fa-css-prefix}-toggle-down:before, -.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } -.#{$fa-css-prefix}-toggle-up:before, -.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } -.#{$fa-css-prefix}-toggle-right:before, -.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } -.#{$fa-css-prefix}-euro:before, -.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } -.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } -.#{$fa-css-prefix}-dollar:before, -.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } -.#{$fa-css-prefix}-rupee:before, -.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } -.#{$fa-css-prefix}-cny:before, -.#{$fa-css-prefix}-rmb:before, -.#{$fa-css-prefix}-yen:before, -.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } -.#{$fa-css-prefix}-ruble:before, -.#{$fa-css-prefix}-rouble:before, -.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } -.#{$fa-css-prefix}-won:before, -.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } -.#{$fa-css-prefix}-bitcoin:before, -.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } -.#{$fa-css-prefix}-file:before { content: $fa-var-file; } -.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } -.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } -.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } -.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } -.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } -.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } -.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } -.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } -.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } -.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } -.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } -.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } -.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } -.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } -.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } -.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } -.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } -.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } -.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } -.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } -.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } -.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } -.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } -.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } -.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } -.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } -.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } -.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } -.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } -.#{$fa-css-prefix}-android:before { content: $fa-var-android; } -.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } -.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } -.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } -.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } -.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } -.#{$fa-css-prefix}-female:before { content: $fa-var-female; } -.#{$fa-css-prefix}-male:before { content: $fa-var-male; } -.#{$fa-css-prefix}-gittip:before, -.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } -.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } -.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } -.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } -.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } -.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } -.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } -.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } -.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } -.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } -.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } -.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } -.#{$fa-css-prefix}-toggle-left:before, -.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } -.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } -.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } -.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } -.#{$fa-css-prefix}-turkish-lira:before, -.#{$fa-css-prefix}-try:before { content: $fa-var-try; } -.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } -.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } -.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } -.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } -.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } -.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } -.#{$fa-css-prefix}-institution:before, -.#{$fa-css-prefix}-bank:before, -.#{$fa-css-prefix}-university:before { content: $fa-var-university; } -.#{$fa-css-prefix}-mortar-board:before, -.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } -.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } -.#{$fa-css-prefix}-google:before { content: $fa-var-google; } -.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } -.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } -.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } -.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } -.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } -.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } -.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } -.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } -.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } -.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } -.#{$fa-css-prefix}-language:before { content: $fa-var-language; } -.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } -.#{$fa-css-prefix}-building:before { content: $fa-var-building; } -.#{$fa-css-prefix}-child:before { content: $fa-var-child; } -.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } -.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } -.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } -.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } -.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } -.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } -.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } -.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } -.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } -.#{$fa-css-prefix}-automobile:before, -.#{$fa-css-prefix}-car:before { content: $fa-var-car; } -.#{$fa-css-prefix}-cab:before, -.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } -.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } -.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } -.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } -.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } -.#{$fa-css-prefix}-database:before { content: $fa-var-database; } -.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } -.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } -.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } -.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } -.#{$fa-css-prefix}-file-photo-o:before, -.#{$fa-css-prefix}-file-picture-o:before, -.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } -.#{$fa-css-prefix}-file-zip-o:before, -.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } -.#{$fa-css-prefix}-file-sound-o:before, -.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } -.#{$fa-css-prefix}-file-movie-o:before, -.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } -.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } -.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } -.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } -.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } -.#{$fa-css-prefix}-life-bouy:before, -.#{$fa-css-prefix}-life-buoy:before, -.#{$fa-css-prefix}-life-saver:before, -.#{$fa-css-prefix}-support:before, -.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } -.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } -.#{$fa-css-prefix}-ra:before, -.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } -.#{$fa-css-prefix}-ge:before, -.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } -.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } -.#{$fa-css-prefix}-git:before { content: $fa-var-git; } -.#{$fa-css-prefix}-y-combinator-square:before, -.#{$fa-css-prefix}-yc-square:before, -.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } -.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } -.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } -.#{$fa-css-prefix}-wechat:before, -.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } -.#{$fa-css-prefix}-send:before, -.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } -.#{$fa-css-prefix}-send-o:before, -.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } -.#{$fa-css-prefix}-history:before { content: $fa-var-history; } -.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } -.#{$fa-css-prefix}-header:before { content: $fa-var-header; } -.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } -.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } -.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } -.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } -.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } -.#{$fa-css-prefix}-soccer-ball-o:before, -.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } -.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } -.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } -.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } -.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } -.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } -.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } -.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } -.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } -.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } -.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } -.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } -.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } -.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } -.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } -.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } -.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } -.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } -.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } -.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } -.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } -.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } -.#{$fa-css-prefix}-at:before { content: $fa-var-at; } -.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } -.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } -.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } -.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } -.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } -.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } -.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } -.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } -.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } -.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } -.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } -.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } -.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } -.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } -.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } -.#{$fa-css-prefix}-shekel:before, -.#{$fa-css-prefix}-sheqel:before, -.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } -.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } -.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } -.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } -.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } -.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } -.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } -.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } -.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } -.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } -.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } -.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } -.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } -.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } -.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } -.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } -.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } -.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } -.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } -.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } -.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } -.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } -.#{$fa-css-prefix}-intersex:before, -.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } -.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } -.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } -.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } -.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } -.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } -.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } -.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } -.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } -.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } -.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } -.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } -.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } -.#{$fa-css-prefix}-server:before { content: $fa-var-server; } -.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } -.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } -.#{$fa-css-prefix}-hotel:before, -.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } -.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } -.#{$fa-css-prefix}-train:before { content: $fa-var-train; } -.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } -.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } -.#{$fa-css-prefix}-yc:before, -.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } -.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } -.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } -.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } -.#{$fa-css-prefix}-battery-4:before, -.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } -.#{$fa-css-prefix}-battery-3:before, -.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } -.#{$fa-css-prefix}-battery-2:before, -.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } -.#{$fa-css-prefix}-battery-1:before, -.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } -.#{$fa-css-prefix}-battery-0:before, -.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } -.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } -.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } -.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } -.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } -.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } -.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } -.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } -.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } -.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } -.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } -.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } -.#{$fa-css-prefix}-hourglass-1:before, -.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } -.#{$fa-css-prefix}-hourglass-2:before, -.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } -.#{$fa-css-prefix}-hourglass-3:before, -.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } -.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } -.#{$fa-css-prefix}-hand-grab-o:before, -.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } -.#{$fa-css-prefix}-hand-stop-o:before, -.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } -.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } -.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } -.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } -.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } -.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } -.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } -.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } -.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } -.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } -.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } -.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } -.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } -.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } -.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } -.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } -.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } -.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } -.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } -.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } -.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } -.#{$fa-css-prefix}-tv:before, -.#{$fa-css-prefix}-television:before { content: $fa-var-television; } -.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } -.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } -.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } -.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } -.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } -.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } -.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } -.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } -.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } -.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } -.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } -.#{$fa-css-prefix}-map:before { content: $fa-var-map; } -.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } -.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } -.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } -.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } -.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } -.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } -.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } -.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } -.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } -.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } -.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } -.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } -.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } -.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } -.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } -.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } -.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } -.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } -.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } -.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } -.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } -.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } -.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } -.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } -.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } -.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } diff --git a/vendor/font-awesome-4.5.0/scss/_larger.scss b/vendor/font-awesome-4.5.0/scss/_larger.scss deleted file mode 100644 index 41e9a818..00000000 --- a/vendor/font-awesome-4.5.0/scss/_larger.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Icon Sizes -// ------------------------- - -/* makes the font 33% larger relative to the icon container */ -.#{$fa-css-prefix}-lg { - font-size: (4em / 3); - line-height: (3em / 4); - vertical-align: -15%; -} -.#{$fa-css-prefix}-2x { font-size: 2em; } -.#{$fa-css-prefix}-3x { font-size: 3em; } -.#{$fa-css-prefix}-4x { font-size: 4em; } -.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/vendor/font-awesome-4.5.0/scss/_list.scss b/vendor/font-awesome-4.5.0/scss/_list.scss deleted file mode 100644 index 7d1e4d54..00000000 --- a/vendor/font-awesome-4.5.0/scss/_list.scss +++ /dev/null @@ -1,19 +0,0 @@ -// List Icons -// ------------------------- - -.#{$fa-css-prefix}-ul { - padding-left: 0; - margin-left: $fa-li-width; - list-style-type: none; - > li { position: relative; } -} -.#{$fa-css-prefix}-li { - position: absolute; - left: -$fa-li-width; - width: $fa-li-width; - top: (2em / 14); - text-align: center; - &.#{$fa-css-prefix}-lg { - left: -$fa-li-width + (4em / 14); - } -} diff --git a/vendor/font-awesome-4.5.0/scss/_mixins.scss b/vendor/font-awesome-4.5.0/scss/_mixins.scss deleted file mode 100644 index f96719b6..00000000 --- a/vendor/font-awesome-4.5.0/scss/_mixins.scss +++ /dev/null @@ -1,26 +0,0 @@ -// Mixins -// -------------------------- - -@mixin fa-icon() { - display: inline-block; - font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -} - -@mixin fa-icon-rotate($degrees, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); - -webkit-transform: rotate($degrees); - -ms-transform: rotate($degrees); - transform: rotate($degrees); -} - -@mixin fa-icon-flip($horiz, $vert, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); - -webkit-transform: scale($horiz, $vert); - -ms-transform: scale($horiz, $vert); - transform: scale($horiz, $vert); -} diff --git a/vendor/font-awesome-4.5.0/scss/_path.scss b/vendor/font-awesome-4.5.0/scss/_path.scss deleted file mode 100644 index bb457c23..00000000 --- a/vendor/font-awesome-4.5.0/scss/_path.scss +++ /dev/null @@ -1,15 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); - src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), - url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), - url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), - url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), - url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); -// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; -} diff --git a/vendor/font-awesome-4.5.0/scss/_rotated-flipped.scss b/vendor/font-awesome-4.5.0/scss/_rotated-flipped.scss deleted file mode 100644 index a3558fd0..00000000 --- a/vendor/font-awesome-4.5.0/scss/_rotated-flipped.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Rotated & Flipped Icons -// ------------------------- - -.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } -.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } -.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } - -.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } -.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } - -// Hook for IE8-9 -// ------------------------- - -:root .#{$fa-css-prefix}-rotate-90, -:root .#{$fa-css-prefix}-rotate-180, -:root .#{$fa-css-prefix}-rotate-270, -:root .#{$fa-css-prefix}-flip-horizontal, -:root .#{$fa-css-prefix}-flip-vertical { - filter: none; -} diff --git a/vendor/font-awesome-4.5.0/scss/_stacked.scss b/vendor/font-awesome-4.5.0/scss/_stacked.scss deleted file mode 100644 index aef74036..00000000 --- a/vendor/font-awesome-4.5.0/scss/_stacked.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Stacked Icons -// ------------------------- - -.#{$fa-css-prefix}-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.#{$fa-css-prefix}-stack-1x { line-height: inherit; } -.#{$fa-css-prefix}-stack-2x { font-size: 2em; } -.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/vendor/font-awesome-4.5.0/scss/_variables.scss b/vendor/font-awesome-4.5.0/scss/_variables.scss deleted file mode 100644 index 0a471102..00000000 --- a/vendor/font-awesome-4.5.0/scss/_variables.scss +++ /dev/null @@ -1,708 +0,0 @@ -// Variables -// -------------------------- - -$fa-font-path: "../fonts" !default; -$fa-font-size-base: 14px !default; -$fa-line-height-base: 1 !default; -//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.5.0/fonts" !default; // for referencing Bootstrap CDN font files directly -$fa-css-prefix: fa !default; -$fa-version: "4.5.0" !default; -$fa-border-color: #eee !default; -$fa-inverse: #fff !default; -$fa-li-width: (30em / 14) !default; - -$fa-var-500px: "\f26e"; -$fa-var-adjust: "\f042"; -$fa-var-adn: "\f170"; -$fa-var-align-center: "\f037"; -$fa-var-align-justify: "\f039"; -$fa-var-align-left: "\f036"; -$fa-var-align-right: "\f038"; -$fa-var-amazon: "\f270"; -$fa-var-ambulance: "\f0f9"; -$fa-var-anchor: "\f13d"; -$fa-var-android: "\f17b"; -$fa-var-angellist: "\f209"; -$fa-var-angle-double-down: "\f103"; -$fa-var-angle-double-left: "\f100"; -$fa-var-angle-double-right: "\f101"; -$fa-var-angle-double-up: "\f102"; -$fa-var-angle-down: "\f107"; -$fa-var-angle-left: "\f104"; -$fa-var-angle-right: "\f105"; -$fa-var-angle-up: "\f106"; -$fa-var-apple: "\f179"; -$fa-var-archive: "\f187"; -$fa-var-area-chart: "\f1fe"; -$fa-var-arrow-circle-down: "\f0ab"; -$fa-var-arrow-circle-left: "\f0a8"; -$fa-var-arrow-circle-o-down: "\f01a"; -$fa-var-arrow-circle-o-left: "\f190"; -$fa-var-arrow-circle-o-right: "\f18e"; -$fa-var-arrow-circle-o-up: "\f01b"; -$fa-var-arrow-circle-right: "\f0a9"; -$fa-var-arrow-circle-up: "\f0aa"; -$fa-var-arrow-down: "\f063"; -$fa-var-arrow-left: "\f060"; -$fa-var-arrow-right: "\f061"; -$fa-var-arrow-up: "\f062"; -$fa-var-arrows: "\f047"; -$fa-var-arrows-alt: "\f0b2"; -$fa-var-arrows-h: "\f07e"; -$fa-var-arrows-v: "\f07d"; -$fa-var-asterisk: "\f069"; -$fa-var-at: "\f1fa"; -$fa-var-automobile: "\f1b9"; -$fa-var-backward: "\f04a"; -$fa-var-balance-scale: "\f24e"; -$fa-var-ban: "\f05e"; -$fa-var-bank: "\f19c"; -$fa-var-bar-chart: "\f080"; -$fa-var-bar-chart-o: "\f080"; -$fa-var-barcode: "\f02a"; -$fa-var-bars: "\f0c9"; -$fa-var-battery-0: "\f244"; -$fa-var-battery-1: "\f243"; -$fa-var-battery-2: "\f242"; -$fa-var-battery-3: "\f241"; -$fa-var-battery-4: "\f240"; -$fa-var-battery-empty: "\f244"; -$fa-var-battery-full: "\f240"; -$fa-var-battery-half: "\f242"; -$fa-var-battery-quarter: "\f243"; -$fa-var-battery-three-quarters: "\f241"; -$fa-var-bed: "\f236"; -$fa-var-beer: "\f0fc"; -$fa-var-behance: "\f1b4"; -$fa-var-behance-square: "\f1b5"; -$fa-var-bell: "\f0f3"; -$fa-var-bell-o: "\f0a2"; -$fa-var-bell-slash: "\f1f6"; -$fa-var-bell-slash-o: "\f1f7"; -$fa-var-bicycle: "\f206"; -$fa-var-binoculars: "\f1e5"; -$fa-var-birthday-cake: "\f1fd"; -$fa-var-bitbucket: "\f171"; -$fa-var-bitbucket-square: "\f172"; -$fa-var-bitcoin: "\f15a"; -$fa-var-black-tie: "\f27e"; -$fa-var-bluetooth: "\f293"; -$fa-var-bluetooth-b: "\f294"; -$fa-var-bold: "\f032"; -$fa-var-bolt: "\f0e7"; -$fa-var-bomb: "\f1e2"; -$fa-var-book: "\f02d"; -$fa-var-bookmark: "\f02e"; -$fa-var-bookmark-o: "\f097"; -$fa-var-briefcase: "\f0b1"; -$fa-var-btc: "\f15a"; -$fa-var-bug: "\f188"; -$fa-var-building: "\f1ad"; -$fa-var-building-o: "\f0f7"; -$fa-var-bullhorn: "\f0a1"; -$fa-var-bullseye: "\f140"; -$fa-var-bus: "\f207"; -$fa-var-buysellads: "\f20d"; -$fa-var-cab: "\f1ba"; -$fa-var-calculator: "\f1ec"; -$fa-var-calendar: "\f073"; -$fa-var-calendar-check-o: "\f274"; -$fa-var-calendar-minus-o: "\f272"; -$fa-var-calendar-o: "\f133"; -$fa-var-calendar-plus-o: "\f271"; -$fa-var-calendar-times-o: "\f273"; -$fa-var-camera: "\f030"; -$fa-var-camera-retro: "\f083"; -$fa-var-car: "\f1b9"; -$fa-var-caret-down: "\f0d7"; -$fa-var-caret-left: "\f0d9"; -$fa-var-caret-right: "\f0da"; -$fa-var-caret-square-o-down: "\f150"; -$fa-var-caret-square-o-left: "\f191"; -$fa-var-caret-square-o-right: "\f152"; -$fa-var-caret-square-o-up: "\f151"; -$fa-var-caret-up: "\f0d8"; -$fa-var-cart-arrow-down: "\f218"; -$fa-var-cart-plus: "\f217"; -$fa-var-cc: "\f20a"; -$fa-var-cc-amex: "\f1f3"; -$fa-var-cc-diners-club: "\f24c"; -$fa-var-cc-discover: "\f1f2"; -$fa-var-cc-jcb: "\f24b"; -$fa-var-cc-mastercard: "\f1f1"; -$fa-var-cc-paypal: "\f1f4"; -$fa-var-cc-stripe: "\f1f5"; -$fa-var-cc-visa: "\f1f0"; -$fa-var-certificate: "\f0a3"; -$fa-var-chain: "\f0c1"; -$fa-var-chain-broken: "\f127"; -$fa-var-check: "\f00c"; -$fa-var-check-circle: "\f058"; -$fa-var-check-circle-o: "\f05d"; -$fa-var-check-square: "\f14a"; -$fa-var-check-square-o: "\f046"; -$fa-var-chevron-circle-down: "\f13a"; -$fa-var-chevron-circle-left: "\f137"; -$fa-var-chevron-circle-right: "\f138"; -$fa-var-chevron-circle-up: "\f139"; -$fa-var-chevron-down: "\f078"; -$fa-var-chevron-left: "\f053"; -$fa-var-chevron-right: "\f054"; -$fa-var-chevron-up: "\f077"; -$fa-var-child: "\f1ae"; -$fa-var-chrome: "\f268"; -$fa-var-circle: "\f111"; -$fa-var-circle-o: "\f10c"; -$fa-var-circle-o-notch: "\f1ce"; -$fa-var-circle-thin: "\f1db"; -$fa-var-clipboard: "\f0ea"; -$fa-var-clock-o: "\f017"; -$fa-var-clone: "\f24d"; -$fa-var-close: "\f00d"; -$fa-var-cloud: "\f0c2"; -$fa-var-cloud-download: "\f0ed"; -$fa-var-cloud-upload: "\f0ee"; -$fa-var-cny: "\f157"; -$fa-var-code: "\f121"; -$fa-var-code-fork: "\f126"; -$fa-var-codepen: "\f1cb"; -$fa-var-codiepie: "\f284"; -$fa-var-coffee: "\f0f4"; -$fa-var-cog: "\f013"; -$fa-var-cogs: "\f085"; -$fa-var-columns: "\f0db"; -$fa-var-comment: "\f075"; -$fa-var-comment-o: "\f0e5"; -$fa-var-commenting: "\f27a"; -$fa-var-commenting-o: "\f27b"; -$fa-var-comments: "\f086"; -$fa-var-comments-o: "\f0e6"; -$fa-var-compass: "\f14e"; -$fa-var-compress: "\f066"; -$fa-var-connectdevelop: "\f20e"; -$fa-var-contao: "\f26d"; -$fa-var-copy: "\f0c5"; -$fa-var-copyright: "\f1f9"; -$fa-var-creative-commons: "\f25e"; -$fa-var-credit-card: "\f09d"; -$fa-var-credit-card-alt: "\f283"; -$fa-var-crop: "\f125"; -$fa-var-crosshairs: "\f05b"; -$fa-var-css3: "\f13c"; -$fa-var-cube: "\f1b2"; -$fa-var-cubes: "\f1b3"; -$fa-var-cut: "\f0c4"; -$fa-var-cutlery: "\f0f5"; -$fa-var-dashboard: "\f0e4"; -$fa-var-dashcube: "\f210"; -$fa-var-database: "\f1c0"; -$fa-var-dedent: "\f03b"; -$fa-var-delicious: "\f1a5"; -$fa-var-desktop: "\f108"; -$fa-var-deviantart: "\f1bd"; -$fa-var-diamond: "\f219"; -$fa-var-digg: "\f1a6"; -$fa-var-dollar: "\f155"; -$fa-var-dot-circle-o: "\f192"; -$fa-var-download: "\f019"; -$fa-var-dribbble: "\f17d"; -$fa-var-dropbox: "\f16b"; -$fa-var-drupal: "\f1a9"; -$fa-var-edge: "\f282"; -$fa-var-edit: "\f044"; -$fa-var-eject: "\f052"; -$fa-var-ellipsis-h: "\f141"; -$fa-var-ellipsis-v: "\f142"; -$fa-var-empire: "\f1d1"; -$fa-var-envelope: "\f0e0"; -$fa-var-envelope-o: "\f003"; -$fa-var-envelope-square: "\f199"; -$fa-var-eraser: "\f12d"; -$fa-var-eur: "\f153"; -$fa-var-euro: "\f153"; -$fa-var-exchange: "\f0ec"; -$fa-var-exclamation: "\f12a"; -$fa-var-exclamation-circle: "\f06a"; -$fa-var-exclamation-triangle: "\f071"; -$fa-var-expand: "\f065"; -$fa-var-expeditedssl: "\f23e"; -$fa-var-external-link: "\f08e"; -$fa-var-external-link-square: "\f14c"; -$fa-var-eye: "\f06e"; -$fa-var-eye-slash: "\f070"; -$fa-var-eyedropper: "\f1fb"; -$fa-var-facebook: "\f09a"; -$fa-var-facebook-f: "\f09a"; -$fa-var-facebook-official: "\f230"; -$fa-var-facebook-square: "\f082"; -$fa-var-fast-backward: "\f049"; -$fa-var-fast-forward: "\f050"; -$fa-var-fax: "\f1ac"; -$fa-var-feed: "\f09e"; -$fa-var-female: "\f182"; -$fa-var-fighter-jet: "\f0fb"; -$fa-var-file: "\f15b"; -$fa-var-file-archive-o: "\f1c6"; -$fa-var-file-audio-o: "\f1c7"; -$fa-var-file-code-o: "\f1c9"; -$fa-var-file-excel-o: "\f1c3"; -$fa-var-file-image-o: "\f1c5"; -$fa-var-file-movie-o: "\f1c8"; -$fa-var-file-o: "\f016"; -$fa-var-file-pdf-o: "\f1c1"; -$fa-var-file-photo-o: "\f1c5"; -$fa-var-file-picture-o: "\f1c5"; -$fa-var-file-powerpoint-o: "\f1c4"; -$fa-var-file-sound-o: "\f1c7"; -$fa-var-file-text: "\f15c"; -$fa-var-file-text-o: "\f0f6"; -$fa-var-file-video-o: "\f1c8"; -$fa-var-file-word-o: "\f1c2"; -$fa-var-file-zip-o: "\f1c6"; -$fa-var-files-o: "\f0c5"; -$fa-var-film: "\f008"; -$fa-var-filter: "\f0b0"; -$fa-var-fire: "\f06d"; -$fa-var-fire-extinguisher: "\f134"; -$fa-var-firefox: "\f269"; -$fa-var-flag: "\f024"; -$fa-var-flag-checkered: "\f11e"; -$fa-var-flag-o: "\f11d"; -$fa-var-flash: "\f0e7"; -$fa-var-flask: "\f0c3"; -$fa-var-flickr: "\f16e"; -$fa-var-floppy-o: "\f0c7"; -$fa-var-folder: "\f07b"; -$fa-var-folder-o: "\f114"; -$fa-var-folder-open: "\f07c"; -$fa-var-folder-open-o: "\f115"; -$fa-var-font: "\f031"; -$fa-var-fonticons: "\f280"; -$fa-var-fort-awesome: "\f286"; -$fa-var-forumbee: "\f211"; -$fa-var-forward: "\f04e"; -$fa-var-foursquare: "\f180"; -$fa-var-frown-o: "\f119"; -$fa-var-futbol-o: "\f1e3"; -$fa-var-gamepad: "\f11b"; -$fa-var-gavel: "\f0e3"; -$fa-var-gbp: "\f154"; -$fa-var-ge: "\f1d1"; -$fa-var-gear: "\f013"; -$fa-var-gears: "\f085"; -$fa-var-genderless: "\f22d"; -$fa-var-get-pocket: "\f265"; -$fa-var-gg: "\f260"; -$fa-var-gg-circle: "\f261"; -$fa-var-gift: "\f06b"; -$fa-var-git: "\f1d3"; -$fa-var-git-square: "\f1d2"; -$fa-var-github: "\f09b"; -$fa-var-github-alt: "\f113"; -$fa-var-github-square: "\f092"; -$fa-var-gittip: "\f184"; -$fa-var-glass: "\f000"; -$fa-var-globe: "\f0ac"; -$fa-var-google: "\f1a0"; -$fa-var-google-plus: "\f0d5"; -$fa-var-google-plus-square: "\f0d4"; -$fa-var-google-wallet: "\f1ee"; -$fa-var-graduation-cap: "\f19d"; -$fa-var-gratipay: "\f184"; -$fa-var-group: "\f0c0"; -$fa-var-h-square: "\f0fd"; -$fa-var-hacker-news: "\f1d4"; -$fa-var-hand-grab-o: "\f255"; -$fa-var-hand-lizard-o: "\f258"; -$fa-var-hand-o-down: "\f0a7"; -$fa-var-hand-o-left: "\f0a5"; -$fa-var-hand-o-right: "\f0a4"; -$fa-var-hand-o-up: "\f0a6"; -$fa-var-hand-paper-o: "\f256"; -$fa-var-hand-peace-o: "\f25b"; -$fa-var-hand-pointer-o: "\f25a"; -$fa-var-hand-rock-o: "\f255"; -$fa-var-hand-scissors-o: "\f257"; -$fa-var-hand-spock-o: "\f259"; -$fa-var-hand-stop-o: "\f256"; -$fa-var-hashtag: "\f292"; -$fa-var-hdd-o: "\f0a0"; -$fa-var-header: "\f1dc"; -$fa-var-headphones: "\f025"; -$fa-var-heart: "\f004"; -$fa-var-heart-o: "\f08a"; -$fa-var-heartbeat: "\f21e"; -$fa-var-history: "\f1da"; -$fa-var-home: "\f015"; -$fa-var-hospital-o: "\f0f8"; -$fa-var-hotel: "\f236"; -$fa-var-hourglass: "\f254"; -$fa-var-hourglass-1: "\f251"; -$fa-var-hourglass-2: "\f252"; -$fa-var-hourglass-3: "\f253"; -$fa-var-hourglass-end: "\f253"; -$fa-var-hourglass-half: "\f252"; -$fa-var-hourglass-o: "\f250"; -$fa-var-hourglass-start: "\f251"; -$fa-var-houzz: "\f27c"; -$fa-var-html5: "\f13b"; -$fa-var-i-cursor: "\f246"; -$fa-var-ils: "\f20b"; -$fa-var-image: "\f03e"; -$fa-var-inbox: "\f01c"; -$fa-var-indent: "\f03c"; -$fa-var-industry: "\f275"; -$fa-var-info: "\f129"; -$fa-var-info-circle: "\f05a"; -$fa-var-inr: "\f156"; -$fa-var-instagram: "\f16d"; -$fa-var-institution: "\f19c"; -$fa-var-internet-explorer: "\f26b"; -$fa-var-intersex: "\f224"; -$fa-var-ioxhost: "\f208"; -$fa-var-italic: "\f033"; -$fa-var-joomla: "\f1aa"; -$fa-var-jpy: "\f157"; -$fa-var-jsfiddle: "\f1cc"; -$fa-var-key: "\f084"; -$fa-var-keyboard-o: "\f11c"; -$fa-var-krw: "\f159"; -$fa-var-language: "\f1ab"; -$fa-var-laptop: "\f109"; -$fa-var-lastfm: "\f202"; -$fa-var-lastfm-square: "\f203"; -$fa-var-leaf: "\f06c"; -$fa-var-leanpub: "\f212"; -$fa-var-legal: "\f0e3"; -$fa-var-lemon-o: "\f094"; -$fa-var-level-down: "\f149"; -$fa-var-level-up: "\f148"; -$fa-var-life-bouy: "\f1cd"; -$fa-var-life-buoy: "\f1cd"; -$fa-var-life-ring: "\f1cd"; -$fa-var-life-saver: "\f1cd"; -$fa-var-lightbulb-o: "\f0eb"; -$fa-var-line-chart: "\f201"; -$fa-var-link: "\f0c1"; -$fa-var-linkedin: "\f0e1"; -$fa-var-linkedin-square: "\f08c"; -$fa-var-linux: "\f17c"; -$fa-var-list: "\f03a"; -$fa-var-list-alt: "\f022"; -$fa-var-list-ol: "\f0cb"; -$fa-var-list-ul: "\f0ca"; -$fa-var-location-arrow: "\f124"; -$fa-var-lock: "\f023"; -$fa-var-long-arrow-down: "\f175"; -$fa-var-long-arrow-left: "\f177"; -$fa-var-long-arrow-right: "\f178"; -$fa-var-long-arrow-up: "\f176"; -$fa-var-magic: "\f0d0"; -$fa-var-magnet: "\f076"; -$fa-var-mail-forward: "\f064"; -$fa-var-mail-reply: "\f112"; -$fa-var-mail-reply-all: "\f122"; -$fa-var-male: "\f183"; -$fa-var-map: "\f279"; -$fa-var-map-marker: "\f041"; -$fa-var-map-o: "\f278"; -$fa-var-map-pin: "\f276"; -$fa-var-map-signs: "\f277"; -$fa-var-mars: "\f222"; -$fa-var-mars-double: "\f227"; -$fa-var-mars-stroke: "\f229"; -$fa-var-mars-stroke-h: "\f22b"; -$fa-var-mars-stroke-v: "\f22a"; -$fa-var-maxcdn: "\f136"; -$fa-var-meanpath: "\f20c"; -$fa-var-medium: "\f23a"; -$fa-var-medkit: "\f0fa"; -$fa-var-meh-o: "\f11a"; -$fa-var-mercury: "\f223"; -$fa-var-microphone: "\f130"; -$fa-var-microphone-slash: "\f131"; -$fa-var-minus: "\f068"; -$fa-var-minus-circle: "\f056"; -$fa-var-minus-square: "\f146"; -$fa-var-minus-square-o: "\f147"; -$fa-var-mixcloud: "\f289"; -$fa-var-mobile: "\f10b"; -$fa-var-mobile-phone: "\f10b"; -$fa-var-modx: "\f285"; -$fa-var-money: "\f0d6"; -$fa-var-moon-o: "\f186"; -$fa-var-mortar-board: "\f19d"; -$fa-var-motorcycle: "\f21c"; -$fa-var-mouse-pointer: "\f245"; -$fa-var-music: "\f001"; -$fa-var-navicon: "\f0c9"; -$fa-var-neuter: "\f22c"; -$fa-var-newspaper-o: "\f1ea"; -$fa-var-object-group: "\f247"; -$fa-var-object-ungroup: "\f248"; -$fa-var-odnoklassniki: "\f263"; -$fa-var-odnoklassniki-square: "\f264"; -$fa-var-opencart: "\f23d"; -$fa-var-openid: "\f19b"; -$fa-var-opera: "\f26a"; -$fa-var-optin-monster: "\f23c"; -$fa-var-outdent: "\f03b"; -$fa-var-pagelines: "\f18c"; -$fa-var-paint-brush: "\f1fc"; -$fa-var-paper-plane: "\f1d8"; -$fa-var-paper-plane-o: "\f1d9"; -$fa-var-paperclip: "\f0c6"; -$fa-var-paragraph: "\f1dd"; -$fa-var-paste: "\f0ea"; -$fa-var-pause: "\f04c"; -$fa-var-pause-circle: "\f28b"; -$fa-var-pause-circle-o: "\f28c"; -$fa-var-paw: "\f1b0"; -$fa-var-paypal: "\f1ed"; -$fa-var-pencil: "\f040"; -$fa-var-pencil-square: "\f14b"; -$fa-var-pencil-square-o: "\f044"; -$fa-var-percent: "\f295"; -$fa-var-phone: "\f095"; -$fa-var-phone-square: "\f098"; -$fa-var-photo: "\f03e"; -$fa-var-picture-o: "\f03e"; -$fa-var-pie-chart: "\f200"; -$fa-var-pied-piper: "\f1a7"; -$fa-var-pied-piper-alt: "\f1a8"; -$fa-var-pinterest: "\f0d2"; -$fa-var-pinterest-p: "\f231"; -$fa-var-pinterest-square: "\f0d3"; -$fa-var-plane: "\f072"; -$fa-var-play: "\f04b"; -$fa-var-play-circle: "\f144"; -$fa-var-play-circle-o: "\f01d"; -$fa-var-plug: "\f1e6"; -$fa-var-plus: "\f067"; -$fa-var-plus-circle: "\f055"; -$fa-var-plus-square: "\f0fe"; -$fa-var-plus-square-o: "\f196"; -$fa-var-power-off: "\f011"; -$fa-var-print: "\f02f"; -$fa-var-product-hunt: "\f288"; -$fa-var-puzzle-piece: "\f12e"; -$fa-var-qq: "\f1d6"; -$fa-var-qrcode: "\f029"; -$fa-var-question: "\f128"; -$fa-var-question-circle: "\f059"; -$fa-var-quote-left: "\f10d"; -$fa-var-quote-right: "\f10e"; -$fa-var-ra: "\f1d0"; -$fa-var-random: "\f074"; -$fa-var-rebel: "\f1d0"; -$fa-var-recycle: "\f1b8"; -$fa-var-reddit: "\f1a1"; -$fa-var-reddit-alien: "\f281"; -$fa-var-reddit-square: "\f1a2"; -$fa-var-refresh: "\f021"; -$fa-var-registered: "\f25d"; -$fa-var-remove: "\f00d"; -$fa-var-renren: "\f18b"; -$fa-var-reorder: "\f0c9"; -$fa-var-repeat: "\f01e"; -$fa-var-reply: "\f112"; -$fa-var-reply-all: "\f122"; -$fa-var-retweet: "\f079"; -$fa-var-rmb: "\f157"; -$fa-var-road: "\f018"; -$fa-var-rocket: "\f135"; -$fa-var-rotate-left: "\f0e2"; -$fa-var-rotate-right: "\f01e"; -$fa-var-rouble: "\f158"; -$fa-var-rss: "\f09e"; -$fa-var-rss-square: "\f143"; -$fa-var-rub: "\f158"; -$fa-var-ruble: "\f158"; -$fa-var-rupee: "\f156"; -$fa-var-safari: "\f267"; -$fa-var-save: "\f0c7"; -$fa-var-scissors: "\f0c4"; -$fa-var-scribd: "\f28a"; -$fa-var-search: "\f002"; -$fa-var-search-minus: "\f010"; -$fa-var-search-plus: "\f00e"; -$fa-var-sellsy: "\f213"; -$fa-var-send: "\f1d8"; -$fa-var-send-o: "\f1d9"; -$fa-var-server: "\f233"; -$fa-var-share: "\f064"; -$fa-var-share-alt: "\f1e0"; -$fa-var-share-alt-square: "\f1e1"; -$fa-var-share-square: "\f14d"; -$fa-var-share-square-o: "\f045"; -$fa-var-shekel: "\f20b"; -$fa-var-sheqel: "\f20b"; -$fa-var-shield: "\f132"; -$fa-var-ship: "\f21a"; -$fa-var-shirtsinbulk: "\f214"; -$fa-var-shopping-bag: "\f290"; -$fa-var-shopping-basket: "\f291"; -$fa-var-shopping-cart: "\f07a"; -$fa-var-sign-in: "\f090"; -$fa-var-sign-out: "\f08b"; -$fa-var-signal: "\f012"; -$fa-var-simplybuilt: "\f215"; -$fa-var-sitemap: "\f0e8"; -$fa-var-skyatlas: "\f216"; -$fa-var-skype: "\f17e"; -$fa-var-slack: "\f198"; -$fa-var-sliders: "\f1de"; -$fa-var-slideshare: "\f1e7"; -$fa-var-smile-o: "\f118"; -$fa-var-soccer-ball-o: "\f1e3"; -$fa-var-sort: "\f0dc"; -$fa-var-sort-alpha-asc: "\f15d"; -$fa-var-sort-alpha-desc: "\f15e"; -$fa-var-sort-amount-asc: "\f160"; -$fa-var-sort-amount-desc: "\f161"; -$fa-var-sort-asc: "\f0de"; -$fa-var-sort-desc: "\f0dd"; -$fa-var-sort-down: "\f0dd"; -$fa-var-sort-numeric-asc: "\f162"; -$fa-var-sort-numeric-desc: "\f163"; -$fa-var-sort-up: "\f0de"; -$fa-var-soundcloud: "\f1be"; -$fa-var-space-shuttle: "\f197"; -$fa-var-spinner: "\f110"; -$fa-var-spoon: "\f1b1"; -$fa-var-spotify: "\f1bc"; -$fa-var-square: "\f0c8"; -$fa-var-square-o: "\f096"; -$fa-var-stack-exchange: "\f18d"; -$fa-var-stack-overflow: "\f16c"; -$fa-var-star: "\f005"; -$fa-var-star-half: "\f089"; -$fa-var-star-half-empty: "\f123"; -$fa-var-star-half-full: "\f123"; -$fa-var-star-half-o: "\f123"; -$fa-var-star-o: "\f006"; -$fa-var-steam: "\f1b6"; -$fa-var-steam-square: "\f1b7"; -$fa-var-step-backward: "\f048"; -$fa-var-step-forward: "\f051"; -$fa-var-stethoscope: "\f0f1"; -$fa-var-sticky-note: "\f249"; -$fa-var-sticky-note-o: "\f24a"; -$fa-var-stop: "\f04d"; -$fa-var-stop-circle: "\f28d"; -$fa-var-stop-circle-o: "\f28e"; -$fa-var-street-view: "\f21d"; -$fa-var-strikethrough: "\f0cc"; -$fa-var-stumbleupon: "\f1a4"; -$fa-var-stumbleupon-circle: "\f1a3"; -$fa-var-subscript: "\f12c"; -$fa-var-subway: "\f239"; -$fa-var-suitcase: "\f0f2"; -$fa-var-sun-o: "\f185"; -$fa-var-superscript: "\f12b"; -$fa-var-support: "\f1cd"; -$fa-var-table: "\f0ce"; -$fa-var-tablet: "\f10a"; -$fa-var-tachometer: "\f0e4"; -$fa-var-tag: "\f02b"; -$fa-var-tags: "\f02c"; -$fa-var-tasks: "\f0ae"; -$fa-var-taxi: "\f1ba"; -$fa-var-television: "\f26c"; -$fa-var-tencent-weibo: "\f1d5"; -$fa-var-terminal: "\f120"; -$fa-var-text-height: "\f034"; -$fa-var-text-width: "\f035"; -$fa-var-th: "\f00a"; -$fa-var-th-large: "\f009"; -$fa-var-th-list: "\f00b"; -$fa-var-thumb-tack: "\f08d"; -$fa-var-thumbs-down: "\f165"; -$fa-var-thumbs-o-down: "\f088"; -$fa-var-thumbs-o-up: "\f087"; -$fa-var-thumbs-up: "\f164"; -$fa-var-ticket: "\f145"; -$fa-var-times: "\f00d"; -$fa-var-times-circle: "\f057"; -$fa-var-times-circle-o: "\f05c"; -$fa-var-tint: "\f043"; -$fa-var-toggle-down: "\f150"; -$fa-var-toggle-left: "\f191"; -$fa-var-toggle-off: "\f204"; -$fa-var-toggle-on: "\f205"; -$fa-var-toggle-right: "\f152"; -$fa-var-toggle-up: "\f151"; -$fa-var-trademark: "\f25c"; -$fa-var-train: "\f238"; -$fa-var-transgender: "\f224"; -$fa-var-transgender-alt: "\f225"; -$fa-var-trash: "\f1f8"; -$fa-var-trash-o: "\f014"; -$fa-var-tree: "\f1bb"; -$fa-var-trello: "\f181"; -$fa-var-tripadvisor: "\f262"; -$fa-var-trophy: "\f091"; -$fa-var-truck: "\f0d1"; -$fa-var-try: "\f195"; -$fa-var-tty: "\f1e4"; -$fa-var-tumblr: "\f173"; -$fa-var-tumblr-square: "\f174"; -$fa-var-turkish-lira: "\f195"; -$fa-var-tv: "\f26c"; -$fa-var-twitch: "\f1e8"; -$fa-var-twitter: "\f099"; -$fa-var-twitter-square: "\f081"; -$fa-var-umbrella: "\f0e9"; -$fa-var-underline: "\f0cd"; -$fa-var-undo: "\f0e2"; -$fa-var-university: "\f19c"; -$fa-var-unlink: "\f127"; -$fa-var-unlock: "\f09c"; -$fa-var-unlock-alt: "\f13e"; -$fa-var-unsorted: "\f0dc"; -$fa-var-upload: "\f093"; -$fa-var-usb: "\f287"; -$fa-var-usd: "\f155"; -$fa-var-user: "\f007"; -$fa-var-user-md: "\f0f0"; -$fa-var-user-plus: "\f234"; -$fa-var-user-secret: "\f21b"; -$fa-var-user-times: "\f235"; -$fa-var-users: "\f0c0"; -$fa-var-venus: "\f221"; -$fa-var-venus-double: "\f226"; -$fa-var-venus-mars: "\f228"; -$fa-var-viacoin: "\f237"; -$fa-var-video-camera: "\f03d"; -$fa-var-vimeo: "\f27d"; -$fa-var-vimeo-square: "\f194"; -$fa-var-vine: "\f1ca"; -$fa-var-vk: "\f189"; -$fa-var-volume-down: "\f027"; -$fa-var-volume-off: "\f026"; -$fa-var-volume-up: "\f028"; -$fa-var-warning: "\f071"; -$fa-var-wechat: "\f1d7"; -$fa-var-weibo: "\f18a"; -$fa-var-weixin: "\f1d7"; -$fa-var-whatsapp: "\f232"; -$fa-var-wheelchair: "\f193"; -$fa-var-wifi: "\f1eb"; -$fa-var-wikipedia-w: "\f266"; -$fa-var-windows: "\f17a"; -$fa-var-won: "\f159"; -$fa-var-wordpress: "\f19a"; -$fa-var-wrench: "\f0ad"; -$fa-var-xing: "\f168"; -$fa-var-xing-square: "\f169"; -$fa-var-y-combinator: "\f23b"; -$fa-var-y-combinator-square: "\f1d4"; -$fa-var-yahoo: "\f19e"; -$fa-var-yc: "\f23b"; -$fa-var-yc-square: "\f1d4"; -$fa-var-yelp: "\f1e9"; -$fa-var-yen: "\f157"; -$fa-var-youtube: "\f167"; -$fa-var-youtube-play: "\f16a"; -$fa-var-youtube-square: "\f166"; - diff --git a/vendor/font-awesome-4.5.0/scss/font-awesome.scss b/vendor/font-awesome-4.5.0/scss/font-awesome.scss deleted file mode 100644 index f4668a53..00000000 --- a/vendor/font-awesome-4.5.0/scss/font-awesome.scss +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ - -@import "variables"; -@import "mixins"; -@import "path"; -@import "core"; -@import "larger"; -@import "fixed-width"; -@import "list"; -@import "bordered-pulled"; -@import "animated"; -@import "rotated-flipped"; -@import "stacked"; -@import "icons"; diff --git a/vendor/package.json b/vendor/package.json new file mode 100644 index 00000000..36fc84d5 --- /dev/null +++ b/vendor/package.json @@ -0,0 +1,16 @@ +{ + + "name": "magicmirror-vendors", + "description": "Package for vendors use by MagicMirror Core.", + "repository": { + "type": "git", + "url": "git+https://github.com/MichMich/MagicMirror.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/MichMich/MagicMirror/issues" + }, + "dependencies": { + "font-awesome": "^4.7.0" + } +} diff --git a/vendor/vendor.js b/vendor/vendor.js index bc437311..7583be5a 100644 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -12,5 +12,5 @@ var vendor = { 'moment-timezone.js' : 'moment/moment-timezone.js', 'weather-icons.css': 'weather-icons/css/weather-icons.css', 'weather-icons-wind.css': 'weather-icons/css/weather-icons-wind.css', - 'font-awesome.css': 'font-awesome-4.5.0/css/font-awesome.min.css' + 'font-awesome.css': 'node_modules/font-awesome/css/font-awesome.min.css' }; From 5466e1b733682282fc287b026d8185197c9aefa2 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Sun, 12 Mar 2017 20:22:40 -0500 Subject: [PATCH 223/257] Remove unnecessary string from excluded array --- modules/default/calendar/README.md | 2 +- modules/default/calendar/calendar.js | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 81981243..713b7940 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -44,7 +44,7 @@ The following properties can be configured: | `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates

**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)

**Default value:** `7` | `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.

**Possible values:** `true`, `false`

**Default value:** `true` | `hidePrivate` | Hides private calendar events.

**Possible values:** `true` or `false`
**Default value:** `false` -| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.

**Example:** `['Birthday', 'Hide This Event']`
**Default value:** `[""]` +| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.

**Example:** `['Birthday', 'Hide This Event']`
**Default value:** `[]` ### Calendar configuration diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 7c075d1c..f13345fb 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -39,9 +39,7 @@ Module.register("calendar", { "'s birthday": "" }, broadcastEvents: true, - excludedEvents: [ - "" - ] + excludedEvents: [] }, // Define required scripts. @@ -135,7 +133,7 @@ Module.register("calendar", { if (excluded) { continue; } - + var eventWrapper = document.createElement("tr"); if (this.config.colored) { From 3c60feed02bb6d9b6d05d7090e2966429d99eec8 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Mon, 13 Mar 2017 06:24:04 -0500 Subject: [PATCH 224/257] Add in degree label to solve issue #753 --- CHANGELOG.md | 1 + modules/default/currentweather/README.md | 1 + .../default/currentweather/currentweather.js | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..7dc1c2b7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Add option to display temperature unit label ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 65913d82..d70ec297 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -33,6 +33,7 @@ The following properties can be configured: | `appid` | The [OpenWeatherMap](https://home.openweathermap.org) API key, which can be obtained by creating an OpenWeatherMap account.

This value is **REQUIRED** | `units` | What units to use. Specified by config.js

**Possible values:** `config.units` = Specified by config.js, `default` = Kelvin, `metric` = Celsius, `imperial` =Fahrenheit
**Default value:** `config.units` | `roundTemp` | Round temperature value to nearest integer.

**Possible values:** `true` (round to integer) or `false` (display exact value with decimal point)
**Default value:** `false` +| `degreeLabel` | Show the degree label for your chosen units (Metric = C, Imperial = F, Kelvins = K).

**Possible values:** `true` or `false`
**Default value:** `false` | `updateInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `600000` (10 minutes) | `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `1000` (1 second) | `timeFormat` | Use 12 or 24 hour format.

**Possible values:** `12` or `24`
**Default value:** uses value of _config.timeFormat_ diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 135af54a..0632125f 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -24,6 +24,7 @@ Module.register("currentweather",{ useBeaufort: true, lang: config.language, showHumidity: false, + degreeLabel: false, initialLoadDelay: 0, // 0 seconds delay retryDelay: 2500, @@ -182,9 +183,24 @@ Module.register("currentweather",{ weatherIcon.className = "wi weathericon " + this.weatherType; large.appendChild(weatherIcon); + var degreeLabel = ""; + if (this.config.degreeLabel) { + switch (this.config.units ) { + case "metric": + degreeLabel = "C"; + break; + case "imperial": + degreeLabel = "F"; + break; + case "default": + degreeLabel = "K"; + break; + } + } + var temperature = document.createElement("span"); temperature.className = "bright"; - temperature.innerHTML = " " + this.temperature + "°"; + temperature.innerHTML = " " + this.temperature + "°" + degreeLabel; large.appendChild(temperature); wrapper.appendChild(large); From e2099f07491b9a5f8da0f9aa458e414f22d80eb9 Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Mon, 13 Mar 2017 06:27:54 -0500 Subject: [PATCH 225/257] Fix indents --- .../default/currentweather/currentweather.js | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 0632125f..1b55e255 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -183,21 +183,21 @@ Module.register("currentweather",{ weatherIcon.className = "wi weathericon " + this.weatherType; large.appendChild(weatherIcon); - var degreeLabel = ""; - if (this.config.degreeLabel) { - switch (this.config.units ) { - case "metric": - degreeLabel = "C"; - break; - case "imperial": - degreeLabel = "F"; - break; - case "default": - degreeLabel = "K"; - break; - } - } - + var degreeLabel = ""; + if (this.config.degreeLabel) { + switch (this.config.units ) { + case "metric": + degreeLabel = "C"; + break; + case "imperial": + degreeLabel = "F"; + break; + case "default": + degreeLabel = "K"; + break; + } + } + var temperature = document.createElement("span"); temperature.className = "bright"; temperature.innerHTML = " " + this.temperature + "°" + degreeLabel; From bb08fe8113e37a6a44dc3ab4ca64fcf8a3ec200e Mon Sep 17 00:00:00 2001 From: fewieden Date: Tue, 14 Mar 2017 11:49:20 +0100 Subject: [PATCH 226/257] fix recursive installation loop, added other vendor dependencies --- package.json | 3 +- vendor/moment/moment-timezone.js | 1197 -- vendor/moment/moment-with-locales.js | 12061 ---------------- vendor/moment/moment-with-locales.min.js | 75 - vendor/package.json | 6 +- vendor/vendor.js | 8 +- .../weather-icons/css/weather-icons-wind.css | 5331 ------- .../css/weather-icons-wind.min.css | 1 - vendor/weather-icons/css/weather-icons.css | 1838 --- .../weather-icons/css/weather-icons.min.css | 41 - .../font/weathericons-regular-webfont.eot | Bin 99774 -> 0 bytes .../font/weathericons-regular-webfont.svg | 257 - .../font/weathericons-regular-webfont.ttf | Bin 99564 -> 0 bytes .../font/weathericons-regular-webfont.woff | Bin 56468 -> 0 bytes .../font/weathericons-regular-webfont.woff2 | Bin 44720 -> 0 bytes 15 files changed, 9 insertions(+), 20809 deletions(-) delete mode 100644 vendor/moment/moment-timezone.js delete mode 100644 vendor/moment/moment-with-locales.js delete mode 100644 vendor/moment/moment-with-locales.min.js delete mode 100644 vendor/weather-icons/css/weather-icons-wind.css delete mode 100644 vendor/weather-icons/css/weather-icons-wind.min.css delete mode 100644 vendor/weather-icons/css/weather-icons.css delete mode 100644 vendor/weather-icons/css/weather-icons.min.css delete mode 100755 vendor/weather-icons/font/weathericons-regular-webfont.eot delete mode 100755 vendor/weather-icons/font/weathericons-regular-webfont.svg delete mode 100755 vendor/weather-icons/font/weathericons-regular-webfont.ttf delete mode 100755 vendor/weather-icons/font/weathericons-regular-webfont.woff delete mode 100755 vendor/weather-icons/font/weathericons-regular-webfont.woff2 diff --git a/package.json b/package.json index e22a6b0b..529992e3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "js/electron.js", "scripts": { "start": "sh run-start.sh", - "install": "npm install --prefix vendor", + "install": "cd vendor && npm install", "postinstall": "sh installers/postinstall/postinstall.sh", "test": "./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive", @@ -50,7 +50,6 @@ "express": "^4.14.0", "express-ipfilter": "latest", "feedme": "latest", - "font-awesome": "^4.7.0", "helmet": "^3.1.0", "iconv-lite": "latest", "moment": "latest", diff --git a/vendor/moment/moment-timezone.js b/vendor/moment/moment-timezone.js deleted file mode 100644 index e98675cc..00000000 --- a/vendor/moment/moment-timezone.js +++ /dev/null @@ -1,1197 +0,0 @@ -//! moment-timezone.js -//! version : 0.5.7 -//! author : Tim Wood -//! license : MIT -//! github.com/moment/moment-timezone - -(function (root, factory) { - "use strict"; - - /*global define*/ - if (typeof define === 'function' && define.amd) { - define(['moment'], factory); // AMD - } else if (typeof module === 'object' && module.exports) { - module.exports = factory(require('moment')); // Node - } else { - factory(root.moment); // Browser - } -}(this, function (moment) { - "use strict"; - - // Do not load moment-timezone a second time. - if (moment.tz !== undefined) { - logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); - return moment; - } - - var VERSION = "0.5.7", - zones = {}, - links = {}, - names = {}, - guesses = {}, - cachedGuess, - - momentVersion = moment.version.split('.'), - major = +momentVersion[0], - minor = +momentVersion[1]; - - // Moment.js version check - if (major < 2 || (major === 2 && minor < 6)) { - logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); - } - - /************************************ - Unpacking - ************************************/ - - function charCodeToInt(charCode) { - if (charCode > 96) { - return charCode - 87; - } else if (charCode > 64) { - return charCode - 29; - } - return charCode - 48; - } - - function unpackBase60(string) { - var i = 0, - parts = string.split('.'), - whole = parts[0], - fractional = parts[1] || '', - multiplier = 1, - num, - out = 0, - sign = 1; - - // handle negative numbers - if (string.charCodeAt(0) === 45) { - i = 1; - sign = -1; - } - - // handle digits before the decimal - for (i; i < whole.length; i++) { - num = charCodeToInt(whole.charCodeAt(i)); - out = 60 * out + num; - } - - // handle digits after the decimal - for (i = 0; i < fractional.length; i++) { - multiplier = multiplier / 60; - num = charCodeToInt(fractional.charCodeAt(i)); - out += num * multiplier; - } - - return out * sign; - } - - function arrayToInt (array) { - for (var i = 0; i < array.length; i++) { - array[i] = unpackBase60(array[i]); - } - } - - function intToUntil (array, length) { - for (var i = 0; i < length; i++) { - array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds - } - - array[length - 1] = Infinity; - } - - function mapIndices (source, indices) { - var out = [], i; - - for (i = 0; i < indices.length; i++) { - out[i] = source[indices[i]]; - } - - return out; - } - - function unpack (string) { - var data = string.split('|'), - offsets = data[2].split(' '), - indices = data[3].split(''), - untils = data[4].split(' '); - - arrayToInt(offsets); - arrayToInt(indices); - arrayToInt(untils); - - intToUntil(untils, indices.length); - - return { - name : data[0], - abbrs : mapIndices(data[1].split(' '), indices), - offsets : mapIndices(offsets, indices), - untils : untils, - population : data[5] | 0 - }; - } - - /************************************ - Zone object - ************************************/ - - function Zone (packedString) { - if (packedString) { - this._set(unpack(packedString)); - } - } - - Zone.prototype = { - _set : function (unpacked) { - this.name = unpacked.name; - this.abbrs = unpacked.abbrs; - this.untils = unpacked.untils; - this.offsets = unpacked.offsets; - this.population = unpacked.population; - }, - - _index : function (timestamp) { - var target = +timestamp, - untils = this.untils, - i; - - for (i = 0; i < untils.length; i++) { - if (target < untils[i]) { - return i; - } - } - }, - - parse : function (timestamp) { - var target = +timestamp, - offsets = this.offsets, - untils = this.untils, - max = untils.length - 1, - offset, offsetNext, offsetPrev, i; - - for (i = 0; i < max; i++) { - offset = offsets[i]; - offsetNext = offsets[i + 1]; - offsetPrev = offsets[i ? i - 1 : i]; - - if (offset < offsetNext && tz.moveAmbiguousForward) { - offset = offsetNext; - } else if (offset > offsetPrev && tz.moveInvalidForward) { - offset = offsetPrev; - } - - if (target < untils[i] - (offset * 60000)) { - return offsets[i]; - } - } - - return offsets[max]; - }, - - abbr : function (mom) { - return this.abbrs[this._index(mom)]; - }, - - offset : function (mom) { - return this.offsets[this._index(mom)]; - } - }; - - /************************************ - Current Timezone - ************************************/ - - function OffsetAt(at) { - var timeString = at.toTimeString(); - var abbr = timeString.match(/\([a-z ]+\)/i); - if (abbr && abbr[0]) { - // 17:56:31 GMT-0600 (CST) - // 17:56:31 GMT-0600 (Central Standard Time) - abbr = abbr[0].match(/[A-Z]/g); - abbr = abbr ? abbr.join('') : undefined; - } else { - // 17:56:31 CST - // 17:56:31 GMT+0800 (台北標準時間) - abbr = timeString.match(/[A-Z]{3,5}/g); - abbr = abbr ? abbr[0] : undefined; - } - - if (abbr === 'GMT') { - abbr = undefined; - } - - this.at = +at; - this.abbr = abbr; - this.offset = at.getTimezoneOffset(); - } - - function ZoneScore(zone) { - this.zone = zone; - this.offsetScore = 0; - this.abbrScore = 0; - } - - ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { - this.offsetScore += Math.abs(this.zone.offset(offsetAt.at) - offsetAt.offset); - if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { - this.abbrScore++; - } - }; - - function findChange(low, high) { - var mid, diff; - - while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { - mid = new OffsetAt(new Date(low.at + diff)); - if (mid.offset === low.offset) { - low = mid; - } else { - high = mid; - } - } - - return low; - } - - function userOffsets() { - var startYear = new Date().getFullYear() - 2, - last = new OffsetAt(new Date(startYear, 0, 1)), - offsets = [last], - change, next, i; - - for (i = 1; i < 48; i++) { - next = new OffsetAt(new Date(startYear, i, 1)); - if (next.offset !== last.offset) { - change = findChange(last, next); - offsets.push(change); - offsets.push(new OffsetAt(new Date(change.at + 6e4))); - } - last = next; - } - - for (i = 0; i < 4; i++) { - offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); - offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); - } - - return offsets; - } - - function sortZoneScores (a, b) { - if (a.offsetScore !== b.offsetScore) { - return a.offsetScore - b.offsetScore; - } - if (a.abbrScore !== b.abbrScore) { - return a.abbrScore - b.abbrScore; - } - return b.zone.population - a.zone.population; - } - - function addToGuesses (name, offsets) { - var i, offset; - arrayToInt(offsets); - for (i = 0; i < offsets.length; i++) { - offset = offsets[i]; - guesses[offset] = guesses[offset] || {}; - guesses[offset][name] = true; - } - } - - function guessesForUserOffsets (offsets) { - var offsetsLength = offsets.length, - filteredGuesses = {}, - out = [], - i, j, guessesOffset; - - for (i = 0; i < offsetsLength; i++) { - guessesOffset = guesses[offsets[i].offset] || {}; - for (j in guessesOffset) { - if (guessesOffset.hasOwnProperty(j)) { - filteredGuesses[j] = true; - } - } - } - - for (i in filteredGuesses) { - if (filteredGuesses.hasOwnProperty(i)) { - out.push(names[i]); - } - } - - return out; - } - - function rebuildGuess () { - - // use Intl API when available and returning valid time zone - try { - var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; - if (intlName){ - var name = names[normalizeName(intlName)]; - if (name) { - return name; - } - logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); - } - } catch (e) { - // Intl unavailable, fall back to manual guessing. - } - - var offsets = userOffsets(), - offsetsLength = offsets.length, - guesses = guessesForUserOffsets(offsets), - zoneScores = [], - zoneScore, i, j; - - for (i = 0; i < guesses.length; i++) { - zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); - for (j = 0; j < offsetsLength; j++) { - zoneScore.scoreOffsetAt(offsets[j]); - } - zoneScores.push(zoneScore); - } - - zoneScores.sort(sortZoneScores); - - return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; - } - - function guess (ignoreCache) { - if (!cachedGuess || ignoreCache) { - cachedGuess = rebuildGuess(); - } - return cachedGuess; - } - - /************************************ - Global Methods - ************************************/ - - function normalizeName (name) { - return (name || '').toLowerCase().replace(/\//g, '_'); - } - - function addZone (packed) { - var i, name, split, normalized; - - if (typeof packed === "string") { - packed = [packed]; - } - - for (i = 0; i < packed.length; i++) { - split = packed[i].split('|'); - name = split[0]; - normalized = normalizeName(name); - zones[normalized] = packed[i]; - names[normalized] = name; - if (split[5]) { - addToGuesses(normalized, split[2].split(' ')); - } - } - } - - function getZone (name, caller) { - name = normalizeName(name); - - var zone = zones[name]; - var link; - - if (zone instanceof Zone) { - return zone; - } - - if (typeof zone === 'string') { - zone = new Zone(zone); - zones[name] = zone; - return zone; - } - - // Pass getZone to prevent recursion more than 1 level deep - if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { - zone = zones[name] = new Zone(); - zone._set(link); - zone.name = names[name]; - return zone; - } - - return null; - } - - function getNames () { - var i, out = []; - - for (i in names) { - if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { - out.push(names[i]); - } - } - - return out.sort(); - } - - function addLink (aliases) { - var i, alias, normal0, normal1; - - if (typeof aliases === "string") { - aliases = [aliases]; - } - - for (i = 0; i < aliases.length; i++) { - alias = aliases[i].split('|'); - - normal0 = normalizeName(alias[0]); - normal1 = normalizeName(alias[1]); - - links[normal0] = normal1; - names[normal0] = alias[0]; - - links[normal1] = normal0; - names[normal1] = alias[1]; - } - } - - function loadData (data) { - addZone(data.zones); - addLink(data.links); - tz.dataVersion = data.version; - } - - function zoneExists (name) { - if (!zoneExists.didShowError) { - zoneExists.didShowError = true; - logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); - } - return !!getZone(name); - } - - function needsOffset (m) { - return !!(m._a && (m._tzm === undefined)); - } - - function logError (message) { - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - } - - /************************************ - moment.tz namespace - ************************************/ - - function tz (input) { - var args = Array.prototype.slice.call(arguments, 0, -1), - name = arguments[arguments.length - 1], - zone = getZone(name), - out = moment.utc.apply(null, args); - - if (zone && !moment.isMoment(input) && needsOffset(out)) { - out.add(zone.parse(out), 'minutes'); - } - - out.tz(name); - - return out; - } - - tz.version = VERSION; - tz.dataVersion = ''; - tz._zones = zones; - tz._links = links; - tz._names = names; - tz.add = addZone; - tz.link = addLink; - tz.load = loadData; - tz.zone = getZone; - tz.zoneExists = zoneExists; // deprecated in 0.1.0 - tz.guess = guess; - tz.names = getNames; - tz.Zone = Zone; - tz.unpack = unpack; - tz.unpackBase60 = unpackBase60; - tz.needsOffset = needsOffset; - tz.moveInvalidForward = true; - tz.moveAmbiguousForward = false; - - /************************************ - Interface with Moment.js - ************************************/ - - var fn = moment.fn; - - moment.tz = tz; - - moment.defaultZone = null; - - moment.updateOffset = function (mom, keepTime) { - var zone = moment.defaultZone, - offset; - - if (mom._z === undefined) { - if (zone && needsOffset(mom) && !mom._isUTC) { - mom._d = moment.utc(mom._a)._d; - mom.utc().add(zone.parse(mom), 'minutes'); - } - mom._z = zone; - } - if (mom._z) { - offset = mom._z.offset(mom); - if (Math.abs(offset) < 16) { - offset = offset / 60; - } - if (mom.utcOffset !== undefined) { - mom.utcOffset(-offset, keepTime); - } else { - mom.zone(offset, keepTime); - } - } - }; - - fn.tz = function (name) { - if (name) { - this._z = getZone(name); - if (this._z) { - moment.updateOffset(this); - } else { - logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); - } - return this; - } - if (this._z) { return this._z.name; } - }; - - function abbrWrap (old) { - return function () { - if (this._z) { return this._z.abbr(this); } - return old.call(this); - }; - } - - function resetZoneWrap (old) { - return function () { - this._z = null; - return old.apply(this, arguments); - }; - } - - fn.zoneName = abbrWrap(fn.zoneName); - fn.zoneAbbr = abbrWrap(fn.zoneAbbr); - fn.utc = resetZoneWrap(fn.utc); - - moment.tz.setDefault = function(name) { - if (major < 2 || (major === 2 && minor < 9)) { - logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); - } - moment.defaultZone = name ? getZone(name) : null; - return moment; - }; - - // Cloning a moment should include the _z property. - var momentProperties = moment.momentProperties; - if (Object.prototype.toString.call(momentProperties) === '[object Array]') { - // moment 2.8.1+ - momentProperties.push('_z'); - momentProperties.push('_a'); - } else if (momentProperties) { - // moment 2.7.0 - momentProperties._z = null; - } - - loadData({ - "version": "2016h", - "zones": [ - "Africa/Abidjan|GMT|0|0||48e5", - "Africa/Khartoum|EAT|-30|0||51e5", - "Africa/Algiers|CET|-10|0||26e5", - "Africa/Lagos|WAT|-10|0||17e6", - "Africa/Maputo|CAT|-20|0||26e5", - "Africa/Cairo|EET EEST|-20 -30|010101010|1Cby0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", - "Africa/Casablanca|WET WEST|0 -10|01010101010101010101010101010101010101010|1Cco0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0|32e5", - "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", - "Africa/Johannesburg|SAST|-20|0||84e5", - "Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5", - "Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1C1c0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|32e4", - "America/Adak|HST HDT|a0 90|01010101010101010101010|1BR00 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", - "America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1BQX0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", - "America/Santo_Domingo|AST|40|0||29e5", - "America/Araguaina|BRT BRST|30 20|010|1IdD0 Lz0|14e4", - "America/Argentina/Buenos_Aires|ART|30|0|", - "America/Asuncion|PYST PYT|30 40|01010101010101010101010|1C430 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", - "America/Panama|EST|50|0||15e5", - "America/Bahia|BRT BRST|30 20|010|1FJf0 Rb0|27e5", - "America/Bahia_Banderas|MST CDT CST|70 50 60|01212121212121212121212|1C1l0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", - "America/Fortaleza|BRT|30|0||34e5", - "America/Managua|CST|60|0||22e5", - "America/Manaus|AMT|40|0||19e5", - "America/Bogota|COT|50|0||90e5", - "America/Denver|MST MDT|70 60|01010101010101010101010|1BQV0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", - "America/Campo_Grande|AMST AMT|30 40|01010101010101010101010|1BIr0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|77e4", - "America/Cancun|CST CDT EST|60 50 50|010101010102|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", - "America/Caracas|VET VET|4u 40|01|1QMT0|29e5", - "America/Cayenne|GFT|30|0||58e3", - "America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", - "America/Chihuahua|MST MDT|70 60|01010101010101010101010|1C1l0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", - "America/Phoenix|MST|70|0||42e5", - "America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", - "America/New_York|EST EDT|50 40|01010101010101010101010|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", - "America/Rio_Branco|AMT ACT|40 50|01|1KLE0|31e4", - "America/Fort_Nelson|PST PDT MST|80 70 70|010101010102|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", - "America/Halifax|AST ADT|40 30|01010101010101010101010|1BQS0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", - "America/Godthab|WGT WGST|30 20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", - "America/Goose_Bay|AST ADT|40 30|01010101010101010101010|1BQQ1 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", - "America/Grand_Turk|EST EDT AST|50 40 40|0101010101012|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", - "America/Guayaquil|ECT|50|0||27e5", - "America/Guyana|GYT|40|0||80e4", - "America/Havana|CST CDT|50 40|01010101010101010101010|1BQR0 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", - "America/La_Paz|BOT|40|0||19e5", - "America/Lima|PET|50|0||11e6", - "America/Mexico_City|CST CDT|60 50|01010101010101010101010|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", - "America/Metlakatla|PST AKST AKDT|80 90 80|012121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", - "America/Miquelon|PMST PMDT|30 20|01010101010101010101010|1BQR0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", - "America/Montevideo|UYST UYT|20 30|010101010101|1BQQ0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", - "America/Noronha|FNT|20|0||30e2", - "America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|01232323232323232323232|1BQV0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Paramaribo|SRT|30|0||24e4", - "America/Port-au-Prince|EST EDT|50 40|010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", - "America/Santiago|CLST CLT|30 40|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5", - "America/Sao_Paulo|BRST BRT|20 30|01010101010101010101010|1BIq0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|20e6", - "America/Scoresbysund|EGT EGST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", - "America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1BQPv 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", - "Antarctica/Casey|+11 +08|-b0 -80|0101|1BN30 40P0 KL0|10", - "Antarctica/Davis|+05 +07|-50 -70|0101|1BPw0 3Wn0 KN0|70", - "Antarctica/DumontDUrville|+10|-a0|0||80", - "Antarctica/Macquarie|AEDT MIST|-b0 -b0|01|1C140|1", - "Asia/Tashkent|+05|-50|0||23e5", - "Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", - "Antarctica/Rothera|-03|30|0||130", - "Antarctica/Syowa|+03|-30|0||20", - "Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", - "Asia/Almaty|+06|-60|0||15e5", - "Asia/Baghdad|AST|-30|0||66e5", - "Asia/Amman|EET EEST|-20 -30|010101010101010101010|1BVy0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5", - "Asia/Kamchatka|+12 +11|-c0 -b0|010|1Dp30 WM0|18e4", - "Asia/Baku|+04 +05|-40 -50|0101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", - "Asia/Bangkok|ICT|-70|0||15e6", - "Asia/Barnaul|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3rd0", - "Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1BWm0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", - "Asia/Brunei|BNT|-80|0||42e4", - "Asia/Kolkata|IST|-5u|0||15e6", - "Asia/Chita|+09 +10 +08|-90 -a0 -80|010120|1BWh0 1qM0 WM0 8Hz0 3re0|33e4", - "Asia/Choibalsan|CHOT CHOST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3", - "Asia/Shanghai|CST|-80|0||23e6", - "Asia/Colombo|+0530|-5u|0||22e5", - "Asia/Dhaka|BDT|-60|0||16e6", - "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1C0m0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5", - "Asia/Dili|TLT|-90|0||19e4", - "Asia/Dubai|GST|-40|0||39e5", - "Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1BVW1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5", - "Asia/Hebron|EET EEST|-20 -30|0101010101010101010101010|1BVy0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4", - "Asia/Hong_Kong|HKT|-80|0||73e5", - "Asia/Hovd|HOVT HOVST|-70 -80|0101010101010|1O8H0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3", - "Asia/Irkutsk|+08 +09|-80 -90|01010|1BWi0 1qM0 WM0 8Hz0|60e4", - "Europe/Istanbul|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", - "Asia/Jakarta|WIB|-70|0||31e6", - "Asia/Jayapura|WIT|-90|0||26e4", - "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1BVA0 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", - "Asia/Kabul|AFT|-4u|0||46e5", - "Asia/Karachi|PKT|-50|0||24e6", - "Asia/Urumqi|XJT|-60|0||32e5", - "Asia/Kathmandu|NPT|-5J|0||12e5", - "Asia/Khandyga|+10 +11 +09|-a0 -b0 -90|010102|1BWg0 1qM0 WM0 17V0 7zD0|66e2", - "Asia/Krasnoyarsk|+07 +08|-70 -80|01010|1BWj0 1qM0 WM0 8Hz0|10e5", - "Asia/Kuala_Lumpur|MYT|-80|0||71e5", - "Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|010120|1BWf0 1qM0 WM0 8Hz0 3Cq0|95e3", - "Asia/Makassar|WITA|-80|0||15e5", - "Asia/Manila|PHT|-80|0||24e6", - "Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", - "Asia/Novokuznetsk|+07 +06|-70 -60|010|1Dp80 WM0|55e4", - "Asia/Novosibirsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 4eN0|15e5", - "Asia/Omsk|+06 +07|-60 -70|01010|1BWk0 1qM0 WM0 8Hz0|12e5", - "Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5", - "Asia/Rangoon|MMT|-6u|0||48e5", - "Asia/Sakhalin|+10 +11|-a0 -b0|010101|1BWg0 1qM0 WM0 8Hz0 3rd0|58e4", - "Asia/Seoul|KST|-90|0||23e6", - "Asia/Singapore|SGT|-80|0||56e5", - "Asia/Srednekolymsk|+11 +12|-b0 -c0|01010|1BWf0 1qM0 WM0 8Hz0|35e2", - "Asia/Tbilisi|+04|-40|0||11e5", - "Asia/Tehran|IRST IRDT|-3u -4u|01010101010101010101010|1BTUu 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", - "Asia/Thimphu|BTT|-60|0||79e3", - "Asia/Tokyo|JST|-90|0||38e6", - "Asia/Tomsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3Qp0|10e5", - "Asia/Ulaanbaatar|ULAT ULAST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5", - "Asia/Ust-Nera|+11 +12 +10|-b0 -c0 -a0|010102|1BWf0 1qM0 WM0 17V0 7zD0|65e2", - "Asia/Vladivostok|+10 +11|-a0 -b0|01010|1BWg0 1qM0 WM0 8Hz0|60e4", - "Asia/Yakutsk|+09 +10|-90 -a0|01010|1BWh0 1qM0 WM0 8Hz0|28e4", - "Asia/Yekaterinburg|+05 +06|-50 -60|01010|1BWl0 1qM0 WM0 8Hz0|14e5", - "Asia/Yerevan|+04 +05|-40 -50|01010|1BWm0 1qM0 WM0 1qM0|13e5", - "Atlantic/Azores|AZOT AZOST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", - "Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", - "Atlantic/Cape_Verde|CVT|10|0||50e4", - "Atlantic/South_Georgia|GST|20|0||30", - "Atlantic/Stanley|FKST FKT|30 40|010|1C6R0 U10|21e2", - "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1C140 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", - "Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1C14u 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", - "Australia/Brisbane|AEST|-a0|0||20e5", - "Australia/Darwin|ACST|-9u|0||12e4", - "Australia/Eucla|ACWST|-8J|0||368", - "Australia/Lord_Howe|LHDT LHST|-b0 -au|01010101010101010101010|1C130 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", - "Australia/Perth|AWST|-80|0||18e5", - "Pacific/Easter|EASST EAST|50 60|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2", - "Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "Etc/GMT+1|-01|10|0|", - "Etc/GMT+10|-10|a0|0|", - "Etc/GMT+11|-11|b0|0|", - "Etc/GMT+12|-12|c0|0|", - "Etc/GMT+2|-02|20|0|", - "Etc/GMT+4|-04|40|0|", - "Etc/GMT+5|-05|50|0|", - "Etc/GMT+6|-06|60|0|", - "Etc/GMT+7|-07|70|0|", - "Etc/GMT+8|-08|80|0|", - "Etc/GMT+9|-09|90|0|", - "Etc/GMT-1|+01|-10|0|", - "Etc/GMT-11|+11|-b0|0|", - "Etc/GMT-12|+12|-c0|0|", - "Etc/GMT-13|+13|-d0|0|", - "Etc/GMT-14|+14|-e0|0|", - "Etc/GMT-2|+02|-20|0|", - "Etc/GMT-7|+07|-70|0|", - "Etc/GMT-8|+08|-80|0|", - "Etc/GMT-9|+09|-90|0|", - "Etc/UCT|UCT|0|0|", - "Etc/UTC|UTC|0|0|", - "Europe/Astrakhan|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 3rd0", - "Europe/London|GMT BST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", - "Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", - "Europe/Kaliningrad|EET EEST +03|-20 -30 -30|01020|1BWo0 1qM0 WM0 8Hz0|44e4", - "Europe/Volgograd|+03 +04|-30 -40|01010|1BWn0 1qM0 WM0 8Hz0|10e5", - "Europe/Minsk|EET EEST +03|-20 -30 -30|0102|1BWo0 1qM0 WM0|19e5", - "Europe/Moscow|MSK MSD MSK|-30 -40 -40|01020|1BWn0 1qM0 WM0 8Hz0|16e6", - "Europe/Samara|+04 +03|-40 -30|010|1Dpb0 WM0|12e5", - "Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|01010101023|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", - "Pacific/Honolulu|HST|a0|0||37e4", - "Indian/Chagos|IOT|-60|0||30e2", - "Indian/Christmas|CXT|-70|0||21e2", - "Indian/Cocos|CCT|-6u|0||596", - "Indian/Mahe|SCT|-40|0||79e3", - "Indian/Maldives|MVT|-50|0||35e4", - "Indian/Mauritius|MUT|-40|0||15e4", - "Indian/Reunion|RET|-40|0||84e4", - "Pacific/Majuro|MHT|-c0|0||28e3", - "MET|MET MEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Pacific/Chatham|CHADT CHAST|-dJ -cJ|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", - "Pacific/Apia|SST SDT WSDT WSST|b0 a0 -e0 -d0|01012323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", - "Pacific/Bougainville|PGT BST|-a0 -b0|01|1NwE0|18e4", - "Pacific/Chuuk|CHUT|-a0|0||49e3", - "Pacific/Efate|VUT|-b0|0||66e3", - "Pacific/Enderbury|PHOT|-d0|0||1", - "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483", - "Pacific/Fiji|FJST FJT|-d0 -c0|01010101010101010101010|1BWe0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|88e4", - "Pacific/Funafuti|TVT|-c0|0||45e2", - "Pacific/Galapagos|GALT|60|0||25e3", - "Pacific/Gambier|GAMT|90|0||125", - "Pacific/Guadalcanal|SBT|-b0|0||11e4", - "Pacific/Guam|ChST|-a0|0||17e4", - "Pacific/Kiritimati|LINT|-e0|0||51e2", - "Pacific/Kosrae|KOST|-b0|0||66e2", - "Pacific/Marquesas|MART|9u|0||86e2", - "Pacific/Pago_Pago|SST|b0|0||37e2", - "Pacific/Nauru|NRT|-c0|0||10e3", - "Pacific/Niue|NUT|b0|0||12e2", - "Pacific/Norfolk|NFT NFT|-bu -b0|01|1PoCu|25e4", - "Pacific/Noumea|NCT|-b0|0||98e3", - "Pacific/Palau|PWT|-90|0||21e3", - "Pacific/Pitcairn|PST|80|0||56", - "Pacific/Pohnpei|PONT|-b0|0||34e3", - "Pacific/Port_Moresby|PGT|-a0|0||25e4", - "Pacific/Rarotonga|CKT|a0|0||13e3", - "Pacific/Tahiti|TAHT|a0|0||18e4", - "Pacific/Tarawa|GILT|-c0|0||29e3", - "Pacific/Tongatapu|TOT|-d0|0||75e3", - "Pacific/Wake|WAKT|-c0|0||16e3", - "Pacific/Wallis|WFT|-c0|0||94" - ], - "links": [ - "Africa/Abidjan|Africa/Accra", - "Africa/Abidjan|Africa/Bamako", - "Africa/Abidjan|Africa/Banjul", - "Africa/Abidjan|Africa/Bissau", - "Africa/Abidjan|Africa/Conakry", - "Africa/Abidjan|Africa/Dakar", - "Africa/Abidjan|Africa/Freetown", - "Africa/Abidjan|Africa/Lome", - "Africa/Abidjan|Africa/Monrovia", - "Africa/Abidjan|Africa/Nouakchott", - "Africa/Abidjan|Africa/Ouagadougou", - "Africa/Abidjan|Africa/Sao_Tome", - "Africa/Abidjan|Africa/Timbuktu", - "Africa/Abidjan|America/Danmarkshavn", - "Africa/Abidjan|Atlantic/Reykjavik", - "Africa/Abidjan|Atlantic/St_Helena", - "Africa/Abidjan|Etc/GMT", - "Africa/Abidjan|Etc/GMT+0", - "Africa/Abidjan|Etc/GMT-0", - "Africa/Abidjan|Etc/GMT0", - "Africa/Abidjan|Etc/Greenwich", - "Africa/Abidjan|GMT", - "Africa/Abidjan|GMT+0", - "Africa/Abidjan|GMT-0", - "Africa/Abidjan|GMT0", - "Africa/Abidjan|Greenwich", - "Africa/Abidjan|Iceland", - "Africa/Algiers|Africa/Tunis", - "Africa/Cairo|Egypt", - "Africa/Casablanca|Africa/El_Aaiun", - "Africa/Johannesburg|Africa/Maseru", - "Africa/Johannesburg|Africa/Mbabane", - "Africa/Khartoum|Africa/Addis_Ababa", - "Africa/Khartoum|Africa/Asmara", - "Africa/Khartoum|Africa/Asmera", - "Africa/Khartoum|Africa/Dar_es_Salaam", - "Africa/Khartoum|Africa/Djibouti", - "Africa/Khartoum|Africa/Juba", - "Africa/Khartoum|Africa/Kampala", - "Africa/Khartoum|Africa/Mogadishu", - "Africa/Khartoum|Africa/Nairobi", - "Africa/Khartoum|Indian/Antananarivo", - "Africa/Khartoum|Indian/Comoro", - "Africa/Khartoum|Indian/Mayotte", - "Africa/Lagos|Africa/Bangui", - "Africa/Lagos|Africa/Brazzaville", - "Africa/Lagos|Africa/Douala", - "Africa/Lagos|Africa/Kinshasa", - "Africa/Lagos|Africa/Libreville", - "Africa/Lagos|Africa/Luanda", - "Africa/Lagos|Africa/Malabo", - "Africa/Lagos|Africa/Ndjamena", - "Africa/Lagos|Africa/Niamey", - "Africa/Lagos|Africa/Porto-Novo", - "Africa/Maputo|Africa/Blantyre", - "Africa/Maputo|Africa/Bujumbura", - "Africa/Maputo|Africa/Gaborone", - "Africa/Maputo|Africa/Harare", - "Africa/Maputo|Africa/Kigali", - "Africa/Maputo|Africa/Lubumbashi", - "Africa/Maputo|Africa/Lusaka", - "Africa/Tripoli|Libya", - "America/Adak|America/Atka", - "America/Adak|US/Aleutian", - "America/Anchorage|America/Juneau", - "America/Anchorage|America/Nome", - "America/Anchorage|America/Sitka", - "America/Anchorage|America/Yakutat", - "America/Anchorage|US/Alaska", - "America/Argentina/Buenos_Aires|America/Argentina/Catamarca", - "America/Argentina/Buenos_Aires|America/Argentina/ComodRivadavia", - "America/Argentina/Buenos_Aires|America/Argentina/Cordoba", - "America/Argentina/Buenos_Aires|America/Argentina/Jujuy", - "America/Argentina/Buenos_Aires|America/Argentina/La_Rioja", - "America/Argentina/Buenos_Aires|America/Argentina/Mendoza", - "America/Argentina/Buenos_Aires|America/Argentina/Rio_Gallegos", - "America/Argentina/Buenos_Aires|America/Argentina/Salta", - "America/Argentina/Buenos_Aires|America/Argentina/San_Juan", - "America/Argentina/Buenos_Aires|America/Argentina/San_Luis", - "America/Argentina/Buenos_Aires|America/Argentina/Tucuman", - "America/Argentina/Buenos_Aires|America/Argentina/Ushuaia", - "America/Argentina/Buenos_Aires|America/Buenos_Aires", - "America/Argentina/Buenos_Aires|America/Catamarca", - "America/Argentina/Buenos_Aires|America/Cordoba", - "America/Argentina/Buenos_Aires|America/Jujuy", - "America/Argentina/Buenos_Aires|America/Mendoza", - "America/Argentina/Buenos_Aires|America/Rosario", - "America/Campo_Grande|America/Cuiaba", - "America/Chicago|America/Indiana/Knox", - "America/Chicago|America/Indiana/Tell_City", - "America/Chicago|America/Knox_IN", - "America/Chicago|America/Matamoros", - "America/Chicago|America/Menominee", - "America/Chicago|America/North_Dakota/Center", - "America/Chicago|America/North_Dakota/New_Salem", - "America/Chicago|America/Rainy_River", - "America/Chicago|America/Rankin_Inlet", - "America/Chicago|America/Resolute", - "America/Chicago|America/Winnipeg", - "America/Chicago|CST6CDT", - "America/Chicago|Canada/Central", - "America/Chicago|US/Central", - "America/Chicago|US/Indiana-Starke", - "America/Chihuahua|America/Mazatlan", - "America/Chihuahua|Mexico/BajaSur", - "America/Denver|America/Boise", - "America/Denver|America/Cambridge_Bay", - "America/Denver|America/Edmonton", - "America/Denver|America/Inuvik", - "America/Denver|America/Ojinaga", - "America/Denver|America/Shiprock", - "America/Denver|America/Yellowknife", - "America/Denver|Canada/Mountain", - "America/Denver|MST7MDT", - "America/Denver|Navajo", - "America/Denver|US/Mountain", - "America/Fortaleza|America/Belem", - "America/Fortaleza|America/Maceio", - "America/Fortaleza|America/Recife", - "America/Fortaleza|America/Santarem", - "America/Halifax|America/Glace_Bay", - "America/Halifax|America/Moncton", - "America/Halifax|America/Thule", - "America/Halifax|Atlantic/Bermuda", - "America/Halifax|Canada/Atlantic", - "America/Havana|Cuba", - "America/Los_Angeles|America/Dawson", - "America/Los_Angeles|America/Ensenada", - "America/Los_Angeles|America/Santa_Isabel", - "America/Los_Angeles|America/Tijuana", - "America/Los_Angeles|America/Vancouver", - "America/Los_Angeles|America/Whitehorse", - "America/Los_Angeles|Canada/Pacific", - "America/Los_Angeles|Canada/Yukon", - "America/Los_Angeles|Mexico/BajaNorte", - "America/Los_Angeles|PST8PDT", - "America/Los_Angeles|US/Pacific", - "America/Los_Angeles|US/Pacific-New", - "America/Managua|America/Belize", - "America/Managua|America/Costa_Rica", - "America/Managua|America/El_Salvador", - "America/Managua|America/Guatemala", - "America/Managua|America/Regina", - "America/Managua|America/Swift_Current", - "America/Managua|America/Tegucigalpa", - "America/Managua|Canada/East-Saskatchewan", - "America/Managua|Canada/Saskatchewan", - "America/Manaus|America/Boa_Vista", - "America/Manaus|America/Porto_Velho", - "America/Manaus|Brazil/West", - "America/Mexico_City|America/Merida", - "America/Mexico_City|America/Monterrey", - "America/Mexico_City|Mexico/General", - "America/New_York|America/Detroit", - "America/New_York|America/Fort_Wayne", - "America/New_York|America/Indiana/Indianapolis", - "America/New_York|America/Indiana/Marengo", - "America/New_York|America/Indiana/Petersburg", - "America/New_York|America/Indiana/Vevay", - "America/New_York|America/Indiana/Vincennes", - "America/New_York|America/Indiana/Winamac", - "America/New_York|America/Indianapolis", - "America/New_York|America/Iqaluit", - "America/New_York|America/Kentucky/Louisville", - "America/New_York|America/Kentucky/Monticello", - "America/New_York|America/Louisville", - "America/New_York|America/Montreal", - "America/New_York|America/Nassau", - "America/New_York|America/Nipigon", - "America/New_York|America/Pangnirtung", - "America/New_York|America/Thunder_Bay", - "America/New_York|America/Toronto", - "America/New_York|Canada/Eastern", - "America/New_York|EST5EDT", - "America/New_York|US/East-Indiana", - "America/New_York|US/Eastern", - "America/New_York|US/Michigan", - "America/Noronha|Brazil/DeNoronha", - "America/Panama|America/Atikokan", - "America/Panama|America/Cayman", - "America/Panama|America/Coral_Harbour", - "America/Panama|America/Jamaica", - "America/Panama|EST", - "America/Panama|Jamaica", - "America/Phoenix|America/Creston", - "America/Phoenix|America/Dawson_Creek", - "America/Phoenix|America/Hermosillo", - "America/Phoenix|MST", - "America/Phoenix|US/Arizona", - "America/Rio_Branco|America/Eirunepe", - "America/Rio_Branco|America/Porto_Acre", - "America/Rio_Branco|Brazil/Acre", - "America/Santiago|Antarctica/Palmer", - "America/Santiago|Chile/Continental", - "America/Santo_Domingo|America/Anguilla", - "America/Santo_Domingo|America/Antigua", - "America/Santo_Domingo|America/Aruba", - "America/Santo_Domingo|America/Barbados", - "America/Santo_Domingo|America/Blanc-Sablon", - "America/Santo_Domingo|America/Curacao", - "America/Santo_Domingo|America/Dominica", - "America/Santo_Domingo|America/Grenada", - "America/Santo_Domingo|America/Guadeloupe", - "America/Santo_Domingo|America/Kralendijk", - "America/Santo_Domingo|America/Lower_Princes", - "America/Santo_Domingo|America/Marigot", - "America/Santo_Domingo|America/Martinique", - "America/Santo_Domingo|America/Montserrat", - "America/Santo_Domingo|America/Port_of_Spain", - "America/Santo_Domingo|America/Puerto_Rico", - "America/Santo_Domingo|America/St_Barthelemy", - "America/Santo_Domingo|America/St_Kitts", - "America/Santo_Domingo|America/St_Lucia", - "America/Santo_Domingo|America/St_Thomas", - "America/Santo_Domingo|America/St_Vincent", - "America/Santo_Domingo|America/Tortola", - "America/Santo_Domingo|America/Virgin", - "America/Sao_Paulo|Brazil/East", - "America/St_Johns|Canada/Newfoundland", - "Antarctica/DumontDUrville|Etc/GMT-10", - "Antarctica/Rothera|Etc/GMT+3", - "Antarctica/Syowa|Etc/GMT-3", - "Asia/Almaty|Antarctica/Vostok", - "Asia/Almaty|Asia/Bishkek", - "Asia/Almaty|Asia/Qyzylorda", - "Asia/Almaty|Etc/GMT-6", - "Asia/Baghdad|Asia/Aden", - "Asia/Baghdad|Asia/Bahrain", - "Asia/Baghdad|Asia/Kuwait", - "Asia/Baghdad|Asia/Qatar", - "Asia/Baghdad|Asia/Riyadh", - "Asia/Bangkok|Asia/Ho_Chi_Minh", - "Asia/Bangkok|Asia/Phnom_Penh", - "Asia/Bangkok|Asia/Saigon", - "Asia/Bangkok|Asia/Vientiane", - "Asia/Dhaka|Asia/Dacca", - "Asia/Dubai|Asia/Muscat", - "Asia/Hong_Kong|Hongkong", - "Asia/Jakarta|Asia/Pontianak", - "Asia/Jerusalem|Asia/Tel_Aviv", - "Asia/Jerusalem|Israel", - "Asia/Kamchatka|Asia/Anadyr", - "Asia/Kathmandu|Asia/Katmandu", - "Asia/Kolkata|Asia/Calcutta", - "Asia/Kuala_Lumpur|Asia/Kuching", - "Asia/Makassar|Asia/Ujung_Pandang", - "Asia/Rangoon|Asia/Yangon", - "Asia/Seoul|ROK", - "Asia/Shanghai|Asia/Chongqing", - "Asia/Shanghai|Asia/Chungking", - "Asia/Shanghai|Asia/Harbin", - "Asia/Shanghai|Asia/Macao", - "Asia/Shanghai|Asia/Macau", - "Asia/Shanghai|Asia/Taipei", - "Asia/Shanghai|PRC", - "Asia/Shanghai|ROC", - "Asia/Singapore|Singapore", - "Asia/Tashkent|Antarctica/Mawson", - "Asia/Tashkent|Asia/Aqtau", - "Asia/Tashkent|Asia/Aqtobe", - "Asia/Tashkent|Asia/Ashgabat", - "Asia/Tashkent|Asia/Ashkhabad", - "Asia/Tashkent|Asia/Dushanbe", - "Asia/Tashkent|Asia/Oral", - "Asia/Tashkent|Asia/Samarkand", - "Asia/Tashkent|Etc/GMT-5", - "Asia/Tashkent|Indian/Kerguelen", - "Asia/Tbilisi|Etc/GMT-4", - "Asia/Tehran|Iran", - "Asia/Thimphu|Asia/Thimbu", - "Asia/Tokyo|Japan", - "Asia/Ulaanbaatar|Asia/Ulan_Bator", - "Asia/Urumqi|Asia/Kashgar", - "Australia/Adelaide|Australia/Broken_Hill", - "Australia/Adelaide|Australia/South", - "Australia/Adelaide|Australia/Yancowinna", - "Australia/Brisbane|Australia/Lindeman", - "Australia/Brisbane|Australia/Queensland", - "Australia/Darwin|Australia/North", - "Australia/Lord_Howe|Australia/LHI", - "Australia/Perth|Australia/West", - "Australia/Sydney|Australia/ACT", - "Australia/Sydney|Australia/Canberra", - "Australia/Sydney|Australia/Currie", - "Australia/Sydney|Australia/Hobart", - "Australia/Sydney|Australia/Melbourne", - "Australia/Sydney|Australia/NSW", - "Australia/Sydney|Australia/Tasmania", - "Australia/Sydney|Australia/Victoria", - "Etc/UCT|UCT", - "Etc/UTC|Etc/Universal", - "Etc/UTC|Etc/Zulu", - "Etc/UTC|UTC", - "Etc/UTC|Universal", - "Etc/UTC|Zulu", - "Europe/Astrakhan|Europe/Ulyanovsk", - "Europe/Athens|Asia/Nicosia", - "Europe/Athens|EET", - "Europe/Athens|Europe/Bucharest", - "Europe/Athens|Europe/Helsinki", - "Europe/Athens|Europe/Kiev", - "Europe/Athens|Europe/Mariehamn", - "Europe/Athens|Europe/Nicosia", - "Europe/Athens|Europe/Riga", - "Europe/Athens|Europe/Sofia", - "Europe/Athens|Europe/Tallinn", - "Europe/Athens|Europe/Uzhgorod", - "Europe/Athens|Europe/Vilnius", - "Europe/Athens|Europe/Zaporozhye", - "Europe/Chisinau|Europe/Tiraspol", - "Europe/Dublin|Eire", - "Europe/Istanbul|Asia/Istanbul", - "Europe/Istanbul|Turkey", - "Europe/Lisbon|Atlantic/Canary", - "Europe/Lisbon|Atlantic/Faeroe", - "Europe/Lisbon|Atlantic/Faroe", - "Europe/Lisbon|Atlantic/Madeira", - "Europe/Lisbon|Portugal", - "Europe/Lisbon|WET", - "Europe/London|Europe/Belfast", - "Europe/London|Europe/Guernsey", - "Europe/London|Europe/Isle_of_Man", - "Europe/London|Europe/Jersey", - "Europe/London|GB", - "Europe/London|GB-Eire", - "Europe/Moscow|W-SU", - "Europe/Paris|Africa/Ceuta", - "Europe/Paris|Arctic/Longyearbyen", - "Europe/Paris|Atlantic/Jan_Mayen", - "Europe/Paris|CET", - "Europe/Paris|Europe/Amsterdam", - "Europe/Paris|Europe/Andorra", - "Europe/Paris|Europe/Belgrade", - "Europe/Paris|Europe/Berlin", - "Europe/Paris|Europe/Bratislava", - "Europe/Paris|Europe/Brussels", - "Europe/Paris|Europe/Budapest", - "Europe/Paris|Europe/Busingen", - "Europe/Paris|Europe/Copenhagen", - "Europe/Paris|Europe/Gibraltar", - "Europe/Paris|Europe/Ljubljana", - "Europe/Paris|Europe/Luxembourg", - "Europe/Paris|Europe/Madrid", - "Europe/Paris|Europe/Malta", - "Europe/Paris|Europe/Monaco", - "Europe/Paris|Europe/Oslo", - "Europe/Paris|Europe/Podgorica", - "Europe/Paris|Europe/Prague", - "Europe/Paris|Europe/Rome", - "Europe/Paris|Europe/San_Marino", - "Europe/Paris|Europe/Sarajevo", - "Europe/Paris|Europe/Skopje", - "Europe/Paris|Europe/Stockholm", - "Europe/Paris|Europe/Tirane", - "Europe/Paris|Europe/Vaduz", - "Europe/Paris|Europe/Vatican", - "Europe/Paris|Europe/Vienna", - "Europe/Paris|Europe/Warsaw", - "Europe/Paris|Europe/Zagreb", - "Europe/Paris|Europe/Zurich", - "Europe/Paris|Poland", - "Europe/Volgograd|Europe/Kirov", - "Pacific/Auckland|Antarctica/McMurdo", - "Pacific/Auckland|Antarctica/South_Pole", - "Pacific/Auckland|NZ", - "Pacific/Chatham|NZ-CHAT", - "Pacific/Chuuk|Pacific/Truk", - "Pacific/Chuuk|Pacific/Yap", - "Pacific/Easter|Chile/EasterIsland", - "Pacific/Guam|Pacific/Saipan", - "Pacific/Honolulu|HST", - "Pacific/Honolulu|Pacific/Johnston", - "Pacific/Honolulu|US/Hawaii", - "Pacific/Majuro|Kwajalein", - "Pacific/Majuro|Pacific/Kwajalein", - "Pacific/Pago_Pago|Pacific/Midway", - "Pacific/Pago_Pago|Pacific/Samoa", - "Pacific/Pago_Pago|US/Samoa", - "Pacific/Pohnpei|Pacific/Ponape" - ] - }); - - - return moment; -})); diff --git a/vendor/moment/moment-with-locales.js b/vendor/moment/moment-with-locales.js deleted file mode 100644 index 77c8c300..00000000 --- a/vendor/moment/moment-with-locales.js +++ /dev/null @@ -1,12061 +0,0 @@ -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; - - var hookCallback; - - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false, - parsedDateParts : [], - meridiem : null - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - var some; - if (Array.prototype.some) { - some = Array.prototype.some; - } else { - some = function (fun) { - var t = Object(this); - var len = t.length >>> 0; - - for (var i = 0; i < len; i++) { - if (i in t && fun.call(this, t[i], i, t)) { - return true; - } - } - - return false; - }; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - var parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }); - m._isValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated && - (!flags.meridiem || (flags.meridiem && parsedParts)); - - if (m._strict) { - m._isValid = m._isValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } - } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } - - return m; - } - - function isUndefined(input) { - return input === void 0; - } - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - var momentProperties = utils_hooks__hooks.momentProperties = []; - - function copyConfig(to, from) { - var i, prop, val; - - if (!isUndefined(from._isAMomentObject)) { - to._isAMomentObject = from._isAMomentObject; - } - if (!isUndefined(from._i)) { - to._i = from._i; - } - if (!isUndefined(from._f)) { - to._f = from._f; - } - if (!isUndefined(from._l)) { - to._l = from._l; - } - if (!isUndefined(from._strict)) { - to._strict = from._strict; - } - if (!isUndefined(from._tzm)) { - to._tzm = from._tzm; - } - if (!isUndefined(from._isUTC)) { - to._isUTC = from._isUTC; - } - if (!isUndefined(from._offset)) { - to._offset = from._offset; - } - if (!isUndefined(from._pf)) { - to._pf = getParsingFlags(from); - } - if (!isUndefined(from._locale)) { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (!isUndefined(val)) { - to[prop] = val; - } - } - } - - return to; - } - - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; - } - } - - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } - - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(null, msg); - } - if (firstTime) { - warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(name, msg); - } - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - utils_hooks__hooks.deprecationHandler = null; - - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function isObject(input) { - return Object.prototype.toString.call(input) === '[object Object]'; - } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (isFunction(prop)) { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - this._config = config; - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - - function mergeConfigs(parentConfig, childConfig) { - var res = extend({}, parentConfig), prop; - for (prop in childConfig) { - if (hasOwnProp(childConfig, prop)) { - if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { - res[prop] = {}; - extend(res[prop], parentConfig[prop]); - extend(res[prop], childConfig[prop]); - } else if (childConfig[prop] != null) { - res[prop] = childConfig[prop]; - } else { - delete res[prop]; - } - } - } - return res; - } - - function Locale(config) { - if (config != null) { - this.set(config); - } - } - - var keys; - - if (Object.keys) { - keys = Object.keys; - } else { - keys = function (obj) { - var i, res = []; - for (i in obj) { - if (hasOwnProp(obj, i)) { - res.push(i); - } - } - return res; - }; - } - - // internal storage for locale config files - var locales = {}; - var globalLocale; - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (isUndefined(values)) { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } - - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } - } - - return globalLocale._abbr; - } - - function defineLocale (name, config) { - if (config !== null) { - config.abbr = name; - if (locales[name] != null) { - deprecateSimple('defineLocaleOverride', - 'use moment.updateLocale(localeName, config) to change ' + - 'an existing locale. moment.defineLocale(localeName, ' + - 'config) should only be used for creating a new locale'); - config = mergeConfigs(locales[name]._config, config); - } else if (config.parentLocale != null) { - if (locales[config.parentLocale] != null) { - config = mergeConfigs(locales[config.parentLocale]._config, config); - } else { - // treat as if there is no base config - deprecateSimple('parentLocaleUndefined', - 'specified parentLocale is not defined yet'); - } - } - locales[name] = new Locale(config); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - } - - function updateLocale(name, config) { - if (config != null) { - var locale; - if (locales[name] != null) { - config = mergeConfigs(locales[name]._config, config); - } - locale = new Locale(config); - locale.parentLocale = locales[name]; - locales[name] = locale; - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - } else { - // pass null for config to unupdate, useful for tests - if (locales[name] != null) { - if (locales[name].parentLocale != null) { - locales[name] = locales[name].parentLocale; - } else if (locales[name] != null) { - delete locales[name]; - } - } - } - return locales[name]; - } - - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return globalLocale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - } - - function locale_locales__listLocales() { - return keys(locales); - } - - var aliases = {}; - - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } - - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; - } - - function get_set__get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; - } - - function get_set__set (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - // MOMENTS - - function getSet (units, value) { - var unit; - if (typeof units === 'object') { - for (unit in units) { - this.set(unit, units[unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; - } - - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } - - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var formatTokenFunctions = {}; - - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } - } - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = '', i; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - - // any word (or two) characters or numbers including two/three word month in arabic. - // includes scottish gaelic two word and hyphenated months - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - - - var regexes = {}; - - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } - - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } - - return regexes[token](config._strict, config._locale); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - })); - } - - function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - var tokens = {}; - - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } - - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } - - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } - - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - var indexOf; - - if (Array.prototype.indexOf) { - indexOf = Array.prototype.indexOf; - } else { - indexOf = function (o) { - // I know - var i; - for (i = 0; i < this.length; ++i) { - if (this[i] === o) { - return i; - } - } - return -1; - }; - } - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - // FORMATTING - - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); - - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); - - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); - - // ALIASES - - addUnitAlias('month', 'M'); - - // PARSING - - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', function (isStrict, locale) { - return locale.monthsShortRegex(isStrict); - }); - addRegexToken('MMMM', function (isStrict, locale) { - return locale.monthsRegex(isStrict); - }); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); - - // LOCALES - - var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m, format) { - return isArray(this._months) ? this._months[m.month()] : - this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m, format) { - return isArray(this._monthsShort) ? this._monthsShort[m.month()] : - this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - function units_month__handleStrictParse(monthName, format, strict) { - var i, ii, mom, llc = monthName.toLocaleLowerCase(); - if (!this._monthsParse) { - // this is not used - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - for (i = 0; i < 12; ++i) { - mom = create_utc__createUTC([2000, i]); - this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); - this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); - } - } - - if (strict) { - if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; - } - } else { - if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._longMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; - } - } - } - - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; - - if (this._monthsParseExact) { - return units_month__handleStrictParse.call(this, monthName, format, strict); - } - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - // TODO: add sorting - // Sorting makes sure if one month (or abbr) is a prefix of another - // see sorting in computeMonthsParse - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - } - - // MOMENTS - - function setMonth (mom, value) { - var dayOfMonth; - - if (!mom.isValid()) { - // No op - return mom; - } - - if (typeof value === 'string') { - if (/^\d+$/.test(value)) { - value = toInt(value); - } else { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - } - - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } - } - - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } - - var defaultMonthsShortRegex = matchWord; - function monthsShortRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsShortStrictRegex; - } else { - return this._monthsShortRegex; - } - } else { - return this._monthsShortStrictRegex && isStrict ? - this._monthsShortStrictRegex : this._monthsShortRegex; - } - } - - var defaultMonthsRegex = matchWord; - function monthsRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsStrictRegex; - } else { - return this._monthsRegex; - } - } else { - return this._monthsStrictRegex && isStrict ? - this._monthsStrictRegex : this._monthsRegex; - } - } - - function computeMonthsParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var shortPieces = [], longPieces = [], mixedPieces = [], - i, mom; - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); - } - // Sorting makes sure if one month (or abbr) is a prefix of another it - // will match the longer piece. - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._monthsShortRegex = this._monthsRegex; - this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - } - - function checkOverflow (m) { - var overflow; - var a = m._a; - - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - if (getParsingFlags(m)._overflowWeeks && overflow === -1) { - overflow = WEEK; - } - if (getParsingFlags(m)._overflowWeekday && overflow === -1) { - overflow = WEEKDAY; - } - - getParsingFlags(m).overflow = overflow; - } - - return m; - } - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], - ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], - ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], - ['GGGG-[W]WW', /\d{4}-W\d\d/, false], - ['YYYY-DDD', /\d{4}-\d{3}/], - ['YYYY-MM', /\d{4}-\d\d/, false], - ['YYYYYYMMDD', /[+-]\d{10}/], - ['YYYYMMDD', /\d{8}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], - ['HH:mm:ss', /\d\d:\d\d:\d\d/], - ['HH:mm', /\d\d:\d\d/], - ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], - ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], - ['HHmmss', /\d\d\d\d\d\d/], - ['HHmm', /\d\d\d\d/], - ['HH', /\d\d/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), - allowTime, dateFormat, timeFormat, tzFormat; - - if (match) { - getParsingFlags(config).iso = true; - - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(match[1])) { - dateFormat = isoDates[i][0]; - allowTime = isoDates[i][2] !== false; - break; - } - } - if (dateFormat == null) { - config._isValid = false; - return; - } - if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(match[3])) { - // match[2] should be 'T' or space - timeFormat = (match[2] || ' ') + isoTimes[i][0]; - break; - } - } - if (timeFormat == null) { - config._isValid = false; - return; - } - } - if (!allowTime && timeFormat != null) { - config._isValid = false; - return; - } - if (match[4]) { - if (tzRegex.exec(match[4])) { - tzFormat = 'Z'; - } else { - config._isValid = false; - return; - } - } - config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); - - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } - - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } - - utils_hooks__hooks.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { - date.setFullYear(y); - } - return date; - } - - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - - //the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { - date.setUTCFullYear(y); - } - return date; - } - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; - }); - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // HOOKS - - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', true); - - function getIsLeapYear () { - return isLeapYear(this.year()); - } - - // start-of-first-week - start-of-year - function firstWeekOffset(year, dow, doy) { - var // first-week day -- which january is always in the first week (4 for iso, 1 for other) - fwd = 7 + dow - doy, - // first-week day local weekday -- which local weekday is fwd - fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; - - return -fwdlw + fwd - 1; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, dow, doy) { - var localWeekday = (7 + weekday - dow) % 7, - weekOffset = firstWeekOffset(year, dow, doy), - dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, - resYear, resDayOfYear; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } - - return { - year: resYear, - dayOfYear: resDayOfYear - }; - } - - function weekOfYear(mom, dow, doy) { - var weekOffset = firstWeekOffset(mom.year(), dow, doy), - week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, - resWeek, resYear; - - if (week < 1) { - resYear = mom.year() - 1; - resWeek = week + weeksInYear(resYear, dow, doy); - } else if (week > weeksInYear(mom.year(), dow, doy)) { - resWeek = week - weeksInYear(mom.year(), dow, doy); - resYear = mom.year() + 1; - } else { - resYear = mom.year(); - resWeek = week; - } - - return { - week: resWeek, - year: resYear - }; - } - - function weeksInYear(year, dow, doy) { - var weekOffset = firstWeekOffset(year, dow, doy), - weekOffsetNext = firstWeekOffset(year + 1, dow, doy); - return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; - } - - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; - } - - function currentDateArray(config) { - // hooks is actually the exported moment object - var nowValue = new Date(utils_hooks__hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; - } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; - } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } - } else { - // default to begining of week - weekday = dow; - } - } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - } - - // constant that refers to the ISO standard - utils_hooks__hooks.ISO_8601 = function () {}; - - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } - - config._a = []; - getParsingFlags(config).empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && - config._a[HOUR] <= 12 && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - - getParsingFlags(config).parsedDateParts = config._a.slice(0); - getParsingFlags(config).meridiem = config._meridiem; - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } - - - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; - - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; - } else { - // this is not supposed to happen - return hour; - } - } - - // date from string and array of format strings - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; - - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - - getParsingFlags(tempConfig).score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { - return obj && parseInt(obj, 10); - }); - - configFromArray(config); - } - - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); - - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; - } else { - configFromInput(config); - } - - if (!valid__isValid(config)) { - config._d = null; - } - - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(utils_hooks__hooks.now()); - } else if (isDate(input)) { - config._d = new Date(input.valueOf()); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } - } - - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } - - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } - - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other < this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other > this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - } - - function max () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - } - - var now = function () { - return Date.now ? Date.now() : +(new Date()); - }; - - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = locale_locales__getLocale(); - - this._bubble(); - } - - function isDuration (obj) { - return obj instanceof Duration; - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } - - offset('Z', ':'); - offset('ZZ', ''); - - // PARSING - - addRegexToken('Z', matchShortOffset); - addRegexToken('ZZ', matchShortOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(matchShortOffset, input); - }); - - // HELPERS - - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - - function offsetFromString(matcher, string) { - var matches = ((string || '').match(matcher) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? minutes : -minutes; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf(); - // Use low-level api, because this fn is low-level api. - res._d.setTime(res._d.valueOf() + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } - - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } - - // HOOKS - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; - - // MOMENTS - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (!this.isValid()) { - return input != null ? this : NaN; - } - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(matchShortOffset, input); - } else if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } - - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - - this.utcOffset(input, keepLocalTime); - - return this; - } else { - return -this.utcOffset(); - } - } - - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } - - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(matchOffset, this._i)); - } - return this; - } - - function hasAlignedHourOffset (input) { - if (!this.isValid()) { - return false; - } - input = input ? local__createLocal(input).utcOffset() : 0; - - return (this.utcOffset() - input) % 60 === 0; - } - - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (!isUndefined(this._isDSTShifted)) { - return this._isDSTShifted; - } - - var c = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } - - return this._isDSTShifted; - } - - function isLocal () { - return this.isValid() ? !this._isUTC : false; - } - - function isUtcOffset () { - return this.isValid() ? this._isUTC : false; - } - - function isUtc () { - return this.isValid() ? this._isUTC && this._offset === 0 : false; - } - - // ASP.NET json date format regex - var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/; - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - // and further modified to allow for strings containing both week and day - var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; - - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; - - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - w : parseIso(match[4], sign), - d : parseIso(match[5], sign), - h : parseIso(match[6], sign), - m : parseIso(match[7], sign), - s : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - } - - create__createDuration.fn = Duration.prototype; - - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - if (!(base.isValid() && other.isValid())) { - return {milliseconds: 0, months: 0}; - } - - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - function absRound (number) { - if (number < 0) { - return Math.round(-1 * number) * -1; - } else { - return Math.round(number); - } - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } - - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = absRound(duration._days), - months = absRound(duration._months); - - if (!mom.isValid()) { - // No op - return; - } - - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } - - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); - - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - - var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]); - - return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } - - function isAfter (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() > localInput.valueOf(); - } else { - return localInput.valueOf() < this.clone().startOf(units).valueOf(); - } - } - - function isBefore (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() < localInput.valueOf(); - } else { - return this.clone().endOf(units).valueOf() < localInput.valueOf(); - } - } - - function isBetween (from, to, units, inclusivity) { - inclusivity = inclusivity || '()'; - return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && - (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); - } - - function isSame (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input), - inputMs; - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() === localInput.valueOf(); - } else { - inputMs = localInput.valueOf(); - return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); - } - } - - function isSameOrAfter (input, units) { - return this.isSame(input, units) || this.isAfter(input,units); - } - - function isSameOrBefore (input, units) { - return this.isSame(input, units) || this.isBefore(input,units); - } - - function diff (input, units, asFloat) { - var that, - zoneDelta, - delta, output; - - if (!this.isValid()) { - return NaN; - } - - that = cloneWithOffset(input, this); - - if (!that.isValid()) { - return NaN; - } - - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } - - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } - - //check for negative zero, return zero if negative zero - return -(wholeMonthDiff + adjust) || 0; - } - - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } - - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if (isFunction(Date.prototype.toISOString)) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } - - function moment_format__format (inputString) { - if (!inputString) { - inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat; - } - var output = formatMoment(this, inputString); - return this.localeData().postformat(output); - } - - function from (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } - - function to (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - function locale (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - } - - var lang = deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ); - - function localeData () { - return this._locale; - } - - function startOf (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - case 'date': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } - - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - - // 'date' is an alias for 'day', so it should be considered as such. - if (units === 'date') { - units = 'day'; - } - - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } - - function to_type__valueOf () { - return this._d.valueOf() - ((this._offset || 0) * 60000); - } - - function unix () { - return Math.floor(this.valueOf() / 1000); - } - - function toDate () { - return this._offset ? new Date(this.valueOf()) : this._d; - } - - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } - - function toObject () { - var m = this; - return { - years: m.year(), - months: m.month(), - date: m.date(), - hours: m.hours(), - minutes: m.minutes(), - seconds: m.seconds(), - milliseconds: m.milliseconds() - }; - } - - function toJSON () { - // new Date(NaN).toJSON() === null - return this.isValid() ? this.toISOString() : null; - } - - function moment_valid__isValid () { - return valid__isValid(this); - } - - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } - - function invalidAt () { - return getParsingFlags(this).overflow; - } - - function creationData() { - return { - input: this._i, - format: this._f, - locale: this._locale, - isUTC: this._isUTC, - strict: this._strict - }; - } - - // FORMATTING - - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); - - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); - - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } - - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - - // ALIASES - - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PARSING - - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); - - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // MOMENTS - - function getSetWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, - this.week(), - this.weekday(), - this.localeData()._week.dow, - this.localeData()._week.doy); - } - - function getSetISOWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, this.isoWeek(), this.isoWeekday(), 1, 4); - } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } - - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } - - function getSetWeekYearHelper(input, week, weekday, dow, doy) { - var weeksTarget; - if (input == null) { - return weekOfYear(this, dow, doy).year; - } else { - weeksTarget = weeksInYear(input, dow, doy); - if (week > weeksTarget) { - week = weeksTarget; - } - return setWeekAll.call(this, input, week, weekday, dow, doy); - } - } - - function setWeekAll(weekYear, week, weekday, dow, doy) { - var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), - date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); - - this.year(date.getUTCFullYear()); - this.month(date.getUTCMonth()); - this.date(date.getUTCDate()); - return this; - } - - // FORMATTING - - addFormatToken('Q', 0, 'Qo', 'quarter'); - - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PARSING - - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); - - // MOMENTS - - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } - - // FORMATTING - - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PARSING - - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); - - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); - - // HELPERS - - // LOCALES - - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } - - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; - - function localeFirstDayOfWeek () { - return this._week.dow; - } - - function localeFirstDayOfYear () { - return this._week.doy; - } - - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - // FORMATTING - - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PARSING - - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); - - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); - - // MOMENTS - - var getSetDayOfMonth = makeGetSet('Date', true); - - // FORMATTING - - addFormatToken('d', 0, 'do', 'day'); - - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); - - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); - - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); - - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PARSING - - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', function (isStrict, locale) { - return locale.weekdaysMinRegex(isStrict); - }); - addRegexToken('ddd', function (isStrict, locale) { - return locale.weekdaysShortRegex(isStrict); - }); - addRegexToken('dddd', function (isStrict, locale) { - return locale.weekdaysRegex(isStrict); - }); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { - var weekday = config._locale.weekdaysParse(input, token, config._strict); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); - - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); - - // HELPERS - - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } - - if (!isNaN(input)) { - return parseInt(input, 10); - } - - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } - - return null; - } - - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m, format) { - return isArray(this._weekdays) ? this._weekdays[m.day()] : - this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; - } - - function day_of_week__handleStrictParse(weekdayName, format, strict) { - var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._shortWeekdaysParse = []; - this._minWeekdaysParse = []; - - for (i = 0; i < 7; ++i) { - mom = create_utc__createUTC([2000, 1]).day(i); - this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); - this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); - this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); - } - } - - if (strict) { - if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - return ii !== -1 ? ii : null; - } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } - } else { - if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } - } - } - - function localeWeekdaysParse (weekdayName, format, strict) { - var i, mom, regex; - - if (this._weekdaysParseExact) { - return day_of_week__handleStrictParse.call(this, weekdayName, format, strict); - } - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._minWeekdaysParse = []; - this._shortWeekdaysParse = []; - this._fullWeekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - - mom = create_utc__createUTC([2000, 1]).day(i); - if (strict && !this._fullWeekdaysParse[i]) { - this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); - this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); - this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); - } - if (!this._weekdaysParse[i]) { - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } - - // MOMENTS - - function getSetDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - } - - function getSetLocaleDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - - function getSetISODayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } - - var defaultWeekdaysRegex = matchWord; - function weekdaysRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysStrictRegex; - } else { - return this._weekdaysRegex; - } - } else { - return this._weekdaysStrictRegex && isStrict ? - this._weekdaysStrictRegex : this._weekdaysRegex; - } - } - - var defaultWeekdaysShortRegex = matchWord; - function weekdaysShortRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysShortStrictRegex; - } else { - return this._weekdaysShortRegex; - } - } else { - return this._weekdaysShortStrictRegex && isStrict ? - this._weekdaysShortStrictRegex : this._weekdaysShortRegex; - } - } - - var defaultWeekdaysMinRegex = matchWord; - function weekdaysMinRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysMinStrictRegex; - } else { - return this._weekdaysMinRegex; - } - } else { - return this._weekdaysMinStrictRegex && isStrict ? - this._weekdaysMinStrictRegex : this._weekdaysMinRegex; - } - } - - - function computeWeekdaysParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], - i, mom, minp, shortp, longp; - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, 1]).day(i); - minp = this.weekdaysMin(mom, ''); - shortp = this.weekdaysShort(mom, ''); - longp = this.weekdays(mom, ''); - minPieces.push(minp); - shortPieces.push(shortp); - longPieces.push(longp); - mixedPieces.push(minp); - mixedPieces.push(shortp); - mixedPieces.push(longp); - } - // Sorting makes sure if one weekday (or abbr) is a prefix of another it - // will match the longer piece. - minPieces.sort(cmpLenRev); - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 7; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._weekdaysShortRegex = this._weekdaysRegex; - this._weekdaysMinRegex = this._weekdaysRegex; - - this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); - } - - // FORMATTING - - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PARSING - - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); - - // HELPERS - - // MOMENTS - - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } - - // FORMATTING - - function hFormat() { - if (this.hours() === 0) { - return 12; - } - - if (this.hours() > 12) { - return this.hours() - 12; - } - - return this.hours(); - - // return this.hours() % 12 || 12; - } - - function kFormat() { - return this.hours() || 24; - } - - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, hFormat); - addFormatToken('k', ['kk', 2], 0, kFormat); - - addFormatToken('hmm', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); - }); - - addFormatToken('hmmss', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - addFormatToken('Hmm', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2); - }); - - addFormatToken('Hmmss', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } - - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } - - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addRegexToken('hmm', match3to4); - addRegexToken('hmmss', match5to6); - addRegexToken('Hmm', match3to4); - addRegexToken('Hmmss', match5to6); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('Hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - }); - addParseToken('Hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - }); - - // LOCALES - - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); - - // FORMATTING - - addFormatToken('m', ['mm', 2], 0, 'minute'); - - // ALIASES - - addUnitAlias('minute', 'm'); - - // PARSING - - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); - - // MOMENTS - - var getSetMinute = makeGetSet('Minutes', false); - - // FORMATTING - - addFormatToken('s', ['ss', 2], 0, 'second'); - - // ALIASES - - addUnitAlias('second', 's'); - - // PARSING - - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); - - // MOMENTS - - var getSetSecond = makeGetSet('Seconds', false); - - // FORMATTING - - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); - - - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PARSING - - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); - - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } - - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } - - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS - - var getSetMillisecond = makeGetSet('Milliseconds', false); - - // FORMATTING - - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); - - // MOMENTS - - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = moment_format__format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isSameOrAfter = isSameOrAfter; - momentPrototype__proto.isSameOrBefore = isSameOrBefore; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = toJSON; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - momentPrototype__proto.creationData = creationData; - - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; - - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; - - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; - - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; - - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; - - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); - - var momentPrototype = momentPrototype__proto; - - function moment_moment__createUnix (input) { - return local__createLocal(input * 1000); - } - - function moment_moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } - - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return isFunction(output) ? output.call(mom, now) : output; - } - - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; - - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; - - if (format || !formatUpper) { - return format; - } - - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; - - function ordinal (number) { - return this._ordinal.replace('%d', number); - } - - function preParsePostFormat (string) { - return string; - } - - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (isFunction(output)) ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return isFunction(format) ? format(output) : format.replace(/%s/i, output); - } - - var prototype__proto = Locale.prototype; - - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; - - // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - prototype__proto._monthsRegex = defaultMonthsRegex; - prototype__proto.monthsRegex = monthsRegex; - prototype__proto._monthsShortRegex = defaultMonthsShortRegex; - prototype__proto.monthsShortRegex = monthsShortRegex; - - // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - prototype__proto._weekdaysRegex = defaultWeekdaysRegex; - prototype__proto.weekdaysRegex = weekdaysRegex; - prototype__proto._weekdaysShortRegex = defaultWeekdaysShortRegex; - prototype__proto.weekdaysShortRegex = weekdaysShortRegex; - prototype__proto._weekdaysMinRegex = defaultWeekdaysMinRegex; - prototype__proto.weekdaysMinRegex = weekdaysMinRegex; - - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } - - function listMonthsImpl (format, index, field) { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - - if (index != null) { - return lists__get(format, index, field, 'month'); - } - - var i; - var out = []; - for (i = 0; i < 12; i++) { - out[i] = lists__get(format, i, field, 'month'); - } - return out; - } - - // () - // (5) - // (fmt, 5) - // (fmt) - // (true) - // (true, 5) - // (true, fmt, 5) - // (true, fmt) - function listWeekdaysImpl (localeSorted, format, index, field) { - if (typeof localeSorted === 'boolean') { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - } else { - format = localeSorted; - index = format; - localeSorted = false; - - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - } - - var locale = locale_locales__getLocale(), - shift = localeSorted ? locale._week.dow : 0; - - if (index != null) { - return lists__get(format, (index + shift) % 7, field, 'day'); - } - - var i; - var out = []; - for (i = 0; i < 7; i++) { - out[i] = lists__get(format, (i + shift) % 7, field, 'day'); - } - return out; - } - - function lists__listMonths (format, index) { - return listMonthsImpl(format, index, 'months'); - } - - function lists__listMonthsShort (format, index) { - return listMonthsImpl(format, index, 'monthsShort'); - } - - function lists__listWeekdays (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); - } - - function lists__listWeekdaysShort (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); - } - - function lists__listWeekdaysMin (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); - } - - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - - var mathAbs = Math.abs; - - function duration_abs__abs () { - var data = this._data; - - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); - - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); - - return this; - } - - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); - - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; - - return duration._bubble(); - } - - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } - - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } - - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } - - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; - - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; - - hours = absFloor(minutes / 60); - data.hours = hours % 24; - - days += absFloor(hours / 24); - - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - - return this; - } - - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } - - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; - } - - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; - - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - } - - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } - - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } - - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } - - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var duration_get__months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } - - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; - } - - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); - - if (withSuffix) { - output = locale.pastFuture(+this, output); - } - - return locale.postformat(output); - } - - var iso_string__abs = Math.abs; - - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; - - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = duration_get__months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; - - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; - - // Side effect imports - - // FORMATTING - - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); - - // PARSING - - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - ; - - //! moment.js - //! version : 2.13.0 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com - - utils_hooks__hooks.version = '2.13.0'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.now = now; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment_moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment_moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.updateLocale = updateLocale; - utils_hooks__hooks.locales = locale_locales__listLocales; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - utils_hooks__hooks.prototype = momentPrototype; - - var moment__default = utils_hooks__hooks; - - //! moment.js locale configuration - //! locale : afrikaans (af) - //! author : Werner Mollentze : https://github.com/wernerm - - var af = moment__default.defineLocale('af', { - months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), - weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), - weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), - meridiemParse: /vm|nm/i, - isPM : function (input) { - return /^nm$/i.test(input); - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower ? 'vm' : 'VM'; - } else { - return isLower ? 'nm' : 'NM'; - } - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Vandag om] LT', - nextDay : '[Môre om] LT', - nextWeek : 'dddd [om] LT', - lastDay : '[Gister om] LT', - lastWeek : '[Laas] dddd [om] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'oor %s', - past : '%s gelede', - s : '\'n paar sekondes', - m : '\'n minuut', - mm : '%d minute', - h : '\'n uur', - hh : '%d ure', - d : '\'n dag', - dd : '%d dae', - M : '\'n maand', - MM : '%d maande', - y : '\'n jaar', - yy : '%d jaar' - }, - ordinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter - }, - week : { - dow : 1, // Maandag is die eerste dag van die week. - doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. - } - }); - - //! moment.js locale configuration - //! locale : Moroccan Arabic (ar-ma) - //! author : ElFadili Yassine : https://github.com/ElFadiliY - //! author : Abdel Said : https://github.com/abdelsaid - - var ar_ma = moment__default.defineLocale('ar-ma', { - months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Arabic Saudi Arabia (ar-sa) - //! author : Suhail Alkowaileet : https://github.com/xsoh - - var ar_sa__symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠' - }, ar_sa__numberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0' - }; - - var ar_sa = moment__default.defineLocale('ar-sa', { - months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ص|م/, - isPM : function (input) { - return 'م' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ص'; - } else { - return 'م'; - } - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - preparse: function (string) { - return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { - return ar_sa__numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return ar_sa__symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Tunisian Arabic (ar-tn) - - var ar_tn = moment__default.defineLocale('ar-tn', { - months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'DD/MM/YYYY', - LL: 'D MMMM YYYY', - LLL: 'D MMMM YYYY HH:mm', - LLLL: 'dddd D MMMM YYYY HH:mm' - }, - calendar: { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime: { - future: 'في %s', - past: 'منذ %s', - s: 'ثوان', - m: 'دقيقة', - mm: '%d دقائق', - h: 'ساعة', - hh: '%d ساعات', - d: 'يوم', - dd: '%d أيام', - M: 'شهر', - MM: '%d أشهر', - y: 'سنة', - yy: '%d سنوات' - }, - week: { - dow: 1, // Monday is the first day of the week. - doy: 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! Locale: Arabic (ar) - //! Author: Abdel Said: https://github.com/abdelsaid - //! Changes in months, weekdays: Ahmed Elkhatib - //! Native plural forms: forabi https://github.com/forabi - - var ar__symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠' - }, ar__numberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0' - }, pluralForm = function (n) { - return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; - }, plurals = { - s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], - m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], - h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], - d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], - M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], - y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] - }, pluralize = function (u) { - return function (number, withoutSuffix, string, isFuture) { - var f = pluralForm(number), - str = plurals[u][pluralForm(number)]; - if (f === 2) { - str = str[withoutSuffix ? 0 : 1]; - } - return str.replace(/%d/i, number); - }; - }, ar__months = [ - 'كانون الثاني يناير', - 'شباط فبراير', - 'آذار مارس', - 'نيسان أبريل', - 'أيار مايو', - 'حزيران يونيو', - 'تموز يوليو', - 'آب أغسطس', - 'أيلول سبتمبر', - 'تشرين الأول أكتوبر', - 'تشرين الثاني نوفمبر', - 'كانون الأول ديسمبر' - ]; - - var ar = moment__default.defineLocale('ar', { - months : ar__months, - monthsShort : ar__months, - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'D/\u200FM/\u200FYYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ص|م/, - isPM : function (input) { - return 'م' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ص'; - } else { - return 'م'; - } - }, - calendar : { - sameDay: '[اليوم عند الساعة] LT', - nextDay: '[غدًا عند الساعة] LT', - nextWeek: 'dddd [عند الساعة] LT', - lastDay: '[أمس عند الساعة] LT', - lastWeek: 'dddd [عند الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'بعد %s', - past : 'منذ %s', - s : pluralize('s'), - m : pluralize('m'), - mm : pluralize('m'), - h : pluralize('h'), - hh : pluralize('h'), - d : pluralize('d'), - dd : pluralize('d'), - M : pluralize('M'), - MM : pluralize('M'), - y : pluralize('y'), - yy : pluralize('y') - }, - preparse: function (string) { - return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { - return ar__numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return ar__symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : azerbaijani (az) - //! author : topchiyev : https://github.com/topchiyev - - var az__suffixes = { - 1: '-inci', - 5: '-inci', - 8: '-inci', - 70: '-inci', - 80: '-inci', - 2: '-nci', - 7: '-nci', - 20: '-nci', - 50: '-nci', - 3: '-üncü', - 4: '-üncü', - 100: '-üncü', - 6: '-ncı', - 9: '-uncu', - 10: '-uncu', - 30: '-uncu', - 60: '-ıncı', - 90: '-ıncı' - }; - - var az = moment__default.defineLocale('az', { - months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), - monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), - weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), - weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), - weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[bugün saat] LT', - nextDay : '[sabah saat] LT', - nextWeek : '[gələn həftə] dddd [saat] LT', - lastDay : '[dünən] LT', - lastWeek : '[keçən həftə] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s sonra', - past : '%s əvvəl', - s : 'birneçə saniyyə', - m : 'bir dəqiqə', - mm : '%d dəqiqə', - h : 'bir saat', - hh : '%d saat', - d : 'bir gün', - dd : '%d gün', - M : 'bir ay', - MM : '%d ay', - y : 'bir il', - yy : '%d il' - }, - meridiemParse: /gecə|səhər|gündüz|axşam/, - isPM : function (input) { - return /^(gündüz|axşam)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'gecə'; - } else if (hour < 12) { - return 'səhər'; - } else if (hour < 17) { - return 'gündüz'; - } else { - return 'axşam'; - } - }, - ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, - ordinal : function (number) { - if (number === 0) { // special case for zero - return number + '-ıncı'; - } - var a = number % 10, - b = number % 100 - a, - c = number >= 100 ? 100 : null; - return number + (az__suffixes[a] || az__suffixes[b] || az__suffixes[c]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : belarusian (be) - //! author : Dmitry Demidov : https://github.com/demidov91 - //! author: Praleska: http://praleska.pro/ - //! Author : Menelion Elensúle : https://github.com/Oire - - function be__plural(word, num) { - var forms = word.split('_'); - return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); - } - function be__relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', - 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', - 'dd': 'дзень_дні_дзён', - 'MM': 'месяц_месяцы_месяцаў', - 'yy': 'год_гады_гадоў' - }; - if (key === 'm') { - return withoutSuffix ? 'хвіліна' : 'хвіліну'; - } - else if (key === 'h') { - return withoutSuffix ? 'гадзіна' : 'гадзіну'; - } - else { - return number + ' ' + be__plural(format[key], +number); - } - } - - var be = moment__default.defineLocale('be', { - months : { - format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), - standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') - }, - monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), - weekdays : { - format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), - standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), - isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ - }, - weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), - weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY г.', - LLL : 'D MMMM YYYY г., HH:mm', - LLLL : 'dddd, D MMMM YYYY г., HH:mm' - }, - calendar : { - sameDay: '[Сёння ў] LT', - nextDay: '[Заўтра ў] LT', - lastDay: '[Учора ў] LT', - nextWeek: function () { - return '[У] dddd [ў] LT'; - }, - lastWeek: function () { - switch (this.day()) { - case 0: - case 3: - case 5: - case 6: - return '[У мінулую] dddd [ў] LT'; - case 1: - case 2: - case 4: - return '[У мінулы] dddd [ў] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'праз %s', - past : '%s таму', - s : 'некалькі секунд', - m : be__relativeTimeWithPlural, - mm : be__relativeTimeWithPlural, - h : be__relativeTimeWithPlural, - hh : be__relativeTimeWithPlural, - d : 'дзень', - dd : be__relativeTimeWithPlural, - M : 'месяц', - MM : be__relativeTimeWithPlural, - y : 'год', - yy : be__relativeTimeWithPlural - }, - meridiemParse: /ночы|раніцы|дня|вечара/, - isPM : function (input) { - return /^(дня|вечара)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ночы'; - } else if (hour < 12) { - return 'раніцы'; - } else if (hour < 17) { - return 'дня'; - } else { - return 'вечара'; - } - }, - ordinalParse: /\d{1,2}-(і|ы|га)/, - ordinal: function (number, period) { - switch (period) { - case 'M': - case 'd': - case 'DDD': - case 'w': - case 'W': - return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; - case 'D': - return number + '-га'; - default: - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : bulgarian (bg) - //! author : Krasen Borisov : https://github.com/kraz - - var bg = moment__default.defineLocale('bg', { - months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), - monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), - weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), - weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), - weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'D.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Днес в] LT', - nextDay : '[Утре в] LT', - nextWeek : 'dddd [в] LT', - lastDay : '[Вчера в] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - case 6: - return '[В изминалата] dddd [в] LT'; - case 1: - case 2: - case 4: - case 5: - return '[В изминалия] dddd [в] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'след %s', - past : 'преди %s', - s : 'няколко секунди', - m : 'минута', - mm : '%d минути', - h : 'час', - hh : '%d часа', - d : 'ден', - dd : '%d дни', - M : 'месец', - MM : '%d месеца', - y : 'година', - yy : '%d години' - }, - ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, - ordinal : function (number) { - var lastDigit = number % 10, - last2Digits = number % 100; - if (number === 0) { - return number + '-ев'; - } else if (last2Digits === 0) { - return number + '-ен'; - } else if (last2Digits > 10 && last2Digits < 20) { - return number + '-ти'; - } else if (lastDigit === 1) { - return number + '-ви'; - } else if (lastDigit === 2) { - return number + '-ри'; - } else if (lastDigit === 7 || lastDigit === 8) { - return number + '-ми'; - } else { - return number + '-ти'; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Bengali (bn) - //! author : Kaushik Gandhi : https://github.com/kaushikgandhi - - var bn__symbolMap = { - '1': '১', - '2': '২', - '3': '৩', - '4': '৪', - '5': '৫', - '6': '৬', - '7': '৭', - '8': '৮', - '9': '৯', - '0': '০' - }, - bn__numberMap = { - '১': '1', - '২': '2', - '৩': '3', - '৪': '4', - '৫': '5', - '৬': '6', - '৭': '7', - '৮': '8', - '৯': '9', - '০': '0' - }; - - var bn = moment__default.defineLocale('bn', { - months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), - monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'), - weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রবার_শনিবার'.split('_'), - weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্র_শনি'.split('_'), - weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'), - longDateFormat : { - LT : 'A h:mm সময়', - LTS : 'A h:mm:ss সময়', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm সময়', - LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' - }, - calendar : { - sameDay : '[আজ] LT', - nextDay : '[আগামীকাল] LT', - nextWeek : 'dddd, LT', - lastDay : '[গতকাল] LT', - lastWeek : '[গত] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s পরে', - past : '%s আগে', - s : 'কয়েক সেকেন্ড', - m : 'এক মিনিট', - mm : '%d মিনিট', - h : 'এক ঘন্টা', - hh : '%d ঘন্টা', - d : 'এক দিন', - dd : '%d দিন', - M : 'এক মাস', - MM : '%d মাস', - y : 'এক বছর', - yy : '%d বছর' - }, - preparse: function (string) { - return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { - return bn__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return bn__symbolMap[match]; - }); - }, - meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'রাত' && hour >= 4) || - (meridiem === 'দুপুর' && hour < 5) || - meridiem === 'বিকাল') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'রাত'; - } else if (hour < 10) { - return 'সকাল'; - } else if (hour < 17) { - return 'দুপুর'; - } else if (hour < 20) { - return 'বিকাল'; - } else { - return 'রাত'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : tibetan (bo) - //! author : Thupten N. Chakrishar : https://github.com/vajradog - - var bo__symbolMap = { - '1': '༡', - '2': '༢', - '3': '༣', - '4': '༤', - '5': '༥', - '6': '༦', - '7': '༧', - '8': '༨', - '9': '༩', - '0': '༠' - }, - bo__numberMap = { - '༡': '1', - '༢': '2', - '༣': '3', - '༤': '4', - '༥': '5', - '༦': '6', - '༧': '7', - '༨': '8', - '༩': '9', - '༠': '0' - }; - - var bo = moment__default.defineLocale('bo', { - months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), - monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), - weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), - weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), - weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm', - LLLL : 'dddd, D MMMM YYYY, A h:mm' - }, - calendar : { - sameDay : '[དི་རིང] LT', - nextDay : '[སང་ཉིན] LT', - nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', - lastDay : '[ཁ་སང] LT', - lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ལ་', - past : '%s སྔན་ལ', - s : 'ལམ་སང', - m : 'སྐར་མ་གཅིག', - mm : '%d སྐར་མ', - h : 'ཆུ་ཚོད་གཅིག', - hh : '%d ཆུ་ཚོད', - d : 'ཉིན་གཅིག', - dd : '%d ཉིན་', - M : 'ཟླ་བ་གཅིག', - MM : '%d ཟླ་བ', - y : 'ལོ་གཅིག', - yy : '%d ལོ' - }, - preparse: function (string) { - return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { - return bo__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return bo__symbolMap[match]; - }); - }, - meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'མཚན་མོ' && hour >= 4) || - (meridiem === 'ཉིན་གུང' && hour < 5) || - meridiem === 'དགོང་དག') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'མཚན་མོ'; - } else if (hour < 10) { - return 'ཞོགས་ཀས'; - } else if (hour < 17) { - return 'ཉིན་གུང'; - } else if (hour < 20) { - return 'དགོང་དག'; - } else { - return 'མཚན་མོ'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : breton (br) - //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou - - function relativeTimeWithMutation(number, withoutSuffix, key) { - var format = { - 'mm': 'munutenn', - 'MM': 'miz', - 'dd': 'devezh' - }; - return number + ' ' + mutation(format[key], number); - } - function specialMutationForYears(number) { - switch (lastNumber(number)) { - case 1: - case 3: - case 4: - case 5: - case 9: - return number + ' bloaz'; - default: - return number + ' vloaz'; - } - } - function lastNumber(number) { - if (number > 9) { - return lastNumber(number % 10); - } - return number; - } - function mutation(text, number) { - if (number === 2) { - return softMutation(text); - } - return text; - } - function softMutation(text) { - var mutationTable = { - 'm': 'v', - 'b': 'v', - 'd': 'z' - }; - if (mutationTable[text.charAt(0)] === undefined) { - return text; - } - return mutationTable[text.charAt(0)] + text.substring(1); - } - - var br = moment__default.defineLocale('br', { - months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), - monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), - weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), - weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), - weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h[e]mm A', - LTS : 'h[e]mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D [a viz] MMMM YYYY', - LLL : 'D [a viz] MMMM YYYY h[e]mm A', - LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' - }, - calendar : { - sameDay : '[Hiziv da] LT', - nextDay : '[Warc\'hoazh da] LT', - nextWeek : 'dddd [da] LT', - lastDay : '[Dec\'h da] LT', - lastWeek : 'dddd [paset da] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'a-benn %s', - past : '%s \'zo', - s : 'un nebeud segondennoù', - m : 'ur vunutenn', - mm : relativeTimeWithMutation, - h : 'un eur', - hh : '%d eur', - d : 'un devezh', - dd : relativeTimeWithMutation, - M : 'ur miz', - MM : relativeTimeWithMutation, - y : 'ur bloaz', - yy : specialMutationForYears - }, - ordinalParse: /\d{1,2}(añ|vet)/, - ordinal : function (number) { - var output = (number === 1) ? 'añ' : 'vet'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : bosnian (bs) - //! author : Nedim Cholich : https://github.com/frontyard - //! based on (hr) translation by Bojan Marković - - function bs__translate(number, withoutSuffix, key) { - var result = number + ' '; - switch (key) { - case 'm': - return withoutSuffix ? 'jedna minuta' : 'jedne minute'; - case 'mm': - if (number === 1) { - result += 'minuta'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'minute'; - } else { - result += 'minuta'; - } - return result; - case 'h': - return withoutSuffix ? 'jedan sat' : 'jednog sata'; - case 'hh': - if (number === 1) { - result += 'sat'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'sata'; - } else { - result += 'sati'; - } - return result; - case 'dd': - if (number === 1) { - result += 'dan'; - } else { - result += 'dana'; - } - return result; - case 'MM': - if (number === 1) { - result += 'mjesec'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'mjeseca'; - } else { - result += 'mjeseci'; - } - return result; - case 'yy': - if (number === 1) { - result += 'godina'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'godine'; - } else { - result += 'godina'; - } - return result; - } - } - - var bs = moment__default.defineLocale('bs', { - months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), - monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), - weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), - weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD. MM. YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd, D. MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[danas u] LT', - nextDay : '[sutra u] LT', - nextWeek : function () { - switch (this.day()) { - case 0: - return '[u] [nedjelju] [u] LT'; - case 3: - return '[u] [srijedu] [u] LT'; - case 6: - return '[u] [subotu] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[u] dddd [u] LT'; - } - }, - lastDay : '[jučer u] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - return '[prošlu] dddd [u] LT'; - case 6: - return '[prošle] [subote] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[prošli] dddd [u] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'za %s', - past : 'prije %s', - s : 'par sekundi', - m : bs__translate, - mm : bs__translate, - h : bs__translate, - hh : bs__translate, - d : 'dan', - dd : bs__translate, - M : 'mjesec', - MM : bs__translate, - y : 'godinu', - yy : bs__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : catalan (ca) - //! author : Juan G. Hurtado : https://github.com/juanghurtado - - var ca = moment__default.defineLocale('ca', { - months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), - monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'), - monthsParseExact : true, - weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), - weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), - weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd D MMMM YYYY H:mm' - }, - calendar : { - sameDay : function () { - return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - nextDay : function () { - return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - lastDay : function () { - return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'en %s', - past : 'fa %s', - s : 'uns segons', - m : 'un minut', - mm : '%d minuts', - h : 'una hora', - hh : '%d hores', - d : 'un dia', - dd : '%d dies', - M : 'un mes', - MM : '%d mesos', - y : 'un any', - yy : '%d anys' - }, - ordinalParse: /\d{1,2}(r|n|t|è|a)/, - ordinal : function (number, period) { - var output = (number === 1) ? 'r' : - (number === 2) ? 'n' : - (number === 3) ? 'r' : - (number === 4) ? 't' : 'è'; - if (period === 'w' || period === 'W') { - output = 'a'; - } - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : czech (cs) - //! author : petrbela : https://github.com/petrbela - - var cs__months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'), - cs__monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); - function cs__plural(n) { - return (n > 1) && (n < 5) && (~~(n / 10) !== 1); - } - function cs__translate(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - switch (key) { - case 's': // a few seconds / in a few seconds / a few seconds ago - return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; - case 'm': // a minute / in a minute / a minute ago - return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); - case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago - if (withoutSuffix || isFuture) { - return result + (cs__plural(number) ? 'minuty' : 'minut'); - } else { - return result + 'minutami'; - } - break; - case 'h': // an hour / in an hour / an hour ago - return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); - case 'hh': // 9 hours / in 9 hours / 9 hours ago - if (withoutSuffix || isFuture) { - return result + (cs__plural(number) ? 'hodiny' : 'hodin'); - } else { - return result + 'hodinami'; - } - break; - case 'd': // a day / in a day / a day ago - return (withoutSuffix || isFuture) ? 'den' : 'dnem'; - case 'dd': // 9 days / in 9 days / 9 days ago - if (withoutSuffix || isFuture) { - return result + (cs__plural(number) ? 'dny' : 'dní'); - } else { - return result + 'dny'; - } - break; - case 'M': // a month / in a month / a month ago - return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; - case 'MM': // 9 months / in 9 months / 9 months ago - if (withoutSuffix || isFuture) { - return result + (cs__plural(number) ? 'měsíce' : 'měsíců'); - } else { - return result + 'měsíci'; - } - break; - case 'y': // a year / in a year / a year ago - return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; - case 'yy': // 9 years / in 9 years / 9 years ago - if (withoutSuffix || isFuture) { - return result + (cs__plural(number) ? 'roky' : 'let'); - } else { - return result + 'lety'; - } - break; - } - } - - var cs = moment__default.defineLocale('cs', { - months : cs__months, - monthsShort : cs__monthsShort, - monthsParse : (function (months, monthsShort) { - var i, _monthsParse = []; - for (i = 0; i < 12; i++) { - // use custom parser to solve problem with July (červenec) - _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); - } - return _monthsParse; - }(cs__months, cs__monthsShort)), - shortMonthsParse : (function (monthsShort) { - var i, _shortMonthsParse = []; - for (i = 0; i < 12; i++) { - _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); - } - return _shortMonthsParse; - }(cs__monthsShort)), - longMonthsParse : (function (months) { - var i, _longMonthsParse = []; - for (i = 0; i < 12; i++) { - _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); - } - return _longMonthsParse; - }(cs__months)), - weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), - weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), - weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), - longDateFormat : { - LT: 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd D. MMMM YYYY H:mm' - }, - calendar : { - sameDay: '[dnes v] LT', - nextDay: '[zítra v] LT', - nextWeek: function () { - switch (this.day()) { - case 0: - return '[v neděli v] LT'; - case 1: - case 2: - return '[v] dddd [v] LT'; - case 3: - return '[ve středu v] LT'; - case 4: - return '[ve čtvrtek v] LT'; - case 5: - return '[v pátek v] LT'; - case 6: - return '[v sobotu v] LT'; - } - }, - lastDay: '[včera v] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[minulou neděli v] LT'; - case 1: - case 2: - return '[minulé] dddd [v] LT'; - case 3: - return '[minulou středu v] LT'; - case 4: - case 5: - return '[minulý] dddd [v] LT'; - case 6: - return '[minulou sobotu v] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'za %s', - past : 'před %s', - s : cs__translate, - m : cs__translate, - mm : cs__translate, - h : cs__translate, - hh : cs__translate, - d : cs__translate, - dd : cs__translate, - M : cs__translate, - MM : cs__translate, - y : cs__translate, - yy : cs__translate - }, - ordinalParse : /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : chuvash (cv) - //! author : Anatoly Mironov : https://github.com/mirontoli - - var cv = moment__default.defineLocale('cv', { - months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), - monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), - weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), - weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), - weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', - LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', - LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' - }, - calendar : { - sameDay: '[Паян] LT [сехетре]', - nextDay: '[Ыран] LT [сехетре]', - lastDay: '[Ӗнер] LT [сехетре]', - nextWeek: '[Ҫитес] dddd LT [сехетре]', - lastWeek: '[Иртнӗ] dddd LT [сехетре]', - sameElse: 'L' - }, - relativeTime : { - future : function (output) { - var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; - return output + affix; - }, - past : '%s каялла', - s : 'пӗр-ик ҫеккунт', - m : 'пӗр минут', - mm : '%d минут', - h : 'пӗр сехет', - hh : '%d сехет', - d : 'пӗр кун', - dd : '%d кун', - M : 'пӗр уйӑх', - MM : '%d уйӑх', - y : 'пӗр ҫул', - yy : '%d ҫул' - }, - ordinalParse: /\d{1,2}-мӗш/, - ordinal : '%d-мӗш', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Welsh (cy) - //! author : Robert Allen - - var cy = moment__default.defineLocale('cy', { - months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), - monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), - weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), - weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), - weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), - weekdaysParseExact : true, - // time formats are the same as en-gb - longDateFormat: { - LT: 'HH:mm', - LTS : 'HH:mm:ss', - L: 'DD/MM/YYYY', - LL: 'D MMMM YYYY', - LLL: 'D MMMM YYYY HH:mm', - LLLL: 'dddd, D MMMM YYYY HH:mm' - }, - calendar: { - sameDay: '[Heddiw am] LT', - nextDay: '[Yfory am] LT', - nextWeek: 'dddd [am] LT', - lastDay: '[Ddoe am] LT', - lastWeek: 'dddd [diwethaf am] LT', - sameElse: 'L' - }, - relativeTime: { - future: 'mewn %s', - past: '%s yn ôl', - s: 'ychydig eiliadau', - m: 'munud', - mm: '%d munud', - h: 'awr', - hh: '%d awr', - d: 'diwrnod', - dd: '%d diwrnod', - M: 'mis', - MM: '%d mis', - y: 'blwyddyn', - yy: '%d flynedd' - }, - ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, - // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh - ordinal: function (number) { - var b = number, - output = '', - lookup = [ - '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed - 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed - ]; - if (b > 20) { - if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { - output = 'fed'; // not 30ain, 70ain or 90ain - } else { - output = 'ain'; - } - } else if (b > 0) { - output = lookup[b]; - } - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : danish (da) - //! author : Ulrik Nielsen : https://github.com/mrbase - - var da = moment__default.defineLocale('da', { - months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), - weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), - weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd [d.] D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[I dag kl.] LT', - nextDay : '[I morgen kl.] LT', - nextWeek : 'dddd [kl.] LT', - lastDay : '[I går kl.] LT', - lastWeek : '[sidste] dddd [kl] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s siden', - s : 'få sekunder', - m : 'et minut', - mm : '%d minutter', - h : 'en time', - hh : '%d timer', - d : 'en dag', - dd : '%d dage', - M : 'en måned', - MM : '%d måneder', - y : 'et år', - yy : '%d år' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : austrian german (de-at) - //! author : lluchs : https://github.com/lluchs - //! author: Menelion Elensúle: https://github.com/Oire - //! author : Martin Groller : https://github.com/MadMG - //! author : Mikolaj Dadela : https://github.com/mik01aj - - function de_at__processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eine Minute', 'einer Minute'], - 'h': ['eine Stunde', 'einer Stunde'], - 'd': ['ein Tag', 'einem Tag'], - 'dd': [number + ' Tage', number + ' Tagen'], - 'M': ['ein Monat', 'einem Monat'], - 'MM': [number + ' Monate', number + ' Monaten'], - 'y': ['ein Jahr', 'einem Jahr'], - 'yy': [number + ' Jahre', number + ' Jahren'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var de_at = moment__default.defineLocale('de-at', { - months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), - weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), - weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd, D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[heute um] LT [Uhr]', - sameElse: 'L', - nextDay: '[morgen um] LT [Uhr]', - nextWeek: 'dddd [um] LT [Uhr]', - lastDay: '[gestern um] LT [Uhr]', - lastWeek: '[letzten] dddd [um] LT [Uhr]' - }, - relativeTime : { - future : 'in %s', - past : 'vor %s', - s : 'ein paar Sekunden', - m : de_at__processRelativeTime, - mm : '%d Minuten', - h : de_at__processRelativeTime, - hh : '%d Stunden', - d : de_at__processRelativeTime, - dd : de_at__processRelativeTime, - M : de_at__processRelativeTime, - MM : de_at__processRelativeTime, - y : de_at__processRelativeTime, - yy : de_at__processRelativeTime - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : german (de) - //! author : lluchs : https://github.com/lluchs - //! author: Menelion Elensúle: https://github.com/Oire - //! author : Mikolaj Dadela : https://github.com/mik01aj - - function de__processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eine Minute', 'einer Minute'], - 'h': ['eine Stunde', 'einer Stunde'], - 'd': ['ein Tag', 'einem Tag'], - 'dd': [number + ' Tage', number + ' Tagen'], - 'M': ['ein Monat', 'einem Monat'], - 'MM': [number + ' Monate', number + ' Monaten'], - 'y': ['ein Jahr', 'einem Jahr'], - 'yy': [number + ' Jahre', number + ' Jahren'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var de = moment__default.defineLocale('de', { - months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), - weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), - weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd, D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[heute um] LT [Uhr]', - sameElse: 'L', - nextDay: '[morgen um] LT [Uhr]', - nextWeek: 'dddd [um] LT [Uhr]', - lastDay: '[gestern um] LT [Uhr]', - lastWeek: '[letzten] dddd [um] LT [Uhr]' - }, - relativeTime : { - future : 'in %s', - past : 'vor %s', - s : 'ein paar Sekunden', - m : de__processRelativeTime, - mm : '%d Minuten', - h : de__processRelativeTime, - hh : '%d Stunden', - d : de__processRelativeTime, - dd : de__processRelativeTime, - M : de__processRelativeTime, - MM : de__processRelativeTime, - y : de__processRelativeTime, - yy : de__processRelativeTime - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : dhivehi (dv) - //! author : Jawish Hameed : https://github.com/jawish - - var dv__months = [ - 'ޖެނުއަރީ', - 'ފެބްރުއަރީ', - 'މާރިޗު', - 'އޭޕްރީލު', - 'މޭ', - 'ޖޫން', - 'ޖުލައި', - 'އޯގަސްޓު', - 'ސެޕްޓެމްބަރު', - 'އޮކްޓޯބަރު', - 'ނޮވެމްބަރު', - 'ޑިސެމްބަރު' - ], dv__weekdays = [ - 'އާދިއްތަ', - 'ހޯމަ', - 'އަންގާރަ', - 'ބުދަ', - 'ބުރާސްފަތި', - 'ހުކުރު', - 'ހޮނިހިރު' - ]; - - var dv = moment__default.defineLocale('dv', { - months : dv__months, - monthsShort : dv__months, - weekdays : dv__weekdays, - weekdaysShort : dv__weekdays, - weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), - longDateFormat : { - - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'D/M/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /މކ|މފ/, - isPM : function (input) { - return 'މފ' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'މކ'; - } else { - return 'މފ'; - } - }, - calendar : { - sameDay : '[މިއަދު] LT', - nextDay : '[މާދަމާ] LT', - nextWeek : 'dddd LT', - lastDay : '[އިއްޔެ] LT', - lastWeek : '[ފާއިތުވި] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ތެރޭގައި %s', - past : 'ކުރިން %s', - s : 'ސިކުންތުކޮޅެއް', - m : 'މިނިޓެއް', - mm : 'މިނިޓު %d', - h : 'ގަޑިއިރެއް', - hh : 'ގަޑިއިރު %d', - d : 'ދުވަހެއް', - dd : 'ދުވަސް %d', - M : 'މަހެއް', - MM : 'މަސް %d', - y : 'އަހަރެއް', - yy : 'އަހަރު %d' - }, - preparse: function (string) { - return string.replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/,/g, '،'); - }, - week : { - dow : 7, // Sunday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : modern greek (el) - //! author : Aggelos Karalias : https://github.com/mehiel - - var el = moment__default.defineLocale('el', { - monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), - monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), - months : function (momentToFormat, format) { - if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' - return this._monthsGenitiveEl[momentToFormat.month()]; - } else { - return this._monthsNominativeEl[momentToFormat.month()]; - } - }, - monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), - weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), - weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), - weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'μμ' : 'ΜΜ'; - } else { - return isLower ? 'πμ' : 'ΠΜ'; - } - }, - isPM : function (input) { - return ((input + '').toLowerCase()[0] === 'μ'); - }, - meridiemParse : /[ΠΜ]\.?Μ?\.?/i, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendarEl : { - sameDay : '[Σήμερα {}] LT', - nextDay : '[Αύριο {}] LT', - nextWeek : 'dddd [{}] LT', - lastDay : '[Χθες {}] LT', - lastWeek : function () { - switch (this.day()) { - case 6: - return '[το προηγούμενο] dddd [{}] LT'; - default: - return '[την προηγούμενη] dddd [{}] LT'; - } - }, - sameElse : 'L' - }, - calendar : function (key, mom) { - var output = this._calendarEl[key], - hours = mom && mom.hours(); - if (isFunction(output)) { - output = output.apply(mom); - } - return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); - }, - relativeTime : { - future : 'σε %s', - past : '%s πριν', - s : 'λίγα δευτερόλεπτα', - m : 'ένα λεπτό', - mm : '%d λεπτά', - h : 'μία ώρα', - hh : '%d ώρες', - d : 'μία μέρα', - dd : '%d μέρες', - M : 'ένας μήνας', - MM : '%d μήνες', - y : 'ένας χρόνος', - yy : '%d χρόνια' - }, - ordinalParse: /\d{1,2}η/, - ordinal: '%dη', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : australian english (en-au) - - var en_au = moment__default.defineLocale('en-au', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : canadian english (en-ca) - //! author : Jonathan Abourbih : https://github.com/jonbca - - var en_ca = moment__default.defineLocale('en-ca', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'YYYY-MM-DD', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - //! moment.js locale configuration - //! locale : great britain english (en-gb) - //! author : Chris Gedrim : https://github.com/chrisgedrim - - var en_gb = moment__default.defineLocale('en-gb', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Irish english (en-ie) - //! author : Chris Cartlidge : https://github.com/chriscartlidge - - var en_ie = moment__default.defineLocale('en-ie', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : New Zealand english (en-nz) - - var en_nz = moment__default.defineLocale('en-nz', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : esperanto (eo) - //! author : Colin Dean : https://github.com/colindean - //! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. - //! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! - - var eo = moment__default.defineLocale('eo', { - months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), - weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'), - weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'), - weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D[-an de] MMMM, YYYY', - LLL : 'D[-an de] MMMM, YYYY HH:mm', - LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm' - }, - meridiemParse: /[ap]\.t\.m/i, - isPM: function (input) { - return input.charAt(0).toLowerCase() === 'p'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'p.t.m.' : 'P.T.M.'; - } else { - return isLower ? 'a.t.m.' : 'A.T.M.'; - } - }, - calendar : { - sameDay : '[Hodiaŭ je] LT', - nextDay : '[Morgaŭ je] LT', - nextWeek : 'dddd [je] LT', - lastDay : '[Hieraŭ je] LT', - lastWeek : '[pasinta] dddd [je] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'je %s', - past : 'antaŭ %s', - s : 'sekundoj', - m : 'minuto', - mm : '%d minutoj', - h : 'horo', - hh : '%d horoj', - d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo - dd : '%d tagoj', - M : 'monato', - MM : '%d monatoj', - y : 'jaro', - yy : '%d jaroj' - }, - ordinalParse: /\d{1,2}a/, - ordinal : '%da', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : spanish (es) - //! author : Julio Napurí : https://github.com/julionc - - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), - es__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); - - var es = moment__default.defineLocale('es', { - months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), - monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { - return es__monthsShort[m.month()]; - } else { - return monthsShortDot[m.month()]; - } - }, - monthsParseExact : true, - weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), - weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), - weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY H:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' - }, - calendar : { - sameDay : function () { - return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextDay : function () { - return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastDay : function () { - return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'en %s', - past : 'hace %s', - s : 'unos segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'una hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un año', - yy : '%d años' - }, - ordinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : estonian (et) - //! author : Henry Kehlmann : https://github.com/madhenry - //! improvements : Illimar Tambek : https://github.com/ragulka - - function et__processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], - 'm' : ['ühe minuti', 'üks minut'], - 'mm': [number + ' minuti', number + ' minutit'], - 'h' : ['ühe tunni', 'tund aega', 'üks tund'], - 'hh': [number + ' tunni', number + ' tundi'], - 'd' : ['ühe päeva', 'üks päev'], - 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], - 'MM': [number + ' kuu', number + ' kuud'], - 'y' : ['ühe aasta', 'aasta', 'üks aasta'], - 'yy': [number + ' aasta', number + ' aastat'] - }; - if (withoutSuffix) { - return format[key][2] ? format[key][2] : format[key][1]; - } - return isFuture ? format[key][0] : format[key][1]; - } - - var et = moment__default.defineLocale('et', { - months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), - monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), - weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), - weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), - weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd, D. MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Täna,] LT', - nextDay : '[Homme,] LT', - nextWeek : '[Järgmine] dddd LT', - lastDay : '[Eile,] LT', - lastWeek : '[Eelmine] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s pärast', - past : '%s tagasi', - s : et__processRelativeTime, - m : et__processRelativeTime, - mm : et__processRelativeTime, - h : et__processRelativeTime, - hh : et__processRelativeTime, - d : et__processRelativeTime, - dd : '%d päeva', - M : et__processRelativeTime, - MM : et__processRelativeTime, - y : et__processRelativeTime, - yy : et__processRelativeTime - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : euskara (eu) - //! author : Eneko Illarramendi : https://github.com/eillarra - - var eu = moment__default.defineLocale('eu', { - months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), - monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), - monthsParseExact : true, - weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), - weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), - weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'YYYY[ko] MMMM[ren] D[a]', - LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', - LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', - l : 'YYYY-M-D', - ll : 'YYYY[ko] MMM D[a]', - lll : 'YYYY[ko] MMM D[a] HH:mm', - llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' - }, - calendar : { - sameDay : '[gaur] LT[etan]', - nextDay : '[bihar] LT[etan]', - nextWeek : 'dddd LT[etan]', - lastDay : '[atzo] LT[etan]', - lastWeek : '[aurreko] dddd LT[etan]', - sameElse : 'L' - }, - relativeTime : { - future : '%s barru', - past : 'duela %s', - s : 'segundo batzuk', - m : 'minutu bat', - mm : '%d minutu', - h : 'ordu bat', - hh : '%d ordu', - d : 'egun bat', - dd : '%d egun', - M : 'hilabete bat', - MM : '%d hilabete', - y : 'urte bat', - yy : '%d urte' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Persian (fa) - //! author : Ebrahim Byagowi : https://github.com/ebraminio - - var fa__symbolMap = { - '1': '۱', - '2': '۲', - '3': '۳', - '4': '۴', - '5': '۵', - '6': '۶', - '7': '۷', - '8': '۸', - '9': '۹', - '0': '۰' - }, fa__numberMap = { - '۱': '1', - '۲': '2', - '۳': '3', - '۴': '4', - '۵': '5', - '۶': '6', - '۷': '7', - '۸': '8', - '۹': '9', - '۰': '0' - }; - - var fa = moment__default.defineLocale('fa', { - months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), - monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), - weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), - weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), - weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - meridiemParse: /قبل از ظهر|بعد از ظهر/, - isPM: function (input) { - return /بعد از ظهر/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'قبل از ظهر'; - } else { - return 'بعد از ظهر'; - } - }, - calendar : { - sameDay : '[امروز ساعت] LT', - nextDay : '[فردا ساعت] LT', - nextWeek : 'dddd [ساعت] LT', - lastDay : '[دیروز ساعت] LT', - lastWeek : 'dddd [پیش] [ساعت] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'در %s', - past : '%s پیش', - s : 'چندین ثانیه', - m : 'یک دقیقه', - mm : '%d دقیقه', - h : 'یک ساعت', - hh : '%d ساعت', - d : 'یک روز', - dd : '%d روز', - M : 'یک ماه', - MM : '%d ماه', - y : 'یک سال', - yy : '%d سال' - }, - preparse: function (string) { - return string.replace(/[۰-۹]/g, function (match) { - return fa__numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return fa__symbolMap[match]; - }).replace(/,/g, '،'); - }, - ordinalParse: /\d{1,2}م/, - ordinal : '%dم', - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : finnish (fi) - //! author : Tarmo Aidantausta : https://github.com/bleadof - - var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), - numbersFuture = [ - 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', - numbersPast[7], numbersPast[8], numbersPast[9] - ]; - function fi__translate(number, withoutSuffix, key, isFuture) { - var result = ''; - switch (key) { - case 's': - return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; - case 'm': - return isFuture ? 'minuutin' : 'minuutti'; - case 'mm': - result = isFuture ? 'minuutin' : 'minuuttia'; - break; - case 'h': - return isFuture ? 'tunnin' : 'tunti'; - case 'hh': - result = isFuture ? 'tunnin' : 'tuntia'; - break; - case 'd': - return isFuture ? 'päivän' : 'päivä'; - case 'dd': - result = isFuture ? 'päivän' : 'päivää'; - break; - case 'M': - return isFuture ? 'kuukauden' : 'kuukausi'; - case 'MM': - result = isFuture ? 'kuukauden' : 'kuukautta'; - break; - case 'y': - return isFuture ? 'vuoden' : 'vuosi'; - case 'yy': - result = isFuture ? 'vuoden' : 'vuotta'; - break; - } - result = verbalNumber(number, isFuture) + ' ' + result; - return result; - } - function verbalNumber(number, isFuture) { - return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; - } - - var fi = moment__default.defineLocale('fi', { - months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), - monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), - weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), - weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), - weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD.MM.YYYY', - LL : 'Do MMMM[ta] YYYY', - LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', - LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', - l : 'D.M.YYYY', - ll : 'Do MMM YYYY', - lll : 'Do MMM YYYY, [klo] HH.mm', - llll : 'ddd, Do MMM YYYY, [klo] HH.mm' - }, - calendar : { - sameDay : '[tänään] [klo] LT', - nextDay : '[huomenna] [klo] LT', - nextWeek : 'dddd [klo] LT', - lastDay : '[eilen] [klo] LT', - lastWeek : '[viime] dddd[na] [klo] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s päästä', - past : '%s sitten', - s : fi__translate, - m : fi__translate, - mm : fi__translate, - h : fi__translate, - hh : fi__translate, - d : fi__translate, - dd : fi__translate, - M : fi__translate, - MM : fi__translate, - y : fi__translate, - yy : fi__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : faroese (fo) - //! author : Ragnar Johannesen : https://github.com/ragnar123 - - var fo = moment__default.defineLocale('fo', { - months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), - weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), - weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D. MMMM, YYYY HH:mm' - }, - calendar : { - sameDay : '[Í dag kl.] LT', - nextDay : '[Í morgin kl.] LT', - nextWeek : 'dddd [kl.] LT', - lastDay : '[Í gjár kl.] LT', - lastWeek : '[síðstu] dddd [kl] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'um %s', - past : '%s síðani', - s : 'fá sekund', - m : 'ein minutt', - mm : '%d minuttir', - h : 'ein tími', - hh : '%d tímar', - d : 'ein dagur', - dd : '%d dagar', - M : 'ein mánaði', - MM : '%d mánaðir', - y : 'eitt ár', - yy : '%d ár' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : canadian french (fr-ca) - //! author : Jonathan Abourbih : https://github.com/jonbca - - var fr_ca = moment__default.defineLocale('fr-ca', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - ordinalParse: /\d{1,2}(er|e)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : 'e'); - } - }); - - //! moment.js locale configuration - //! locale : swiss french (fr) - //! author : Gaspard Bucher : https://github.com/gaspard - - var fr_ch = moment__default.defineLocale('fr-ch', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - ordinalParse: /\d{1,2}(er|e)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : 'e'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : french (fr) - //! author : John Fischer : https://github.com/jfroffice - - var fr = moment__default.defineLocale('fr', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - ordinalParse: /\d{1,2}(er|)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : ''); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : frisian (fy) - //! author : Robin van der Vliet : https://github.com/robin0van0der0v - - var fy__monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), - fy__monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); - - var fy = moment__default.defineLocale('fy', { - months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), - monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { - return fy__monthsShortWithoutDots[m.month()]; - } else { - return fy__monthsShortWithDots[m.month()]; - } - }, - monthsParseExact : true, - weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), - weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), - weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[hjoed om] LT', - nextDay: '[moarn om] LT', - nextWeek: 'dddd [om] LT', - lastDay: '[juster om] LT', - lastWeek: '[ôfrûne] dddd [om] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'oer %s', - past : '%s lyn', - s : 'in pear sekonden', - m : 'ien minút', - mm : '%d minuten', - h : 'ien oere', - hh : '%d oeren', - d : 'ien dei', - dd : '%d dagen', - M : 'ien moanne', - MM : '%d moannen', - y : 'ien jier', - yy : '%d jierren' - }, - ordinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : great britain scottish gealic (gd) - //! author : Jon Ashdown : https://github.com/jonashdown - - var gd__months = [ - 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' - ]; - - var gd__monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; - - var gd__weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; - - var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; - - var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; - - var gd = moment__default.defineLocale('gd', { - months : gd__months, - monthsShort : gd__monthsShort, - monthsParseExact : true, - weekdays : gd__weekdays, - weekdaysShort : weekdaysShort, - weekdaysMin : weekdaysMin, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[An-diugh aig] LT', - nextDay : '[A-màireach aig] LT', - nextWeek : 'dddd [aig] LT', - lastDay : '[An-dè aig] LT', - lastWeek : 'dddd [seo chaidh] [aig] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ann an %s', - past : 'bho chionn %s', - s : 'beagan diogan', - m : 'mionaid', - mm : '%d mionaidean', - h : 'uair', - hh : '%d uairean', - d : 'latha', - dd : '%d latha', - M : 'mìos', - MM : '%d mìosan', - y : 'bliadhna', - yy : '%d bliadhna' - }, - ordinalParse : /\d{1,2}(d|na|mh)/, - ordinal : function (number) { - var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : galician (gl) - //! author : Juan G. Hurtado : https://github.com/juanghurtado - - var gl = moment__default.defineLocale('gl', { - months : 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'), - monthsShort : 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'), - monthsParseExact: true, - weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'), - weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'), - weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd D MMMM YYYY H:mm' - }, - calendar : { - sameDay : function () { - return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; - }, - nextDay : function () { - return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; - }, - nextWeek : function () { - return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; - }, - lastDay : function () { - return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; - }, - lastWeek : function () { - return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : function (str) { - if (str === 'uns segundos') { - return 'nuns segundos'; - } - return 'en ' + str; - }, - past : 'hai %s', - s : 'uns segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'unha hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un ano', - yy : '%d anos' - }, - ordinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Hebrew (he) - //! author : Tomer Cohen : https://github.com/tomer - //! author : Moshe Simantov : https://github.com/DevelopmentIL - //! author : Tal Ater : https://github.com/TalAter - - var he = moment__default.defineLocale('he', { - months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), - monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), - weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), - weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), - weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [ב]MMMM YYYY', - LLL : 'D [ב]MMMM YYYY HH:mm', - LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', - l : 'D/M/YYYY', - ll : 'D MMM YYYY', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd, D MMM YYYY HH:mm' - }, - calendar : { - sameDay : '[היום ב־]LT', - nextDay : '[מחר ב־]LT', - nextWeek : 'dddd [בשעה] LT', - lastDay : '[אתמול ב־]LT', - lastWeek : '[ביום] dddd [האחרון בשעה] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'בעוד %s', - past : 'לפני %s', - s : 'מספר שניות', - m : 'דקה', - mm : '%d דקות', - h : 'שעה', - hh : function (number) { - if (number === 2) { - return 'שעתיים'; - } - return number + ' שעות'; - }, - d : 'יום', - dd : function (number) { - if (number === 2) { - return 'יומיים'; - } - return number + ' ימים'; - }, - M : 'חודש', - MM : function (number) { - if (number === 2) { - return 'חודשיים'; - } - return number + ' חודשים'; - }, - y : 'שנה', - yy : function (number) { - if (number === 2) { - return 'שנתיים'; - } else if (number % 10 === 0 && number !== 10) { - return number + ' שנה'; - } - return number + ' שנים'; - } - }, - meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, - isPM : function (input) { - return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 5) { - return 'לפנות בוקר'; - } else if (hour < 10) { - return 'בבוקר'; - } else if (hour < 12) { - return isLower ? 'לפנה"צ' : 'לפני הצהריים'; - } else if (hour < 18) { - return isLower ? 'אחה"צ' : 'אחרי הצהריים'; - } else { - return 'בערב'; - } - } - }); - - //! moment.js locale configuration - //! locale : hindi (hi) - //! author : Mayank Singhal : https://github.com/mayanksinghal - - var hi__symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - hi__numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - var hi = moment__default.defineLocale('hi', { - months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), - monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), - monthsParseExact: true, - weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), - weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), - weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), - longDateFormat : { - LT : 'A h:mm बजे', - LTS : 'A h:mm:ss बजे', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm बजे', - LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[कल] LT', - nextWeek : 'dddd, LT', - lastDay : '[कल] LT', - lastWeek : '[पिछले] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s में', - past : '%s पहले', - s : 'कुछ ही क्षण', - m : 'एक मिनट', - mm : '%d मिनट', - h : 'एक घंटा', - hh : '%d घंटे', - d : 'एक दिन', - dd : '%d दिन', - M : 'एक महीने', - MM : '%d महीने', - y : 'एक वर्ष', - yy : '%d वर्ष' - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return hi__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return hi__symbolMap[match]; - }); - }, - // Hindi notation for meridiems are quite fuzzy in practice. While there exists - // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. - meridiemParse: /रात|सुबह|दोपहर|शाम/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'रात') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'सुबह') { - return hour; - } else if (meridiem === 'दोपहर') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'शाम') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'रात'; - } else if (hour < 10) { - return 'सुबह'; - } else if (hour < 17) { - return 'दोपहर'; - } else if (hour < 20) { - return 'शाम'; - } else { - return 'रात'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : hrvatski (hr) - //! author : Bojan Marković : https://github.com/bmarkovic - - function hr__translate(number, withoutSuffix, key) { - var result = number + ' '; - switch (key) { - case 'm': - return withoutSuffix ? 'jedna minuta' : 'jedne minute'; - case 'mm': - if (number === 1) { - result += 'minuta'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'minute'; - } else { - result += 'minuta'; - } - return result; - case 'h': - return withoutSuffix ? 'jedan sat' : 'jednog sata'; - case 'hh': - if (number === 1) { - result += 'sat'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'sata'; - } else { - result += 'sati'; - } - return result; - case 'dd': - if (number === 1) { - result += 'dan'; - } else { - result += 'dana'; - } - return result; - case 'MM': - if (number === 1) { - result += 'mjesec'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'mjeseca'; - } else { - result += 'mjeseci'; - } - return result; - case 'yy': - if (number === 1) { - result += 'godina'; - } else if (number === 2 || number === 3 || number === 4) { - result += 'godine'; - } else { - result += 'godina'; - } - return result; - } - } - - var hr = moment__default.defineLocale('hr', { - months : { - format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), - standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') - }, - monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), - monthsParseExact: true, - weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), - weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), - weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD. MM. YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd, D. MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[danas u] LT', - nextDay : '[sutra u] LT', - nextWeek : function () { - switch (this.day()) { - case 0: - return '[u] [nedjelju] [u] LT'; - case 3: - return '[u] [srijedu] [u] LT'; - case 6: - return '[u] [subotu] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[u] dddd [u] LT'; - } - }, - lastDay : '[jučer u] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - return '[prošlu] dddd [u] LT'; - case 6: - return '[prošle] [subote] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[prošli] dddd [u] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'za %s', - past : 'prije %s', - s : 'par sekundi', - m : hr__translate, - mm : hr__translate, - h : hr__translate, - hh : hr__translate, - d : 'dan', - dd : hr__translate, - M : 'mjesec', - MM : hr__translate, - y : 'godinu', - yy : hr__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : hungarian (hu) - //! author : Adam Brunner : https://github.com/adambrunner - - var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); - function hu__translate(number, withoutSuffix, key, isFuture) { - var num = number, - suffix; - switch (key) { - case 's': - return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; - case 'm': - return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); - case 'mm': - return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); - case 'h': - return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); - case 'hh': - return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); - case 'd': - return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); - case 'dd': - return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); - case 'M': - return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); - case 'MM': - return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); - case 'y': - return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); - case 'yy': - return num + (isFuture || withoutSuffix ? ' év' : ' éve'); - } - return ''; - } - function week(isFuture) { - return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; - } - - var hu = moment__default.defineLocale('hu', { - months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), - monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), - weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), - weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), - weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'YYYY.MM.DD.', - LL : 'YYYY. MMMM D.', - LLL : 'YYYY. MMMM D. H:mm', - LLLL : 'YYYY. MMMM D., dddd H:mm' - }, - meridiemParse: /de|du/i, - isPM: function (input) { - return input.charAt(1).toLowerCase() === 'u'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower === true ? 'de' : 'DE'; - } else { - return isLower === true ? 'du' : 'DU'; - } - }, - calendar : { - sameDay : '[ma] LT[-kor]', - nextDay : '[holnap] LT[-kor]', - nextWeek : function () { - return week.call(this, true); - }, - lastDay : '[tegnap] LT[-kor]', - lastWeek : function () { - return week.call(this, false); - }, - sameElse : 'L' - }, - relativeTime : { - future : '%s múlva', - past : '%s', - s : hu__translate, - m : hu__translate, - mm : hu__translate, - h : hu__translate, - hh : hu__translate, - d : hu__translate, - dd : hu__translate, - M : hu__translate, - MM : hu__translate, - y : hu__translate, - yy : hu__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Armenian (hy-am) - //! author : Armendarabyan : https://github.com/armendarabyan - - var hy_am = moment__default.defineLocale('hy-am', { - months : { - format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), - standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') - }, - monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), - weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), - weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), - weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY թ.', - LLL : 'D MMMM YYYY թ., HH:mm', - LLLL : 'dddd, D MMMM YYYY թ., HH:mm' - }, - calendar : { - sameDay: '[այսօր] LT', - nextDay: '[վաղը] LT', - lastDay: '[երեկ] LT', - nextWeek: function () { - return 'dddd [օրը ժամը] LT'; - }, - lastWeek: function () { - return '[անցած] dddd [օրը ժամը] LT'; - }, - sameElse: 'L' - }, - relativeTime : { - future : '%s հետո', - past : '%s առաջ', - s : 'մի քանի վայրկյան', - m : 'րոպե', - mm : '%d րոպե', - h : 'ժամ', - hh : '%d ժամ', - d : 'օր', - dd : '%d օր', - M : 'ամիս', - MM : '%d ամիս', - y : 'տարի', - yy : '%d տարի' - }, - meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, - isPM: function (input) { - return /^(ցերեկվա|երեկոյան)$/.test(input); - }, - meridiem : function (hour) { - if (hour < 4) { - return 'գիշերվա'; - } else if (hour < 12) { - return 'առավոտվա'; - } else if (hour < 17) { - return 'ցերեկվա'; - } else { - return 'երեկոյան'; - } - }, - ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, - ordinal: function (number, period) { - switch (period) { - case 'DDD': - case 'w': - case 'W': - case 'DDDo': - if (number === 1) { - return number + '-ին'; - } - return number + '-րդ'; - default: - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Bahasa Indonesia (id) - //! author : Mohammad Satrio Utomo : https://github.com/tyok - //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan - - var id = moment__default.defineLocale('id', { - months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), - weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), - weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|siang|sore|malam/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'siang') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'sore' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'siang'; - } else if (hours < 19) { - return 'sore'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Besok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kemarin pukul] LT', - lastWeek : 'dddd [lalu pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lalu', - s : 'beberapa detik', - m : 'semenit', - mm : '%d menit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : icelandic (is) - //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik - - function is__plural(n) { - if (n % 100 === 11) { - return true; - } else if (n % 10 === 1) { - return false; - } - return true; - } - function is__translate(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - switch (key) { - case 's': - return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; - case 'm': - return withoutSuffix ? 'mínúta' : 'mínútu'; - case 'mm': - if (is__plural(number)) { - return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); - } else if (withoutSuffix) { - return result + 'mínúta'; - } - return result + 'mínútu'; - case 'hh': - if (is__plural(number)) { - return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); - } - return result + 'klukkustund'; - case 'd': - if (withoutSuffix) { - return 'dagur'; - } - return isFuture ? 'dag' : 'degi'; - case 'dd': - if (is__plural(number)) { - if (withoutSuffix) { - return result + 'dagar'; - } - return result + (isFuture ? 'daga' : 'dögum'); - } else if (withoutSuffix) { - return result + 'dagur'; - } - return result + (isFuture ? 'dag' : 'degi'); - case 'M': - if (withoutSuffix) { - return 'mánuður'; - } - return isFuture ? 'mánuð' : 'mánuði'; - case 'MM': - if (is__plural(number)) { - if (withoutSuffix) { - return result + 'mánuðir'; - } - return result + (isFuture ? 'mánuði' : 'mánuðum'); - } else if (withoutSuffix) { - return result + 'mánuður'; - } - return result + (isFuture ? 'mánuð' : 'mánuði'); - case 'y': - return withoutSuffix || isFuture ? 'ár' : 'ári'; - case 'yy': - if (is__plural(number)) { - return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); - } - return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); - } - } - - var is = moment__default.defineLocale('is', { - months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), - monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), - weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), - weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), - weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY [kl.] H:mm', - LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' - }, - calendar : { - sameDay : '[í dag kl.] LT', - nextDay : '[á morgun kl.] LT', - nextWeek : 'dddd [kl.] LT', - lastDay : '[í gær kl.] LT', - lastWeek : '[síðasta] dddd [kl.] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'eftir %s', - past : 'fyrir %s síðan', - s : is__translate, - m : is__translate, - mm : is__translate, - h : 'klukkustund', - hh : is__translate, - d : is__translate, - dd : is__translate, - M : is__translate, - MM : is__translate, - y : is__translate, - yy : is__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : italian (it) - //! author : Lorenzo : https://github.com/aliem - //! author: Mattia Larentis: https://github.com/nostalgiaz - - var it = moment__default.defineLocale('it', { - months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), - monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), - weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'), - weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'), - weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Oggi alle] LT', - nextDay: '[Domani alle] LT', - nextWeek: 'dddd [alle] LT', - lastDay: '[Ieri alle] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[la scorsa] dddd [alle] LT'; - default: - return '[lo scorso] dddd [alle] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : function (s) { - return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; - }, - past : '%s fa', - s : 'alcuni secondi', - m : 'un minuto', - mm : '%d minuti', - h : 'un\'ora', - hh : '%d ore', - d : 'un giorno', - dd : '%d giorni', - M : 'un mese', - MM : '%d mesi', - y : 'un anno', - yy : '%d anni' - }, - ordinalParse : /\d{1,2}º/, - ordinal: '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : japanese (ja) - //! author : LI Long : https://github.com/baryon - - var ja = moment__default.defineLocale('ja', { - months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), - weekdaysShort : '日_月_火_水_木_金_土'.split('_'), - weekdaysMin : '日_月_火_水_木_金_土'.split('_'), - longDateFormat : { - LT : 'Ah時m分', - LTS : 'Ah時m分s秒', - L : 'YYYY/MM/DD', - LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日Ah時m分', - LLLL : 'YYYY年M月D日Ah時m分 dddd' - }, - meridiemParse: /午前|午後/i, - isPM : function (input) { - return input === '午後'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return '午前'; - } else { - return '午後'; - } - }, - calendar : { - sameDay : '[今日] LT', - nextDay : '[明日] LT', - nextWeek : '[来週]dddd LT', - lastDay : '[昨日] LT', - lastWeek : '[前週]dddd LT', - sameElse : 'L' - }, - ordinalParse : /\d{1,2}日/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + '日'; - default: - return number; - } - }, - relativeTime : { - future : '%s後', - past : '%s前', - s : '数秒', - m : '1分', - mm : '%d分', - h : '1時間', - hh : '%d時間', - d : '1日', - dd : '%d日', - M : '1ヶ月', - MM : '%dヶ月', - y : '1年', - yy : '%d年' - } - }); - - //! moment.js locale configuration - //! locale : Boso Jowo (jv) - //! author : Rony Lantip : https://github.com/lantip - //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa - - var jv = moment__default.defineLocale('jv', { - months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), - weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), - weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), - weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /enjing|siyang|sonten|ndalu/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'enjing') { - return hour; - } else if (meridiem === 'siyang') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'sonten' || meridiem === 'ndalu') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'enjing'; - } else if (hours < 15) { - return 'siyang'; - } else if (hours < 19) { - return 'sonten'; - } else { - return 'ndalu'; - } - }, - calendar : { - sameDay : '[Dinten puniko pukul] LT', - nextDay : '[Mbenjang pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kala wingi pukul] LT', - lastWeek : 'dddd [kepengker pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'wonten ing %s', - past : '%s ingkang kepengker', - s : 'sawetawis detik', - m : 'setunggal menit', - mm : '%d menit', - h : 'setunggal jam', - hh : '%d jam', - d : 'sedinten', - dd : '%d dinten', - M : 'sewulan', - MM : '%d wulan', - y : 'setaun', - yy : '%d taun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Georgian (ka) - //! author : Irakli Janiashvili : https://github.com/irakli-janiashvili - - var ka = moment__default.defineLocale('ka', { - months : { - standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), - format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') - }, - monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), - weekdays : { - standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), - format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), - isFormat: /(წინა|შემდეგ)/ - }, - weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), - weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[დღეს] LT[-ზე]', - nextDay : '[ხვალ] LT[-ზე]', - lastDay : '[გუშინ] LT[-ზე]', - nextWeek : '[შემდეგ] dddd LT[-ზე]', - lastWeek : '[წინა] dddd LT-ზე', - sameElse : 'L' - }, - relativeTime : { - future : function (s) { - return (/(წამი|წუთი|საათი|წელი)/).test(s) ? - s.replace(/ი$/, 'ში') : - s + 'ში'; - }, - past : function (s) { - if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { - return s.replace(/(ი|ე)$/, 'ის წინ'); - } - if ((/წელი/).test(s)) { - return s.replace(/წელი$/, 'წლის წინ'); - } - }, - s : 'რამდენიმე წამი', - m : 'წუთი', - mm : '%d წუთი', - h : 'საათი', - hh : '%d საათი', - d : 'დღე', - dd : '%d დღე', - M : 'თვე', - MM : '%d თვე', - y : 'წელი', - yy : '%d წელი' - }, - ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, - ordinal : function (number) { - if (number === 0) { - return number; - } - if (number === 1) { - return number + '-ლი'; - } - if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { - return 'მე-' + number; - } - return number + '-ე'; - }, - week : { - dow : 1, - doy : 7 - } - }); - - //! moment.js locale configuration - //! locale : kazakh (kk) - //! authors : Nurlan Rakhimzhanov : https://github.com/nurlan - - var kk__suffixes = { - 0: '-ші', - 1: '-ші', - 2: '-ші', - 3: '-ші', - 4: '-ші', - 5: '-ші', - 6: '-шы', - 7: '-ші', - 8: '-ші', - 9: '-шы', - 10: '-шы', - 20: '-шы', - 30: '-шы', - 40: '-шы', - 50: '-ші', - 60: '-шы', - 70: '-ші', - 80: '-ші', - 90: '-шы', - 100: '-ші' - }; - - var kk = moment__default.defineLocale('kk', { - months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), - monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), - weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), - weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), - weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Бүгін сағат] LT', - nextDay : '[Ертең сағат] LT', - nextWeek : 'dddd [сағат] LT', - lastDay : '[Кеше сағат] LT', - lastWeek : '[Өткен аптаның] dddd [сағат] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ішінде', - past : '%s бұрын', - s : 'бірнеше секунд', - m : 'бір минут', - mm : '%d минут', - h : 'бір сағат', - hh : '%d сағат', - d : 'бір күн', - dd : '%d күн', - M : 'бір ай', - MM : '%d ай', - y : 'бір жыл', - yy : '%d жыл' - }, - ordinalParse: /\d{1,2}-(ші|шы)/, - ordinal : function (number) { - var a = number % 10, - b = number >= 100 ? 100 : null; - return number + (kk__suffixes[number] || kk__suffixes[a] || kk__suffixes[b]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : khmer (km) - //! author : Kruy Vanna : https://github.com/kruyvanna - - var km = moment__default.defineLocale('km', { - months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), - monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), - weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), - weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), - weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), - longDateFormat: { - LT: 'HH:mm', - LTS : 'HH:mm:ss', - L: 'DD/MM/YYYY', - LL: 'D MMMM YYYY', - LLL: 'D MMMM YYYY HH:mm', - LLLL: 'dddd, D MMMM YYYY HH:mm' - }, - calendar: { - sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', - nextDay: '[ស្អែក ម៉ោង] LT', - nextWeek: 'dddd [ម៉ោង] LT', - lastDay: '[ម្សិលមិញ ម៉ោង] LT', - lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', - sameElse: 'L' - }, - relativeTime: { - future: '%sទៀត', - past: '%sមុន', - s: 'ប៉ុន្មានវិនាទី', - m: 'មួយនាទី', - mm: '%d នាទី', - h: 'មួយម៉ោង', - hh: '%d ម៉ោង', - d: 'មួយថ្ងៃ', - dd: '%d ថ្ងៃ', - M: 'មួយខែ', - MM: '%d ខែ', - y: 'មួយឆ្នាំ', - yy: '%d ឆ្នាំ' - }, - week: { - dow: 1, // Monday is the first day of the week. - doy: 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : korean (ko) - //! - //! authors - //! - //! - Kyungwook, Park : https://github.com/kyungw00k - //! - Jeeeyul Lee - - var ko = moment__default.defineLocale('ko', { - months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), - monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), - weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), - weekdaysShort : '일_월_화_수_목_금_토'.split('_'), - weekdaysMin : '일_월_화_수_목_금_토'.split('_'), - longDateFormat : { - LT : 'A h시 m분', - LTS : 'A h시 m분 s초', - L : 'YYYY.MM.DD', - LL : 'YYYY년 MMMM D일', - LLL : 'YYYY년 MMMM D일 A h시 m분', - LLLL : 'YYYY년 MMMM D일 dddd A h시 m분' - }, - calendar : { - sameDay : '오늘 LT', - nextDay : '내일 LT', - nextWeek : 'dddd LT', - lastDay : '어제 LT', - lastWeek : '지난주 dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s 후', - past : '%s 전', - s : '몇 초', - ss : '%d초', - m : '일분', - mm : '%d분', - h : '한 시간', - hh : '%d시간', - d : '하루', - dd : '%d일', - M : '한 달', - MM : '%d달', - y : '일 년', - yy : '%d년' - }, - ordinalParse : /\d{1,2}일/, - ordinal : '%d일', - meridiemParse : /오전|오후/, - isPM : function (token) { - return token === '오후'; - }, - meridiem : function (hour, minute, isUpper) { - return hour < 12 ? '오전' : '오후'; - } - }); - - //! moment.js locale configuration - //! locale : kyrgyz (ky) - //! author : Chyngyz Arystan uulu : https://github.com/chyngyz - - - var ky__suffixes = { - 0: '-чү', - 1: '-чи', - 2: '-чи', - 3: '-чү', - 4: '-чү', - 5: '-чи', - 6: '-чы', - 7: '-чи', - 8: '-чи', - 9: '-чу', - 10: '-чу', - 20: '-чы', - 30: '-чу', - 40: '-чы', - 50: '-чү', - 60: '-чы', - 70: '-чи', - 80: '-чи', - 90: '-чу', - 100: '-чү' - }; - - var ky = moment__default.defineLocale('ky', { - months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), - monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), - weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), - weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), - weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Бүгүн саат] LT', - nextDay : '[Эртең саат] LT', - nextWeek : 'dddd [саат] LT', - lastDay : '[Кече саат] LT', - lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ичинде', - past : '%s мурун', - s : 'бирнече секунд', - m : 'бир мүнөт', - mm : '%d мүнөт', - h : 'бир саат', - hh : '%d саат', - d : 'бир күн', - dd : '%d күн', - M : 'бир ай', - MM : '%d ай', - y : 'бир жыл', - yy : '%d жыл' - }, - ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/, - ordinal : function (number) { - var a = number % 10, - b = number >= 100 ? 100 : null; - return number + (ky__suffixes[number] || ky__suffixes[a] || ky__suffixes[b]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Luxembourgish (lb) - //! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz - - function lb__processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eng Minutt', 'enger Minutt'], - 'h': ['eng Stonn', 'enger Stonn'], - 'd': ['een Dag', 'engem Dag'], - 'M': ['ee Mount', 'engem Mount'], - 'y': ['ee Joer', 'engem Joer'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - function processFutureTime(string) { - var number = string.substr(0, string.indexOf(' ')); - if (eifelerRegelAppliesToNumber(number)) { - return 'a ' + string; - } - return 'an ' + string; - } - function processPastTime(string) { - var number = string.substr(0, string.indexOf(' ')); - if (eifelerRegelAppliesToNumber(number)) { - return 'viru ' + string; - } - return 'virun ' + string; - } - /** - * Returns true if the word before the given number loses the '-n' ending. - * e.g. 'an 10 Deeg' but 'a 5 Deeg' - * - * @param number {integer} - * @returns {boolean} - */ - function eifelerRegelAppliesToNumber(number) { - number = parseInt(number, 10); - if (isNaN(number)) { - return false; - } - if (number < 0) { - // Negative Number --> always true - return true; - } else if (number < 10) { - // Only 1 digit - if (4 <= number && number <= 7) { - return true; - } - return false; - } else if (number < 100) { - // 2 digits - var lastDigit = number % 10, firstDigit = number / 10; - if (lastDigit === 0) { - return eifelerRegelAppliesToNumber(firstDigit); - } - return eifelerRegelAppliesToNumber(lastDigit); - } else if (number < 10000) { - // 3 or 4 digits --> recursively check first digit - while (number >= 10) { - number = number / 10; - } - return eifelerRegelAppliesToNumber(number); - } else { - // Anything larger than 4 digits: recursively check first n-3 digits - number = number / 1000; - return eifelerRegelAppliesToNumber(number); - } - } - - var lb = moment__default.defineLocale('lb', { - months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), - weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), - weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat: { - LT: 'H:mm [Auer]', - LTS: 'H:mm:ss [Auer]', - L: 'DD.MM.YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm [Auer]', - LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' - }, - calendar: { - sameDay: '[Haut um] LT', - sameElse: 'L', - nextDay: '[Muer um] LT', - nextWeek: 'dddd [um] LT', - lastDay: '[Gëschter um] LT', - lastWeek: function () { - // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule - switch (this.day()) { - case 2: - case 4: - return '[Leschten] dddd [um] LT'; - default: - return '[Leschte] dddd [um] LT'; - } - } - }, - relativeTime : { - future : processFutureTime, - past : processPastTime, - s : 'e puer Sekonnen', - m : lb__processRelativeTime, - mm : '%d Minutten', - h : lb__processRelativeTime, - hh : '%d Stonnen', - d : lb__processRelativeTime, - dd : '%d Deeg', - M : lb__processRelativeTime, - MM : '%d Méint', - y : lb__processRelativeTime, - yy : '%d Joer' - }, - ordinalParse: /\d{1,2}\./, - ordinal: '%d.', - week: { - dow: 1, // Monday is the first day of the week. - doy: 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : lao (lo) - //! author : Ryan Hart : https://github.com/ryanhart2 - - var lo = moment__default.defineLocale('lo', { - months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), - monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), - weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), - weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), - weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'ວັນdddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, - isPM: function (input) { - return input === 'ຕອນແລງ'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ຕອນເຊົ້າ'; - } else { - return 'ຕອນແລງ'; - } - }, - calendar : { - sameDay : '[ມື້ນີ້ເວລາ] LT', - nextDay : '[ມື້ອື່ນເວລາ] LT', - nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', - lastDay : '[ມື້ວານນີ້ເວລາ] LT', - lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ອີກ %s', - past : '%sຜ່ານມາ', - s : 'ບໍ່ເທົ່າໃດວິນາທີ', - m : '1 ນາທີ', - mm : '%d ນາທີ', - h : '1 ຊົ່ວໂມງ', - hh : '%d ຊົ່ວໂມງ', - d : '1 ມື້', - dd : '%d ມື້', - M : '1 ເດືອນ', - MM : '%d ເດືອນ', - y : '1 ປີ', - yy : '%d ປີ' - }, - ordinalParse: /(ທີ່)\d{1,2}/, - ordinal : function (number) { - return 'ທີ່' + number; - } - }); - - //! moment.js locale configuration - //! locale : Lithuanian (lt) - //! author : Mindaugas Mozūras : https://github.com/mmozuras - - var lt__units = { - 'm' : 'minutė_minutės_minutę', - 'mm': 'minutės_minučių_minutes', - 'h' : 'valanda_valandos_valandą', - 'hh': 'valandos_valandų_valandas', - 'd' : 'diena_dienos_dieną', - 'dd': 'dienos_dienų_dienas', - 'M' : 'mėnuo_mėnesio_mėnesį', - 'MM': 'mėnesiai_mėnesių_mėnesius', - 'y' : 'metai_metų_metus', - 'yy': 'metai_metų_metus' - }; - function translateSeconds(number, withoutSuffix, key, isFuture) { - if (withoutSuffix) { - return 'kelios sekundės'; - } else { - return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; - } - } - function translateSingular(number, withoutSuffix, key, isFuture) { - return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); - } - function special(number) { - return number % 10 === 0 || (number > 10 && number < 20); - } - function forms(key) { - return lt__units[key].split('_'); - } - function lt__translate(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - if (number === 1) { - return result + translateSingular(number, withoutSuffix, key[0], isFuture); - } else if (withoutSuffix) { - return result + (special(number) ? forms(key)[1] : forms(key)[0]); - } else { - if (isFuture) { - return result + forms(key)[1]; - } else { - return result + (special(number) ? forms(key)[1] : forms(key)[2]); - } - } - } - var lt = moment__default.defineLocale('lt', { - months : { - format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), - standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_') - }, - monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), - weekdays : { - format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), - standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), - isFormat: /dddd HH:mm/ - }, - weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), - weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'YYYY [m.] MMMM D [d.]', - LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', - LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', - l : 'YYYY-MM-DD', - ll : 'YYYY [m.] MMMM D [d.]', - lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', - llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' - }, - calendar : { - sameDay : '[Šiandien] LT', - nextDay : '[Rytoj] LT', - nextWeek : 'dddd LT', - lastDay : '[Vakar] LT', - lastWeek : '[Praėjusį] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : 'po %s', - past : 'prieš %s', - s : translateSeconds, - m : translateSingular, - mm : lt__translate, - h : translateSingular, - hh : lt__translate, - d : translateSingular, - dd : lt__translate, - M : translateSingular, - MM : lt__translate, - y : translateSingular, - yy : lt__translate - }, - ordinalParse: /\d{1,2}-oji/, - ordinal : function (number) { - return number + '-oji'; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : latvian (lv) - //! author : Kristaps Karlsons : https://github.com/skakri - //! author : Jānis Elmeris : https://github.com/JanisE - - var lv__units = { - 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), - 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), - 'h': 'stundas_stundām_stunda_stundas'.split('_'), - 'hh': 'stundas_stundām_stunda_stundas'.split('_'), - 'd': 'dienas_dienām_diena_dienas'.split('_'), - 'dd': 'dienas_dienām_diena_dienas'.split('_'), - 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), - 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), - 'y': 'gada_gadiem_gads_gadi'.split('_'), - 'yy': 'gada_gadiem_gads_gadi'.split('_') - }; - /** - * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. - */ - function lv__format(forms, number, withoutSuffix) { - if (withoutSuffix) { - // E.g. "21 minūte", "3 minūtes". - return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; - } else { - // E.g. "21 minūtes" as in "pēc 21 minūtes". - // E.g. "3 minūtēm" as in "pēc 3 minūtēm". - return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; - } - } - function lv__relativeTimeWithPlural(number, withoutSuffix, key) { - return number + ' ' + lv__format(lv__units[key], number, withoutSuffix); - } - function relativeTimeWithSingular(number, withoutSuffix, key) { - return lv__format(lv__units[key], number, withoutSuffix); - } - function relativeSeconds(number, withoutSuffix) { - return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; - } - - var lv = moment__default.defineLocale('lv', { - months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), - weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), - weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY.', - LL : 'YYYY. [gada] D. MMMM', - LLL : 'YYYY. [gada] D. MMMM, HH:mm', - LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' - }, - calendar : { - sameDay : '[Šodien pulksten] LT', - nextDay : '[Rīt pulksten] LT', - nextWeek : 'dddd [pulksten] LT', - lastDay : '[Vakar pulksten] LT', - lastWeek : '[Pagājušā] dddd [pulksten] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'pēc %s', - past : 'pirms %s', - s : relativeSeconds, - m : relativeTimeWithSingular, - mm : lv__relativeTimeWithPlural, - h : relativeTimeWithSingular, - hh : lv__relativeTimeWithPlural, - d : relativeTimeWithSingular, - dd : lv__relativeTimeWithPlural, - M : relativeTimeWithSingular, - MM : lv__relativeTimeWithPlural, - y : relativeTimeWithSingular, - yy : lv__relativeTimeWithPlural - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Montenegrin (me) - //! author : Miodrag Nikač : https://github.com/miodragnikac - - var me__translator = { - words: { //Different grammatical cases - m: ['jedan minut', 'jednog minuta'], - mm: ['minut', 'minuta', 'minuta'], - h: ['jedan sat', 'jednog sata'], - hh: ['sat', 'sata', 'sati'], - dd: ['dan', 'dana', 'dana'], - MM: ['mjesec', 'mjeseca', 'mjeseci'], - yy: ['godina', 'godine', 'godina'] - }, - correctGrammaticalCase: function (number, wordKey) { - return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); - }, - translate: function (number, withoutSuffix, key) { - var wordKey = me__translator.words[key]; - if (key.length === 1) { - return withoutSuffix ? wordKey[0] : wordKey[1]; - } else { - return number + ' ' + me__translator.correctGrammaticalCase(number, wordKey); - } - } - }; - - var me = moment__default.defineLocale('me', { - months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), - monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), - monthsParseExact : true, - weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), - weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), - weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), - weekdaysParseExact : true, - longDateFormat: { - LT: 'H:mm', - LTS : 'H:mm:ss', - L: 'DD. MM. YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm', - LLLL: 'dddd, D. MMMM YYYY H:mm' - }, - calendar: { - sameDay: '[danas u] LT', - nextDay: '[sjutra u] LT', - - nextWeek: function () { - switch (this.day()) { - case 0: - return '[u] [nedjelju] [u] LT'; - case 3: - return '[u] [srijedu] [u] LT'; - case 6: - return '[u] [subotu] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[u] dddd [u] LT'; - } - }, - lastDay : '[juče u] LT', - lastWeek : function () { - var lastWeekDays = [ - '[prošle] [nedjelje] [u] LT', - '[prošlog] [ponedjeljka] [u] LT', - '[prošlog] [utorka] [u] LT', - '[prošle] [srijede] [u] LT', - '[prošlog] [četvrtka] [u] LT', - '[prošlog] [petka] [u] LT', - '[prošle] [subote] [u] LT' - ]; - return lastWeekDays[this.day()]; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'za %s', - past : 'prije %s', - s : 'nekoliko sekundi', - m : me__translator.translate, - mm : me__translator.translate, - h : me__translator.translate, - hh : me__translator.translate, - d : 'dan', - dd : me__translator.translate, - M : 'mjesec', - MM : me__translator.translate, - y : 'godinu', - yy : me__translator.translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : macedonian (mk) - //! author : Borislav Mickov : https://github.com/B0k0 - - var mk = moment__default.defineLocale('mk', { - months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), - monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), - weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), - weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), - weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'D.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Денес во] LT', - nextDay : '[Утре во] LT', - nextWeek : '[Во] dddd [во] LT', - lastDay : '[Вчера во] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - case 6: - return '[Изминатата] dddd [во] LT'; - case 1: - case 2: - case 4: - case 5: - return '[Изминатиот] dddd [во] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'после %s', - past : 'пред %s', - s : 'неколку секунди', - m : 'минута', - mm : '%d минути', - h : 'час', - hh : '%d часа', - d : 'ден', - dd : '%d дена', - M : 'месец', - MM : '%d месеци', - y : 'година', - yy : '%d години' - }, - ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, - ordinal : function (number) { - var lastDigit = number % 10, - last2Digits = number % 100; - if (number === 0) { - return number + '-ев'; - } else if (last2Digits === 0) { - return number + '-ен'; - } else if (last2Digits > 10 && last2Digits < 20) { - return number + '-ти'; - } else if (lastDigit === 1) { - return number + '-ви'; - } else if (lastDigit === 2) { - return number + '-ри'; - } else if (lastDigit === 7 || lastDigit === 8) { - return number + '-ми'; - } else { - return number + '-ти'; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : malayalam (ml) - //! author : Floyd Pink : https://github.com/floydpink - - var ml = moment__default.defineLocale('ml', { - months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), - monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), - monthsParseExact : true, - weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), - weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), - weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), - longDateFormat : { - LT : 'A h:mm -നു', - LTS : 'A h:mm:ss -നു', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm -നു', - LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' - }, - calendar : { - sameDay : '[ഇന്ന്] LT', - nextDay : '[നാളെ] LT', - nextWeek : 'dddd, LT', - lastDay : '[ഇന്നലെ] LT', - lastWeek : '[കഴിഞ്ഞ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s കഴിഞ്ഞ്', - past : '%s മുൻപ്', - s : 'അൽപ നിമിഷങ്ങൾ', - m : 'ഒരു മിനിറ്റ്', - mm : '%d മിനിറ്റ്', - h : 'ഒരു മണിക്കൂർ', - hh : '%d മണിക്കൂർ', - d : 'ഒരു ദിവസം', - dd : '%d ദിവസം', - M : 'ഒരു മാസം', - MM : '%d മാസം', - y : 'ഒരു വർഷം', - yy : '%d വർഷം' - }, - meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'രാത്രി' && hour >= 4) || - meridiem === 'ഉച്ച കഴിഞ്ഞ്' || - meridiem === 'വൈകുന്നേരം') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'രാത്രി'; - } else if (hour < 12) { - return 'രാവിലെ'; - } else if (hour < 17) { - return 'ഉച്ച കഴിഞ്ഞ്'; - } else if (hour < 20) { - return 'വൈകുന്നേരം'; - } else { - return 'രാത്രി'; - } - } - }); - - //! moment.js locale configuration - //! locale : Marathi (mr) - //! author : Harshad Kale : https://github.com/kalehv - //! author : Vivek Athalye : https://github.com/vnathalye - - var mr__symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - mr__numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - function relativeTimeMr(number, withoutSuffix, string, isFuture) - { - var output = ''; - if (withoutSuffix) { - switch (string) { - case 's': output = 'काही सेकंद'; break; - case 'm': output = 'एक मिनिट'; break; - case 'mm': output = '%d मिनिटे'; break; - case 'h': output = 'एक तास'; break; - case 'hh': output = '%d तास'; break; - case 'd': output = 'एक दिवस'; break; - case 'dd': output = '%d दिवस'; break; - case 'M': output = 'एक महिना'; break; - case 'MM': output = '%d महिने'; break; - case 'y': output = 'एक वर्ष'; break; - case 'yy': output = '%d वर्षे'; break; - } - } - else { - switch (string) { - case 's': output = 'काही सेकंदां'; break; - case 'm': output = 'एका मिनिटा'; break; - case 'mm': output = '%d मिनिटां'; break; - case 'h': output = 'एका तासा'; break; - case 'hh': output = '%d तासां'; break; - case 'd': output = 'एका दिवसा'; break; - case 'dd': output = '%d दिवसां'; break; - case 'M': output = 'एका महिन्या'; break; - case 'MM': output = '%d महिन्यां'; break; - case 'y': output = 'एका वर्षा'; break; - case 'yy': output = '%d वर्षां'; break; - } - } - return output.replace(/%d/i, number); - } - - var mr = moment__default.defineLocale('mr', { - months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), - monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), - monthsParseExact : true, - weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), - weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), - weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), - longDateFormat : { - LT : 'A h:mm वाजता', - LTS : 'A h:mm:ss वाजता', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm वाजता', - LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[उद्या] LT', - nextWeek : 'dddd, LT', - lastDay : '[काल] LT', - lastWeek: '[मागील] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future: '%sमध्ये', - past: '%sपूर्वी', - s: relativeTimeMr, - m: relativeTimeMr, - mm: relativeTimeMr, - h: relativeTimeMr, - hh: relativeTimeMr, - d: relativeTimeMr, - dd: relativeTimeMr, - M: relativeTimeMr, - MM: relativeTimeMr, - y: relativeTimeMr, - yy: relativeTimeMr - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return mr__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return mr__symbolMap[match]; - }); - }, - meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'रात्री') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'सकाळी') { - return hour; - } else if (meridiem === 'दुपारी') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'सायंकाळी') { - return hour + 12; - } - }, - meridiem: function (hour, minute, isLower) { - if (hour < 4) { - return 'रात्री'; - } else if (hour < 10) { - return 'सकाळी'; - } else if (hour < 17) { - return 'दुपारी'; - } else if (hour < 20) { - return 'सायंकाळी'; - } else { - return 'रात्री'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Bahasa Malaysia (ms-MY) - //! author : Weldan Jamili : https://github.com/weldan - - var ms_my = moment__default.defineLocale('ms-my', { - months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), - weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), - weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), - weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|tengahari|petang|malam/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'tengahari') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'petang' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'tengahari'; - } else if (hours < 19) { - return 'petang'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Esok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kelmarin pukul] LT', - lastWeek : 'dddd [lepas pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lepas', - s : 'beberapa saat', - m : 'seminit', - mm : '%d minit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Bahasa Malaysia (ms-MY) - //! author : Weldan Jamili : https://github.com/weldan - - var locale_ms = moment__default.defineLocale('ms', { - months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), - weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), - weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), - weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|tengahari|petang|malam/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'tengahari') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'petang' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'tengahari'; - } else if (hours < 19) { - return 'petang'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Esok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kelmarin pukul] LT', - lastWeek : 'dddd [lepas pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lepas', - s : 'beberapa saat', - m : 'seminit', - mm : '%d minit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Burmese (my) - //! author : Squar team, mysquar.com - - var my__symbolMap = { - '1': '၁', - '2': '၂', - '3': '၃', - '4': '၄', - '5': '၅', - '6': '၆', - '7': '၇', - '8': '၈', - '9': '၉', - '0': '၀' - }, my__numberMap = { - '၁': '1', - '၂': '2', - '၃': '3', - '၄': '4', - '၅': '5', - '၆': '6', - '၇': '7', - '၈': '8', - '၉': '9', - '၀': '0' - }; - - var my = moment__default.defineLocale('my', { - months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), - monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), - weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), - weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), - weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), - - longDateFormat: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'DD/MM/YYYY', - LL: 'D MMMM YYYY', - LLL: 'D MMMM YYYY HH:mm', - LLLL: 'dddd D MMMM YYYY HH:mm' - }, - calendar: { - sameDay: '[ယနေ.] LT [မှာ]', - nextDay: '[မနက်ဖြန်] LT [မှာ]', - nextWeek: 'dddd LT [မှာ]', - lastDay: '[မနေ.က] LT [မှာ]', - lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', - sameElse: 'L' - }, - relativeTime: { - future: 'လာမည့် %s မှာ', - past: 'လွန်ခဲ့သော %s က', - s: 'စက္ကန်.အနည်းငယ်', - m: 'တစ်မိနစ်', - mm: '%d မိနစ်', - h: 'တစ်နာရီ', - hh: '%d နာရီ', - d: 'တစ်ရက်', - dd: '%d ရက်', - M: 'တစ်လ', - MM: '%d လ', - y: 'တစ်နှစ်', - yy: '%d နှစ်' - }, - preparse: function (string) { - return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { - return my__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return my__symbolMap[match]; - }); - }, - week: { - dow: 1, // Monday is the first day of the week. - doy: 4 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : norwegian bokmål (nb) - //! authors : Espen Hovlandsdal : https://github.com/rexxars - //! Sigurd Gartmann : https://github.com/sigurdga - - var nb = moment__default.defineLocale('nb', { - months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), - monthsParseExact : true, - weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), - weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), - weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY [kl.] HH:mm', - LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' - }, - calendar : { - sameDay: '[i dag kl.] LT', - nextDay: '[i morgen kl.] LT', - nextWeek: 'dddd [kl.] LT', - lastDay: '[i går kl.] LT', - lastWeek: '[forrige] dddd [kl.] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s siden', - s : 'noen sekunder', - m : 'ett minutt', - mm : '%d minutter', - h : 'en time', - hh : '%d timer', - d : 'en dag', - dd : '%d dager', - M : 'en måned', - MM : '%d måneder', - y : 'ett år', - yy : '%d år' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : nepali/nepalese - //! author : suvash : https://github.com/suvash - - var ne__symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - ne__numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - var ne = moment__default.defineLocale('ne', { - months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), - monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), - monthsParseExact : true, - weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), - weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), - weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'Aको h:mm बजे', - LTS : 'Aको h:mm:ss बजे', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, Aको h:mm बजे', - LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return ne__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return ne__symbolMap[match]; - }); - }, - meridiemParse: /राति|बिहान|दिउँसो|साँझ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'राति') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'बिहान') { - return hour; - } else if (meridiem === 'दिउँसो') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'साँझ') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 3) { - return 'राति'; - } else if (hour < 12) { - return 'बिहान'; - } else if (hour < 16) { - return 'दिउँसो'; - } else if (hour < 20) { - return 'साँझ'; - } else { - return 'राति'; - } - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[भोलि] LT', - nextWeek : '[आउँदो] dddd[,] LT', - lastDay : '[हिजो] LT', - lastWeek : '[गएको] dddd[,] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%sमा', - past : '%s अगाडि', - s : 'केही क्षण', - m : 'एक मिनेट', - mm : '%d मिनेट', - h : 'एक घण्टा', - hh : '%d घण्टा', - d : 'एक दिन', - dd : '%d दिन', - M : 'एक महिना', - MM : '%d महिना', - y : 'एक बर्ष', - yy : '%d बर्ष' - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : dutch (nl) - //! author : Joris Röling : https://github.com/jjupiter - - var nl__monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), - nl__monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); - - var nl = moment__default.defineLocale('nl', { - months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), - monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { - return nl__monthsShortWithoutDots[m.month()]; - } else { - return nl__monthsShortWithDots[m.month()]; - } - }, - monthsParseExact : true, - weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), - weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), - weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[vandaag om] LT', - nextDay: '[morgen om] LT', - nextWeek: 'dddd [om] LT', - lastDay: '[gisteren om] LT', - lastWeek: '[afgelopen] dddd [om] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'over %s', - past : '%s geleden', - s : 'een paar seconden', - m : 'één minuut', - mm : '%d minuten', - h : 'één uur', - hh : '%d uur', - d : 'één dag', - dd : '%d dagen', - M : 'één maand', - MM : '%d maanden', - y : 'één jaar', - yy : '%d jaar' - }, - ordinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : norwegian nynorsk (nn) - //! author : https://github.com/mechuwind - - var nn = moment__default.defineLocale('nn', { - months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), - weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), - weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY [kl.] H:mm', - LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' - }, - calendar : { - sameDay: '[I dag klokka] LT', - nextDay: '[I morgon klokka] LT', - nextWeek: 'dddd [klokka] LT', - lastDay: '[I går klokka] LT', - lastWeek: '[Føregåande] dddd [klokka] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s sidan', - s : 'nokre sekund', - m : 'eit minutt', - mm : '%d minutt', - h : 'ein time', - hh : '%d timar', - d : 'ein dag', - dd : '%d dagar', - M : 'ein månad', - MM : '%d månader', - y : 'eit år', - yy : '%d år' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : punjabi india (pa-in) - //! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit - - var pa_in__symbolMap = { - '1': '੧', - '2': '੨', - '3': '੩', - '4': '੪', - '5': '੫', - '6': '੬', - '7': '੭', - '8': '੮', - '9': '੯', - '0': '੦' - }, - pa_in__numberMap = { - '੧': '1', - '੨': '2', - '੩': '3', - '੪': '4', - '੫': '5', - '੬': '6', - '੭': '7', - '੮': '8', - '੯': '9', - '੦': '0' - }; - - var pa_in = moment__default.defineLocale('pa-in', { - // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. - months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), - monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), - weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), - weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), - weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), - longDateFormat : { - LT : 'A h:mm ਵਜੇ', - LTS : 'A h:mm:ss ਵਜੇ', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', - LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' - }, - calendar : { - sameDay : '[ਅਜ] LT', - nextDay : '[ਕਲ] LT', - nextWeek : 'dddd, LT', - lastDay : '[ਕਲ] LT', - lastWeek : '[ਪਿਛਲੇ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ਵਿੱਚ', - past : '%s ਪਿਛਲੇ', - s : 'ਕੁਝ ਸਕਿੰਟ', - m : 'ਇਕ ਮਿੰਟ', - mm : '%d ਮਿੰਟ', - h : 'ਇੱਕ ਘੰਟਾ', - hh : '%d ਘੰਟੇ', - d : 'ਇੱਕ ਦਿਨ', - dd : '%d ਦਿਨ', - M : 'ਇੱਕ ਮਹੀਨਾ', - MM : '%d ਮਹੀਨੇ', - y : 'ਇੱਕ ਸਾਲ', - yy : '%d ਸਾਲ' - }, - preparse: function (string) { - return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { - return pa_in__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return pa_in__symbolMap[match]; - }); - }, - // Punjabi notation for meridiems are quite fuzzy in practice. While there exists - // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. - meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'ਰਾਤ') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'ਸਵੇਰ') { - return hour; - } else if (meridiem === 'ਦੁਪਹਿਰ') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'ਸ਼ਾਮ') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ਰਾਤ'; - } else if (hour < 10) { - return 'ਸਵੇਰ'; - } else if (hour < 17) { - return 'ਦੁਪਹਿਰ'; - } else if (hour < 20) { - return 'ਸ਼ਾਮ'; - } else { - return 'ਰਾਤ'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : polish (pl) - //! author : Rafal Hirsz : https://github.com/evoL - - var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'), - monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); - function pl__plural(n) { - return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); - } - function pl__translate(number, withoutSuffix, key) { - var result = number + ' '; - switch (key) { - case 'm': - return withoutSuffix ? 'minuta' : 'minutę'; - case 'mm': - return result + (pl__plural(number) ? 'minuty' : 'minut'); - case 'h': - return withoutSuffix ? 'godzina' : 'godzinę'; - case 'hh': - return result + (pl__plural(number) ? 'godziny' : 'godzin'); - case 'MM': - return result + (pl__plural(number) ? 'miesiące' : 'miesięcy'); - case 'yy': - return result + (pl__plural(number) ? 'lata' : 'lat'); - } - } - - var pl = moment__default.defineLocale('pl', { - months : function (momentToFormat, format) { - if (format === '') { - // Hack: if format empty we know this is used to generate - // RegExp by moment. Give then back both valid forms of months - // in RegExp ready format. - return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; - } else if (/D MMMM/.test(format)) { - return monthsSubjective[momentToFormat.month()]; - } else { - return monthsNominative[momentToFormat.month()]; - } - }, - monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), - weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), - weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'), - weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Dziś o] LT', - nextDay: '[Jutro o] LT', - nextWeek: '[W] dddd [o] LT', - lastDay: '[Wczoraj o] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[W zeszłą niedzielę o] LT'; - case 3: - return '[W zeszłą środę o] LT'; - case 6: - return '[W zeszłą sobotę o] LT'; - default: - return '[W zeszły] dddd [o] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'za %s', - past : '%s temu', - s : 'kilka sekund', - m : pl__translate, - mm : pl__translate, - h : pl__translate, - hh : pl__translate, - d : '1 dzień', - dd : '%d dni', - M : 'miesiąc', - MM : pl__translate, - y : 'rok', - yy : pl__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : brazilian portuguese (pt-br) - //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira - - var pt_br = moment__default.defineLocale('pt-br', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), - weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' - }, - calendar : { - sameDay: '[Hoje às] LT', - nextDay: '[Amanhã às] LT', - nextWeek: 'dddd [às] LT', - lastDay: '[Ontem às] LT', - lastWeek: function () { - return (this.day() === 0 || this.day() === 6) ? - '[Último] dddd [às] LT' : // Saturday + Sunday - '[Última] dddd [às] LT'; // Monday - Friday - }, - sameElse: 'L' - }, - relativeTime : { - future : 'em %s', - past : '%s atrás', - s : 'poucos segundos', - m : 'um minuto', - mm : '%d minutos', - h : 'uma hora', - hh : '%d horas', - d : 'um dia', - dd : '%d dias', - M : 'um mês', - MM : '%d meses', - y : 'um ano', - yy : '%d anos' - }, - ordinalParse: /\d{1,2}º/, - ordinal : '%dº' - }); - - //! moment.js locale configuration - //! locale : portuguese (pt) - //! author : Jefferson : https://github.com/jalex79 - - var pt = moment__default.defineLocale('pt', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), - weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY HH:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' - }, - calendar : { - sameDay: '[Hoje às] LT', - nextDay: '[Amanhã às] LT', - nextWeek: 'dddd [às] LT', - lastDay: '[Ontem às] LT', - lastWeek: function () { - return (this.day() === 0 || this.day() === 6) ? - '[Último] dddd [às] LT' : // Saturday + Sunday - '[Última] dddd [às] LT'; // Monday - Friday - }, - sameElse: 'L' - }, - relativeTime : { - future : 'em %s', - past : 'há %s', - s : 'segundos', - m : 'um minuto', - mm : '%d minutos', - h : 'uma hora', - hh : '%d horas', - d : 'um dia', - dd : '%d dias', - M : 'um mês', - MM : '%d meses', - y : 'um ano', - yy : '%d anos' - }, - ordinalParse: /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : romanian (ro) - //! author : Vlad Gurdiga : https://github.com/gurdiga - //! author : Valentin Agachi : https://github.com/avaly - - function ro__relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'mm': 'minute', - 'hh': 'ore', - 'dd': 'zile', - 'MM': 'luni', - 'yy': 'ani' - }, - separator = ' '; - if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { - separator = ' de '; - } - return number + separator + format[key]; - } - - var ro = moment__default.defineLocale('ro', { - months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), - monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), - weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), - weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay: '[azi la] LT', - nextDay: '[mâine la] LT', - nextWeek: 'dddd [la] LT', - lastDay: '[ieri la] LT', - lastWeek: '[fosta] dddd [la] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'peste %s', - past : '%s în urmă', - s : 'câteva secunde', - m : 'un minut', - mm : ro__relativeTimeWithPlural, - h : 'o oră', - hh : ro__relativeTimeWithPlural, - d : 'o zi', - dd : ro__relativeTimeWithPlural, - M : 'o lună', - MM : ro__relativeTimeWithPlural, - y : 'un an', - yy : ro__relativeTimeWithPlural - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : russian (ru) - //! author : Viktorminator : https://github.com/Viktorminator - //! Author : Menelion Elensúle : https://github.com/Oire - //! author : Коренберг Марк : https://github.com/socketpair - - function ru__plural(word, num) { - var forms = word.split('_'); - return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); - } - function ru__relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', - 'hh': 'час_часа_часов', - 'dd': 'день_дня_дней', - 'MM': 'месяц_месяца_месяцев', - 'yy': 'год_года_лет' - }; - if (key === 'm') { - return withoutSuffix ? 'минута' : 'минуту'; - } - else { - return number + ' ' + ru__plural(format[key], +number); - } - } - var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; - - // http://new.gramota.ru/spravka/rules/139-prop : § 103 - // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 - // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 - var ru = moment__default.defineLocale('ru', { - months : { - format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), - standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') - }, - monthsShort : { - // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? - format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), - standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') - }, - weekdays : { - standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), - format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), - isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ - }, - weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), - weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), - monthsParse : monthsParse, - longMonthsParse : monthsParse, - shortMonthsParse : monthsParse, - monthsRegex: /^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|сент\.|февр\.|нояб\.|июнь|янв.|июль|дек.|авг.|апр.|марта|мар[.т]|окт.|июн[яь]|июл[яь]|ма[яй])/i, - monthsShortRegex: /^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|сент\.|февр\.|нояб\.|июнь|янв.|июль|дек.|авг.|апр.|марта|мар[.т]|окт.|июн[яь]|июл[яь]|ма[яй])/i, - monthsStrictRegex: /^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|марта?|июн[яь]|июл[яь]|ма[яй])/i, - monthsShortStrictRegex: /^(нояб\.|февр\.|сент\.|июль|янв\.|июн[яь]|мар[.т]|авг\.|апр\.|окт\.|дек\.|ма[яй])/i, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY г.', - LLL : 'D MMMM YYYY г., HH:mm', - LLLL : 'dddd, D MMMM YYYY г., HH:mm' - }, - calendar : { - sameDay: '[Сегодня в] LT', - nextDay: '[Завтра в] LT', - lastDay: '[Вчера в] LT', - nextWeek: function (now) { - if (now.week() !== this.week()) { - switch (this.day()) { - case 0: - return '[В следующее] dddd [в] LT'; - case 1: - case 2: - case 4: - return '[В следующий] dddd [в] LT'; - case 3: - case 5: - case 6: - return '[В следующую] dddd [в] LT'; - } - } else { - if (this.day() === 2) { - return '[Во] dddd [в] LT'; - } else { - return '[В] dddd [в] LT'; - } - } - }, - lastWeek: function (now) { - if (now.week() !== this.week()) { - switch (this.day()) { - case 0: - return '[В прошлое] dddd [в] LT'; - case 1: - case 2: - case 4: - return '[В прошлый] dddd [в] LT'; - case 3: - case 5: - case 6: - return '[В прошлую] dddd [в] LT'; - } - } else { - if (this.day() === 2) { - return '[Во] dddd [в] LT'; - } else { - return '[В] dddd [в] LT'; - } - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'через %s', - past : '%s назад', - s : 'несколько секунд', - m : ru__relativeTimeWithPlural, - mm : ru__relativeTimeWithPlural, - h : 'час', - hh : ru__relativeTimeWithPlural, - d : 'день', - dd : ru__relativeTimeWithPlural, - M : 'месяц', - MM : ru__relativeTimeWithPlural, - y : 'год', - yy : ru__relativeTimeWithPlural - }, - meridiemParse: /ночи|утра|дня|вечера/i, - isPM : function (input) { - return /^(дня|вечера)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ночи'; - } else if (hour < 12) { - return 'утра'; - } else if (hour < 17) { - return 'дня'; - } else { - return 'вечера'; - } - }, - ordinalParse: /\d{1,2}-(й|го|я)/, - ordinal: function (number, period) { - switch (period) { - case 'M': - case 'd': - case 'DDD': - return number + '-й'; - case 'D': - return number + '-го'; - case 'w': - case 'W': - return number + '-я'; - default: - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Northern Sami (se) - //! authors : Bård Rolstad Henriksen : https://github.com/karamell - - - var se = moment__default.defineLocale('se', { - months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), - monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), - weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), - weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), - weekdaysMin : 's_v_m_g_d_b_L'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'MMMM D. [b.] YYYY', - LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', - LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' - }, - calendar : { - sameDay: '[otne ti] LT', - nextDay: '[ihttin ti] LT', - nextWeek: 'dddd [ti] LT', - lastDay: '[ikte ti] LT', - lastWeek: '[ovddit] dddd [ti] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s geažes', - past : 'maŋit %s', - s : 'moadde sekunddat', - m : 'okta minuhta', - mm : '%d minuhtat', - h : 'okta diimmu', - hh : '%d diimmut', - d : 'okta beaivi', - dd : '%d beaivvit', - M : 'okta mánnu', - MM : '%d mánut', - y : 'okta jahki', - yy : '%d jagit' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Sinhalese (si) - //! author : Sampath Sitinamaluwa : https://github.com/sampathsris - - /*jshint -W100*/ - var si = moment__default.defineLocale('si', { - months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), - monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), - weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), - weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), - weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'a h:mm', - LTS : 'a h:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY MMMM D', - LLL : 'YYYY MMMM D, a h:mm', - LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' - }, - calendar : { - sameDay : '[අද] LT[ට]', - nextDay : '[හෙට] LT[ට]', - nextWeek : 'dddd LT[ට]', - lastDay : '[ඊයේ] LT[ට]', - lastWeek : '[පසුගිය] dddd LT[ට]', - sameElse : 'L' - }, - relativeTime : { - future : '%sකින්', - past : '%sකට පෙර', - s : 'තත්පර කිහිපය', - m : 'මිනිත්තුව', - mm : 'මිනිත්තු %d', - h : 'පැය', - hh : 'පැය %d', - d : 'දිනය', - dd : 'දින %d', - M : 'මාසය', - MM : 'මාස %d', - y : 'වසර', - yy : 'වසර %d' - }, - ordinalParse: /\d{1,2} වැනි/, - ordinal : function (number) { - return number + ' වැනි'; - }, - meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, - isPM : function (input) { - return input === 'ප.ව.' || input === 'පස් වරු'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'ප.ව.' : 'පස් වරු'; - } else { - return isLower ? 'පෙ.ව.' : 'පෙර වරු'; - } - } - }); - - //! moment.js locale configuration - //! locale : slovak (sk) - //! author : Martin Minka : https://github.com/k2s - //! based on work of petrbela : https://github.com/petrbela - - var sk__months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'), - sk__monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); - function sk__plural(n) { - return (n > 1) && (n < 5); - } - function sk__translate(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - switch (key) { - case 's': // a few seconds / in a few seconds / a few seconds ago - return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; - case 'm': // a minute / in a minute / a minute ago - return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); - case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago - if (withoutSuffix || isFuture) { - return result + (sk__plural(number) ? 'minúty' : 'minút'); - } else { - return result + 'minútami'; - } - break; - case 'h': // an hour / in an hour / an hour ago - return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); - case 'hh': // 9 hours / in 9 hours / 9 hours ago - if (withoutSuffix || isFuture) { - return result + (sk__plural(number) ? 'hodiny' : 'hodín'); - } else { - return result + 'hodinami'; - } - break; - case 'd': // a day / in a day / a day ago - return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; - case 'dd': // 9 days / in 9 days / 9 days ago - if (withoutSuffix || isFuture) { - return result + (sk__plural(number) ? 'dni' : 'dní'); - } else { - return result + 'dňami'; - } - break; - case 'M': // a month / in a month / a month ago - return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; - case 'MM': // 9 months / in 9 months / 9 months ago - if (withoutSuffix || isFuture) { - return result + (sk__plural(number) ? 'mesiace' : 'mesiacov'); - } else { - return result + 'mesiacmi'; - } - break; - case 'y': // a year / in a year / a year ago - return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; - case 'yy': // 9 years / in 9 years / 9 years ago - if (withoutSuffix || isFuture) { - return result + (sk__plural(number) ? 'roky' : 'rokov'); - } else { - return result + 'rokmi'; - } - break; - } - } - - var sk = moment__default.defineLocale('sk', { - months : sk__months, - monthsShort : sk__monthsShort, - weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), - weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'), - weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'), - longDateFormat : { - LT: 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd D. MMMM YYYY H:mm' - }, - calendar : { - sameDay: '[dnes o] LT', - nextDay: '[zajtra o] LT', - nextWeek: function () { - switch (this.day()) { - case 0: - return '[v nedeľu o] LT'; - case 1: - case 2: - return '[v] dddd [o] LT'; - case 3: - return '[v stredu o] LT'; - case 4: - return '[vo štvrtok o] LT'; - case 5: - return '[v piatok o] LT'; - case 6: - return '[v sobotu o] LT'; - } - }, - lastDay: '[včera o] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[minulú nedeľu o] LT'; - case 1: - case 2: - return '[minulý] dddd [o] LT'; - case 3: - return '[minulú stredu o] LT'; - case 4: - case 5: - return '[minulý] dddd [o] LT'; - case 6: - return '[minulú sobotu o] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'za %s', - past : 'pred %s', - s : sk__translate, - m : sk__translate, - mm : sk__translate, - h : sk__translate, - hh : sk__translate, - d : sk__translate, - dd : sk__translate, - M : sk__translate, - MM : sk__translate, - y : sk__translate, - yy : sk__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : slovenian (sl) - //! author : Robert Sedovšek : https://github.com/sedovsek - - function sl__processRelativeTime(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - switch (key) { - case 's': - return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; - case 'm': - return withoutSuffix ? 'ena minuta' : 'eno minuto'; - case 'mm': - if (number === 1) { - result += withoutSuffix ? 'minuta' : 'minuto'; - } else if (number === 2) { - result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; - } else if (number < 5) { - result += withoutSuffix || isFuture ? 'minute' : 'minutami'; - } else { - result += withoutSuffix || isFuture ? 'minut' : 'minutami'; - } - return result; - case 'h': - return withoutSuffix ? 'ena ura' : 'eno uro'; - case 'hh': - if (number === 1) { - result += withoutSuffix ? 'ura' : 'uro'; - } else if (number === 2) { - result += withoutSuffix || isFuture ? 'uri' : 'urama'; - } else if (number < 5) { - result += withoutSuffix || isFuture ? 'ure' : 'urami'; - } else { - result += withoutSuffix || isFuture ? 'ur' : 'urami'; - } - return result; - case 'd': - return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; - case 'dd': - if (number === 1) { - result += withoutSuffix || isFuture ? 'dan' : 'dnem'; - } else if (number === 2) { - result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; - } else { - result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; - } - return result; - case 'M': - return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; - case 'MM': - if (number === 1) { - result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; - } else if (number === 2) { - result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; - } else if (number < 5) { - result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; - } else { - result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; - } - return result; - case 'y': - return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; - case 'yy': - if (number === 1) { - result += withoutSuffix || isFuture ? 'leto' : 'letom'; - } else if (number === 2) { - result += withoutSuffix || isFuture ? 'leti' : 'letoma'; - } else if (number < 5) { - result += withoutSuffix || isFuture ? 'leta' : 'leti'; - } else { - result += withoutSuffix || isFuture ? 'let' : 'leti'; - } - return result; - } - } - - var sl = moment__default.defineLocale('sl', { - months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), - monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), - weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), - weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD. MM. YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd, D. MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[danes ob] LT', - nextDay : '[jutri ob] LT', - - nextWeek : function () { - switch (this.day()) { - case 0: - return '[v] [nedeljo] [ob] LT'; - case 3: - return '[v] [sredo] [ob] LT'; - case 6: - return '[v] [soboto] [ob] LT'; - case 1: - case 2: - case 4: - case 5: - return '[v] dddd [ob] LT'; - } - }, - lastDay : '[včeraj ob] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - return '[prejšnjo] [nedeljo] [ob] LT'; - case 3: - return '[prejšnjo] [sredo] [ob] LT'; - case 6: - return '[prejšnjo] [soboto] [ob] LT'; - case 1: - case 2: - case 4: - case 5: - return '[prejšnji] dddd [ob] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'čez %s', - past : 'pred %s', - s : sl__processRelativeTime, - m : sl__processRelativeTime, - mm : sl__processRelativeTime, - h : sl__processRelativeTime, - hh : sl__processRelativeTime, - d : sl__processRelativeTime, - dd : sl__processRelativeTime, - M : sl__processRelativeTime, - MM : sl__processRelativeTime, - y : sl__processRelativeTime, - yy : sl__processRelativeTime - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Albanian (sq) - //! author : Flakërim Ismani : https://github.com/flakerimi - //! author: Menelion Elensúle: https://github.com/Oire (tests) - //! author : Oerd Cukalla : https://github.com/oerd (fixes) - - var sq = moment__default.defineLocale('sq', { - months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), - monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), - weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), - weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), - weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), - weekdaysParseExact : true, - meridiemParse: /PD|MD/, - isPM: function (input) { - return input.charAt(0) === 'M'; - }, - meridiem : function (hours, minutes, isLower) { - return hours < 12 ? 'PD' : 'MD'; - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Sot në] LT', - nextDay : '[Nesër në] LT', - nextWeek : 'dddd [në] LT', - lastDay : '[Dje në] LT', - lastWeek : 'dddd [e kaluar në] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'në %s', - past : '%s më parë', - s : 'disa sekonda', - m : 'një minutë', - mm : '%d minuta', - h : 'një orë', - hh : '%d orë', - d : 'një ditë', - dd : '%d ditë', - M : 'një muaj', - MM : '%d muaj', - y : 'një vit', - yy : '%d vite' - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Serbian-cyrillic (sr-cyrl) - //! author : Milan Janačković : https://github.com/milan-j - - var sr_cyrl__translator = { - words: { //Different grammatical cases - m: ['један минут', 'једне минуте'], - mm: ['минут', 'минуте', 'минута'], - h: ['један сат', 'једног сата'], - hh: ['сат', 'сата', 'сати'], - dd: ['дан', 'дана', 'дана'], - MM: ['месец', 'месеца', 'месеци'], - yy: ['година', 'године', 'година'] - }, - correctGrammaticalCase: function (number, wordKey) { - return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); - }, - translate: function (number, withoutSuffix, key) { - var wordKey = sr_cyrl__translator.words[key]; - if (key.length === 1) { - return withoutSuffix ? wordKey[0] : wordKey[1]; - } else { - return number + ' ' + sr_cyrl__translator.correctGrammaticalCase(number, wordKey); - } - } - }; - - var sr_cyrl = moment__default.defineLocale('sr-cyrl', { - months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), - monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), - monthsParseExact: true, - weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), - weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), - weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), - weekdaysParseExact : true, - longDateFormat: { - LT: 'H:mm', - LTS : 'H:mm:ss', - L: 'DD. MM. YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm', - LLLL: 'dddd, D. MMMM YYYY H:mm' - }, - calendar: { - sameDay: '[данас у] LT', - nextDay: '[сутра у] LT', - nextWeek: function () { - switch (this.day()) { - case 0: - return '[у] [недељу] [у] LT'; - case 3: - return '[у] [среду] [у] LT'; - case 6: - return '[у] [суботу] [у] LT'; - case 1: - case 2: - case 4: - case 5: - return '[у] dddd [у] LT'; - } - }, - lastDay : '[јуче у] LT', - lastWeek : function () { - var lastWeekDays = [ - '[прошле] [недеље] [у] LT', - '[прошлог] [понедељка] [у] LT', - '[прошлог] [уторка] [у] LT', - '[прошле] [среде] [у] LT', - '[прошлог] [четвртка] [у] LT', - '[прошлог] [петка] [у] LT', - '[прошле] [суботе] [у] LT' - ]; - return lastWeekDays[this.day()]; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'за %s', - past : 'пре %s', - s : 'неколико секунди', - m : sr_cyrl__translator.translate, - mm : sr_cyrl__translator.translate, - h : sr_cyrl__translator.translate, - hh : sr_cyrl__translator.translate, - d : 'дан', - dd : sr_cyrl__translator.translate, - M : 'месец', - MM : sr_cyrl__translator.translate, - y : 'годину', - yy : sr_cyrl__translator.translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Serbian-latin (sr) - //! author : Milan Janačković : https://github.com/milan-j - - var sr__translator = { - words: { //Different grammatical cases - m: ['jedan minut', 'jedne minute'], - mm: ['minut', 'minute', 'minuta'], - h: ['jedan sat', 'jednog sata'], - hh: ['sat', 'sata', 'sati'], - dd: ['dan', 'dana', 'dana'], - MM: ['mesec', 'meseca', 'meseci'], - yy: ['godina', 'godine', 'godina'] - }, - correctGrammaticalCase: function (number, wordKey) { - return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); - }, - translate: function (number, withoutSuffix, key) { - var wordKey = sr__translator.words[key]; - if (key.length === 1) { - return withoutSuffix ? wordKey[0] : wordKey[1]; - } else { - return number + ' ' + sr__translator.correctGrammaticalCase(number, wordKey); - } - } - }; - - var sr = moment__default.defineLocale('sr', { - months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), - monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), - weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), - weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), - weekdaysParseExact : true, - longDateFormat: { - LT: 'H:mm', - LTS : 'H:mm:ss', - L: 'DD. MM. YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm', - LLLL: 'dddd, D. MMMM YYYY H:mm' - }, - calendar: { - sameDay: '[danas u] LT', - nextDay: '[sutra u] LT', - nextWeek: function () { - switch (this.day()) { - case 0: - return '[u] [nedelju] [u] LT'; - case 3: - return '[u] [sredu] [u] LT'; - case 6: - return '[u] [subotu] [u] LT'; - case 1: - case 2: - case 4: - case 5: - return '[u] dddd [u] LT'; - } - }, - lastDay : '[juče u] LT', - lastWeek : function () { - var lastWeekDays = [ - '[prošle] [nedelje] [u] LT', - '[prošlog] [ponedeljka] [u] LT', - '[prošlog] [utorka] [u] LT', - '[prošle] [srede] [u] LT', - '[prošlog] [četvrtka] [u] LT', - '[prošlog] [petka] [u] LT', - '[prošle] [subote] [u] LT' - ]; - return lastWeekDays[this.day()]; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'za %s', - past : 'pre %s', - s : 'nekoliko sekundi', - m : sr__translator.translate, - mm : sr__translator.translate, - h : sr__translator.translate, - hh : sr__translator.translate, - d : 'dan', - dd : sr__translator.translate, - M : 'mesec', - MM : sr__translator.translate, - y : 'godinu', - yy : sr__translator.translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : siSwati (ss) - //! author : Nicolai Davies : https://github.com/nicolaidavies - - - var ss = moment__default.defineLocale('ss', { - months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), - monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), - weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), - weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), - weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Namuhla nga] LT', - nextDay : '[Kusasa nga] LT', - nextWeek : 'dddd [nga] LT', - lastDay : '[Itolo nga] LT', - lastWeek : 'dddd [leliphelile] [nga] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'nga %s', - past : 'wenteka nga %s', - s : 'emizuzwana lomcane', - m : 'umzuzu', - mm : '%d emizuzu', - h : 'lihora', - hh : '%d emahora', - d : 'lilanga', - dd : '%d emalanga', - M : 'inyanga', - MM : '%d tinyanga', - y : 'umnyaka', - yy : '%d iminyaka' - }, - meridiemParse: /ekuseni|emini|entsambama|ebusuku/, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'ekuseni'; - } else if (hours < 15) { - return 'emini'; - } else if (hours < 19) { - return 'entsambama'; - } else { - return 'ebusuku'; - } - }, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'ekuseni') { - return hour; - } else if (meridiem === 'emini') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { - if (hour === 0) { - return 0; - } - return hour + 12; - } - }, - ordinalParse: /\d{1,2}/, - ordinal : '%d', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : swedish (sv) - //! author : Jens Alm : https://github.com/ulmus - - var sv = moment__default.defineLocale('sv', { - months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), - weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), - weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [kl.] HH:mm', - LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd D MMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Idag] LT', - nextDay: '[Imorgon] LT', - lastDay: '[Igår] LT', - nextWeek: '[På] dddd LT', - lastWeek: '[I] dddd[s] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : 'för %s sedan', - s : 'några sekunder', - m : 'en minut', - mm : '%d minuter', - h : 'en timme', - hh : '%d timmar', - d : 'en dag', - dd : '%d dagar', - M : 'en månad', - MM : '%d månader', - y : 'ett år', - yy : '%d år' - }, - ordinalParse: /\d{1,2}(e|a)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'e' : - (b === 1) ? 'a' : - (b === 2) ? 'a' : - (b === 3) ? 'e' : 'e'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : swahili (sw) - //! author : Fahad Kassim : https://github.com/fadsel - - var sw = moment__default.defineLocale('sw', { - months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), - weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), - weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[leo saa] LT', - nextDay : '[kesho saa] LT', - nextWeek : '[wiki ijayo] dddd [saat] LT', - lastDay : '[jana] LT', - lastWeek : '[wiki iliyopita] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s baadaye', - past : 'tokea %s', - s : 'hivi punde', - m : 'dakika moja', - mm : 'dakika %d', - h : 'saa limoja', - hh : 'masaa %d', - d : 'siku moja', - dd : 'masiku %d', - M : 'mwezi mmoja', - MM : 'miezi %d', - y : 'mwaka mmoja', - yy : 'miaka %d' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : tamil (ta) - //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 - - var ta__symbolMap = { - '1': '௧', - '2': '௨', - '3': '௩', - '4': '௪', - '5': '௫', - '6': '௬', - '7': '௭', - '8': '௮', - '9': '௯', - '0': '௦' - }, ta__numberMap = { - '௧': '1', - '௨': '2', - '௩': '3', - '௪': '4', - '௫': '5', - '௬': '6', - '௭': '7', - '௮': '8', - '௯': '9', - '௦': '0' - }; - - var ta = moment__default.defineLocale('ta', { - months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), - monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), - weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), - weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), - weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, HH:mm', - LLLL : 'dddd, D MMMM YYYY, HH:mm' - }, - calendar : { - sameDay : '[இன்று] LT', - nextDay : '[நாளை] LT', - nextWeek : 'dddd, LT', - lastDay : '[நேற்று] LT', - lastWeek : '[கடந்த வாரம்] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s இல்', - past : '%s முன்', - s : 'ஒரு சில விநாடிகள்', - m : 'ஒரு நிமிடம்', - mm : '%d நிமிடங்கள்', - h : 'ஒரு மணி நேரம்', - hh : '%d மணி நேரம்', - d : 'ஒரு நாள்', - dd : '%d நாட்கள்', - M : 'ஒரு மாதம்', - MM : '%d மாதங்கள்', - y : 'ஒரு வருடம்', - yy : '%d ஆண்டுகள்' - }, - ordinalParse: /\d{1,2}வது/, - ordinal : function (number) { - return number + 'வது'; - }, - preparse: function (string) { - return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { - return ta__numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return ta__symbolMap[match]; - }); - }, - // refer http://ta.wikipedia.org/s/1er1 - meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, - meridiem : function (hour, minute, isLower) { - if (hour < 2) { - return ' யாமம்'; - } else if (hour < 6) { - return ' வைகறை'; // வைகறை - } else if (hour < 10) { - return ' காலை'; // காலை - } else if (hour < 14) { - return ' நண்பகல்'; // நண்பகல் - } else if (hour < 18) { - return ' எற்பாடு'; // எற்பாடு - } else if (hour < 22) { - return ' மாலை'; // மாலை - } else { - return ' யாமம்'; - } - }, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'யாமம்') { - return hour < 2 ? hour : hour + 12; - } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { - return hour; - } else if (meridiem === 'நண்பகல்') { - return hour >= 10 ? hour : hour + 12; - } else { - return hour + 12; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : telugu (te) - //! author : Krishna Chaitanya Thota : https://github.com/kcthota - - var te = moment__default.defineLocale('te', { - months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), - monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), - monthsParseExact : true, - weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), - weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), - weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm', - LLLL : 'dddd, D MMMM YYYY, A h:mm' - }, - calendar : { - sameDay : '[నేడు] LT', - nextDay : '[రేపు] LT', - nextWeek : 'dddd, LT', - lastDay : '[నిన్న] LT', - lastWeek : '[గత] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s లో', - past : '%s క్రితం', - s : 'కొన్ని క్షణాలు', - m : 'ఒక నిమిషం', - mm : '%d నిమిషాలు', - h : 'ఒక గంట', - hh : '%d గంటలు', - d : 'ఒక రోజు', - dd : '%d రోజులు', - M : 'ఒక నెల', - MM : '%d నెలలు', - y : 'ఒక సంవత్సరం', - yy : '%d సంవత్సరాలు' - }, - ordinalParse : /\d{1,2}వ/, - ordinal : '%dవ', - meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'రాత్రి') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'ఉదయం') { - return hour; - } else if (meridiem === 'మధ్యాహ్నం') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'సాయంత్రం') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'రాత్రి'; - } else if (hour < 10) { - return 'ఉదయం'; - } else if (hour < 17) { - return 'మధ్యాహ్నం'; - } else if (hour < 20) { - return 'సాయంత్రం'; - } else { - return 'రాత్రి'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : thai (th) - //! author : Kridsada Thanabulpong : https://github.com/sirn - - var th = moment__default.defineLocale('th', { - months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), - monthsShort : 'มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา'.split('_'), - monthsParseExact: true, - weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), - weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference - weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H นาฬิกา m นาที', - LTS : 'H นาฬิกา m นาที s วินาที', - L : 'YYYY/MM/DD', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY เวลา H นาฬิกา m นาที', - LLLL : 'วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที' - }, - meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, - isPM: function (input) { - return input === 'หลังเที่ยง'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ก่อนเที่ยง'; - } else { - return 'หลังเที่ยง'; - } - }, - calendar : { - sameDay : '[วันนี้ เวลา] LT', - nextDay : '[พรุ่งนี้ เวลา] LT', - nextWeek : 'dddd[หน้า เวลา] LT', - lastDay : '[เมื่อวานนี้ เวลา] LT', - lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'อีก %s', - past : '%sที่แล้ว', - s : 'ไม่กี่วินาที', - m : '1 นาที', - mm : '%d นาที', - h : '1 ชั่วโมง', - hh : '%d ชั่วโมง', - d : '1 วัน', - dd : '%d วัน', - M : '1 เดือน', - MM : '%d เดือน', - y : '1 ปี', - yy : '%d ปี' - } - }); - - //! moment.js locale configuration - //! locale : Tagalog/Filipino (tl-ph) - //! author : Dan Hagman - - var tl_ph = moment__default.defineLocale('tl-ph', { - months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), - monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), - weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), - weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), - weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'MM/D/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY HH:mm', - LLLL : 'dddd, MMMM DD, YYYY HH:mm' - }, - calendar : { - sameDay: '[Ngayon sa] LT', - nextDay: '[Bukas sa] LT', - nextWeek: 'dddd [sa] LT', - lastDay: '[Kahapon sa] LT', - lastWeek: 'dddd [huling linggo] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'sa loob ng %s', - past : '%s ang nakalipas', - s : 'ilang segundo', - m : 'isang minuto', - mm : '%d minuto', - h : 'isang oras', - hh : '%d oras', - d : 'isang araw', - dd : '%d araw', - M : 'isang buwan', - MM : '%d buwan', - y : 'isang taon', - yy : '%d taon' - }, - ordinalParse: /\d{1,2}/, - ordinal : function (number) { - return number; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Klingon (tlh) - //! author : Dominika Kruk : https://github.com/amaranthrose - - var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); - - function translateFuture(output) { - var time = output; - time = (output.indexOf('jaj') !== -1) ? - time.slice(0, -3) + 'leS' : - (output.indexOf('jar') !== -1) ? - time.slice(0, -3) + 'waQ' : - (output.indexOf('DIS') !== -1) ? - time.slice(0, -3) + 'nem' : - time + ' pIq'; - return time; - } - - function translatePast(output) { - var time = output; - time = (output.indexOf('jaj') !== -1) ? - time.slice(0, -3) + 'Hu’' : - (output.indexOf('jar') !== -1) ? - time.slice(0, -3) + 'wen' : - (output.indexOf('DIS') !== -1) ? - time.slice(0, -3) + 'ben' : - time + ' ret'; - return time; - } - - function tlh__translate(number, withoutSuffix, string, isFuture) { - var numberNoun = numberAsNoun(number); - switch (string) { - case 'mm': - return numberNoun + ' tup'; - case 'hh': - return numberNoun + ' rep'; - case 'dd': - return numberNoun + ' jaj'; - case 'MM': - return numberNoun + ' jar'; - case 'yy': - return numberNoun + ' DIS'; - } - } - - function numberAsNoun(number) { - var hundred = Math.floor((number % 1000) / 100), - ten = Math.floor((number % 100) / 10), - one = number % 10, - word = ''; - if (hundred > 0) { - word += numbersNouns[hundred] + 'vatlh'; - } - if (ten > 0) { - word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; - } - if (one > 0) { - word += ((word !== '') ? ' ' : '') + numbersNouns[one]; - } - return (word === '') ? 'pagh' : word; - } - - var tlh = moment__default.defineLocale('tlh', { - months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), - monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), - monthsParseExact : true, - weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[DaHjaj] LT', - nextDay: '[wa’leS] LT', - nextWeek: 'LLL', - lastDay: '[wa’Hu’] LT', - lastWeek: 'LLL', - sameElse: 'L' - }, - relativeTime : { - future : translateFuture, - past : translatePast, - s : 'puS lup', - m : 'wa’ tup', - mm : tlh__translate, - h : 'wa’ rep', - hh : tlh__translate, - d : 'wa’ jaj', - dd : tlh__translate, - M : 'wa’ jar', - MM : tlh__translate, - y : 'wa’ DIS', - yy : tlh__translate - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : turkish (tr) - //! authors : Erhan Gundogan : https://github.com/erhangundogan, - //! Burak Yiğit Kaya: https://github.com/BYK - - var tr__suffixes = { - 1: '\'inci', - 5: '\'inci', - 8: '\'inci', - 70: '\'inci', - 80: '\'inci', - 2: '\'nci', - 7: '\'nci', - 20: '\'nci', - 50: '\'nci', - 3: '\'üncü', - 4: '\'üncü', - 100: '\'üncü', - 6: '\'ncı', - 9: '\'uncu', - 10: '\'uncu', - 30: '\'uncu', - 60: '\'ıncı', - 90: '\'ıncı' - }; - - var tr = moment__default.defineLocale('tr', { - months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), - monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), - weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), - weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), - weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[bugün saat] LT', - nextDay : '[yarın saat] LT', - nextWeek : '[haftaya] dddd [saat] LT', - lastDay : '[dün] LT', - lastWeek : '[geçen hafta] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s sonra', - past : '%s önce', - s : 'birkaç saniye', - m : 'bir dakika', - mm : '%d dakika', - h : 'bir saat', - hh : '%d saat', - d : 'bir gün', - dd : '%d gün', - M : 'bir ay', - MM : '%d ay', - y : 'bir yıl', - yy : '%d yıl' - }, - ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, - ordinal : function (number) { - if (number === 0) { // special case for zero - return number + '\'ıncı'; - } - var a = number % 10, - b = number % 100 - a, - c = number >= 100 ? 100 : null; - return number + (tr__suffixes[a] || tr__suffixes[b] || tr__suffixes[c]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : talossan (tzl) - //! author : Robin van der Vliet : https://github.com/robin0van0der0v with the help of Iustì Canun - - - // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. - // This is currently too difficult (maybe even impossible) to add. - var tzl = moment__default.defineLocale('tzl', { - months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), - monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), - weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), - weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), - weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM [dallas] YYYY', - LLL : 'D. MMMM [dallas] YYYY HH.mm', - LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' - }, - meridiemParse: /d\'o|d\'a/i, - isPM : function (input) { - return 'd\'o' === input.toLowerCase(); - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'd\'o' : 'D\'O'; - } else { - return isLower ? 'd\'a' : 'D\'A'; - } - }, - calendar : { - sameDay : '[oxhi à] LT', - nextDay : '[demà à] LT', - nextWeek : 'dddd [à] LT', - lastDay : '[ieiri à] LT', - lastWeek : '[sür el] dddd [lasteu à] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'osprei %s', - past : 'ja%s', - s : tzl__processRelativeTime, - m : tzl__processRelativeTime, - mm : tzl__processRelativeTime, - h : tzl__processRelativeTime, - hh : tzl__processRelativeTime, - d : tzl__processRelativeTime, - dd : tzl__processRelativeTime, - M : tzl__processRelativeTime, - MM : tzl__processRelativeTime, - y : tzl__processRelativeTime, - yy : tzl__processRelativeTime - }, - ordinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - function tzl__processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 's': ['viensas secunds', '\'iensas secunds'], - 'm': ['\'n míut', '\'iens míut'], - 'mm': [number + ' míuts', '' + number + ' míuts'], - 'h': ['\'n þora', '\'iensa þora'], - 'hh': [number + ' þoras', '' + number + ' þoras'], - 'd': ['\'n ziua', '\'iensa ziua'], - 'dd': [number + ' ziuas', '' + number + ' ziuas'], - 'M': ['\'n mes', '\'iens mes'], - 'MM': [number + ' mesen', '' + number + ' mesen'], - 'y': ['\'n ar', '\'iens ar'], - 'yy': [number + ' ars', '' + number + ' ars'] - }; - return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); - } - - //! moment.js locale configuration - //! locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn) - //! author : Abdel Said : https://github.com/abdelsaid - - var tzm_latn = moment__default.defineLocale('tzm-latn', { - months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), - monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), - weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[asdkh g] LT', - nextDay: '[aska g] LT', - nextWeek: 'dddd [g] LT', - lastDay: '[assant g] LT', - lastWeek: 'dddd [g] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'dadkh s yan %s', - past : 'yan %s', - s : 'imik', - m : 'minuḍ', - mm : '%d minuḍ', - h : 'saɛa', - hh : '%d tassaɛin', - d : 'ass', - dd : '%d ossan', - M : 'ayowr', - MM : '%d iyyirn', - y : 'asgas', - yy : '%d isgasn' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : Morocco Central Atlas Tamaziɣt (tzm) - //! author : Abdel Said : https://github.com/abdelsaid - - var tzm = moment__default.defineLocale('tzm', { - months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), - monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), - weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', - nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', - nextWeek: 'dddd [ⴴ] LT', - lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', - lastWeek: 'dddd [ⴴ] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', - past : 'ⵢⴰⵏ %s', - s : 'ⵉⵎⵉⴽ', - m : 'ⵎⵉⵏⵓⴺ', - mm : '%d ⵎⵉⵏⵓⴺ', - h : 'ⵙⴰⵄⴰ', - hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', - d : 'ⴰⵙⵙ', - dd : '%d oⵙⵙⴰⵏ', - M : 'ⴰⵢoⵓⵔ', - MM : '%d ⵉⵢⵢⵉⵔⵏ', - y : 'ⴰⵙⴳⴰⵙ', - yy : '%d ⵉⵙⴳⴰⵙⵏ' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : ukrainian (uk) - //! author : zemlanin : https://github.com/zemlanin - //! Author : Menelion Elensúle : https://github.com/Oire - - function uk__plural(word, num) { - var forms = word.split('_'); - return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); - } - function uk__relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', - 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', - 'dd': 'день_дні_днів', - 'MM': 'місяць_місяці_місяців', - 'yy': 'рік_роки_років' - }; - if (key === 'm') { - return withoutSuffix ? 'хвилина' : 'хвилину'; - } - else if (key === 'h') { - return withoutSuffix ? 'година' : 'годину'; - } - else { - return number + ' ' + uk__plural(format[key], +number); - } - } - function weekdaysCaseReplace(m, format) { - var weekdays = { - 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), - 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), - 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') - }, - nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? - 'accusative' : - ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? - 'genitive' : - 'nominative'); - return weekdays[nounCase][m.day()]; - } - function processHoursFunction(str) { - return function () { - return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; - }; - } - - var uk = moment__default.defineLocale('uk', { - months : { - 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), - 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') - }, - monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), - weekdays : weekdaysCaseReplace, - weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY р.', - LLL : 'D MMMM YYYY р., HH:mm', - LLLL : 'dddd, D MMMM YYYY р., HH:mm' - }, - calendar : { - sameDay: processHoursFunction('[Сьогодні '), - nextDay: processHoursFunction('[Завтра '), - lastDay: processHoursFunction('[Вчора '), - nextWeek: processHoursFunction('[У] dddd ['), - lastWeek: function () { - switch (this.day()) { - case 0: - case 3: - case 5: - case 6: - return processHoursFunction('[Минулої] dddd [').call(this); - case 1: - case 2: - case 4: - return processHoursFunction('[Минулого] dddd [').call(this); - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'за %s', - past : '%s тому', - s : 'декілька секунд', - m : uk__relativeTimeWithPlural, - mm : uk__relativeTimeWithPlural, - h : 'годину', - hh : uk__relativeTimeWithPlural, - d : 'день', - dd : uk__relativeTimeWithPlural, - M : 'місяць', - MM : uk__relativeTimeWithPlural, - y : 'рік', - yy : uk__relativeTimeWithPlural - }, - // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason - meridiemParse: /ночі|ранку|дня|вечора/, - isPM: function (input) { - return /^(дня|вечора)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ночі'; - } else if (hour < 12) { - return 'ранку'; - } else if (hour < 17) { - return 'дня'; - } else { - return 'вечора'; - } - }, - ordinalParse: /\d{1,2}-(й|го)/, - ordinal: function (number, period) { - switch (period) { - case 'M': - case 'd': - case 'DDD': - case 'w': - case 'W': - return number + '-й'; - case 'D': - return number + '-го'; - default: - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : uzbek (uz) - //! author : Sardor Muminov : https://github.com/muminoff - - var uz = moment__default.defineLocale('uz', { - months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), - monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), - weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), - weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), - weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'D MMMM YYYY, dddd HH:mm' - }, - calendar : { - sameDay : '[Бугун соат] LT [да]', - nextDay : '[Эртага] LT [да]', - nextWeek : 'dddd [куни соат] LT [да]', - lastDay : '[Кеча соат] LT [да]', - lastWeek : '[Утган] dddd [куни соат] LT [да]', - sameElse : 'L' - }, - relativeTime : { - future : 'Якин %s ичида', - past : 'Бир неча %s олдин', - s : 'фурсат', - m : 'бир дакика', - mm : '%d дакика', - h : 'бир соат', - hh : '%d соат', - d : 'бир кун', - dd : '%d кун', - M : 'бир ой', - MM : '%d ой', - y : 'бир йил', - yy : '%d йил' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : vietnamese (vi) - //! author : Bang Nguyen : https://github.com/bangnk - - var vi = moment__default.defineLocale('vi', { - months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), - monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), - monthsParseExact : true, - weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), - weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), - weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), - weekdaysParseExact : true, - meridiemParse: /sa|ch/i, - isPM : function (input) { - return /^ch$/i.test(input); - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower ? 'sa' : 'SA'; - } else { - return isLower ? 'ch' : 'CH'; - } - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM [năm] YYYY', - LLL : 'D MMMM [năm] YYYY HH:mm', - LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', - l : 'DD/M/YYYY', - ll : 'D MMM YYYY', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd, D MMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Hôm nay lúc] LT', - nextDay: '[Ngày mai lúc] LT', - nextWeek: 'dddd [tuần tới lúc] LT', - lastDay: '[Hôm qua lúc] LT', - lastWeek: 'dddd [tuần rồi lúc] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s tới', - past : '%s trước', - s : 'vài giây', - m : 'một phút', - mm : '%d phút', - h : 'một giờ', - hh : '%d giờ', - d : 'một ngày', - dd : '%d ngày', - M : 'một tháng', - MM : '%d tháng', - y : 'một năm', - yy : '%d năm' - }, - ordinalParse: /\d{1,2}/, - ordinal : function (number) { - return number; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : pseudo (x-pseudo) - //! author : Andrew Hood : https://github.com/andrewhood125 - - var x_pseudo = moment__default.defineLocale('x-pseudo', { - months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), - monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), - monthsParseExact : true, - weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), - weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), - weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[T~ódá~ý át] LT', - nextDay : '[T~ómó~rró~w át] LT', - nextWeek : 'dddd [át] LT', - lastDay : '[Ý~ést~érdá~ý át] LT', - lastWeek : '[L~ást] dddd [át] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'í~ñ %s', - past : '%s á~gó', - s : 'á ~féw ~sécó~ñds', - m : 'á ~míñ~úté', - mm : '%d m~íñú~tés', - h : 'á~ñ hó~úr', - hh : '%d h~óúrs', - d : 'á ~dáý', - dd : '%d d~áýs', - M : 'á ~móñ~th', - MM : '%d m~óñt~hs', - y : 'á ~ýéár', - yy : '%d ý~éárs' - }, - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : chinese (zh-cn) - //! author : suupic : https://github.com/suupic - //! author : Zeno Zeng : https://github.com/zenozeng - - var zh_cn = moment__default.defineLocale('zh-cn', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), - weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), - weekdaysMin : '日_一_二_三_四_五_六'.split('_'), - longDateFormat : { - LT : 'Ah点mm分', - LTS : 'Ah点m分s秒', - L : 'YYYY-MM-DD', - LL : 'YYYY年MMMD日', - LLL : 'YYYY年MMMD日Ah点mm分', - LLLL : 'YYYY年MMMD日ddddAh点mm分', - l : 'YYYY-MM-DD', - ll : 'YYYY年MMMD日', - lll : 'YYYY年MMMD日Ah点mm分', - llll : 'YYYY年MMMD日ddddAh点mm分' - }, - meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === '凌晨' || meridiem === '早上' || - meridiem === '上午') { - return hour; - } else if (meridiem === '下午' || meridiem === '晚上') { - return hour + 12; - } else { - // '中午' - return hour >= 11 ? hour : hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - var hm = hour * 100 + minute; - if (hm < 600) { - return '凌晨'; - } else if (hm < 900) { - return '早上'; - } else if (hm < 1130) { - return '上午'; - } else if (hm < 1230) { - return '中午'; - } else if (hm < 1800) { - return '下午'; - } else { - return '晚上'; - } - }, - calendar : { - sameDay : function () { - return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT'; - }, - nextDay : function () { - return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT'; - }, - lastDay : function () { - return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT'; - }, - nextWeek : function () { - var startOfWeek, prefix; - startOfWeek = moment__default().startOf('week'); - prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]'; - return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; - }, - lastWeek : function () { - var startOfWeek, prefix; - startOfWeek = moment__default().startOf('week'); - prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; - return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; - }, - sameElse : 'LL' - }, - ordinalParse: /\d{1,2}(日|月|周)/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + '日'; - case 'M': - return number + '月'; - case 'w': - case 'W': - return number + '周'; - default: - return number; - } - }, - relativeTime : { - future : '%s内', - past : '%s前', - s : '几秒', - m : '1 分钟', - mm : '%d 分钟', - h : '1 小时', - hh : '%d 小时', - d : '1 天', - dd : '%d 天', - M : '1 个月', - MM : '%d 个月', - y : '1 年', - yy : '%d 年' - }, - week : { - // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - //! moment.js locale configuration - //! locale : traditional chinese (zh-tw) - //! author : Ben : https://github.com/ben-lin - - var zh_tw = moment__default.defineLocale('zh-tw', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), - weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), - weekdaysMin : '日_一_二_三_四_五_六'.split('_'), - longDateFormat : { - LT : 'Ah點mm分', - LTS : 'Ah點m分s秒', - L : 'YYYY年MMMD日', - LL : 'YYYY年MMMD日', - LLL : 'YYYY年MMMD日Ah點mm分', - LLLL : 'YYYY年MMMD日ddddAh點mm分', - l : 'YYYY年MMMD日', - ll : 'YYYY年MMMD日', - lll : 'YYYY年MMMD日Ah點mm分', - llll : 'YYYY年MMMD日ddddAh點mm分' - }, - meridiemParse: /早上|上午|中午|下午|晚上/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === '早上' || meridiem === '上午') { - return hour; - } else if (meridiem === '中午') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === '下午' || meridiem === '晚上') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - var hm = hour * 100 + minute; - if (hm < 900) { - return '早上'; - } else if (hm < 1130) { - return '上午'; - } else if (hm < 1230) { - return '中午'; - } else if (hm < 1800) { - return '下午'; - } else { - return '晚上'; - } - }, - calendar : { - sameDay : '[今天]LT', - nextDay : '[明天]LT', - nextWeek : '[下]ddddLT', - lastDay : '[昨天]LT', - lastWeek : '[上]ddddLT', - sameElse : 'L' - }, - ordinalParse: /\d{1,2}(日|月|週)/, - ordinal : function (number, period) { - switch (period) { - case 'd' : - case 'D' : - case 'DDD' : - return number + '日'; - case 'M' : - return number + '月'; - case 'w' : - case 'W' : - return number + '週'; - default : - return number; - } - }, - relativeTime : { - future : '%s內', - past : '%s前', - s : '幾秒', - m : '1分鐘', - mm : '%d分鐘', - h : '1小時', - hh : '%d小時', - d : '1天', - dd : '%d天', - M : '1個月', - MM : '%d個月', - y : '1年', - yy : '%d年' - } - }); - - var moment_with_locales = moment__default; - moment_with_locales.locale('en'); - - return moment_with_locales; - -})); \ No newline at end of file diff --git a/vendor/moment/moment-with-locales.min.js b/vendor/moment/moment-with-locales.min.js deleted file mode 100644 index d2dc0eff..00000000 --- a/vendor/moment/moment-with-locales.min.js +++ /dev/null @@ -1,75 +0,0 @@ -!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Wd.apply(null,arguments)}function b(a){Wd=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in Xd)d=Xd[c],e=b[d],m(e)||(a[d]=e);return a}function o(b){n(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),Yd===!1&&(Yd=!0,a.updateOffset(this),Yd=!1)}function p(a){return a instanceof o||null!=a&&null!=a._isAMomentObject}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=q(b)),c}function s(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&r(a[d])!==r(b[d]))&&g++;return g+f}function t(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function u(a,b){var c=!0;return g(function(){return c&&(t(a+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),c=!1),b.apply(this,arguments)},b)}function v(a,b){Zd[a]||(t(b),Zd[a]=!0)}function w(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function x(a){return"[object Object]"===Object.prototype.toString.call(a)}function y(a){var b,c;for(c in a)b=a[c],w(b)?this[c]=b:this["_"+c]=b;this._config=a,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function z(a,b){var c,d=g({},a);for(c in b)f(b,c)&&(x(a[c])&&x(b[c])?(d[c]={},g(d[c],a[c]),g(d[c],b[c])):null!=b[c]?d[c]=b[c]:delete d[c]);return d}function A(a){null!=a&&this.set(a)}function B(a){return a?a.toLowerCase().replace("_","-"):a}function C(a){for(var b,c,d,e,f=0;f0;){if(d=D(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&s(e,c,!0)>=b-1)break;b--}f++}return null}function D(a){var b=null;if(!_d[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=$d._abbr,require("./locale/"+a),E(b)}catch(c){}return _d[a]}function E(a,b){var c;return a&&(c=m(b)?H(a):F(a,b),c&&($d=c)),$d._abbr}function F(a,b){return null!==b?(b.abbr=a,null!=_d[a]?(v("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),b=z(_d[a]._config,b)):null!=b.parentLocale&&(null!=_d[b.parentLocale]?b=z(_d[b.parentLocale]._config,b):v("parentLocaleUndefined","specified parentLocale is not defined yet")),_d[a]=new A(b),E(a),_d[a]):(delete _d[a],null)}function G(a,b){if(null!=b){var c;null!=_d[a]&&(b=z(_d[a]._config,b)),c=new A(b),c.parentLocale=_d[a],_d[a]=c,E(a)}else null!=_d[a]&&(null!=_d[a].parentLocale?_d[a]=_d[a].parentLocale:null!=_d[a]&&delete _d[a]);return _d[a]}function H(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return $d;if(!c(a)){if(b=D(a))return b;a=[a]}return C(a)}function I(){return Object.keys(_d)}function J(a,b){var c=a.toLowerCase();ae[c]=ae[c+"s"]=ae[b]=a}function K(a){return"string"==typeof a?ae[a]||ae[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)f(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(b,c){return function(d){return null!=d?(O(this,b,d),a.updateOffset(this,c),this):N(this,b)}}function N(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function O(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function P(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=K(a),w(this[a]))return this[a](b);return this}function Q(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function R(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(ee[a]=e),b&&(ee[b[0]]=function(){return Q(e.apply(this,arguments),b[1],b[2])}),c&&(ee[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function S(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function T(a){var b,c,d=a.match(be);for(b=0,c=d.length;c>b;b++)ee[d[b]]?d[b]=ee[d[b]]:d[b]=S(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function U(a,b){return a.isValid()?(b=V(b,a.localeData()),de[b]=de[b]||T(b),de[b](a)):a.localeData().invalidDate()}function V(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(ce.lastIndex=0;d>=0&&ce.test(a);)a=a.replace(ce,c),ce.lastIndex=0,d-=1;return a}function W(a,b,c){we[a]=w(b)?b:function(a,d){return a&&c?c:b}}function X(a,b){return f(we,a)?we[a](b._strict,b._locale):new RegExp(Y(a))}function Y(a){return Z(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function Z(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=r(a)}),c=0;cd;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function fa(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=r(b);else if(b=a.localeData().monthsParse(b),"number"!=typeof b)return a;return c=Math.min(a.date(),ba(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ga(b){return null!=b?(fa(this,b),a.updateOffset(this,!0),this):N(this,"Month")}function ha(){return ba(this.year(),this.month())}function ia(a){return this._monthsParseExact?(f(this,"_monthsRegex")||ka.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex}function ja(a){return this._monthsParseExact?(f(this,"_monthsRegex")||ka.call(this),a?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex}function ka(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=h([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=Z(d[b]),e[b]=Z(e[b]),f[b]=Z(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")$","i")}function la(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[ze]<0||c[ze]>11?ze:c[Ae]<1||c[Ae]>ba(c[ye],c[ze])?Ae:c[Be]<0||c[Be]>24||24===c[Be]&&(0!==c[Ce]||0!==c[De]||0!==c[Ee])?Be:c[Ce]<0||c[Ce]>59?Ce:c[De]<0||c[De]>59?De:c[Ee]<0||c[Ee]>999?Ee:-1,j(a)._overflowDayOfYear&&(ye>b||b>Ae)&&(b=Ae),j(a)._overflowWeeks&&-1===b&&(b=Fe),j(a)._overflowWeekday&&-1===b&&(b=Ge),j(a).overflow=b),a}function ma(a){var b,c,d,e,f,g,h=a._i,i=Me.exec(h)||Ne.exec(h);if(i){for(j(a).iso=!0,b=0,c=Pe.length;c>b;b++)if(Pe[b][1].exec(i[1])){e=Pe[b][0],d=Pe[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Qe.length;c>b;b++)if(Qe[b][1].exec(i[3])){f=(i[2]||" ")+Qe[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Oe.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),Ba(a)}else a._isValid=!1}function na(b){var c=Re.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(ma(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function oa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function pa(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function qa(a){return ra(a)?366:365}function ra(a){return a%4===0&&a%100!==0||a%400===0}function sa(){return ra(this.year())}function ta(a,b,c){var d=7+b-c,e=(7+pa(a,0,d).getUTCDay()-b)%7;return-e+d-1}function ua(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ta(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=qa(f)+j):j>qa(a)?(f=a+1,g=j-qa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function va(a,b,c){var d,e,f=ta(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+wa(e,b,c)):g>wa(a.year(),b,c)?(d=g-wa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function wa(a,b,c){var d=ta(a,b,c),e=ta(a+1,b,c);return(qa(a)-d+e)/7}function xa(a,b,c){return null!=a?a:null!=b?b:c}function ya(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function za(a){var b,c,d,e,f=[];if(!a._d){for(d=ya(a),a._w&&null==a._a[Ae]&&null==a._a[ze]&&Aa(a),a._dayOfYear&&(e=xa(a._a[ye],d[ye]),a._dayOfYear>qa(e)&&(j(a)._overflowDayOfYear=!0),c=pa(e,0,a._dayOfYear),a._a[ze]=c.getUTCMonth(),a._a[Ae]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[Be]&&0===a._a[Ce]&&0===a._a[De]&&0===a._a[Ee]&&(a._nextDay=!0,a._a[Be]=0),a._d=(a._useUTC?pa:oa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Be]=24)}}function Aa(a){var b,c,d,e,f,g,h,i;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=xa(b.GG,a._a[ye],va(Ja(),1,4).year),d=xa(b.W,1),e=xa(b.E,1),(1>e||e>7)&&(i=!0)):(f=a._locale._week.dow,g=a._locale._week.doy,c=xa(b.gg,a._a[ye],va(Ja(),f,g).year),d=xa(b.w,1),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f),1>d||d>wa(c,f,g)?j(a)._overflowWeeks=!0:null!=i?j(a)._overflowWeekday=!0:(h=ua(c,d,e,f,g),a._a[ye]=h.year,a._dayOfYear=h.dayOfYear)}function Ba(b){if(b._f===a.ISO_8601)return void ma(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=V(b._f,b._locale).match(be)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),ee[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),aa(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[Be]<=12&&b._a[Be]>0&&(j(b).bigHour=void 0),b._a[Be]=Ca(b._locale,b._a[Be],b._meridiem),za(b),la(b)}function Ca(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function Da(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function Ea(a){if(!a._d){var b=L(a._i);a._a=e([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),za(a)}}function Fa(a){var b=new o(la(Ga(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function Ga(a){var b=a._i,e=a._f;return a._locale=a._locale||H(a._l),null===b||void 0===e&&""===b?l({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),p(b)?new o(la(b)):(c(e)?Da(a):e?Ba(a):d(b)?a._d=b:Ha(a),k(a)||(a._d=null),a))}function Ha(b){var f=b._i;void 0===f?b._d=new Date(a.now()):d(f)?b._d=new Date(+f):"string"==typeof f?na(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),za(b)):"object"==typeof f?Ea(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ia(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,Fa(f)}function Ja(a,b,c,d){return Ia(a,b,c,d,!1)}function Ka(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Ja();for(d=b[0],e=1;ea&&(a=-a,c="-"),c+Q(~~(a/60),2)+b+Q(~~a%60,2)})}function Qa(a,b){var c=(b||"").match(a)||[],d=c[c.length-1]||[],e=(d+"").match(We)||["-",0,0],f=+(60*e[1])+r(e[2]);return"+"===e[0]?f:-f}function Ra(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(p(b)||d(b)?+b:+Ja(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Ja(b).local()}function Sa(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ta(b,c){var d,e=this._offset||0;return this.isValid()?null!=b?("string"==typeof b?b=Qa(te,b):Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Sa(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?ib(this,cb(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Sa(this):null!=b?this:NaN}function Ua(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Va(a){return this.utcOffset(0,a)}function Wa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Sa(this),"m")),this}function Xa(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Qa(se,this._i)),this}function Ya(a){return this.isValid()?(a=a?Ja(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function Za(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function $a(){if(!m(this._isDSTShifted))return this._isDSTShifted;var a={};if(n(a,this),a=Ga(a),a._a){var b=a._isUTC?h(a._a):Ja(a._a);this._isDSTShifted=this.isValid()&&s(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function _a(){return this.isValid()?!this._isUTC:!1}function ab(){return this.isValid()?this._isUTC:!1}function bb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function cb(a,b){var c,d,e,g=a,h=null;return Oa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=Xe.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:r(h[Ae])*c,h:r(h[Be])*c,m:r(h[Ce])*c,s:r(h[De])*c,ms:r(h[Ee])*c}):(h=Ye.exec(a))?(c="-"===h[1]?-1:1,g={y:db(h[2],c),M:db(h[3],c),w:db(h[4],c),d:db(h[5],c),h:db(h[6],c),m:db(h[7],c),s:db(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=fb(Ja(g.from),Ja(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Na(g),Oa(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function db(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function eb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function fb(a,b){var c;return a.isValid()&&b.isValid()?(b=Ra(b,a),a.isBefore(b)?c=eb(a,b):(c=eb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function gb(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function hb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(v(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=cb(c,d),ib(this,e,a),this}}function ib(b,c,d,e){var f=c._milliseconds,g=gb(c._days),h=gb(c._months);b.isValid()&&(e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&O(b,"Date",N(b,"Date")+g*d),h&&fa(b,N(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function jb(a,b){var c=a||Ja(),d=Ra(c,this).startOf("day"),e=this.diff(d,"days",!0),f=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse",g=b&&(w(b[f])?b[f]():b[f]);return this.format(g||this.localeData().calendar(f,this,Ja(c)))}function kb(){return new o(this)}function lb(a,b){var c=p(a)?a:Ja(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?+this>+c:+c<+this.clone().startOf(b)):!1}function mb(a,b){var c=p(a)?a:Ja(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?+c>+this:+this.clone().endOf(b)<+c):!1}function nb(a,b,c){return this.isAfter(a,c)&&this.isBefore(b,c)}function ob(a,b){var c,d=p(a)?a:Ja(a);return this.isValid()&&d.isValid()?(b=K(b||"millisecond"),"millisecond"===b?+this===+d:(c=+d,+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))):!1}function pb(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function qb(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function rb(a,b,c){var d,e,f,g;return this.isValid()?(d=Ra(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=sb(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:q(g)):NaN):NaN}function sb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function tb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ub(){var a=this.clone().utc();return 0f&&(b=f),Ub.call(this,a,b,c,d,e))}function Ub(a,b,c,d,e){var f=ua(a,b,c,d,e),g=pa(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Vb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Wb(a){return va(a,this._week.dow,this._week.doy).week}function Xb(){return this._week.dow}function Yb(){return this._week.doy}function Zb(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function $b(a){var b=va(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function _b(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function ac(a,b){return c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]}function bc(a){return this._weekdaysShort[a.day()]}function cc(a){return this._weekdaysMin[a.day()]}function dc(a,b,c){var d,e,f;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=Ja([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function ec(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=_b(a,this.localeData()),this.add(a-b,"d")):b}function fc(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function gc(a){return this.isValid()?null==a?this.day()||7:this.day(this.day()%7?a:a-7):null!=a?this:NaN}function hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function ic(){return this.hours()%12||12}function jc(a,b){R(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function kc(a,b){return b._meridiemParse}function lc(a){return"p"===(a+"").toLowerCase().charAt(0)}function mc(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function nc(a,b){b[Ee]=r(1e3*("0."+a))}function oc(){return this._isUTC?"UTC":""}function pc(){return this._isUTC?"Coordinated Universal Time":""}function qc(a){return Ja(1e3*a)}function rc(){return Ja.apply(null,arguments).parseZone()}function sc(a,b,c){var d=this._calendar[a];return w(d)?d.call(b,c):d}function tc(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function uc(){return this._invalidDate}function vc(a){return this._ordinal.replace("%d",a)}function wc(a){return a}function xc(a,b,c,d){var e=this._relativeTime[c];return w(e)?e(a,b,c,d):e.replace(/%d/i,a)}function yc(a,b){var c=this._relativeTime[a>0?"future":"past"];return w(c)?c(b):c.replace(/%s/i,b)}function zc(a,b,c,d){var e=H(),f=h().set(d,b);return e[c](f,a)}function Ac(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return zc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=zc(a,f,c,e);return g}function Bc(a,b){return Ac(a,b,"months",12,"month")}function Cc(a,b){return Ac(a,b,"monthsShort",12,"month")}function Dc(a,b){return Ac(a,b,"weekdays",7,"day")}function Ec(a,b){return Ac(a,b,"weekdaysShort",7,"day")}function Fc(a,b){return Ac(a,b,"weekdaysMin",7,"day")}function Gc(){var a=this._data;return this._milliseconds=vf(this._milliseconds),this._days=vf(this._days),this._months=vf(this._months),a.milliseconds=vf(a.milliseconds),a.seconds=vf(a.seconds),a.minutes=vf(a.minutes),a.hours=vf(a.hours),a.months=vf(a.months),a.years=vf(a.years),this}function Hc(a,b,c,d){var e=cb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function Ic(a,b){return Hc(this,a,b,1)}function Jc(a,b){return Hc(this,a,b,-1)}function Kc(a){return 0>a?Math.floor(a):Math.ceil(a)}function Lc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*Kc(Nc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=q(f/1e3),i.seconds=a%60,b=q(a/60),i.minutes=b%60,c=q(b/60),i.hours=c%24,g+=q(c/24),e=q(Mc(g)),h+=e,g-=Kc(Nc(e)),d=q(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function Mc(a){return 4800*a/146097}function Nc(a){return 146097*a/4800}function Oc(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+Mc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(Nc(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function Pc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*r(this._months/12)}function Qc(a){return function(){return this.as(a)}}function Rc(a){return a=K(a),this[a+"s"]()}function Sc(a){return function(){return this._data[a]}}function Tc(){return q(this.days()/7)}function Uc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function Vc(a,b,c){var d=cb(a).abs(),e=Lf(d.as("s")),f=Lf(d.as("m")),g=Lf(d.as("h")),h=Lf(d.as("d")),i=Lf(d.as("M")),j=Lf(d.as("y")),k=e=f&&["m"]||f=g&&["h"]||g=h&&["d"]||h=i&&["M"]||i=j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,Uc.apply(null,k)}function Wc(a,b){return void 0===Mf[a]?!1:void 0===b?Mf[a]:(Mf[a]=b,!0)}function Xc(a){var b=this.localeData(),c=Vc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Yc(){var a,b,c,d=Nf(this._milliseconds)/1e3,e=Nf(this._days),f=Nf(this._months);a=q(d/60),b=q(a/60),d%=60,a%=60,c=q(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"} -//! moment.js locale configuration -//! locale : belarusian (be) -//! author : Dmitry Demidov : https://github.com/demidov91 -//! author: Praleska: http://praleska.pro/ -//! Author : Menelion Elensúle : https://github.com/Oire -function Zc(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function $c(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+Zc(d[c],+a)} -//! moment.js locale configuration -//! locale : breton (br) -//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou -function _c(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+cd(d[c],a)}function ad(a){switch(bd(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function bd(a){return a>9?bd(a%10):a}function cd(a,b){return 2===b?dd(a):a}function dd(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)} -//! moment.js locale configuration -//! locale : bosnian (bs) -//! author : Nedim Cholich : https://github.com/frontyard -//! based on (hr) translation by Bojan Marković -function ed(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function fd(a){return a>1&&5>a&&1!==~~(a/10)}function gd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekund":"pár sekundami";case"m":return b?"minuta":d?"minutu":"minutou";case"mm":return b||d?e+(fd(a)?"minuty":"minut"):e+"minutami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(fd(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":return b||d?"den":"dnem";case"dd":return b||d?e+(fd(a)?"dny":"dní"):e+"dny";break;case"M":return b||d?"měsíc":"měsícem";case"MM":return b||d?e+(fd(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":return b||d?"rok":"rokem";case"yy":return b||d?e+(fd(a)?"roky":"let"):e+"lety"}} -//! moment.js locale configuration -//! locale : austrian german (de-at) -//! author : lluchs : https://github.com/lluchs -//! author: Menelion Elensúle: https://github.com/Oire -//! author : Martin Groller : https://github.com/MadMG -//! author : Mikolaj Dadela : https://github.com/mik01aj -function hd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} -//! moment.js locale configuration -//! locale : german (de) -//! author : lluchs : https://github.com/lluchs -//! author: Menelion Elensúle: https://github.com/Oire -//! author : Mikolaj Dadela : https://github.com/mik01aj -function id(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} -//! moment.js locale configuration -//! locale : estonian (et) -//! author : Henry Kehlmann : https://github.com/madhenry -//! improvements : Illimar Tambek : https://github.com/ragulka -function jd(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function kd(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=ld(a,d)+" "+e}function ld(a,b){return 10>a?b?kg[a]:jg[a]:a} -//! moment.js locale configuration -//! locale : hrvatski (hr) -//! author : Bojan Marković : https://github.com/bmarkovic -function md(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function nd(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function od(a){return(a?"":"[múlt] ")+"["+ug[this.day()]+"] LT[-kor]"} -//! moment.js locale configuration -//! locale : icelandic (is) -//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik -function pd(a){return a%100===11?!0:a%10===1?!1:!0}function qd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return pd(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return pd(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return pd(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return pd(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return pd(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}} -//! moment.js locale configuration -//! locale : Luxembourgish (lb) -//! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz -function rd(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function sd(a){var b=a.substr(0,a.indexOf(" "));return ud(b)?"a "+a:"an "+a}function td(a){var b=a.substr(0,a.indexOf(" "));return ud(b)?"viru "+a:"virun "+a}function ud(a){if(a=parseInt(a,10),isNaN(a))return!1;if(0>a)return!0;if(10>a)return a>=4&&7>=a?!0:!1;if(100>a){var b=a%10,c=a/10;return ud(0===b?c:b)}if(1e4>a){for(;a>=10;)a/=10;return ud(a)}return a/=1e3,ud(a)}function vd(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function wd(a,b,c,d){return b?yd(c)[0]:d?yd(c)[1]:yd(c)[2]}function xd(a){return a%10===0||a>10&&20>a}function yd(a){return wg[a].split("_")}function zd(a,b,c,d){var e=a+" ";return 1===a?e+wd(a,b,c[0],d):b?e+(xd(a)?yd(c)[1]:yd(c)[0]):d?e+yd(c)[1]:e+(xd(a)?yd(c)[1]:yd(c)[2])}function Ad(a,b,c){return c?b%10===1&&11!==b?a[2]:a[3]:b%10===1&&11!==b?a[0]:a[1]}function Bd(a,b,c){return a+" "+Ad(xg[c],a,b)}function Cd(a,b,c){return Ad(xg[c],a,b)}function Dd(a,b){return b?"dažas sekundes":"dažām sekundēm"}function Ed(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function Fd(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function Gd(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(Fd(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(Fd(a)?"godziny":"godzin");case"MM":return d+(Fd(a)?"miesiące":"miesięcy");case"yy":return d+(Fd(a)?"lata":"lat")}} -//! moment.js locale configuration -//! locale : romanian (ro) -//! author : Vlad Gurdiga : https://github.com/gurdiga -//! author : Valentin Agachi : https://github.com/avaly -function Hd(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]} -//! moment.js locale configuration -//! locale : russian (ru) -//! author : Viktorminator : https://github.com/Viktorminator -//! Author : Menelion Elensúle : https://github.com/Oire -//! author : Коренберг Марк : https://github.com/socketpair -function Id(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function Jd(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+Id(d[c],+a)}function Kd(a){return a>1&&5>a}function Ld(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekúnd":"pár sekundami";case"m":return b?"minúta":d?"minútu":"minútou";case"mm":return b||d?e+(Kd(a)?"minúty":"minút"):e+"minútami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(Kd(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":return b||d?"deň":"dňom";case"dd":return b||d?e+(Kd(a)?"dni":"dní"):e+"dňami";break;case"M":return b||d?"mesiac":"mesiacom";case"MM":return b||d?e+(Kd(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":return b||d?"rok":"rokom";case"yy":return b||d?e+(Kd(a)?"roky":"rokov"):e+"rokmi"}} -//! moment.js locale configuration -//! locale : slovenian (sl) -//! author : Robert Sedovšek : https://github.com/sedovsek -function Md(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":5>a?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":5>a?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":5>a?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":5>a?b||d?"leta":"leti":b||d?"let":"leti"}}function Nd(a){var b=a;return b=-1!==a.indexOf("jaj")?b.slice(0,-3)+"leS":-1!==a.indexOf("jar")?b.slice(0,-3)+"waQ":-1!==a.indexOf("DIS")?b.slice(0,-3)+"nem":b+" pIq"}function Od(a){var b=a;return b=-1!==a.indexOf("jaj")?b.slice(0,-3)+"Hu’":-1!==a.indexOf("jar")?b.slice(0,-3)+"wen":-1!==a.indexOf("DIS")?b.slice(0,-3)+"ben":b+" ret"}function Pd(a,b,c,d){var e=Qd(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function Qd(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=Sg[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+Sg[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+Sg[d]),""===e?"pagh":e}function Rd(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]} -//! moment.js locale configuration -//! locale : ukrainian (uk) -//! author : zemlanin : https://github.com/zemlanin -//! Author : Menelion Elensúle : https://github.com/Oire -function Sd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function Td(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+Sd(d[c],+a)}function Ud(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function Vd(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var Wd,Xd=a.momentProperties=[],Yd=!1,Zd={};a.suppressDeprecationWarnings=!1;var $d,_d={},ae={},be=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ce=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,de={},ee={},fe=/\d/,ge=/\d\d/,he=/\d{3}/,ie=/\d{4}/,je=/[+-]?\d{6}/,ke=/\d\d?/,le=/\d\d\d\d?/,me=/\d\d\d\d\d\d?/,ne=/\d{1,3}/,oe=/\d{1,4}/,pe=/[+-]?\d{1,6}/,qe=/\d+/,re=/[+-]?\d+/,se=/Z|[+-]\d\d:?\d\d/gi,te=/Z|[+-]\d\d(?::?\d\d)?/gi,ue=/[+-]?\d+(\.\d{1,3})?/,ve=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,we={},xe={},ye=0,ze=1,Ae=2,Be=3,Ce=4,De=5,Ee=6,Fe=7,Ge=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),R("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),W("M",ke),W("MM",ke,ge),W("MMM",function(a,b){return b.monthsShortRegex(a)}),W("MMMM",function(a,b){return b.monthsRegex(a)}),$(["M","MM"],function(a,b){b[ze]=r(a)-1}),$(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[ze]=e:j(c).invalidMonth=a});var He=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ie="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Je="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ke=ve,Le=ve,Me=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Ne=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Oe=/Z|[+-]\d\d(?::?\d\d)?/,Pe=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Qe=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Re=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=u("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),R("Y",0,0,function(){var a=this.year();return 9999>=a?""+a:"+"+a}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),J("year","y"),W("Y",re),W("YY",ke,ge),W("YYYY",oe,ie),W("YYYYY",pe,je),W("YYYYYY",pe,je),$(["YYYYY","YYYYYY"],ye),$("YYYY",function(b,c){c[ye]=2===b.length?a.parseTwoDigitYear(b):r(b)}),$("YY",function(b,c){c[ye]=a.parseTwoDigitYear(b)}),$("Y",function(a,b){b[ye]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return r(a)+(r(a)>68?1900:2e3)};var Se=M("FullYear",!1);a.ISO_8601=function(){};var Te=u("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Ja.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:l()}),Ue=u("moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Ja.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:l()}),Ve=function(){return Date.now?Date.now():+new Date};Pa("Z",":"),Pa("ZZ",""),W("Z",te),W("ZZ",te),$(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Qa(te,a)});var We=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var Xe=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,Ye=/^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/;cb.fn=Na.prototype;var Ze=hb(1,"add"),$e=hb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var _e=u("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ob("gggg","weekYear"),Ob("ggggg","weekYear"),Ob("GGGG","isoWeekYear"),Ob("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),W("G",re),W("g",re),W("GG",ke,ge),W("gg",ke,ge),W("GGGG",oe,ie),W("gggg",oe,ie),W("GGGGG",pe,je),W("ggggg",pe,je),_(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=r(a)}),_(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),R("Q",0,"Qo","quarter"),J("quarter","Q"),W("Q",fe),$("Q",function(a,b){b[ze]=3*(r(a)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),W("w",ke),W("ww",ke,ge),W("W",ke),W("WW",ke,ge),_(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=r(a)});var af={dow:0,doy:6};R("D",["DD",2],"Do","date"),J("date","D"),W("D",ke),W("DD",ke,ge),W("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),$(["D","DD"],Ae),$("Do",function(a,b){b[Ae]=r(a.match(ke)[0],10)});var bf=M("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),R("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),R("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),W("d",ke),W("e",ke),W("E",ke),W("dd",ve),W("ddd",ve),W("dddd",ve),_(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:j(c).invalidWeekday=a}),_(["d","e","E"],function(a,b,c,d){b[d]=r(a)});var cf="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),df="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ef="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),W("DDD",ne),W("DDDD",he),$(["DDD","DDDD"],function(a,b,c){c._dayOfYear=r(a)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,ic),R("hmm",0,0,function(){return""+ic.apply(this)+Q(this.minutes(),2)}),R("hmmss",0,0,function(){return""+ic.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),jc("a",!0),jc("A",!1),J("hour","h"),W("a",kc),W("A",kc),W("H",ke),W("h",ke),W("HH",ke,ge),W("hh",ke,ge),W("hmm",le),W("hmmss",me),W("Hmm",le),W("Hmmss",me),$(["H","HH"],Be),$(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),$(["h","hh"],function(a,b,c){b[Be]=r(a),j(c).bigHour=!0}),$("hmm",function(a,b,c){var d=a.length-2;b[Be]=r(a.substr(0,d)),b[Ce]=r(a.substr(d)),j(c).bigHour=!0}),$("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[Be]=r(a.substr(0,d)),b[Ce]=r(a.substr(d,2)),b[De]=r(a.substr(e)),j(c).bigHour=!0}),$("Hmm",function(a,b,c){var d=a.length-2;b[Be]=r(a.substr(0,d)),b[Ce]=r(a.substr(d))}),$("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[Be]=r(a.substr(0,d)),b[Ce]=r(a.substr(d,2)),b[De]=r(a.substr(e))});var ff=/[ap]\.?m?\.?/i,gf=M("Hours",!0);R("m",["mm",2],0,"minute"),J("minute","m"),W("m",ke),W("mm",ke,ge),$(["m","mm"],Ce);var hf=M("Minutes",!1);R("s",["ss",2],0,"second"),J("second","s"),W("s",ke),W("ss",ke,ge),$(["s","ss"],De);var jf=M("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),W("S",ne,fe),W("SS",ne,ge),W("SSS",ne,he);var kf;for(kf="SSSS";kf.length<=9;kf+="S")W(kf,qe);for(kf="S";kf.length<=9;kf+="S")$(kf,nc);var lf=M("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var mf=o.prototype;mf.add=Ze,mf.calendar=jb,mf.clone=kb,mf.diff=rb,mf.endOf=Db,mf.format=vb,mf.from=wb,mf.fromNow=xb,mf.to=yb,mf.toNow=zb,mf.get=P,mf.invalidAt=Mb,mf.isAfter=lb,mf.isBefore=mb,mf.isBetween=nb,mf.isSame=ob,mf.isSameOrAfter=pb,mf.isSameOrBefore=qb,mf.isValid=Kb,mf.lang=_e,mf.locale=Ab,mf.localeData=Bb,mf.max=Ue,mf.min=Te,mf.parsingFlags=Lb,mf.set=P,mf.startOf=Cb,mf.subtract=$e,mf.toArray=Hb,mf.toObject=Ib,mf.toDate=Gb,mf.toISOString=ub,mf.toJSON=Jb,mf.toString=tb,mf.unix=Fb,mf.valueOf=Eb,mf.creationData=Nb,mf.year=Se,mf.isLeapYear=sa,mf.weekYear=Pb,mf.isoWeekYear=Qb,mf.quarter=mf.quarters=Vb,mf.month=ga,mf.daysInMonth=ha,mf.week=mf.weeks=Zb,mf.isoWeek=mf.isoWeeks=$b,mf.weeksInYear=Sb,mf.isoWeeksInYear=Rb,mf.date=bf,mf.day=mf.days=ec,mf.weekday=fc,mf.isoWeekday=gc,mf.dayOfYear=hc,mf.hour=mf.hours=gf,mf.minute=mf.minutes=hf,mf.second=mf.seconds=jf,mf.millisecond=mf.milliseconds=lf,mf.utcOffset=Ta,mf.utc=Va,mf.local=Wa,mf.parseZone=Xa,mf.hasAlignedHourOffset=Ya,mf.isDST=Za,mf.isDSTShifted=$a,mf.isLocal=_a,mf.isUtcOffset=ab,mf.isUtc=bb,mf.isUTC=bb,mf.zoneAbbr=oc,mf.zoneName=pc,mf.dates=u("dates accessor is deprecated. Use date instead.",bf),mf.months=u("months accessor is deprecated. Use month instead",ga),mf.years=u("years accessor is deprecated. Use year instead",Se),mf.zone=u("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ua);var nf=mf,of={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},pf={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},qf="Invalid date",rf="%d",sf=/\d{1,2}/,tf={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},uf=A.prototype;uf._calendar=of,uf.calendar=sc,uf._longDateFormat=pf,uf.longDateFormat=tc,uf._invalidDate=qf,uf.invalidDate=uc,uf._ordinal=rf,uf.ordinal=vc,uf._ordinalParse=sf,uf.preparse=wc,uf.postformat=wc,uf._relativeTime=tf,uf.relativeTime=xc,uf.pastFuture=yc,uf.set=y,uf.months=ca,uf._months=Ie,uf.monthsShort=da,uf._monthsShort=Je,uf.monthsParse=ea,uf._monthsRegex=Le,uf.monthsRegex=ja,uf._monthsShortRegex=Ke,uf.monthsShortRegex=ia,uf.week=Wb,uf._week=af,uf.firstDayOfYear=Yb,uf.firstDayOfWeek=Xb,uf.weekdays=ac,uf._weekdays=cf,uf.weekdaysMin=cc,uf._weekdaysMin=ef,uf.weekdaysShort=bc,uf._weekdaysShort=df,uf.weekdaysParse=dc,uf.isPM=lc,uf._meridiemParse=ff,uf.meridiem=mc,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===r(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=u("moment.lang is deprecated. Use moment.locale instead.",E),a.langData=u("moment.langData is deprecated. Use moment.localeData instead.",H);var vf=Math.abs,wf=Qc("ms"),xf=Qc("s"),yf=Qc("m"),zf=Qc("h"),Af=Qc("d"),Bf=Qc("w"),Cf=Qc("M"),Df=Qc("y"),Ef=Sc("milliseconds"),Ff=Sc("seconds"),Gf=Sc("minutes"),Hf=Sc("hours"),If=Sc("days"),Jf=Sc("months"),Kf=Sc("years"),Lf=Math.round,Mf={s:45,m:45,h:22,d:26,M:11},Nf=Math.abs,Of=Na.prototype;Of.abs=Gc,Of.add=Ic,Of.subtract=Jc,Of.as=Oc,Of.asMilliseconds=wf,Of.asSeconds=xf,Of.asMinutes=yf,Of.asHours=zf,Of.asDays=Af,Of.asWeeks=Bf,Of.asMonths=Cf,Of.asYears=Df,Of.valueOf=Pc,Of._bubble=Lc,Of.get=Rc,Of.milliseconds=Ef,Of.seconds=Ff,Of.minutes=Gf,Of.hours=Hf,Of.days=If,Of.weeks=Tc,Of.months=Jf,Of.years=Kf,Of.humanize=Xc,Of.toISOString=Yc,Of.toString=Yc,Of.toJSON=Yc,Of.locale=Ab,Of.localeData=Bb,Of.toIsoString=u("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Yc),Of.lang=_e,R("X",0,0,"unix"),R("x",0,0,"valueOf"),W("x",re),W("X",ue),$("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),$("x",function(a,b,c){c._d=new Date(r(a))}), -//! moment.js -//! version : 2.12.0 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -a.version="2.12.0",b(Ja),a.fn=nf,a.min=La,a.max=Ma,a.now=Ve,a.utc=h,a.unix=qc,a.months=Bc,a.isDate=d,a.locale=E,a.invalid=l,a.duration=cb,a.isMoment=p,a.weekdays=Dc,a.parseZone=rc,a.localeData=H,a.isDuration=Oa,a.monthsShort=Cc,a.weekdaysMin=Fc,a.defineLocale=F,a.updateLocale=G,a.locales=I,a.weekdaysShort=Ec,a.normalizeUnits=K,a.relativeTimeThreshold=Wc,a.prototype=nf;var Pf=a,Qf=(Pf.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),Pf.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}}),{1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"}),Rf={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},Sf=(Pf.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Rf[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Qf[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}),Pf.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}}),{1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"}),Tf={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},Uf=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},Vf={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Wf=function(a){return function(b,c,d,e){var f=Uf(b),g=Vf[a][Uf(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Xf=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],Yf=(Pf.defineLocale("ar",{months:Xf,monthsShort:Xf,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Wf("s"),m:Wf("m"),mm:Wf("m"),h:Wf("h"),hh:Wf("h"),d:Wf("d"),dd:Wf("d"),M:Wf("M"),MM:Wf("M"),y:Wf("y"),yy:Wf("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Tf[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Sf[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}),{1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"}),Zf=(Pf.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return 4>a?"gecə":12>a?"səhər":17>a?"gündüz":"axşam"},ordinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Yf[b]||Yf[c]||Yf[d])},week:{dow:1,doy:7}}),Pf.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:$c,mm:$c,h:$c,hh:$c,d:"дзень",dd:$c,M:"месяц",MM:$c,y:"год",yy:$c},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночы":12>a?"раніцы":17>a?"дня":"вечара"},ordinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}}),Pf.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),{1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"}),$f={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},_f=(Pf.defineLocale("bn",{months:"জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্র_শনি".split("_"),weekdaysMin:"রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return $f[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Zf[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&5>a||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"রাত":10>a?"সকাল":17>a?"দুপুর":20>a?"বিকাল":"রাত"},week:{dow:0,doy:6}}),{1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"}),ag={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"},bg=(Pf.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return ag[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return _f[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&5>a||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"མཚན་མོ":10>a?"ཞོགས་ཀས":17>a?"ཉིན་གུང":20>a?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}}),Pf.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:_c,h:"un eur",hh:"%d eur",d:"un devezh",dd:_c,M:"ur miz",MM:_c,y:"ur bloaz",yy:ad},ordinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}}),Pf.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:ed,mm:ed,h:ed,hh:ed,d:"dan",dd:ed,M:"mjesec",MM:ed,y:"godinu",yy:ed},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),Pf.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return("w"===b||"W"===b)&&(c="a"),a+c},week:{dow:1,doy:4}}),"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_")),cg="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),dg=(Pf.defineLocale("cs",{months:bg,monthsShort:cg,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(bg,cg),shortMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(cg),longMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(bg),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:gd,m:gd,mm:gd,h:gd,hh:gd,d:gd,dd:gd,M:gd,MM:gd,y:gd,yy:gd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},ordinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}}),Pf.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}}),Pf.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:hd,mm:"%d Minuten",h:hd,hh:"%d Stunden",d:hd,dd:hd,M:hd,MM:hd,y:hd,yy:hd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:id,mm:"%d Minuten",h:id,hh:"%d Stunden",d:id,dd:id,M:id,MM:id,y:id,yy:id},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"]),eg=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"],fg=(Pf.defineLocale("dv",{months:dg,monthsShort:dg,weekdays:eg,weekdaysShort:eg,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return 12>a?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,doy:12}}),Pf.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return w(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}}),Pf.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),Pf.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Pf.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),Pf.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),Pf.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),Pf.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), -monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-an de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),gg="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),hg=(Pf.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?gg[a.month()]:fg[a.month()]},weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),Pf.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:jd,m:jd,mm:jd,h:jd,hh:jd,d:jd,dd:"%d päeva",M:jd,MM:jd,y:jd,yy:jd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"}),ig={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},jg=(Pf.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return ig[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return hg[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}}),"nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" ")),kg=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",jg[7],jg[8],jg[9]],lg=(Pf.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:kd,m:kd,mm:kd,h:kd,hh:kd,d:kd,dd:kd,M:kd,MM:kd,y:kd,yy:kd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}}),Pf.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,doy:4}}),Pf.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_")),mg="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),ng=(Pf.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?mg[a.month()]:lg[a.month()]},weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"]),og=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],pg=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],qg=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],rg=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],sg=(Pf.defineLocale("gd",{months:ng,monthsShort:og,monthsParseExact:!0,weekdays:pg,weekdaysShort:qg,weekdaysMin:rg,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},ordinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,doy:4}}),Pf.defineLocale("gl",{months:"Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),monthsShort:"Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),weekdays:"Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),weekdaysShort:"Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:7}}),Pf.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return 5>a?"לפנות בוקר":10>a?"בבוקר":12>a?c?'לפנה"צ':"לפני הצהריים":18>a?c?'אחה"צ':"אחרי הצהריים":"בערב"}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),tg={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},ug=(Pf.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return tg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return sg[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?4>a?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}}),Pf.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:md,mm:md,h:md,hh:md,d:"dan",dd:md,M:"mjesec",MM:md,y:"godinu",yy:md},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),"vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ")),vg=(Pf.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return od.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return od.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:nd,m:nd,mm:nd,h:nd,hh:nd,d:nd,dd:nd,M:nd,MM:nd,y:nd,yy:nd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),Pf.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return 4>a?"գիշերվա":12>a?"առավոտվա":17>a?"ցերեկվա":"երեկոյան"},ordinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}}),Pf.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),Pf.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:qd,m:qd,mm:qd,h:"klukkustund",hh:qd,d:qd,dd:qd,M:qd,MM:qd,y:qd,yy:qd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),Pf.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),Pf.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"enjing":15>a?"siyang":19>a?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),Pf.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}}),{0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"}),wg=(Pf.defineLocale("kk",{months:"Қаңтар_Ақпан_Наурыз_Сәуір_Мамыр_Маусым_Шілде_Тамыз_Қыркүйек_Қазан_Қараша_Желтоқсан".split("_"),monthsShort:"Қаң_Ақп_Нау_Сәу_Мам_Мау_Шіл_Там_Қыр_Қаз_Қар_Жел".split("_"),weekdays:"Жексенбі_Дүйсенбі_Сейсенбі_Сәрсенбі_Бейсенбі_Жұма_Сенбі".split("_"),weekdaysShort:"Жек_Дүй_Сей_Сәр_Бей_Жұм_Сен".split("_"),weekdaysMin:"Жк_Дй_Сй_Ср_Бй_Жм_Сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(vg[a]||vg[b]||vg[c])},week:{dow:1,doy:7}}),Pf.defineLocale("km",{months:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}}),Pf.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}}),Pf.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:sd,past:td,s:"e puer Sekonnen",m:rd,mm:"%d Minutten",h:rd,hh:"%d Stonnen",d:rd,dd:"%d Deeg",M:rd,MM:"%d Méint",y:rd,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/, -isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return 12>a?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},ordinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}}),{m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"}),xg=(Pf.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_")},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:vd,m:wd,mm:zd,h:wd,hh:zd,d:wd,dd:zd,M:wd,MM:zd,y:wd,yy:zd},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}}),{m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")}),yg=(Pf.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:Dd,m:Cd,mm:Bd,h:Cd,hh:Bd,d:Cd,dd:Bd,M:Cd,MM:Bd,y:Cd,yy:Bd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=yg.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+yg.correctGrammaticalCase(a,d)}}),zg=(Pf.defineLocale("me",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sri.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:yg.translate,mm:yg.translate,h:yg.translate,hh:yg.translate,d:"dan",dd:yg.translate,M:"mjesec",MM:yg.translate,y:"godinu",yy:yg.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),Pf.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),Pf.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),Ag={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},Bg=(Pf.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:Ed,m:Ed,mm:Ed,h:Ed,hh:Ed,d:Ed,dd:Ed,M:Ed,MM:Ed,y:Ed,yy:Ed},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Ag[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return zg[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?4>a?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}}),Pf.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),Pf.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),{1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"}),Cg={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"},Dg=(Pf.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return Cg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Bg[a]})},week:{dow:1,doy:4}}),Pf.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),Eg={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},Fg=(Pf.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Eg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Dg[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?4>a?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return 3>a?"राति":12>a?"बिहान":16>a?"दिउँसो":20>a?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),Gg="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Hg=(Pf.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Gg[a.month()]:Fg[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),Pf.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"}),Ig={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"},Jg=(Pf.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return Ig[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Hg[a]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?4>a?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"ਰਾਤ":10>a?"ਸਵੇਰ":17>a?"ਦੁਪਹਿਰ":20>a?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}}),"styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_")),Kg="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),Lg=(Pf.defineLocale("pl",{months:function(a,b){return""===b?"("+Kg[a.month()]+"|"+Jg[a.month()]+")":/D MMMM/.test(b)?Kg[a.month()]:Jg[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:Gd,mm:Gd,h:Gd,hh:Gd,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:Gd,y:"rok",yy:Gd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"}),Pf.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),Pf.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:Hd,h:"o oră",hh:Hd,d:"o zi",dd:Hd,M:"o lună",MM:Hd,y:"un an",yy:Hd},week:{dow:1,doy:7}}),[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[й|я]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i]),Mg=(Pf.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_"),standalone:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:Lg,longMonthsParse:Lg,shortMonthsParse:Lg,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:Jd,mm:Jd,h:"час",hh:Jd,d:"день",dd:Jd,M:"месяц",MM:Jd,y:"год",yy:Jd},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}}),Pf.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},ordinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}}),"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_")),Ng="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),Og=(Pf.defineLocale("sk",{months:Mg,monthsShort:Ng,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Ld,m:Ld,mm:Ld,h:Ld,hh:Ld,d:Ld,dd:Ld,M:Ld,MM:Ld,y:Ld,yy:Ld},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:Md,m:Md,mm:Md,h:Md,hh:Md,d:Md,dd:Md,M:Md,MM:Md,y:Md,yy:Md},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),Pf.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return 12>a?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=Og.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Og.correctGrammaticalCase(a,d)}}),Pg=(Pf.defineLocale("sr-cyrl",{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","мар.","апр.","мај","јун","јул","авг.","сеп.","окт.","нов.","дец."],weekdays:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","уто.","сре.","чет.","пет.","суб."],weekdaysMin:["не","по","ут","ср","че","пе","су"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"]; -return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:Og.translate,mm:Og.translate,h:Og.translate,hh:Og.translate,d:"дан",dd:Og.translate,M:"месец",MM:Og.translate,y:"годину",yy:Og.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=Pg.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Pg.correctGrammaticalCase(a,d)}}),Qg=(Pf.defineLocale("sr",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sre.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:Pg.translate,mm:Pg.translate,h:Pg.translate,hh:Pg.translate,d:"dan",dd:Pg.translate,M:"mesec",MM:Pg.translate,y:"godinu",yy:Pg.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),Pf.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}}),Pf.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}}),{1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"}),Rg={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"},Sg=(Pf.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return Rg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Qg[a]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return 2>a?" யாமம்":6>a?" வைகறை":10>a?" காலை":14>a?" நண்பகல்":18>a?" எற்பாடு":22>a?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?2>a?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,doy:6}}),Pf.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},ordinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?4>a?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"రాత్రి":10>a?"ఉదయం":17>a?"మధ్యాహ్నం":20>a?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}}),Pf.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",LTS:"H นาฬิกา m นาที s วินาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H นาฬิกา m นาที",LLLL:"วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}),Pf.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"[Ngayon sa] LT",nextDay:"[Bukas sa] LT",nextWeek:"dddd [sa] LT",lastDay:"[Kahapon sa] LT",lastWeek:"dddd [huling linggo] LT",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),"pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_")),Tg=(Pf.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:Nd,past:Od,s:"puS lup",m:"wa’ tup",mm:Pd,h:"wa’ rep",hh:Pd,d:"wa’ jaj",dd:Pd,M:"wa’ jar",MM:Pd,y:"wa’ DIS",yy:Pd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"}),Ug=(Pf.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Tg[b]||Tg[c]||Tg[d])},week:{dow:1,doy:7}}),Pf.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Rd,m:Rd,mm:Rd,h:Rd,hh:Rd,d:Rd,dd:Rd,M:Rd,MM:Rd,y:Rd,yy:Rd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),Pf.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),Pf.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}}),Pf.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:Ud,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:Vd("[Сьогодні "),nextDay:Vd("[Завтра "),lastDay:Vd("[Вчора "),nextWeek:Vd("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return Vd("[Минулої] dddd [").call(this);case 1:case 2:case 4:return Vd("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:Td,mm:Td,h:"годину",hh:Td,d:"день",dd:Td,M:"місяць",MM:Td,y:"рік",yy:Td},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}}),Pf.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),Pf.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),Pf.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var a,b;return a=Pf().startOf("week"),b=this.unix()-a.unix()>=604800?"[下]":"[本]",0===this.minutes()?b+"dddAh点整":b+"dddAh点mm"},lastWeek:function(){var a,b;return a=Pf().startOf("week"),b=this.unix()=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}}),Pf);return Ug.locale("en"),Ug}); \ No newline at end of file diff --git a/vendor/package.json b/vendor/package.json index 36fc84d5..3a360169 100644 --- a/vendor/package.json +++ b/vendor/package.json @@ -1,5 +1,4 @@ { - "name": "magicmirror-vendors", "description": "Package for vendors use by MagicMirror Core.", "repository": { @@ -11,6 +10,9 @@ "url": "https://github.com/MichMich/MagicMirror/issues" }, "dependencies": { - "font-awesome": "^4.7.0" + "font-awesome": "^4.7.0", + "moment": "^2.17.1", + "moment-timezone": "^0.5.11", + "weathericons": "^2.1.0" } } diff --git a/vendor/vendor.js b/vendor/vendor.js index 7583be5a..32eab950 100644 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -8,9 +8,9 @@ */ var vendor = { - 'moment.js' : 'moment/moment-with-locales.js', - 'moment-timezone.js' : 'moment/moment-timezone.js', - 'weather-icons.css': 'weather-icons/css/weather-icons.css', - 'weather-icons-wind.css': 'weather-icons/css/weather-icons-wind.css', + 'moment.js' : 'node_modules/moment/min/moment-with-locales.js', + 'moment-timezone.js' : 'node_modules/moment-timezone/moment-timezone.js', + 'weather-icons.css': 'node_modules/weathericons/css/weather-icons.css', + 'weather-icons-wind.css': 'node_modules/weathericons/css/weather-icons-wind.css', 'font-awesome.css': 'node_modules/font-awesome/css/font-awesome.min.css' }; diff --git a/vendor/weather-icons/css/weather-icons-wind.css b/vendor/weather-icons/css/weather-icons-wind.css deleted file mode 100644 index 4e9096d1..00000000 --- a/vendor/weather-icons/css/weather-icons-wind.css +++ /dev/null @@ -1,5331 +0,0 @@ -@font-face { - font-family: 'weathericons'; - src: url('../font/weathericons-regular-webfont.eot'); - src: url('../font/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../font/weathericons-regular-webfont.woff2') format('woff2'), url('../font/weathericons-regular-webfont.woff') format('woff'), url('../font/weathericons-regular-webfont.ttf') format('truetype'), url('../font/weathericons-regular-webfont.svg#weather_iconsregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.wi { - display: inline-block; - font-family: 'weathericons'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.wi-fw { - text-align: center; - width: 1.4em; -} -.wi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.wi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -.wi-wind:before { - content: "\f0b1"; -} -.wi-wind.towards-0-deg { - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -o-transform: rotate(0deg); - transform: rotate(0deg); -} -.wi-wind.towards-1-deg { - -webkit-transform: rotate(1deg); - -moz-transform: rotate(1deg); - -ms-transform: rotate(1deg); - -o-transform: rotate(1deg); - transform: rotate(1deg); -} -.wi-wind.towards-2-deg { - -webkit-transform: rotate(2deg); - -moz-transform: rotate(2deg); - -ms-transform: rotate(2deg); - -o-transform: rotate(2deg); - transform: rotate(2deg); -} -.wi-wind.towards-3-deg { - -webkit-transform: rotate(3deg); - -moz-transform: rotate(3deg); - -ms-transform: rotate(3deg); - -o-transform: rotate(3deg); - transform: rotate(3deg); -} -.wi-wind.towards-4-deg { - -webkit-transform: rotate(4deg); - -moz-transform: rotate(4deg); - -ms-transform: rotate(4deg); - -o-transform: rotate(4deg); - transform: rotate(4deg); -} -.wi-wind.towards-5-deg { - -webkit-transform: rotate(5deg); - -moz-transform: rotate(5deg); - -ms-transform: rotate(5deg); - -o-transform: rotate(5deg); - transform: rotate(5deg); -} -.wi-wind.towards-6-deg { - -webkit-transform: rotate(6deg); - -moz-transform: rotate(6deg); - -ms-transform: rotate(6deg); - -o-transform: rotate(6deg); - transform: rotate(6deg); -} -.wi-wind.towards-7-deg { - -webkit-transform: rotate(7deg); - -moz-transform: rotate(7deg); - -ms-transform: rotate(7deg); - -o-transform: rotate(7deg); - transform: rotate(7deg); -} -.wi-wind.towards-8-deg { - -webkit-transform: rotate(8deg); - -moz-transform: rotate(8deg); - -ms-transform: rotate(8deg); - -o-transform: rotate(8deg); - transform: rotate(8deg); -} -.wi-wind.towards-9-deg { - -webkit-transform: rotate(9deg); - -moz-transform: rotate(9deg); - -ms-transform: rotate(9deg); - -o-transform: rotate(9deg); - transform: rotate(9deg); -} -.wi-wind.towards-10-deg { - -webkit-transform: rotate(10deg); - -moz-transform: rotate(10deg); - -ms-transform: rotate(10deg); - -o-transform: rotate(10deg); - transform: rotate(10deg); -} -.wi-wind.towards-11-deg { - -webkit-transform: rotate(11deg); - -moz-transform: rotate(11deg); - -ms-transform: rotate(11deg); - -o-transform: rotate(11deg); - transform: rotate(11deg); -} -.wi-wind.towards-12-deg { - -webkit-transform: rotate(12deg); - -moz-transform: rotate(12deg); - -ms-transform: rotate(12deg); - -o-transform: rotate(12deg); - transform: rotate(12deg); -} -.wi-wind.towards-13-deg { - -webkit-transform: rotate(13deg); - -moz-transform: rotate(13deg); - -ms-transform: rotate(13deg); - -o-transform: rotate(13deg); - transform: rotate(13deg); -} -.wi-wind.towards-14-deg { - -webkit-transform: rotate(14deg); - -moz-transform: rotate(14deg); - -ms-transform: rotate(14deg); - -o-transform: rotate(14deg); - transform: rotate(14deg); -} -.wi-wind.towards-15-deg { - -webkit-transform: rotate(15deg); - -moz-transform: rotate(15deg); - -ms-transform: rotate(15deg); - -o-transform: rotate(15deg); - transform: rotate(15deg); -} -.wi-wind.towards-16-deg { - -webkit-transform: rotate(16deg); - -moz-transform: rotate(16deg); - -ms-transform: rotate(16deg); - -o-transform: rotate(16deg); - transform: rotate(16deg); -} -.wi-wind.towards-17-deg { - -webkit-transform: rotate(17deg); - -moz-transform: rotate(17deg); - -ms-transform: rotate(17deg); - -o-transform: rotate(17deg); - transform: rotate(17deg); -} -.wi-wind.towards-18-deg { - -webkit-transform: rotate(18deg); - -moz-transform: rotate(18deg); - -ms-transform: rotate(18deg); - -o-transform: rotate(18deg); - transform: rotate(18deg); -} -.wi-wind.towards-19-deg { - -webkit-transform: rotate(19deg); - -moz-transform: rotate(19deg); - -ms-transform: rotate(19deg); - -o-transform: rotate(19deg); - transform: rotate(19deg); -} -.wi-wind.towards-20-deg { - -webkit-transform: rotate(20deg); - -moz-transform: rotate(20deg); - -ms-transform: rotate(20deg); - -o-transform: rotate(20deg); - transform: rotate(20deg); -} -.wi-wind.towards-21-deg { - -webkit-transform: rotate(21deg); - -moz-transform: rotate(21deg); - -ms-transform: rotate(21deg); - -o-transform: rotate(21deg); - transform: rotate(21deg); -} -.wi-wind.towards-22-deg { - -webkit-transform: rotate(22deg); - -moz-transform: rotate(22deg); - -ms-transform: rotate(22deg); - -o-transform: rotate(22deg); - transform: rotate(22deg); -} -.wi-wind.towards-23-deg { - -webkit-transform: rotate(23deg); - -moz-transform: rotate(23deg); - -ms-transform: rotate(23deg); - -o-transform: rotate(23deg); - transform: rotate(23deg); -} -.wi-wind.towards-24-deg { - -webkit-transform: rotate(24deg); - -moz-transform: rotate(24deg); - -ms-transform: rotate(24deg); - -o-transform: rotate(24deg); - transform: rotate(24deg); -} -.wi-wind.towards-25-deg { - -webkit-transform: rotate(25deg); - -moz-transform: rotate(25deg); - -ms-transform: rotate(25deg); - -o-transform: rotate(25deg); - transform: rotate(25deg); -} -.wi-wind.towards-26-deg { - -webkit-transform: rotate(26deg); - -moz-transform: rotate(26deg); - -ms-transform: rotate(26deg); - -o-transform: rotate(26deg); - transform: rotate(26deg); -} -.wi-wind.towards-27-deg { - -webkit-transform: rotate(27deg); - -moz-transform: rotate(27deg); - -ms-transform: rotate(27deg); - -o-transform: rotate(27deg); - transform: rotate(27deg); -} -.wi-wind.towards-28-deg { - -webkit-transform: rotate(28deg); - -moz-transform: rotate(28deg); - -ms-transform: rotate(28deg); - -o-transform: rotate(28deg); - transform: rotate(28deg); -} -.wi-wind.towards-29-deg { - -webkit-transform: rotate(29deg); - -moz-transform: rotate(29deg); - -ms-transform: rotate(29deg); - -o-transform: rotate(29deg); - transform: rotate(29deg); -} -.wi-wind.towards-30-deg { - -webkit-transform: rotate(30deg); - -moz-transform: rotate(30deg); - -ms-transform: rotate(30deg); - -o-transform: rotate(30deg); - transform: rotate(30deg); -} -.wi-wind.towards-31-deg { - -webkit-transform: rotate(31deg); - -moz-transform: rotate(31deg); - -ms-transform: rotate(31deg); - -o-transform: rotate(31deg); - transform: rotate(31deg); -} -.wi-wind.towards-32-deg { - -webkit-transform: rotate(32deg); - -moz-transform: rotate(32deg); - -ms-transform: rotate(32deg); - -o-transform: rotate(32deg); - transform: rotate(32deg); -} -.wi-wind.towards-33-deg { - -webkit-transform: rotate(33deg); - -moz-transform: rotate(33deg); - -ms-transform: rotate(33deg); - -o-transform: rotate(33deg); - transform: rotate(33deg); -} -.wi-wind.towards-34-deg { - -webkit-transform: rotate(34deg); - -moz-transform: rotate(34deg); - -ms-transform: rotate(34deg); - -o-transform: rotate(34deg); - transform: rotate(34deg); -} -.wi-wind.towards-35-deg { - -webkit-transform: rotate(35deg); - -moz-transform: rotate(35deg); - -ms-transform: rotate(35deg); - -o-transform: rotate(35deg); - transform: rotate(35deg); -} -.wi-wind.towards-36-deg { - -webkit-transform: rotate(36deg); - -moz-transform: rotate(36deg); - -ms-transform: rotate(36deg); - -o-transform: rotate(36deg); - transform: rotate(36deg); -} -.wi-wind.towards-37-deg { - -webkit-transform: rotate(37deg); - -moz-transform: rotate(37deg); - -ms-transform: rotate(37deg); - -o-transform: rotate(37deg); - transform: rotate(37deg); -} -.wi-wind.towards-38-deg { - -webkit-transform: rotate(38deg); - -moz-transform: rotate(38deg); - -ms-transform: rotate(38deg); - -o-transform: rotate(38deg); - transform: rotate(38deg); -} -.wi-wind.towards-39-deg { - -webkit-transform: rotate(39deg); - -moz-transform: rotate(39deg); - -ms-transform: rotate(39deg); - -o-transform: rotate(39deg); - transform: rotate(39deg); -} -.wi-wind.towards-40-deg { - -webkit-transform: rotate(40deg); - -moz-transform: rotate(40deg); - -ms-transform: rotate(40deg); - -o-transform: rotate(40deg); - transform: rotate(40deg); -} -.wi-wind.towards-41-deg { - -webkit-transform: rotate(41deg); - -moz-transform: rotate(41deg); - -ms-transform: rotate(41deg); - -o-transform: rotate(41deg); - transform: rotate(41deg); -} -.wi-wind.towards-42-deg { - -webkit-transform: rotate(42deg); - -moz-transform: rotate(42deg); - -ms-transform: rotate(42deg); - -o-transform: rotate(42deg); - transform: rotate(42deg); -} -.wi-wind.towards-43-deg { - -webkit-transform: rotate(43deg); - -moz-transform: rotate(43deg); - -ms-transform: rotate(43deg); - -o-transform: rotate(43deg); - transform: rotate(43deg); -} -.wi-wind.towards-44-deg { - -webkit-transform: rotate(44deg); - -moz-transform: rotate(44deg); - -ms-transform: rotate(44deg); - -o-transform: rotate(44deg); - transform: rotate(44deg); -} -.wi-wind.towards-45-deg { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.wi-wind.towards-46-deg { - -webkit-transform: rotate(46deg); - -moz-transform: rotate(46deg); - -ms-transform: rotate(46deg); - -o-transform: rotate(46deg); - transform: rotate(46deg); -} -.wi-wind.towards-47-deg { - -webkit-transform: rotate(47deg); - -moz-transform: rotate(47deg); - -ms-transform: rotate(47deg); - -o-transform: rotate(47deg); - transform: rotate(47deg); -} -.wi-wind.towards-48-deg { - -webkit-transform: rotate(48deg); - -moz-transform: rotate(48deg); - -ms-transform: rotate(48deg); - -o-transform: rotate(48deg); - transform: rotate(48deg); -} -.wi-wind.towards-49-deg { - -webkit-transform: rotate(49deg); - -moz-transform: rotate(49deg); - -ms-transform: rotate(49deg); - -o-transform: rotate(49deg); - transform: rotate(49deg); -} -.wi-wind.towards-50-deg { - -webkit-transform: rotate(50deg); - -moz-transform: rotate(50deg); - -ms-transform: rotate(50deg); - -o-transform: rotate(50deg); - transform: rotate(50deg); -} -.wi-wind.towards-51-deg { - -webkit-transform: rotate(51deg); - -moz-transform: rotate(51deg); - -ms-transform: rotate(51deg); - -o-transform: rotate(51deg); - transform: rotate(51deg); -} -.wi-wind.towards-52-deg { - -webkit-transform: rotate(52deg); - -moz-transform: rotate(52deg); - -ms-transform: rotate(52deg); - -o-transform: rotate(52deg); - transform: rotate(52deg); -} -.wi-wind.towards-53-deg { - -webkit-transform: rotate(53deg); - -moz-transform: rotate(53deg); - -ms-transform: rotate(53deg); - -o-transform: rotate(53deg); - transform: rotate(53deg); -} -.wi-wind.towards-54-deg { - -webkit-transform: rotate(54deg); - -moz-transform: rotate(54deg); - -ms-transform: rotate(54deg); - -o-transform: rotate(54deg); - transform: rotate(54deg); -} -.wi-wind.towards-55-deg { - -webkit-transform: rotate(55deg); - -moz-transform: rotate(55deg); - -ms-transform: rotate(55deg); - -o-transform: rotate(55deg); - transform: rotate(55deg); -} -.wi-wind.towards-56-deg { - -webkit-transform: rotate(56deg); - -moz-transform: rotate(56deg); - -ms-transform: rotate(56deg); - -o-transform: rotate(56deg); - transform: rotate(56deg); -} -.wi-wind.towards-57-deg { - -webkit-transform: rotate(57deg); - -moz-transform: rotate(57deg); - -ms-transform: rotate(57deg); - -o-transform: rotate(57deg); - transform: rotate(57deg); -} -.wi-wind.towards-58-deg { - -webkit-transform: rotate(58deg); - -moz-transform: rotate(58deg); - -ms-transform: rotate(58deg); - -o-transform: rotate(58deg); - transform: rotate(58deg); -} -.wi-wind.towards-59-deg { - -webkit-transform: rotate(59deg); - -moz-transform: rotate(59deg); - -ms-transform: rotate(59deg); - -o-transform: rotate(59deg); - transform: rotate(59deg); -} -.wi-wind.towards-60-deg { - -webkit-transform: rotate(60deg); - -moz-transform: rotate(60deg); - -ms-transform: rotate(60deg); - -o-transform: rotate(60deg); - transform: rotate(60deg); -} -.wi-wind.towards-61-deg { - -webkit-transform: rotate(61deg); - -moz-transform: rotate(61deg); - -ms-transform: rotate(61deg); - -o-transform: rotate(61deg); - transform: rotate(61deg); -} -.wi-wind.towards-62-deg { - -webkit-transform: rotate(62deg); - -moz-transform: rotate(62deg); - -ms-transform: rotate(62deg); - -o-transform: rotate(62deg); - transform: rotate(62deg); -} -.wi-wind.towards-63-deg { - -webkit-transform: rotate(63deg); - -moz-transform: rotate(63deg); - -ms-transform: rotate(63deg); - -o-transform: rotate(63deg); - transform: rotate(63deg); -} -.wi-wind.towards-64-deg { - -webkit-transform: rotate(64deg); - -moz-transform: rotate(64deg); - -ms-transform: rotate(64deg); - -o-transform: rotate(64deg); - transform: rotate(64deg); -} -.wi-wind.towards-65-deg { - -webkit-transform: rotate(65deg); - -moz-transform: rotate(65deg); - -ms-transform: rotate(65deg); - -o-transform: rotate(65deg); - transform: rotate(65deg); -} -.wi-wind.towards-66-deg { - -webkit-transform: rotate(66deg); - -moz-transform: rotate(66deg); - -ms-transform: rotate(66deg); - -o-transform: rotate(66deg); - transform: rotate(66deg); -} -.wi-wind.towards-67-deg { - -webkit-transform: rotate(67deg); - -moz-transform: rotate(67deg); - -ms-transform: rotate(67deg); - -o-transform: rotate(67deg); - transform: rotate(67deg); -} -.wi-wind.towards-68-deg { - -webkit-transform: rotate(68deg); - -moz-transform: rotate(68deg); - -ms-transform: rotate(68deg); - -o-transform: rotate(68deg); - transform: rotate(68deg); -} -.wi-wind.towards-69-deg { - -webkit-transform: rotate(69deg); - -moz-transform: rotate(69deg); - -ms-transform: rotate(69deg); - -o-transform: rotate(69deg); - transform: rotate(69deg); -} -.wi-wind.towards-70-deg { - -webkit-transform: rotate(70deg); - -moz-transform: rotate(70deg); - -ms-transform: rotate(70deg); - -o-transform: rotate(70deg); - transform: rotate(70deg); -} -.wi-wind.towards-71-deg { - -webkit-transform: rotate(71deg); - -moz-transform: rotate(71deg); - -ms-transform: rotate(71deg); - -o-transform: rotate(71deg); - transform: rotate(71deg); -} -.wi-wind.towards-72-deg { - -webkit-transform: rotate(72deg); - -moz-transform: rotate(72deg); - -ms-transform: rotate(72deg); - -o-transform: rotate(72deg); - transform: rotate(72deg); -} -.wi-wind.towards-73-deg { - -webkit-transform: rotate(73deg); - -moz-transform: rotate(73deg); - -ms-transform: rotate(73deg); - -o-transform: rotate(73deg); - transform: rotate(73deg); -} -.wi-wind.towards-74-deg { - -webkit-transform: rotate(74deg); - -moz-transform: rotate(74deg); - -ms-transform: rotate(74deg); - -o-transform: rotate(74deg); - transform: rotate(74deg); -} -.wi-wind.towards-75-deg { - -webkit-transform: rotate(75deg); - -moz-transform: rotate(75deg); - -ms-transform: rotate(75deg); - -o-transform: rotate(75deg); - transform: rotate(75deg); -} -.wi-wind.towards-76-deg { - -webkit-transform: rotate(76deg); - -moz-transform: rotate(76deg); - -ms-transform: rotate(76deg); - -o-transform: rotate(76deg); - transform: rotate(76deg); -} -.wi-wind.towards-77-deg { - -webkit-transform: rotate(77deg); - -moz-transform: rotate(77deg); - -ms-transform: rotate(77deg); - -o-transform: rotate(77deg); - transform: rotate(77deg); -} -.wi-wind.towards-78-deg { - -webkit-transform: rotate(78deg); - -moz-transform: rotate(78deg); - -ms-transform: rotate(78deg); - -o-transform: rotate(78deg); - transform: rotate(78deg); -} -.wi-wind.towards-79-deg { - -webkit-transform: rotate(79deg); - -moz-transform: rotate(79deg); - -ms-transform: rotate(79deg); - -o-transform: rotate(79deg); - transform: rotate(79deg); -} -.wi-wind.towards-80-deg { - -webkit-transform: rotate(80deg); - -moz-transform: rotate(80deg); - -ms-transform: rotate(80deg); - -o-transform: rotate(80deg); - transform: rotate(80deg); -} -.wi-wind.towards-81-deg { - -webkit-transform: rotate(81deg); - -moz-transform: rotate(81deg); - -ms-transform: rotate(81deg); - -o-transform: rotate(81deg); - transform: rotate(81deg); -} -.wi-wind.towards-82-deg { - -webkit-transform: rotate(82deg); - -moz-transform: rotate(82deg); - -ms-transform: rotate(82deg); - -o-transform: rotate(82deg); - transform: rotate(82deg); -} -.wi-wind.towards-83-deg { - -webkit-transform: rotate(83deg); - -moz-transform: rotate(83deg); - -ms-transform: rotate(83deg); - -o-transform: rotate(83deg); - transform: rotate(83deg); -} -.wi-wind.towards-84-deg { - -webkit-transform: rotate(84deg); - -moz-transform: rotate(84deg); - -ms-transform: rotate(84deg); - -o-transform: rotate(84deg); - transform: rotate(84deg); -} -.wi-wind.towards-85-deg { - -webkit-transform: rotate(85deg); - -moz-transform: rotate(85deg); - -ms-transform: rotate(85deg); - -o-transform: rotate(85deg); - transform: rotate(85deg); -} -.wi-wind.towards-86-deg { - -webkit-transform: rotate(86deg); - -moz-transform: rotate(86deg); - -ms-transform: rotate(86deg); - -o-transform: rotate(86deg); - transform: rotate(86deg); -} -.wi-wind.towards-87-deg { - -webkit-transform: rotate(87deg); - -moz-transform: rotate(87deg); - -ms-transform: rotate(87deg); - -o-transform: rotate(87deg); - transform: rotate(87deg); -} -.wi-wind.towards-88-deg { - -webkit-transform: rotate(88deg); - -moz-transform: rotate(88deg); - -ms-transform: rotate(88deg); - -o-transform: rotate(88deg); - transform: rotate(88deg); -} -.wi-wind.towards-89-deg { - -webkit-transform: rotate(89deg); - -moz-transform: rotate(89deg); - -ms-transform: rotate(89deg); - -o-transform: rotate(89deg); - transform: rotate(89deg); -} -.wi-wind.towards-90-deg { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-wind.towards-91-deg { - -webkit-transform: rotate(91deg); - -moz-transform: rotate(91deg); - -ms-transform: rotate(91deg); - -o-transform: rotate(91deg); - transform: rotate(91deg); -} -.wi-wind.towards-92-deg { - -webkit-transform: rotate(92deg); - -moz-transform: rotate(92deg); - -ms-transform: rotate(92deg); - -o-transform: rotate(92deg); - transform: rotate(92deg); -} -.wi-wind.towards-93-deg { - -webkit-transform: rotate(93deg); - -moz-transform: rotate(93deg); - -ms-transform: rotate(93deg); - -o-transform: rotate(93deg); - transform: rotate(93deg); -} -.wi-wind.towards-94-deg { - -webkit-transform: rotate(94deg); - -moz-transform: rotate(94deg); - -ms-transform: rotate(94deg); - -o-transform: rotate(94deg); - transform: rotate(94deg); -} -.wi-wind.towards-95-deg { - -webkit-transform: rotate(95deg); - -moz-transform: rotate(95deg); - -ms-transform: rotate(95deg); - -o-transform: rotate(95deg); - transform: rotate(95deg); -} -.wi-wind.towards-96-deg { - -webkit-transform: rotate(96deg); - -moz-transform: rotate(96deg); - -ms-transform: rotate(96deg); - -o-transform: rotate(96deg); - transform: rotate(96deg); -} -.wi-wind.towards-97-deg { - -webkit-transform: rotate(97deg); - -moz-transform: rotate(97deg); - -ms-transform: rotate(97deg); - -o-transform: rotate(97deg); - transform: rotate(97deg); -} -.wi-wind.towards-98-deg { - -webkit-transform: rotate(98deg); - -moz-transform: rotate(98deg); - -ms-transform: rotate(98deg); - -o-transform: rotate(98deg); - transform: rotate(98deg); -} -.wi-wind.towards-99-deg { - -webkit-transform: rotate(99deg); - -moz-transform: rotate(99deg); - -ms-transform: rotate(99deg); - -o-transform: rotate(99deg); - transform: rotate(99deg); -} -.wi-wind.towards-100-deg { - -webkit-transform: rotate(100deg); - -moz-transform: rotate(100deg); - -ms-transform: rotate(100deg); - -o-transform: rotate(100deg); - transform: rotate(100deg); -} -.wi-wind.towards-101-deg { - -webkit-transform: rotate(101deg); - -moz-transform: rotate(101deg); - -ms-transform: rotate(101deg); - -o-transform: rotate(101deg); - transform: rotate(101deg); -} -.wi-wind.towards-102-deg { - -webkit-transform: rotate(102deg); - -moz-transform: rotate(102deg); - -ms-transform: rotate(102deg); - -o-transform: rotate(102deg); - transform: rotate(102deg); -} -.wi-wind.towards-103-deg { - -webkit-transform: rotate(103deg); - -moz-transform: rotate(103deg); - -ms-transform: rotate(103deg); - -o-transform: rotate(103deg); - transform: rotate(103deg); -} -.wi-wind.towards-104-deg { - -webkit-transform: rotate(104deg); - -moz-transform: rotate(104deg); - -ms-transform: rotate(104deg); - -o-transform: rotate(104deg); - transform: rotate(104deg); -} -.wi-wind.towards-105-deg { - -webkit-transform: rotate(105deg); - -moz-transform: rotate(105deg); - -ms-transform: rotate(105deg); - -o-transform: rotate(105deg); - transform: rotate(105deg); -} -.wi-wind.towards-106-deg { - -webkit-transform: rotate(106deg); - -moz-transform: rotate(106deg); - -ms-transform: rotate(106deg); - -o-transform: rotate(106deg); - transform: rotate(106deg); -} -.wi-wind.towards-107-deg { - -webkit-transform: rotate(107deg); - -moz-transform: rotate(107deg); - -ms-transform: rotate(107deg); - -o-transform: rotate(107deg); - transform: rotate(107deg); -} -.wi-wind.towards-108-deg { - -webkit-transform: rotate(108deg); - -moz-transform: rotate(108deg); - -ms-transform: rotate(108deg); - -o-transform: rotate(108deg); - transform: rotate(108deg); -} -.wi-wind.towards-109-deg { - -webkit-transform: rotate(109deg); - -moz-transform: rotate(109deg); - -ms-transform: rotate(109deg); - -o-transform: rotate(109deg); - transform: rotate(109deg); -} -.wi-wind.towards-110-deg { - -webkit-transform: rotate(110deg); - -moz-transform: rotate(110deg); - -ms-transform: rotate(110deg); - -o-transform: rotate(110deg); - transform: rotate(110deg); -} -.wi-wind.towards-111-deg { - -webkit-transform: rotate(111deg); - -moz-transform: rotate(111deg); - -ms-transform: rotate(111deg); - -o-transform: rotate(111deg); - transform: rotate(111deg); -} -.wi-wind.towards-112-deg { - -webkit-transform: rotate(112deg); - -moz-transform: rotate(112deg); - -ms-transform: rotate(112deg); - -o-transform: rotate(112deg); - transform: rotate(112deg); -} -.wi-wind.towards-113-deg { - -webkit-transform: rotate(113deg); - -moz-transform: rotate(113deg); - -ms-transform: rotate(113deg); - -o-transform: rotate(113deg); - transform: rotate(113deg); -} -.wi-wind.towards-114-deg { - -webkit-transform: rotate(114deg); - -moz-transform: rotate(114deg); - -ms-transform: rotate(114deg); - -o-transform: rotate(114deg); - transform: rotate(114deg); -} -.wi-wind.towards-115-deg { - -webkit-transform: rotate(115deg); - -moz-transform: rotate(115deg); - -ms-transform: rotate(115deg); - -o-transform: rotate(115deg); - transform: rotate(115deg); -} -.wi-wind.towards-116-deg { - -webkit-transform: rotate(116deg); - -moz-transform: rotate(116deg); - -ms-transform: rotate(116deg); - -o-transform: rotate(116deg); - transform: rotate(116deg); -} -.wi-wind.towards-117-deg { - -webkit-transform: rotate(117deg); - -moz-transform: rotate(117deg); - -ms-transform: rotate(117deg); - -o-transform: rotate(117deg); - transform: rotate(117deg); -} -.wi-wind.towards-118-deg { - -webkit-transform: rotate(118deg); - -moz-transform: rotate(118deg); - -ms-transform: rotate(118deg); - -o-transform: rotate(118deg); - transform: rotate(118deg); -} -.wi-wind.towards-119-deg { - -webkit-transform: rotate(119deg); - -moz-transform: rotate(119deg); - -ms-transform: rotate(119deg); - -o-transform: rotate(119deg); - transform: rotate(119deg); -} -.wi-wind.towards-120-deg { - -webkit-transform: rotate(120deg); - -moz-transform: rotate(120deg); - -ms-transform: rotate(120deg); - -o-transform: rotate(120deg); - transform: rotate(120deg); -} -.wi-wind.towards-121-deg { - -webkit-transform: rotate(121deg); - -moz-transform: rotate(121deg); - -ms-transform: rotate(121deg); - -o-transform: rotate(121deg); - transform: rotate(121deg); -} -.wi-wind.towards-122-deg { - -webkit-transform: rotate(122deg); - -moz-transform: rotate(122deg); - -ms-transform: rotate(122deg); - -o-transform: rotate(122deg); - transform: rotate(122deg); -} -.wi-wind.towards-123-deg { - -webkit-transform: rotate(123deg); - -moz-transform: rotate(123deg); - -ms-transform: rotate(123deg); - -o-transform: rotate(123deg); - transform: rotate(123deg); -} -.wi-wind.towards-124-deg { - -webkit-transform: rotate(124deg); - -moz-transform: rotate(124deg); - -ms-transform: rotate(124deg); - -o-transform: rotate(124deg); - transform: rotate(124deg); -} -.wi-wind.towards-125-deg { - -webkit-transform: rotate(125deg); - -moz-transform: rotate(125deg); - -ms-transform: rotate(125deg); - -o-transform: rotate(125deg); - transform: rotate(125deg); -} -.wi-wind.towards-126-deg { - -webkit-transform: rotate(126deg); - -moz-transform: rotate(126deg); - -ms-transform: rotate(126deg); - -o-transform: rotate(126deg); - transform: rotate(126deg); -} -.wi-wind.towards-127-deg { - -webkit-transform: rotate(127deg); - -moz-transform: rotate(127deg); - -ms-transform: rotate(127deg); - -o-transform: rotate(127deg); - transform: rotate(127deg); -} -.wi-wind.towards-128-deg { - -webkit-transform: rotate(128deg); - -moz-transform: rotate(128deg); - -ms-transform: rotate(128deg); - -o-transform: rotate(128deg); - transform: rotate(128deg); -} -.wi-wind.towards-129-deg { - -webkit-transform: rotate(129deg); - -moz-transform: rotate(129deg); - -ms-transform: rotate(129deg); - -o-transform: rotate(129deg); - transform: rotate(129deg); -} -.wi-wind.towards-130-deg { - -webkit-transform: rotate(130deg); - -moz-transform: rotate(130deg); - -ms-transform: rotate(130deg); - -o-transform: rotate(130deg); - transform: rotate(130deg); -} -.wi-wind.towards-131-deg { - -webkit-transform: rotate(131deg); - -moz-transform: rotate(131deg); - -ms-transform: rotate(131deg); - -o-transform: rotate(131deg); - transform: rotate(131deg); -} -.wi-wind.towards-132-deg { - -webkit-transform: rotate(132deg); - -moz-transform: rotate(132deg); - -ms-transform: rotate(132deg); - -o-transform: rotate(132deg); - transform: rotate(132deg); -} -.wi-wind.towards-133-deg { - -webkit-transform: rotate(133deg); - -moz-transform: rotate(133deg); - -ms-transform: rotate(133deg); - -o-transform: rotate(133deg); - transform: rotate(133deg); -} -.wi-wind.towards-134-deg { - -webkit-transform: rotate(134deg); - -moz-transform: rotate(134deg); - -ms-transform: rotate(134deg); - -o-transform: rotate(134deg); - transform: rotate(134deg); -} -.wi-wind.towards-135-deg { - -webkit-transform: rotate(135deg); - -moz-transform: rotate(135deg); - -ms-transform: rotate(135deg); - -o-transform: rotate(135deg); - transform: rotate(135deg); -} -.wi-wind.towards-136-deg { - -webkit-transform: rotate(136deg); - -moz-transform: rotate(136deg); - -ms-transform: rotate(136deg); - -o-transform: rotate(136deg); - transform: rotate(136deg); -} -.wi-wind.towards-137-deg { - -webkit-transform: rotate(137deg); - -moz-transform: rotate(137deg); - -ms-transform: rotate(137deg); - -o-transform: rotate(137deg); - transform: rotate(137deg); -} -.wi-wind.towards-138-deg { - -webkit-transform: rotate(138deg); - -moz-transform: rotate(138deg); - -ms-transform: rotate(138deg); - -o-transform: rotate(138deg); - transform: rotate(138deg); -} -.wi-wind.towards-139-deg { - -webkit-transform: rotate(139deg); - -moz-transform: rotate(139deg); - -ms-transform: rotate(139deg); - -o-transform: rotate(139deg); - transform: rotate(139deg); -} -.wi-wind.towards-140-deg { - -webkit-transform: rotate(140deg); - -moz-transform: rotate(140deg); - -ms-transform: rotate(140deg); - -o-transform: rotate(140deg); - transform: rotate(140deg); -} -.wi-wind.towards-141-deg { - -webkit-transform: rotate(141deg); - -moz-transform: rotate(141deg); - -ms-transform: rotate(141deg); - -o-transform: rotate(141deg); - transform: rotate(141deg); -} -.wi-wind.towards-142-deg { - -webkit-transform: rotate(142deg); - -moz-transform: rotate(142deg); - -ms-transform: rotate(142deg); - -o-transform: rotate(142deg); - transform: rotate(142deg); -} -.wi-wind.towards-143-deg { - -webkit-transform: rotate(143deg); - -moz-transform: rotate(143deg); - -ms-transform: rotate(143deg); - -o-transform: rotate(143deg); - transform: rotate(143deg); -} -.wi-wind.towards-144-deg { - -webkit-transform: rotate(144deg); - -moz-transform: rotate(144deg); - -ms-transform: rotate(144deg); - -o-transform: rotate(144deg); - transform: rotate(144deg); -} -.wi-wind.towards-145-deg { - -webkit-transform: rotate(145deg); - -moz-transform: rotate(145deg); - -ms-transform: rotate(145deg); - -o-transform: rotate(145deg); - transform: rotate(145deg); -} -.wi-wind.towards-146-deg { - -webkit-transform: rotate(146deg); - -moz-transform: rotate(146deg); - -ms-transform: rotate(146deg); - -o-transform: rotate(146deg); - transform: rotate(146deg); -} -.wi-wind.towards-147-deg { - -webkit-transform: rotate(147deg); - -moz-transform: rotate(147deg); - -ms-transform: rotate(147deg); - -o-transform: rotate(147deg); - transform: rotate(147deg); -} -.wi-wind.towards-148-deg { - -webkit-transform: rotate(148deg); - -moz-transform: rotate(148deg); - -ms-transform: rotate(148deg); - -o-transform: rotate(148deg); - transform: rotate(148deg); -} -.wi-wind.towards-149-deg { - -webkit-transform: rotate(149deg); - -moz-transform: rotate(149deg); - -ms-transform: rotate(149deg); - -o-transform: rotate(149deg); - transform: rotate(149deg); -} -.wi-wind.towards-150-deg { - -webkit-transform: rotate(150deg); - -moz-transform: rotate(150deg); - -ms-transform: rotate(150deg); - -o-transform: rotate(150deg); - transform: rotate(150deg); -} -.wi-wind.towards-151-deg { - -webkit-transform: rotate(151deg); - -moz-transform: rotate(151deg); - -ms-transform: rotate(151deg); - -o-transform: rotate(151deg); - transform: rotate(151deg); -} -.wi-wind.towards-152-deg { - -webkit-transform: rotate(152deg); - -moz-transform: rotate(152deg); - -ms-transform: rotate(152deg); - -o-transform: rotate(152deg); - transform: rotate(152deg); -} -.wi-wind.towards-153-deg { - -webkit-transform: rotate(153deg); - -moz-transform: rotate(153deg); - -ms-transform: rotate(153deg); - -o-transform: rotate(153deg); - transform: rotate(153deg); -} -.wi-wind.towards-154-deg { - -webkit-transform: rotate(154deg); - -moz-transform: rotate(154deg); - -ms-transform: rotate(154deg); - -o-transform: rotate(154deg); - transform: rotate(154deg); -} -.wi-wind.towards-155-deg { - -webkit-transform: rotate(155deg); - -moz-transform: rotate(155deg); - -ms-transform: rotate(155deg); - -o-transform: rotate(155deg); - transform: rotate(155deg); -} -.wi-wind.towards-156-deg { - -webkit-transform: rotate(156deg); - -moz-transform: rotate(156deg); - -ms-transform: rotate(156deg); - -o-transform: rotate(156deg); - transform: rotate(156deg); -} -.wi-wind.towards-157-deg { - -webkit-transform: rotate(157deg); - -moz-transform: rotate(157deg); - -ms-transform: rotate(157deg); - -o-transform: rotate(157deg); - transform: rotate(157deg); -} -.wi-wind.towards-158-deg { - -webkit-transform: rotate(158deg); - -moz-transform: rotate(158deg); - -ms-transform: rotate(158deg); - -o-transform: rotate(158deg); - transform: rotate(158deg); -} -.wi-wind.towards-159-deg { - -webkit-transform: rotate(159deg); - -moz-transform: rotate(159deg); - -ms-transform: rotate(159deg); - -o-transform: rotate(159deg); - transform: rotate(159deg); -} -.wi-wind.towards-160-deg { - -webkit-transform: rotate(160deg); - -moz-transform: rotate(160deg); - -ms-transform: rotate(160deg); - -o-transform: rotate(160deg); - transform: rotate(160deg); -} -.wi-wind.towards-161-deg { - -webkit-transform: rotate(161deg); - -moz-transform: rotate(161deg); - -ms-transform: rotate(161deg); - -o-transform: rotate(161deg); - transform: rotate(161deg); -} -.wi-wind.towards-162-deg { - -webkit-transform: rotate(162deg); - -moz-transform: rotate(162deg); - -ms-transform: rotate(162deg); - -o-transform: rotate(162deg); - transform: rotate(162deg); -} -.wi-wind.towards-163-deg { - -webkit-transform: rotate(163deg); - -moz-transform: rotate(163deg); - -ms-transform: rotate(163deg); - -o-transform: rotate(163deg); - transform: rotate(163deg); -} -.wi-wind.towards-164-deg { - -webkit-transform: rotate(164deg); - -moz-transform: rotate(164deg); - -ms-transform: rotate(164deg); - -o-transform: rotate(164deg); - transform: rotate(164deg); -} -.wi-wind.towards-165-deg { - -webkit-transform: rotate(165deg); - -moz-transform: rotate(165deg); - -ms-transform: rotate(165deg); - -o-transform: rotate(165deg); - transform: rotate(165deg); -} -.wi-wind.towards-166-deg { - -webkit-transform: rotate(166deg); - -moz-transform: rotate(166deg); - -ms-transform: rotate(166deg); - -o-transform: rotate(166deg); - transform: rotate(166deg); -} -.wi-wind.towards-167-deg { - -webkit-transform: rotate(167deg); - -moz-transform: rotate(167deg); - -ms-transform: rotate(167deg); - -o-transform: rotate(167deg); - transform: rotate(167deg); -} -.wi-wind.towards-168-deg { - -webkit-transform: rotate(168deg); - -moz-transform: rotate(168deg); - -ms-transform: rotate(168deg); - -o-transform: rotate(168deg); - transform: rotate(168deg); -} -.wi-wind.towards-169-deg { - -webkit-transform: rotate(169deg); - -moz-transform: rotate(169deg); - -ms-transform: rotate(169deg); - -o-transform: rotate(169deg); - transform: rotate(169deg); -} -.wi-wind.towards-170-deg { - -webkit-transform: rotate(170deg); - -moz-transform: rotate(170deg); - -ms-transform: rotate(170deg); - -o-transform: rotate(170deg); - transform: rotate(170deg); -} -.wi-wind.towards-171-deg { - -webkit-transform: rotate(171deg); - -moz-transform: rotate(171deg); - -ms-transform: rotate(171deg); - -o-transform: rotate(171deg); - transform: rotate(171deg); -} -.wi-wind.towards-172-deg { - -webkit-transform: rotate(172deg); - -moz-transform: rotate(172deg); - -ms-transform: rotate(172deg); - -o-transform: rotate(172deg); - transform: rotate(172deg); -} -.wi-wind.towards-173-deg { - -webkit-transform: rotate(173deg); - -moz-transform: rotate(173deg); - -ms-transform: rotate(173deg); - -o-transform: rotate(173deg); - transform: rotate(173deg); -} -.wi-wind.towards-174-deg { - -webkit-transform: rotate(174deg); - -moz-transform: rotate(174deg); - -ms-transform: rotate(174deg); - -o-transform: rotate(174deg); - transform: rotate(174deg); -} -.wi-wind.towards-175-deg { - -webkit-transform: rotate(175deg); - -moz-transform: rotate(175deg); - -ms-transform: rotate(175deg); - -o-transform: rotate(175deg); - transform: rotate(175deg); -} -.wi-wind.towards-176-deg { - -webkit-transform: rotate(176deg); - -moz-transform: rotate(176deg); - -ms-transform: rotate(176deg); - -o-transform: rotate(176deg); - transform: rotate(176deg); -} -.wi-wind.towards-177-deg { - -webkit-transform: rotate(177deg); - -moz-transform: rotate(177deg); - -ms-transform: rotate(177deg); - -o-transform: rotate(177deg); - transform: rotate(177deg); -} -.wi-wind.towards-178-deg { - -webkit-transform: rotate(178deg); - -moz-transform: rotate(178deg); - -ms-transform: rotate(178deg); - -o-transform: rotate(178deg); - transform: rotate(178deg); -} -.wi-wind.towards-179-deg { - -webkit-transform: rotate(179deg); - -moz-transform: rotate(179deg); - -ms-transform: rotate(179deg); - -o-transform: rotate(179deg); - transform: rotate(179deg); -} -.wi-wind.towards-180-deg { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-wind.towards-181-deg { - -webkit-transform: rotate(181deg); - -moz-transform: rotate(181deg); - -ms-transform: rotate(181deg); - -o-transform: rotate(181deg); - transform: rotate(181deg); -} -.wi-wind.towards-182-deg { - -webkit-transform: rotate(182deg); - -moz-transform: rotate(182deg); - -ms-transform: rotate(182deg); - -o-transform: rotate(182deg); - transform: rotate(182deg); -} -.wi-wind.towards-183-deg { - -webkit-transform: rotate(183deg); - -moz-transform: rotate(183deg); - -ms-transform: rotate(183deg); - -o-transform: rotate(183deg); - transform: rotate(183deg); -} -.wi-wind.towards-184-deg { - -webkit-transform: rotate(184deg); - -moz-transform: rotate(184deg); - -ms-transform: rotate(184deg); - -o-transform: rotate(184deg); - transform: rotate(184deg); -} -.wi-wind.towards-185-deg { - -webkit-transform: rotate(185deg); - -moz-transform: rotate(185deg); - -ms-transform: rotate(185deg); - -o-transform: rotate(185deg); - transform: rotate(185deg); -} -.wi-wind.towards-186-deg { - -webkit-transform: rotate(186deg); - -moz-transform: rotate(186deg); - -ms-transform: rotate(186deg); - -o-transform: rotate(186deg); - transform: rotate(186deg); -} -.wi-wind.towards-187-deg { - -webkit-transform: rotate(187deg); - -moz-transform: rotate(187deg); - -ms-transform: rotate(187deg); - -o-transform: rotate(187deg); - transform: rotate(187deg); -} -.wi-wind.towards-188-deg { - -webkit-transform: rotate(188deg); - -moz-transform: rotate(188deg); - -ms-transform: rotate(188deg); - -o-transform: rotate(188deg); - transform: rotate(188deg); -} -.wi-wind.towards-189-deg { - -webkit-transform: rotate(189deg); - -moz-transform: rotate(189deg); - -ms-transform: rotate(189deg); - -o-transform: rotate(189deg); - transform: rotate(189deg); -} -.wi-wind.towards-190-deg { - -webkit-transform: rotate(190deg); - -moz-transform: rotate(190deg); - -ms-transform: rotate(190deg); - -o-transform: rotate(190deg); - transform: rotate(190deg); -} -.wi-wind.towards-191-deg { - -webkit-transform: rotate(191deg); - -moz-transform: rotate(191deg); - -ms-transform: rotate(191deg); - -o-transform: rotate(191deg); - transform: rotate(191deg); -} -.wi-wind.towards-192-deg { - -webkit-transform: rotate(192deg); - -moz-transform: rotate(192deg); - -ms-transform: rotate(192deg); - -o-transform: rotate(192deg); - transform: rotate(192deg); -} -.wi-wind.towards-193-deg { - -webkit-transform: rotate(193deg); - -moz-transform: rotate(193deg); - -ms-transform: rotate(193deg); - -o-transform: rotate(193deg); - transform: rotate(193deg); -} -.wi-wind.towards-194-deg { - -webkit-transform: rotate(194deg); - -moz-transform: rotate(194deg); - -ms-transform: rotate(194deg); - -o-transform: rotate(194deg); - transform: rotate(194deg); -} -.wi-wind.towards-195-deg { - -webkit-transform: rotate(195deg); - -moz-transform: rotate(195deg); - -ms-transform: rotate(195deg); - -o-transform: rotate(195deg); - transform: rotate(195deg); -} -.wi-wind.towards-196-deg { - -webkit-transform: rotate(196deg); - -moz-transform: rotate(196deg); - -ms-transform: rotate(196deg); - -o-transform: rotate(196deg); - transform: rotate(196deg); -} -.wi-wind.towards-197-deg { - -webkit-transform: rotate(197deg); - -moz-transform: rotate(197deg); - -ms-transform: rotate(197deg); - -o-transform: rotate(197deg); - transform: rotate(197deg); -} -.wi-wind.towards-198-deg { - -webkit-transform: rotate(198deg); - -moz-transform: rotate(198deg); - -ms-transform: rotate(198deg); - -o-transform: rotate(198deg); - transform: rotate(198deg); -} -.wi-wind.towards-199-deg { - -webkit-transform: rotate(199deg); - -moz-transform: rotate(199deg); - -ms-transform: rotate(199deg); - -o-transform: rotate(199deg); - transform: rotate(199deg); -} -.wi-wind.towards-200-deg { - -webkit-transform: rotate(200deg); - -moz-transform: rotate(200deg); - -ms-transform: rotate(200deg); - -o-transform: rotate(200deg); - transform: rotate(200deg); -} -.wi-wind.towards-201-deg { - -webkit-transform: rotate(201deg); - -moz-transform: rotate(201deg); - -ms-transform: rotate(201deg); - -o-transform: rotate(201deg); - transform: rotate(201deg); -} -.wi-wind.towards-202-deg { - -webkit-transform: rotate(202deg); - -moz-transform: rotate(202deg); - -ms-transform: rotate(202deg); - -o-transform: rotate(202deg); - transform: rotate(202deg); -} -.wi-wind.towards-203-deg { - -webkit-transform: rotate(203deg); - -moz-transform: rotate(203deg); - -ms-transform: rotate(203deg); - -o-transform: rotate(203deg); - transform: rotate(203deg); -} -.wi-wind.towards-204-deg { - -webkit-transform: rotate(204deg); - -moz-transform: rotate(204deg); - -ms-transform: rotate(204deg); - -o-transform: rotate(204deg); - transform: rotate(204deg); -} -.wi-wind.towards-205-deg { - -webkit-transform: rotate(205deg); - -moz-transform: rotate(205deg); - -ms-transform: rotate(205deg); - -o-transform: rotate(205deg); - transform: rotate(205deg); -} -.wi-wind.towards-206-deg { - -webkit-transform: rotate(206deg); - -moz-transform: rotate(206deg); - -ms-transform: rotate(206deg); - -o-transform: rotate(206deg); - transform: rotate(206deg); -} -.wi-wind.towards-207-deg { - -webkit-transform: rotate(207deg); - -moz-transform: rotate(207deg); - -ms-transform: rotate(207deg); - -o-transform: rotate(207deg); - transform: rotate(207deg); -} -.wi-wind.towards-208-deg { - -webkit-transform: rotate(208deg); - -moz-transform: rotate(208deg); - -ms-transform: rotate(208deg); - -o-transform: rotate(208deg); - transform: rotate(208deg); -} -.wi-wind.towards-209-deg { - -webkit-transform: rotate(209deg); - -moz-transform: rotate(209deg); - -ms-transform: rotate(209deg); - -o-transform: rotate(209deg); - transform: rotate(209deg); -} -.wi-wind.towards-210-deg { - -webkit-transform: rotate(210deg); - -moz-transform: rotate(210deg); - -ms-transform: rotate(210deg); - -o-transform: rotate(210deg); - transform: rotate(210deg); -} -.wi-wind.towards-211-deg { - -webkit-transform: rotate(211deg); - -moz-transform: rotate(211deg); - -ms-transform: rotate(211deg); - -o-transform: rotate(211deg); - transform: rotate(211deg); -} -.wi-wind.towards-212-deg { - -webkit-transform: rotate(212deg); - -moz-transform: rotate(212deg); - -ms-transform: rotate(212deg); - -o-transform: rotate(212deg); - transform: rotate(212deg); -} -.wi-wind.towards-213-deg { - -webkit-transform: rotate(213deg); - -moz-transform: rotate(213deg); - -ms-transform: rotate(213deg); - -o-transform: rotate(213deg); - transform: rotate(213deg); -} -.wi-wind.towards-214-deg { - -webkit-transform: rotate(214deg); - -moz-transform: rotate(214deg); - -ms-transform: rotate(214deg); - -o-transform: rotate(214deg); - transform: rotate(214deg); -} -.wi-wind.towards-215-deg { - -webkit-transform: rotate(215deg); - -moz-transform: rotate(215deg); - -ms-transform: rotate(215deg); - -o-transform: rotate(215deg); - transform: rotate(215deg); -} -.wi-wind.towards-216-deg { - -webkit-transform: rotate(216deg); - -moz-transform: rotate(216deg); - -ms-transform: rotate(216deg); - -o-transform: rotate(216deg); - transform: rotate(216deg); -} -.wi-wind.towards-217-deg { - -webkit-transform: rotate(217deg); - -moz-transform: rotate(217deg); - -ms-transform: rotate(217deg); - -o-transform: rotate(217deg); - transform: rotate(217deg); -} -.wi-wind.towards-218-deg { - -webkit-transform: rotate(218deg); - -moz-transform: rotate(218deg); - -ms-transform: rotate(218deg); - -o-transform: rotate(218deg); - transform: rotate(218deg); -} -.wi-wind.towards-219-deg { - -webkit-transform: rotate(219deg); - -moz-transform: rotate(219deg); - -ms-transform: rotate(219deg); - -o-transform: rotate(219deg); - transform: rotate(219deg); -} -.wi-wind.towards-220-deg { - -webkit-transform: rotate(220deg); - -moz-transform: rotate(220deg); - -ms-transform: rotate(220deg); - -o-transform: rotate(220deg); - transform: rotate(220deg); -} -.wi-wind.towards-221-deg { - -webkit-transform: rotate(221deg); - -moz-transform: rotate(221deg); - -ms-transform: rotate(221deg); - -o-transform: rotate(221deg); - transform: rotate(221deg); -} -.wi-wind.towards-222-deg { - -webkit-transform: rotate(222deg); - -moz-transform: rotate(222deg); - -ms-transform: rotate(222deg); - -o-transform: rotate(222deg); - transform: rotate(222deg); -} -.wi-wind.towards-223-deg { - -webkit-transform: rotate(223deg); - -moz-transform: rotate(223deg); - -ms-transform: rotate(223deg); - -o-transform: rotate(223deg); - transform: rotate(223deg); -} -.wi-wind.towards-224-deg { - -webkit-transform: rotate(224deg); - -moz-transform: rotate(224deg); - -ms-transform: rotate(224deg); - -o-transform: rotate(224deg); - transform: rotate(224deg); -} -.wi-wind.towards-225-deg { - -webkit-transform: rotate(225deg); - -moz-transform: rotate(225deg); - -ms-transform: rotate(225deg); - -o-transform: rotate(225deg); - transform: rotate(225deg); -} -.wi-wind.towards-226-deg { - -webkit-transform: rotate(226deg); - -moz-transform: rotate(226deg); - -ms-transform: rotate(226deg); - -o-transform: rotate(226deg); - transform: rotate(226deg); -} -.wi-wind.towards-227-deg { - -webkit-transform: rotate(227deg); - -moz-transform: rotate(227deg); - -ms-transform: rotate(227deg); - -o-transform: rotate(227deg); - transform: rotate(227deg); -} -.wi-wind.towards-228-deg { - -webkit-transform: rotate(228deg); - -moz-transform: rotate(228deg); - -ms-transform: rotate(228deg); - -o-transform: rotate(228deg); - transform: rotate(228deg); -} -.wi-wind.towards-229-deg { - -webkit-transform: rotate(229deg); - -moz-transform: rotate(229deg); - -ms-transform: rotate(229deg); - -o-transform: rotate(229deg); - transform: rotate(229deg); -} -.wi-wind.towards-230-deg { - -webkit-transform: rotate(230deg); - -moz-transform: rotate(230deg); - -ms-transform: rotate(230deg); - -o-transform: rotate(230deg); - transform: rotate(230deg); -} -.wi-wind.towards-231-deg { - -webkit-transform: rotate(231deg); - -moz-transform: rotate(231deg); - -ms-transform: rotate(231deg); - -o-transform: rotate(231deg); - transform: rotate(231deg); -} -.wi-wind.towards-232-deg { - -webkit-transform: rotate(232deg); - -moz-transform: rotate(232deg); - -ms-transform: rotate(232deg); - -o-transform: rotate(232deg); - transform: rotate(232deg); -} -.wi-wind.towards-233-deg { - -webkit-transform: rotate(233deg); - -moz-transform: rotate(233deg); - -ms-transform: rotate(233deg); - -o-transform: rotate(233deg); - transform: rotate(233deg); -} -.wi-wind.towards-234-deg { - -webkit-transform: rotate(234deg); - -moz-transform: rotate(234deg); - -ms-transform: rotate(234deg); - -o-transform: rotate(234deg); - transform: rotate(234deg); -} -.wi-wind.towards-235-deg { - -webkit-transform: rotate(235deg); - -moz-transform: rotate(235deg); - -ms-transform: rotate(235deg); - -o-transform: rotate(235deg); - transform: rotate(235deg); -} -.wi-wind.towards-236-deg { - -webkit-transform: rotate(236deg); - -moz-transform: rotate(236deg); - -ms-transform: rotate(236deg); - -o-transform: rotate(236deg); - transform: rotate(236deg); -} -.wi-wind.towards-237-deg { - -webkit-transform: rotate(237deg); - -moz-transform: rotate(237deg); - -ms-transform: rotate(237deg); - -o-transform: rotate(237deg); - transform: rotate(237deg); -} -.wi-wind.towards-238-deg { - -webkit-transform: rotate(238deg); - -moz-transform: rotate(238deg); - -ms-transform: rotate(238deg); - -o-transform: rotate(238deg); - transform: rotate(238deg); -} -.wi-wind.towards-239-deg { - -webkit-transform: rotate(239deg); - -moz-transform: rotate(239deg); - -ms-transform: rotate(239deg); - -o-transform: rotate(239deg); - transform: rotate(239deg); -} -.wi-wind.towards-240-deg { - -webkit-transform: rotate(240deg); - -moz-transform: rotate(240deg); - -ms-transform: rotate(240deg); - -o-transform: rotate(240deg); - transform: rotate(240deg); -} -.wi-wind.towards-241-deg { - -webkit-transform: rotate(241deg); - -moz-transform: rotate(241deg); - -ms-transform: rotate(241deg); - -o-transform: rotate(241deg); - transform: rotate(241deg); -} -.wi-wind.towards-242-deg { - -webkit-transform: rotate(242deg); - -moz-transform: rotate(242deg); - -ms-transform: rotate(242deg); - -o-transform: rotate(242deg); - transform: rotate(242deg); -} -.wi-wind.towards-243-deg { - -webkit-transform: rotate(243deg); - -moz-transform: rotate(243deg); - -ms-transform: rotate(243deg); - -o-transform: rotate(243deg); - transform: rotate(243deg); -} -.wi-wind.towards-244-deg { - -webkit-transform: rotate(244deg); - -moz-transform: rotate(244deg); - -ms-transform: rotate(244deg); - -o-transform: rotate(244deg); - transform: rotate(244deg); -} -.wi-wind.towards-245-deg { - -webkit-transform: rotate(245deg); - -moz-transform: rotate(245deg); - -ms-transform: rotate(245deg); - -o-transform: rotate(245deg); - transform: rotate(245deg); -} -.wi-wind.towards-246-deg { - -webkit-transform: rotate(246deg); - -moz-transform: rotate(246deg); - -ms-transform: rotate(246deg); - -o-transform: rotate(246deg); - transform: rotate(246deg); -} -.wi-wind.towards-247-deg { - -webkit-transform: rotate(247deg); - -moz-transform: rotate(247deg); - -ms-transform: rotate(247deg); - -o-transform: rotate(247deg); - transform: rotate(247deg); -} -.wi-wind.towards-248-deg { - -webkit-transform: rotate(248deg); - -moz-transform: rotate(248deg); - -ms-transform: rotate(248deg); - -o-transform: rotate(248deg); - transform: rotate(248deg); -} -.wi-wind.towards-249-deg { - -webkit-transform: rotate(249deg); - -moz-transform: rotate(249deg); - -ms-transform: rotate(249deg); - -o-transform: rotate(249deg); - transform: rotate(249deg); -} -.wi-wind.towards-250-deg { - -webkit-transform: rotate(250deg); - -moz-transform: rotate(250deg); - -ms-transform: rotate(250deg); - -o-transform: rotate(250deg); - transform: rotate(250deg); -} -.wi-wind.towards-251-deg { - -webkit-transform: rotate(251deg); - -moz-transform: rotate(251deg); - -ms-transform: rotate(251deg); - -o-transform: rotate(251deg); - transform: rotate(251deg); -} -.wi-wind.towards-252-deg { - -webkit-transform: rotate(252deg); - -moz-transform: rotate(252deg); - -ms-transform: rotate(252deg); - -o-transform: rotate(252deg); - transform: rotate(252deg); -} -.wi-wind.towards-253-deg { - -webkit-transform: rotate(253deg); - -moz-transform: rotate(253deg); - -ms-transform: rotate(253deg); - -o-transform: rotate(253deg); - transform: rotate(253deg); -} -.wi-wind.towards-254-deg { - -webkit-transform: rotate(254deg); - -moz-transform: rotate(254deg); - -ms-transform: rotate(254deg); - -o-transform: rotate(254deg); - transform: rotate(254deg); -} -.wi-wind.towards-255-deg { - -webkit-transform: rotate(255deg); - -moz-transform: rotate(255deg); - -ms-transform: rotate(255deg); - -o-transform: rotate(255deg); - transform: rotate(255deg); -} -.wi-wind.towards-256-deg { - -webkit-transform: rotate(256deg); - -moz-transform: rotate(256deg); - -ms-transform: rotate(256deg); - -o-transform: rotate(256deg); - transform: rotate(256deg); -} -.wi-wind.towards-257-deg { - -webkit-transform: rotate(257deg); - -moz-transform: rotate(257deg); - -ms-transform: rotate(257deg); - -o-transform: rotate(257deg); - transform: rotate(257deg); -} -.wi-wind.towards-258-deg { - -webkit-transform: rotate(258deg); - -moz-transform: rotate(258deg); - -ms-transform: rotate(258deg); - -o-transform: rotate(258deg); - transform: rotate(258deg); -} -.wi-wind.towards-259-deg { - -webkit-transform: rotate(259deg); - -moz-transform: rotate(259deg); - -ms-transform: rotate(259deg); - -o-transform: rotate(259deg); - transform: rotate(259deg); -} -.wi-wind.towards-260-deg { - -webkit-transform: rotate(260deg); - -moz-transform: rotate(260deg); - -ms-transform: rotate(260deg); - -o-transform: rotate(260deg); - transform: rotate(260deg); -} -.wi-wind.towards-261-deg { - -webkit-transform: rotate(261deg); - -moz-transform: rotate(261deg); - -ms-transform: rotate(261deg); - -o-transform: rotate(261deg); - transform: rotate(261deg); -} -.wi-wind.towards-262-deg { - -webkit-transform: rotate(262deg); - -moz-transform: rotate(262deg); - -ms-transform: rotate(262deg); - -o-transform: rotate(262deg); - transform: rotate(262deg); -} -.wi-wind.towards-263-deg { - -webkit-transform: rotate(263deg); - -moz-transform: rotate(263deg); - -ms-transform: rotate(263deg); - -o-transform: rotate(263deg); - transform: rotate(263deg); -} -.wi-wind.towards-264-deg { - -webkit-transform: rotate(264deg); - -moz-transform: rotate(264deg); - -ms-transform: rotate(264deg); - -o-transform: rotate(264deg); - transform: rotate(264deg); -} -.wi-wind.towards-265-deg { - -webkit-transform: rotate(265deg); - -moz-transform: rotate(265deg); - -ms-transform: rotate(265deg); - -o-transform: rotate(265deg); - transform: rotate(265deg); -} -.wi-wind.towards-266-deg { - -webkit-transform: rotate(266deg); - -moz-transform: rotate(266deg); - -ms-transform: rotate(266deg); - -o-transform: rotate(266deg); - transform: rotate(266deg); -} -.wi-wind.towards-267-deg { - -webkit-transform: rotate(267deg); - -moz-transform: rotate(267deg); - -ms-transform: rotate(267deg); - -o-transform: rotate(267deg); - transform: rotate(267deg); -} -.wi-wind.towards-268-deg { - -webkit-transform: rotate(268deg); - -moz-transform: rotate(268deg); - -ms-transform: rotate(268deg); - -o-transform: rotate(268deg); - transform: rotate(268deg); -} -.wi-wind.towards-269-deg { - -webkit-transform: rotate(269deg); - -moz-transform: rotate(269deg); - -ms-transform: rotate(269deg); - -o-transform: rotate(269deg); - transform: rotate(269deg); -} -.wi-wind.towards-270-deg { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-wind.towards-271-deg { - -webkit-transform: rotate(271deg); - -moz-transform: rotate(271deg); - -ms-transform: rotate(271deg); - -o-transform: rotate(271deg); - transform: rotate(271deg); -} -.wi-wind.towards-272-deg { - -webkit-transform: rotate(272deg); - -moz-transform: rotate(272deg); - -ms-transform: rotate(272deg); - -o-transform: rotate(272deg); - transform: rotate(272deg); -} -.wi-wind.towards-273-deg { - -webkit-transform: rotate(273deg); - -moz-transform: rotate(273deg); - -ms-transform: rotate(273deg); - -o-transform: rotate(273deg); - transform: rotate(273deg); -} -.wi-wind.towards-274-deg { - -webkit-transform: rotate(274deg); - -moz-transform: rotate(274deg); - -ms-transform: rotate(274deg); - -o-transform: rotate(274deg); - transform: rotate(274deg); -} -.wi-wind.towards-275-deg { - -webkit-transform: rotate(275deg); - -moz-transform: rotate(275deg); - -ms-transform: rotate(275deg); - -o-transform: rotate(275deg); - transform: rotate(275deg); -} -.wi-wind.towards-276-deg { - -webkit-transform: rotate(276deg); - -moz-transform: rotate(276deg); - -ms-transform: rotate(276deg); - -o-transform: rotate(276deg); - transform: rotate(276deg); -} -.wi-wind.towards-277-deg { - -webkit-transform: rotate(277deg); - -moz-transform: rotate(277deg); - -ms-transform: rotate(277deg); - -o-transform: rotate(277deg); - transform: rotate(277deg); -} -.wi-wind.towards-278-deg { - -webkit-transform: rotate(278deg); - -moz-transform: rotate(278deg); - -ms-transform: rotate(278deg); - -o-transform: rotate(278deg); - transform: rotate(278deg); -} -.wi-wind.towards-279-deg { - -webkit-transform: rotate(279deg); - -moz-transform: rotate(279deg); - -ms-transform: rotate(279deg); - -o-transform: rotate(279deg); - transform: rotate(279deg); -} -.wi-wind.towards-280-deg { - -webkit-transform: rotate(280deg); - -moz-transform: rotate(280deg); - -ms-transform: rotate(280deg); - -o-transform: rotate(280deg); - transform: rotate(280deg); -} -.wi-wind.towards-281-deg { - -webkit-transform: rotate(281deg); - -moz-transform: rotate(281deg); - -ms-transform: rotate(281deg); - -o-transform: rotate(281deg); - transform: rotate(281deg); -} -.wi-wind.towards-282-deg { - -webkit-transform: rotate(282deg); - -moz-transform: rotate(282deg); - -ms-transform: rotate(282deg); - -o-transform: rotate(282deg); - transform: rotate(282deg); -} -.wi-wind.towards-283-deg { - -webkit-transform: rotate(283deg); - -moz-transform: rotate(283deg); - -ms-transform: rotate(283deg); - -o-transform: rotate(283deg); - transform: rotate(283deg); -} -.wi-wind.towards-284-deg { - -webkit-transform: rotate(284deg); - -moz-transform: rotate(284deg); - -ms-transform: rotate(284deg); - -o-transform: rotate(284deg); - transform: rotate(284deg); -} -.wi-wind.towards-285-deg { - -webkit-transform: rotate(285deg); - -moz-transform: rotate(285deg); - -ms-transform: rotate(285deg); - -o-transform: rotate(285deg); - transform: rotate(285deg); -} -.wi-wind.towards-286-deg { - -webkit-transform: rotate(286deg); - -moz-transform: rotate(286deg); - -ms-transform: rotate(286deg); - -o-transform: rotate(286deg); - transform: rotate(286deg); -} -.wi-wind.towards-287-deg { - -webkit-transform: rotate(287deg); - -moz-transform: rotate(287deg); - -ms-transform: rotate(287deg); - -o-transform: rotate(287deg); - transform: rotate(287deg); -} -.wi-wind.towards-288-deg { - -webkit-transform: rotate(288deg); - -moz-transform: rotate(288deg); - -ms-transform: rotate(288deg); - -o-transform: rotate(288deg); - transform: rotate(288deg); -} -.wi-wind.towards-289-deg { - -webkit-transform: rotate(289deg); - -moz-transform: rotate(289deg); - -ms-transform: rotate(289deg); - -o-transform: rotate(289deg); - transform: rotate(289deg); -} -.wi-wind.towards-290-deg { - -webkit-transform: rotate(290deg); - -moz-transform: rotate(290deg); - -ms-transform: rotate(290deg); - -o-transform: rotate(290deg); - transform: rotate(290deg); -} -.wi-wind.towards-291-deg { - -webkit-transform: rotate(291deg); - -moz-transform: rotate(291deg); - -ms-transform: rotate(291deg); - -o-transform: rotate(291deg); - transform: rotate(291deg); -} -.wi-wind.towards-292-deg { - -webkit-transform: rotate(292deg); - -moz-transform: rotate(292deg); - -ms-transform: rotate(292deg); - -o-transform: rotate(292deg); - transform: rotate(292deg); -} -.wi-wind.towards-293-deg { - -webkit-transform: rotate(293deg); - -moz-transform: rotate(293deg); - -ms-transform: rotate(293deg); - -o-transform: rotate(293deg); - transform: rotate(293deg); -} -.wi-wind.towards-294-deg { - -webkit-transform: rotate(294deg); - -moz-transform: rotate(294deg); - -ms-transform: rotate(294deg); - -o-transform: rotate(294deg); - transform: rotate(294deg); -} -.wi-wind.towards-295-deg { - -webkit-transform: rotate(295deg); - -moz-transform: rotate(295deg); - -ms-transform: rotate(295deg); - -o-transform: rotate(295deg); - transform: rotate(295deg); -} -.wi-wind.towards-296-deg { - -webkit-transform: rotate(296deg); - -moz-transform: rotate(296deg); - -ms-transform: rotate(296deg); - -o-transform: rotate(296deg); - transform: rotate(296deg); -} -.wi-wind.towards-297-deg { - -webkit-transform: rotate(297deg); - -moz-transform: rotate(297deg); - -ms-transform: rotate(297deg); - -o-transform: rotate(297deg); - transform: rotate(297deg); -} -.wi-wind.towards-298-deg { - -webkit-transform: rotate(298deg); - -moz-transform: rotate(298deg); - -ms-transform: rotate(298deg); - -o-transform: rotate(298deg); - transform: rotate(298deg); -} -.wi-wind.towards-299-deg { - -webkit-transform: rotate(299deg); - -moz-transform: rotate(299deg); - -ms-transform: rotate(299deg); - -o-transform: rotate(299deg); - transform: rotate(299deg); -} -.wi-wind.towards-300-deg { - -webkit-transform: rotate(300deg); - -moz-transform: rotate(300deg); - -ms-transform: rotate(300deg); - -o-transform: rotate(300deg); - transform: rotate(300deg); -} -.wi-wind.towards-301-deg { - -webkit-transform: rotate(301deg); - -moz-transform: rotate(301deg); - -ms-transform: rotate(301deg); - -o-transform: rotate(301deg); - transform: rotate(301deg); -} -.wi-wind.towards-302-deg { - -webkit-transform: rotate(302deg); - -moz-transform: rotate(302deg); - -ms-transform: rotate(302deg); - -o-transform: rotate(302deg); - transform: rotate(302deg); -} -.wi-wind.towards-303-deg { - -webkit-transform: rotate(303deg); - -moz-transform: rotate(303deg); - -ms-transform: rotate(303deg); - -o-transform: rotate(303deg); - transform: rotate(303deg); -} -.wi-wind.towards-304-deg { - -webkit-transform: rotate(304deg); - -moz-transform: rotate(304deg); - -ms-transform: rotate(304deg); - -o-transform: rotate(304deg); - transform: rotate(304deg); -} -.wi-wind.towards-305-deg { - -webkit-transform: rotate(305deg); - -moz-transform: rotate(305deg); - -ms-transform: rotate(305deg); - -o-transform: rotate(305deg); - transform: rotate(305deg); -} -.wi-wind.towards-306-deg { - -webkit-transform: rotate(306deg); - -moz-transform: rotate(306deg); - -ms-transform: rotate(306deg); - -o-transform: rotate(306deg); - transform: rotate(306deg); -} -.wi-wind.towards-307-deg { - -webkit-transform: rotate(307deg); - -moz-transform: rotate(307deg); - -ms-transform: rotate(307deg); - -o-transform: rotate(307deg); - transform: rotate(307deg); -} -.wi-wind.towards-308-deg { - -webkit-transform: rotate(308deg); - -moz-transform: rotate(308deg); - -ms-transform: rotate(308deg); - -o-transform: rotate(308deg); - transform: rotate(308deg); -} -.wi-wind.towards-309-deg { - -webkit-transform: rotate(309deg); - -moz-transform: rotate(309deg); - -ms-transform: rotate(309deg); - -o-transform: rotate(309deg); - transform: rotate(309deg); -} -.wi-wind.towards-310-deg { - -webkit-transform: rotate(310deg); - -moz-transform: rotate(310deg); - -ms-transform: rotate(310deg); - -o-transform: rotate(310deg); - transform: rotate(310deg); -} -.wi-wind.towards-311-deg { - -webkit-transform: rotate(311deg); - -moz-transform: rotate(311deg); - -ms-transform: rotate(311deg); - -o-transform: rotate(311deg); - transform: rotate(311deg); -} -.wi-wind.towards-312-deg { - -webkit-transform: rotate(312deg); - -moz-transform: rotate(312deg); - -ms-transform: rotate(312deg); - -o-transform: rotate(312deg); - transform: rotate(312deg); -} -.wi-wind.towards-313-deg { - -webkit-transform: rotate(313deg); - -moz-transform: rotate(313deg); - -ms-transform: rotate(313deg); - -o-transform: rotate(313deg); - transform: rotate(313deg); -} -.wi-wind.towards-314-deg { - -webkit-transform: rotate(314deg); - -moz-transform: rotate(314deg); - -ms-transform: rotate(314deg); - -o-transform: rotate(314deg); - transform: rotate(314deg); -} -.wi-wind.towards-315-deg { - -webkit-transform: rotate(315deg); - -moz-transform: rotate(315deg); - -ms-transform: rotate(315deg); - -o-transform: rotate(315deg); - transform: rotate(315deg); -} -.wi-wind.towards-316-deg { - -webkit-transform: rotate(316deg); - -moz-transform: rotate(316deg); - -ms-transform: rotate(316deg); - -o-transform: rotate(316deg); - transform: rotate(316deg); -} -.wi-wind.towards-317-deg { - -webkit-transform: rotate(317deg); - -moz-transform: rotate(317deg); - -ms-transform: rotate(317deg); - -o-transform: rotate(317deg); - transform: rotate(317deg); -} -.wi-wind.towards-318-deg { - -webkit-transform: rotate(318deg); - -moz-transform: rotate(318deg); - -ms-transform: rotate(318deg); - -o-transform: rotate(318deg); - transform: rotate(318deg); -} -.wi-wind.towards-319-deg { - -webkit-transform: rotate(319deg); - -moz-transform: rotate(319deg); - -ms-transform: rotate(319deg); - -o-transform: rotate(319deg); - transform: rotate(319deg); -} -.wi-wind.towards-320-deg { - -webkit-transform: rotate(320deg); - -moz-transform: rotate(320deg); - -ms-transform: rotate(320deg); - -o-transform: rotate(320deg); - transform: rotate(320deg); -} -.wi-wind.towards-321-deg { - -webkit-transform: rotate(321deg); - -moz-transform: rotate(321deg); - -ms-transform: rotate(321deg); - -o-transform: rotate(321deg); - transform: rotate(321deg); -} -.wi-wind.towards-322-deg { - -webkit-transform: rotate(322deg); - -moz-transform: rotate(322deg); - -ms-transform: rotate(322deg); - -o-transform: rotate(322deg); - transform: rotate(322deg); -} -.wi-wind.towards-323-deg { - -webkit-transform: rotate(323deg); - -moz-transform: rotate(323deg); - -ms-transform: rotate(323deg); - -o-transform: rotate(323deg); - transform: rotate(323deg); -} -.wi-wind.towards-324-deg { - -webkit-transform: rotate(324deg); - -moz-transform: rotate(324deg); - -ms-transform: rotate(324deg); - -o-transform: rotate(324deg); - transform: rotate(324deg); -} -.wi-wind.towards-325-deg { - -webkit-transform: rotate(325deg); - -moz-transform: rotate(325deg); - -ms-transform: rotate(325deg); - -o-transform: rotate(325deg); - transform: rotate(325deg); -} -.wi-wind.towards-326-deg { - -webkit-transform: rotate(326deg); - -moz-transform: rotate(326deg); - -ms-transform: rotate(326deg); - -o-transform: rotate(326deg); - transform: rotate(326deg); -} -.wi-wind.towards-327-deg { - -webkit-transform: rotate(327deg); - -moz-transform: rotate(327deg); - -ms-transform: rotate(327deg); - -o-transform: rotate(327deg); - transform: rotate(327deg); -} -.wi-wind.towards-328-deg { - -webkit-transform: rotate(328deg); - -moz-transform: rotate(328deg); - -ms-transform: rotate(328deg); - -o-transform: rotate(328deg); - transform: rotate(328deg); -} -.wi-wind.towards-329-deg { - -webkit-transform: rotate(329deg); - -moz-transform: rotate(329deg); - -ms-transform: rotate(329deg); - -o-transform: rotate(329deg); - transform: rotate(329deg); -} -.wi-wind.towards-330-deg { - -webkit-transform: rotate(330deg); - -moz-transform: rotate(330deg); - -ms-transform: rotate(330deg); - -o-transform: rotate(330deg); - transform: rotate(330deg); -} -.wi-wind.towards-331-deg { - -webkit-transform: rotate(331deg); - -moz-transform: rotate(331deg); - -ms-transform: rotate(331deg); - -o-transform: rotate(331deg); - transform: rotate(331deg); -} -.wi-wind.towards-332-deg { - -webkit-transform: rotate(332deg); - -moz-transform: rotate(332deg); - -ms-transform: rotate(332deg); - -o-transform: rotate(332deg); - transform: rotate(332deg); -} -.wi-wind.towards-333-deg { - -webkit-transform: rotate(333deg); - -moz-transform: rotate(333deg); - -ms-transform: rotate(333deg); - -o-transform: rotate(333deg); - transform: rotate(333deg); -} -.wi-wind.towards-334-deg { - -webkit-transform: rotate(334deg); - -moz-transform: rotate(334deg); - -ms-transform: rotate(334deg); - -o-transform: rotate(334deg); - transform: rotate(334deg); -} -.wi-wind.towards-335-deg { - -webkit-transform: rotate(335deg); - -moz-transform: rotate(335deg); - -ms-transform: rotate(335deg); - -o-transform: rotate(335deg); - transform: rotate(335deg); -} -.wi-wind.towards-336-deg { - -webkit-transform: rotate(336deg); - -moz-transform: rotate(336deg); - -ms-transform: rotate(336deg); - -o-transform: rotate(336deg); - transform: rotate(336deg); -} -.wi-wind.towards-337-deg { - -webkit-transform: rotate(337deg); - -moz-transform: rotate(337deg); - -ms-transform: rotate(337deg); - -o-transform: rotate(337deg); - transform: rotate(337deg); -} -.wi-wind.towards-338-deg { - -webkit-transform: rotate(338deg); - -moz-transform: rotate(338deg); - -ms-transform: rotate(338deg); - -o-transform: rotate(338deg); - transform: rotate(338deg); -} -.wi-wind.towards-339-deg { - -webkit-transform: rotate(339deg); - -moz-transform: rotate(339deg); - -ms-transform: rotate(339deg); - -o-transform: rotate(339deg); - transform: rotate(339deg); -} -.wi-wind.towards-340-deg { - -webkit-transform: rotate(340deg); - -moz-transform: rotate(340deg); - -ms-transform: rotate(340deg); - -o-transform: rotate(340deg); - transform: rotate(340deg); -} -.wi-wind.towards-341-deg { - -webkit-transform: rotate(341deg); - -moz-transform: rotate(341deg); - -ms-transform: rotate(341deg); - -o-transform: rotate(341deg); - transform: rotate(341deg); -} -.wi-wind.towards-342-deg { - -webkit-transform: rotate(342deg); - -moz-transform: rotate(342deg); - -ms-transform: rotate(342deg); - -o-transform: rotate(342deg); - transform: rotate(342deg); -} -.wi-wind.towards-343-deg { - -webkit-transform: rotate(343deg); - -moz-transform: rotate(343deg); - -ms-transform: rotate(343deg); - -o-transform: rotate(343deg); - transform: rotate(343deg); -} -.wi-wind.towards-344-deg { - -webkit-transform: rotate(344deg); - -moz-transform: rotate(344deg); - -ms-transform: rotate(344deg); - -o-transform: rotate(344deg); - transform: rotate(344deg); -} -.wi-wind.towards-345-deg { - -webkit-transform: rotate(345deg); - -moz-transform: rotate(345deg); - -ms-transform: rotate(345deg); - -o-transform: rotate(345deg); - transform: rotate(345deg); -} -.wi-wind.towards-346-deg { - -webkit-transform: rotate(346deg); - -moz-transform: rotate(346deg); - -ms-transform: rotate(346deg); - -o-transform: rotate(346deg); - transform: rotate(346deg); -} -.wi-wind.towards-347-deg { - -webkit-transform: rotate(347deg); - -moz-transform: rotate(347deg); - -ms-transform: rotate(347deg); - -o-transform: rotate(347deg); - transform: rotate(347deg); -} -.wi-wind.towards-348-deg { - -webkit-transform: rotate(348deg); - -moz-transform: rotate(348deg); - -ms-transform: rotate(348deg); - -o-transform: rotate(348deg); - transform: rotate(348deg); -} -.wi-wind.towards-349-deg { - -webkit-transform: rotate(349deg); - -moz-transform: rotate(349deg); - -ms-transform: rotate(349deg); - -o-transform: rotate(349deg); - transform: rotate(349deg); -} -.wi-wind.towards-350-deg { - -webkit-transform: rotate(350deg); - -moz-transform: rotate(350deg); - -ms-transform: rotate(350deg); - -o-transform: rotate(350deg); - transform: rotate(350deg); -} -.wi-wind.towards-351-deg { - -webkit-transform: rotate(351deg); - -moz-transform: rotate(351deg); - -ms-transform: rotate(351deg); - -o-transform: rotate(351deg); - transform: rotate(351deg); -} -.wi-wind.towards-352-deg { - -webkit-transform: rotate(352deg); - -moz-transform: rotate(352deg); - -ms-transform: rotate(352deg); - -o-transform: rotate(352deg); - transform: rotate(352deg); -} -.wi-wind.towards-353-deg { - -webkit-transform: rotate(353deg); - -moz-transform: rotate(353deg); - -ms-transform: rotate(353deg); - -o-transform: rotate(353deg); - transform: rotate(353deg); -} -.wi-wind.towards-354-deg { - -webkit-transform: rotate(354deg); - -moz-transform: rotate(354deg); - -ms-transform: rotate(354deg); - -o-transform: rotate(354deg); - transform: rotate(354deg); -} -.wi-wind.towards-355-deg { - -webkit-transform: rotate(355deg); - -moz-transform: rotate(355deg); - -ms-transform: rotate(355deg); - -o-transform: rotate(355deg); - transform: rotate(355deg); -} -.wi-wind.towards-356-deg { - -webkit-transform: rotate(356deg); - -moz-transform: rotate(356deg); - -ms-transform: rotate(356deg); - -o-transform: rotate(356deg); - transform: rotate(356deg); -} -.wi-wind.towards-357-deg { - -webkit-transform: rotate(357deg); - -moz-transform: rotate(357deg); - -ms-transform: rotate(357deg); - -o-transform: rotate(357deg); - transform: rotate(357deg); -} -.wi-wind.towards-358-deg { - -webkit-transform: rotate(358deg); - -moz-transform: rotate(358deg); - -ms-transform: rotate(358deg); - -o-transform: rotate(358deg); - transform: rotate(358deg); -} -.wi-wind.towards-359-deg { - -webkit-transform: rotate(359deg); - -moz-transform: rotate(359deg); - -ms-transform: rotate(359deg); - -o-transform: rotate(359deg); - transform: rotate(359deg); -} -.wi-wind.towards-360-deg { - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -o-transform: rotate(0deg); - transform: rotate(0deg); -} -.wi-wind.from-0-deg { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-wind.from-1-deg { - -webkit-transform: rotate(181deg); - -moz-transform: rotate(181deg); - -ms-transform: rotate(181deg); - -o-transform: rotate(181deg); - transform: rotate(181deg); -} -.wi-wind.from-2-deg { - -webkit-transform: rotate(182deg); - -moz-transform: rotate(182deg); - -ms-transform: rotate(182deg); - -o-transform: rotate(182deg); - transform: rotate(182deg); -} -.wi-wind.from-3-deg { - -webkit-transform: rotate(183deg); - -moz-transform: rotate(183deg); - -ms-transform: rotate(183deg); - -o-transform: rotate(183deg); - transform: rotate(183deg); -} -.wi-wind.from-4-deg { - -webkit-transform: rotate(184deg); - -moz-transform: rotate(184deg); - -ms-transform: rotate(184deg); - -o-transform: rotate(184deg); - transform: rotate(184deg); -} -.wi-wind.from-5-deg { - -webkit-transform: rotate(185deg); - -moz-transform: rotate(185deg); - -ms-transform: rotate(185deg); - -o-transform: rotate(185deg); - transform: rotate(185deg); -} -.wi-wind.from-6-deg { - -webkit-transform: rotate(186deg); - -moz-transform: rotate(186deg); - -ms-transform: rotate(186deg); - -o-transform: rotate(186deg); - transform: rotate(186deg); -} -.wi-wind.from-7-deg { - -webkit-transform: rotate(187deg); - -moz-transform: rotate(187deg); - -ms-transform: rotate(187deg); - -o-transform: rotate(187deg); - transform: rotate(187deg); -} -.wi-wind.from-8-deg { - -webkit-transform: rotate(188deg); - -moz-transform: rotate(188deg); - -ms-transform: rotate(188deg); - -o-transform: rotate(188deg); - transform: rotate(188deg); -} -.wi-wind.from-9-deg { - -webkit-transform: rotate(189deg); - -moz-transform: rotate(189deg); - -ms-transform: rotate(189deg); - -o-transform: rotate(189deg); - transform: rotate(189deg); -} -.wi-wind.from-10-deg { - -webkit-transform: rotate(190deg); - -moz-transform: rotate(190deg); - -ms-transform: rotate(190deg); - -o-transform: rotate(190deg); - transform: rotate(190deg); -} -.wi-wind.from-11-deg { - -webkit-transform: rotate(191deg); - -moz-transform: rotate(191deg); - -ms-transform: rotate(191deg); - -o-transform: rotate(191deg); - transform: rotate(191deg); -} -.wi-wind.from-12-deg { - -webkit-transform: rotate(192deg); - -moz-transform: rotate(192deg); - -ms-transform: rotate(192deg); - -o-transform: rotate(192deg); - transform: rotate(192deg); -} -.wi-wind.from-13-deg { - -webkit-transform: rotate(193deg); - -moz-transform: rotate(193deg); - -ms-transform: rotate(193deg); - -o-transform: rotate(193deg); - transform: rotate(193deg); -} -.wi-wind.from-14-deg { - -webkit-transform: rotate(194deg); - -moz-transform: rotate(194deg); - -ms-transform: rotate(194deg); - -o-transform: rotate(194deg); - transform: rotate(194deg); -} -.wi-wind.from-15-deg { - -webkit-transform: rotate(195deg); - -moz-transform: rotate(195deg); - -ms-transform: rotate(195deg); - -o-transform: rotate(195deg); - transform: rotate(195deg); -} -.wi-wind.from-16-deg { - -webkit-transform: rotate(196deg); - -moz-transform: rotate(196deg); - -ms-transform: rotate(196deg); - -o-transform: rotate(196deg); - transform: rotate(196deg); -} -.wi-wind.from-17-deg { - -webkit-transform: rotate(197deg); - -moz-transform: rotate(197deg); - -ms-transform: rotate(197deg); - -o-transform: rotate(197deg); - transform: rotate(197deg); -} -.wi-wind.from-18-deg { - -webkit-transform: rotate(198deg); - -moz-transform: rotate(198deg); - -ms-transform: rotate(198deg); - -o-transform: rotate(198deg); - transform: rotate(198deg); -} -.wi-wind.from-19-deg { - -webkit-transform: rotate(199deg); - -moz-transform: rotate(199deg); - -ms-transform: rotate(199deg); - -o-transform: rotate(199deg); - transform: rotate(199deg); -} -.wi-wind.from-20-deg { - -webkit-transform: rotate(200deg); - -moz-transform: rotate(200deg); - -ms-transform: rotate(200deg); - -o-transform: rotate(200deg); - transform: rotate(200deg); -} -.wi-wind.from-21-deg { - -webkit-transform: rotate(201deg); - -moz-transform: rotate(201deg); - -ms-transform: rotate(201deg); - -o-transform: rotate(201deg); - transform: rotate(201deg); -} -.wi-wind.from-22-deg { - -webkit-transform: rotate(202deg); - -moz-transform: rotate(202deg); - -ms-transform: rotate(202deg); - -o-transform: rotate(202deg); - transform: rotate(202deg); -} -.wi-wind.from-23-deg { - -webkit-transform: rotate(203deg); - -moz-transform: rotate(203deg); - -ms-transform: rotate(203deg); - -o-transform: rotate(203deg); - transform: rotate(203deg); -} -.wi-wind.from-24-deg { - -webkit-transform: rotate(204deg); - -moz-transform: rotate(204deg); - -ms-transform: rotate(204deg); - -o-transform: rotate(204deg); - transform: rotate(204deg); -} -.wi-wind.from-25-deg { - -webkit-transform: rotate(205deg); - -moz-transform: rotate(205deg); - -ms-transform: rotate(205deg); - -o-transform: rotate(205deg); - transform: rotate(205deg); -} -.wi-wind.from-26-deg { - -webkit-transform: rotate(206deg); - -moz-transform: rotate(206deg); - -ms-transform: rotate(206deg); - -o-transform: rotate(206deg); - transform: rotate(206deg); -} -.wi-wind.from-27-deg { - -webkit-transform: rotate(207deg); - -moz-transform: rotate(207deg); - -ms-transform: rotate(207deg); - -o-transform: rotate(207deg); - transform: rotate(207deg); -} -.wi-wind.from-28-deg { - -webkit-transform: rotate(208deg); - -moz-transform: rotate(208deg); - -ms-transform: rotate(208deg); - -o-transform: rotate(208deg); - transform: rotate(208deg); -} -.wi-wind.from-29-deg { - -webkit-transform: rotate(209deg); - -moz-transform: rotate(209deg); - -ms-transform: rotate(209deg); - -o-transform: rotate(209deg); - transform: rotate(209deg); -} -.wi-wind.from-30-deg { - -webkit-transform: rotate(210deg); - -moz-transform: rotate(210deg); - -ms-transform: rotate(210deg); - -o-transform: rotate(210deg); - transform: rotate(210deg); -} -.wi-wind.from-31-deg { - -webkit-transform: rotate(211deg); - -moz-transform: rotate(211deg); - -ms-transform: rotate(211deg); - -o-transform: rotate(211deg); - transform: rotate(211deg); -} -.wi-wind.from-32-deg { - -webkit-transform: rotate(212deg); - -moz-transform: rotate(212deg); - -ms-transform: rotate(212deg); - -o-transform: rotate(212deg); - transform: rotate(212deg); -} -.wi-wind.from-33-deg { - -webkit-transform: rotate(213deg); - -moz-transform: rotate(213deg); - -ms-transform: rotate(213deg); - -o-transform: rotate(213deg); - transform: rotate(213deg); -} -.wi-wind.from-34-deg { - -webkit-transform: rotate(214deg); - -moz-transform: rotate(214deg); - -ms-transform: rotate(214deg); - -o-transform: rotate(214deg); - transform: rotate(214deg); -} -.wi-wind.from-35-deg { - -webkit-transform: rotate(215deg); - -moz-transform: rotate(215deg); - -ms-transform: rotate(215deg); - -o-transform: rotate(215deg); - transform: rotate(215deg); -} -.wi-wind.from-36-deg { - -webkit-transform: rotate(216deg); - -moz-transform: rotate(216deg); - -ms-transform: rotate(216deg); - -o-transform: rotate(216deg); - transform: rotate(216deg); -} -.wi-wind.from-37-deg { - -webkit-transform: rotate(217deg); - -moz-transform: rotate(217deg); - -ms-transform: rotate(217deg); - -o-transform: rotate(217deg); - transform: rotate(217deg); -} -.wi-wind.from-38-deg { - -webkit-transform: rotate(218deg); - -moz-transform: rotate(218deg); - -ms-transform: rotate(218deg); - -o-transform: rotate(218deg); - transform: rotate(218deg); -} -.wi-wind.from-39-deg { - -webkit-transform: rotate(219deg); - -moz-transform: rotate(219deg); - -ms-transform: rotate(219deg); - -o-transform: rotate(219deg); - transform: rotate(219deg); -} -.wi-wind.from-40-deg { - -webkit-transform: rotate(220deg); - -moz-transform: rotate(220deg); - -ms-transform: rotate(220deg); - -o-transform: rotate(220deg); - transform: rotate(220deg); -} -.wi-wind.from-41-deg { - -webkit-transform: rotate(221deg); - -moz-transform: rotate(221deg); - -ms-transform: rotate(221deg); - -o-transform: rotate(221deg); - transform: rotate(221deg); -} -.wi-wind.from-42-deg { - -webkit-transform: rotate(222deg); - -moz-transform: rotate(222deg); - -ms-transform: rotate(222deg); - -o-transform: rotate(222deg); - transform: rotate(222deg); -} -.wi-wind.from-43-deg { - -webkit-transform: rotate(223deg); - -moz-transform: rotate(223deg); - -ms-transform: rotate(223deg); - -o-transform: rotate(223deg); - transform: rotate(223deg); -} -.wi-wind.from-44-deg { - -webkit-transform: rotate(224deg); - -moz-transform: rotate(224deg); - -ms-transform: rotate(224deg); - -o-transform: rotate(224deg); - transform: rotate(224deg); -} -.wi-wind.from-45-deg { - -webkit-transform: rotate(225deg); - -moz-transform: rotate(225deg); - -ms-transform: rotate(225deg); - -o-transform: rotate(225deg); - transform: rotate(225deg); -} -.wi-wind.from-46-deg { - -webkit-transform: rotate(226deg); - -moz-transform: rotate(226deg); - -ms-transform: rotate(226deg); - -o-transform: rotate(226deg); - transform: rotate(226deg); -} -.wi-wind.from-47-deg { - -webkit-transform: rotate(227deg); - -moz-transform: rotate(227deg); - -ms-transform: rotate(227deg); - -o-transform: rotate(227deg); - transform: rotate(227deg); -} -.wi-wind.from-48-deg { - -webkit-transform: rotate(228deg); - -moz-transform: rotate(228deg); - -ms-transform: rotate(228deg); - -o-transform: rotate(228deg); - transform: rotate(228deg); -} -.wi-wind.from-49-deg { - -webkit-transform: rotate(229deg); - -moz-transform: rotate(229deg); - -ms-transform: rotate(229deg); - -o-transform: rotate(229deg); - transform: rotate(229deg); -} -.wi-wind.from-50-deg { - -webkit-transform: rotate(230deg); - -moz-transform: rotate(230deg); - -ms-transform: rotate(230deg); - -o-transform: rotate(230deg); - transform: rotate(230deg); -} -.wi-wind.from-51-deg { - -webkit-transform: rotate(231deg); - -moz-transform: rotate(231deg); - -ms-transform: rotate(231deg); - -o-transform: rotate(231deg); - transform: rotate(231deg); -} -.wi-wind.from-52-deg { - -webkit-transform: rotate(232deg); - -moz-transform: rotate(232deg); - -ms-transform: rotate(232deg); - -o-transform: rotate(232deg); - transform: rotate(232deg); -} -.wi-wind.from-53-deg { - -webkit-transform: rotate(233deg); - -moz-transform: rotate(233deg); - -ms-transform: rotate(233deg); - -o-transform: rotate(233deg); - transform: rotate(233deg); -} -.wi-wind.from-54-deg { - -webkit-transform: rotate(234deg); - -moz-transform: rotate(234deg); - -ms-transform: rotate(234deg); - -o-transform: rotate(234deg); - transform: rotate(234deg); -} -.wi-wind.from-55-deg { - -webkit-transform: rotate(235deg); - -moz-transform: rotate(235deg); - -ms-transform: rotate(235deg); - -o-transform: rotate(235deg); - transform: rotate(235deg); -} -.wi-wind.from-56-deg { - -webkit-transform: rotate(236deg); - -moz-transform: rotate(236deg); - -ms-transform: rotate(236deg); - -o-transform: rotate(236deg); - transform: rotate(236deg); -} -.wi-wind.from-57-deg { - -webkit-transform: rotate(237deg); - -moz-transform: rotate(237deg); - -ms-transform: rotate(237deg); - -o-transform: rotate(237deg); - transform: rotate(237deg); -} -.wi-wind.from-58-deg { - -webkit-transform: rotate(238deg); - -moz-transform: rotate(238deg); - -ms-transform: rotate(238deg); - -o-transform: rotate(238deg); - transform: rotate(238deg); -} -.wi-wind.from-59-deg { - -webkit-transform: rotate(239deg); - -moz-transform: rotate(239deg); - -ms-transform: rotate(239deg); - -o-transform: rotate(239deg); - transform: rotate(239deg); -} -.wi-wind.from-60-deg { - -webkit-transform: rotate(240deg); - -moz-transform: rotate(240deg); - -ms-transform: rotate(240deg); - -o-transform: rotate(240deg); - transform: rotate(240deg); -} -.wi-wind.from-61-deg { - -webkit-transform: rotate(241deg); - -moz-transform: rotate(241deg); - -ms-transform: rotate(241deg); - -o-transform: rotate(241deg); - transform: rotate(241deg); -} -.wi-wind.from-62-deg { - -webkit-transform: rotate(242deg); - -moz-transform: rotate(242deg); - -ms-transform: rotate(242deg); - -o-transform: rotate(242deg); - transform: rotate(242deg); -} -.wi-wind.from-63-deg { - -webkit-transform: rotate(243deg); - -moz-transform: rotate(243deg); - -ms-transform: rotate(243deg); - -o-transform: rotate(243deg); - transform: rotate(243deg); -} -.wi-wind.from-64-deg { - -webkit-transform: rotate(244deg); - -moz-transform: rotate(244deg); - -ms-transform: rotate(244deg); - -o-transform: rotate(244deg); - transform: rotate(244deg); -} -.wi-wind.from-65-deg { - -webkit-transform: rotate(245deg); - -moz-transform: rotate(245deg); - -ms-transform: rotate(245deg); - -o-transform: rotate(245deg); - transform: rotate(245deg); -} -.wi-wind.from-66-deg { - -webkit-transform: rotate(246deg); - -moz-transform: rotate(246deg); - -ms-transform: rotate(246deg); - -o-transform: rotate(246deg); - transform: rotate(246deg); -} -.wi-wind.from-67-deg { - -webkit-transform: rotate(247deg); - -moz-transform: rotate(247deg); - -ms-transform: rotate(247deg); - -o-transform: rotate(247deg); - transform: rotate(247deg); -} -.wi-wind.from-68-deg { - -webkit-transform: rotate(248deg); - -moz-transform: rotate(248deg); - -ms-transform: rotate(248deg); - -o-transform: rotate(248deg); - transform: rotate(248deg); -} -.wi-wind.from-69-deg { - -webkit-transform: rotate(249deg); - -moz-transform: rotate(249deg); - -ms-transform: rotate(249deg); - -o-transform: rotate(249deg); - transform: rotate(249deg); -} -.wi-wind.from-70-deg { - -webkit-transform: rotate(250deg); - -moz-transform: rotate(250deg); - -ms-transform: rotate(250deg); - -o-transform: rotate(250deg); - transform: rotate(250deg); -} -.wi-wind.from-71-deg { - -webkit-transform: rotate(251deg); - -moz-transform: rotate(251deg); - -ms-transform: rotate(251deg); - -o-transform: rotate(251deg); - transform: rotate(251deg); -} -.wi-wind.from-72-deg { - -webkit-transform: rotate(252deg); - -moz-transform: rotate(252deg); - -ms-transform: rotate(252deg); - -o-transform: rotate(252deg); - transform: rotate(252deg); -} -.wi-wind.from-73-deg { - -webkit-transform: rotate(253deg); - -moz-transform: rotate(253deg); - -ms-transform: rotate(253deg); - -o-transform: rotate(253deg); - transform: rotate(253deg); -} -.wi-wind.from-74-deg { - -webkit-transform: rotate(254deg); - -moz-transform: rotate(254deg); - -ms-transform: rotate(254deg); - -o-transform: rotate(254deg); - transform: rotate(254deg); -} -.wi-wind.from-75-deg { - -webkit-transform: rotate(255deg); - -moz-transform: rotate(255deg); - -ms-transform: rotate(255deg); - -o-transform: rotate(255deg); - transform: rotate(255deg); -} -.wi-wind.from-76-deg { - -webkit-transform: rotate(256deg); - -moz-transform: rotate(256deg); - -ms-transform: rotate(256deg); - -o-transform: rotate(256deg); - transform: rotate(256deg); -} -.wi-wind.from-77-deg { - -webkit-transform: rotate(257deg); - -moz-transform: rotate(257deg); - -ms-transform: rotate(257deg); - -o-transform: rotate(257deg); - transform: rotate(257deg); -} -.wi-wind.from-78-deg { - -webkit-transform: rotate(258deg); - -moz-transform: rotate(258deg); - -ms-transform: rotate(258deg); - -o-transform: rotate(258deg); - transform: rotate(258deg); -} -.wi-wind.from-79-deg { - -webkit-transform: rotate(259deg); - -moz-transform: rotate(259deg); - -ms-transform: rotate(259deg); - -o-transform: rotate(259deg); - transform: rotate(259deg); -} -.wi-wind.from-80-deg { - -webkit-transform: rotate(260deg); - -moz-transform: rotate(260deg); - -ms-transform: rotate(260deg); - -o-transform: rotate(260deg); - transform: rotate(260deg); -} -.wi-wind.from-81-deg { - -webkit-transform: rotate(261deg); - -moz-transform: rotate(261deg); - -ms-transform: rotate(261deg); - -o-transform: rotate(261deg); - transform: rotate(261deg); -} -.wi-wind.from-82-deg { - -webkit-transform: rotate(262deg); - -moz-transform: rotate(262deg); - -ms-transform: rotate(262deg); - -o-transform: rotate(262deg); - transform: rotate(262deg); -} -.wi-wind.from-83-deg { - -webkit-transform: rotate(263deg); - -moz-transform: rotate(263deg); - -ms-transform: rotate(263deg); - -o-transform: rotate(263deg); - transform: rotate(263deg); -} -.wi-wind.from-84-deg { - -webkit-transform: rotate(264deg); - -moz-transform: rotate(264deg); - -ms-transform: rotate(264deg); - -o-transform: rotate(264deg); - transform: rotate(264deg); -} -.wi-wind.from-85-deg { - -webkit-transform: rotate(265deg); - -moz-transform: rotate(265deg); - -ms-transform: rotate(265deg); - -o-transform: rotate(265deg); - transform: rotate(265deg); -} -.wi-wind.from-86-deg { - -webkit-transform: rotate(266deg); - -moz-transform: rotate(266deg); - -ms-transform: rotate(266deg); - -o-transform: rotate(266deg); - transform: rotate(266deg); -} -.wi-wind.from-87-deg { - -webkit-transform: rotate(267deg); - -moz-transform: rotate(267deg); - -ms-transform: rotate(267deg); - -o-transform: rotate(267deg); - transform: rotate(267deg); -} -.wi-wind.from-88-deg { - -webkit-transform: rotate(268deg); - -moz-transform: rotate(268deg); - -ms-transform: rotate(268deg); - -o-transform: rotate(268deg); - transform: rotate(268deg); -} -.wi-wind.from-89-deg { - -webkit-transform: rotate(269deg); - -moz-transform: rotate(269deg); - -ms-transform: rotate(269deg); - -o-transform: rotate(269deg); - transform: rotate(269deg); -} -.wi-wind.from-90-deg { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-wind.from-91-deg { - -webkit-transform: rotate(271deg); - -moz-transform: rotate(271deg); - -ms-transform: rotate(271deg); - -o-transform: rotate(271deg); - transform: rotate(271deg); -} -.wi-wind.from-92-deg { - -webkit-transform: rotate(272deg); - -moz-transform: rotate(272deg); - -ms-transform: rotate(272deg); - -o-transform: rotate(272deg); - transform: rotate(272deg); -} -.wi-wind.from-93-deg { - -webkit-transform: rotate(273deg); - -moz-transform: rotate(273deg); - -ms-transform: rotate(273deg); - -o-transform: rotate(273deg); - transform: rotate(273deg); -} -.wi-wind.from-94-deg { - -webkit-transform: rotate(274deg); - -moz-transform: rotate(274deg); - -ms-transform: rotate(274deg); - -o-transform: rotate(274deg); - transform: rotate(274deg); -} -.wi-wind.from-95-deg { - -webkit-transform: rotate(275deg); - -moz-transform: rotate(275deg); - -ms-transform: rotate(275deg); - -o-transform: rotate(275deg); - transform: rotate(275deg); -} -.wi-wind.from-96-deg { - -webkit-transform: rotate(276deg); - -moz-transform: rotate(276deg); - -ms-transform: rotate(276deg); - -o-transform: rotate(276deg); - transform: rotate(276deg); -} -.wi-wind.from-97-deg { - -webkit-transform: rotate(277deg); - -moz-transform: rotate(277deg); - -ms-transform: rotate(277deg); - -o-transform: rotate(277deg); - transform: rotate(277deg); -} -.wi-wind.from-98-deg { - -webkit-transform: rotate(278deg); - -moz-transform: rotate(278deg); - -ms-transform: rotate(278deg); - -o-transform: rotate(278deg); - transform: rotate(278deg); -} -.wi-wind.from-99-deg { - -webkit-transform: rotate(279deg); - -moz-transform: rotate(279deg); - -ms-transform: rotate(279deg); - -o-transform: rotate(279deg); - transform: rotate(279deg); -} -.wi-wind.from-100-deg { - -webkit-transform: rotate(280deg); - -moz-transform: rotate(280deg); - -ms-transform: rotate(280deg); - -o-transform: rotate(280deg); - transform: rotate(280deg); -} -.wi-wind.from-101-deg { - -webkit-transform: rotate(281deg); - -moz-transform: rotate(281deg); - -ms-transform: rotate(281deg); - -o-transform: rotate(281deg); - transform: rotate(281deg); -} -.wi-wind.from-102-deg { - -webkit-transform: rotate(282deg); - -moz-transform: rotate(282deg); - -ms-transform: rotate(282deg); - -o-transform: rotate(282deg); - transform: rotate(282deg); -} -.wi-wind.from-103-deg { - -webkit-transform: rotate(283deg); - -moz-transform: rotate(283deg); - -ms-transform: rotate(283deg); - -o-transform: rotate(283deg); - transform: rotate(283deg); -} -.wi-wind.from-104-deg { - -webkit-transform: rotate(284deg); - -moz-transform: rotate(284deg); - -ms-transform: rotate(284deg); - -o-transform: rotate(284deg); - transform: rotate(284deg); -} -.wi-wind.from-105-deg { - -webkit-transform: rotate(285deg); - -moz-transform: rotate(285deg); - -ms-transform: rotate(285deg); - -o-transform: rotate(285deg); - transform: rotate(285deg); -} -.wi-wind.from-106-deg { - -webkit-transform: rotate(286deg); - -moz-transform: rotate(286deg); - -ms-transform: rotate(286deg); - -o-transform: rotate(286deg); - transform: rotate(286deg); -} -.wi-wind.from-107-deg { - -webkit-transform: rotate(287deg); - -moz-transform: rotate(287deg); - -ms-transform: rotate(287deg); - -o-transform: rotate(287deg); - transform: rotate(287deg); -} -.wi-wind.from-108-deg { - -webkit-transform: rotate(288deg); - -moz-transform: rotate(288deg); - -ms-transform: rotate(288deg); - -o-transform: rotate(288deg); - transform: rotate(288deg); -} -.wi-wind.from-109-deg { - -webkit-transform: rotate(289deg); - -moz-transform: rotate(289deg); - -ms-transform: rotate(289deg); - -o-transform: rotate(289deg); - transform: rotate(289deg); -} -.wi-wind.from-110-deg { - -webkit-transform: rotate(290deg); - -moz-transform: rotate(290deg); - -ms-transform: rotate(290deg); - -o-transform: rotate(290deg); - transform: rotate(290deg); -} -.wi-wind.from-111-deg { - -webkit-transform: rotate(291deg); - -moz-transform: rotate(291deg); - -ms-transform: rotate(291deg); - -o-transform: rotate(291deg); - transform: rotate(291deg); -} -.wi-wind.from-112-deg { - -webkit-transform: rotate(292deg); - -moz-transform: rotate(292deg); - -ms-transform: rotate(292deg); - -o-transform: rotate(292deg); - transform: rotate(292deg); -} -.wi-wind.from-113-deg { - -webkit-transform: rotate(293deg); - -moz-transform: rotate(293deg); - -ms-transform: rotate(293deg); - -o-transform: rotate(293deg); - transform: rotate(293deg); -} -.wi-wind.from-114-deg { - -webkit-transform: rotate(294deg); - -moz-transform: rotate(294deg); - -ms-transform: rotate(294deg); - -o-transform: rotate(294deg); - transform: rotate(294deg); -} -.wi-wind.from-115-deg { - -webkit-transform: rotate(295deg); - -moz-transform: rotate(295deg); - -ms-transform: rotate(295deg); - -o-transform: rotate(295deg); - transform: rotate(295deg); -} -.wi-wind.from-116-deg { - -webkit-transform: rotate(296deg); - -moz-transform: rotate(296deg); - -ms-transform: rotate(296deg); - -o-transform: rotate(296deg); - transform: rotate(296deg); -} -.wi-wind.from-117-deg { - -webkit-transform: rotate(297deg); - -moz-transform: rotate(297deg); - -ms-transform: rotate(297deg); - -o-transform: rotate(297deg); - transform: rotate(297deg); -} -.wi-wind.from-118-deg { - -webkit-transform: rotate(298deg); - -moz-transform: rotate(298deg); - -ms-transform: rotate(298deg); - -o-transform: rotate(298deg); - transform: rotate(298deg); -} -.wi-wind.from-119-deg { - -webkit-transform: rotate(299deg); - -moz-transform: rotate(299deg); - -ms-transform: rotate(299deg); - -o-transform: rotate(299deg); - transform: rotate(299deg); -} -.wi-wind.from-120-deg { - -webkit-transform: rotate(300deg); - -moz-transform: rotate(300deg); - -ms-transform: rotate(300deg); - -o-transform: rotate(300deg); - transform: rotate(300deg); -} -.wi-wind.from-121-deg { - -webkit-transform: rotate(301deg); - -moz-transform: rotate(301deg); - -ms-transform: rotate(301deg); - -o-transform: rotate(301deg); - transform: rotate(301deg); -} -.wi-wind.from-122-deg { - -webkit-transform: rotate(302deg); - -moz-transform: rotate(302deg); - -ms-transform: rotate(302deg); - -o-transform: rotate(302deg); - transform: rotate(302deg); -} -.wi-wind.from-123-deg { - -webkit-transform: rotate(303deg); - -moz-transform: rotate(303deg); - -ms-transform: rotate(303deg); - -o-transform: rotate(303deg); - transform: rotate(303deg); -} -.wi-wind.from-124-deg { - -webkit-transform: rotate(304deg); - -moz-transform: rotate(304deg); - -ms-transform: rotate(304deg); - -o-transform: rotate(304deg); - transform: rotate(304deg); -} -.wi-wind.from-125-deg { - -webkit-transform: rotate(305deg); - -moz-transform: rotate(305deg); - -ms-transform: rotate(305deg); - -o-transform: rotate(305deg); - transform: rotate(305deg); -} -.wi-wind.from-126-deg { - -webkit-transform: rotate(306deg); - -moz-transform: rotate(306deg); - -ms-transform: rotate(306deg); - -o-transform: rotate(306deg); - transform: rotate(306deg); -} -.wi-wind.from-127-deg { - -webkit-transform: rotate(307deg); - -moz-transform: rotate(307deg); - -ms-transform: rotate(307deg); - -o-transform: rotate(307deg); - transform: rotate(307deg); -} -.wi-wind.from-128-deg { - -webkit-transform: rotate(308deg); - -moz-transform: rotate(308deg); - -ms-transform: rotate(308deg); - -o-transform: rotate(308deg); - transform: rotate(308deg); -} -.wi-wind.from-129-deg { - -webkit-transform: rotate(309deg); - -moz-transform: rotate(309deg); - -ms-transform: rotate(309deg); - -o-transform: rotate(309deg); - transform: rotate(309deg); -} -.wi-wind.from-130-deg { - -webkit-transform: rotate(310deg); - -moz-transform: rotate(310deg); - -ms-transform: rotate(310deg); - -o-transform: rotate(310deg); - transform: rotate(310deg); -} -.wi-wind.from-131-deg { - -webkit-transform: rotate(311deg); - -moz-transform: rotate(311deg); - -ms-transform: rotate(311deg); - -o-transform: rotate(311deg); - transform: rotate(311deg); -} -.wi-wind.from-132-deg { - -webkit-transform: rotate(312deg); - -moz-transform: rotate(312deg); - -ms-transform: rotate(312deg); - -o-transform: rotate(312deg); - transform: rotate(312deg); -} -.wi-wind.from-133-deg { - -webkit-transform: rotate(313deg); - -moz-transform: rotate(313deg); - -ms-transform: rotate(313deg); - -o-transform: rotate(313deg); - transform: rotate(313deg); -} -.wi-wind.from-134-deg { - -webkit-transform: rotate(314deg); - -moz-transform: rotate(314deg); - -ms-transform: rotate(314deg); - -o-transform: rotate(314deg); - transform: rotate(314deg); -} -.wi-wind.from-135-deg { - -webkit-transform: rotate(315deg); - -moz-transform: rotate(315deg); - -ms-transform: rotate(315deg); - -o-transform: rotate(315deg); - transform: rotate(315deg); -} -.wi-wind.from-136-deg { - -webkit-transform: rotate(316deg); - -moz-transform: rotate(316deg); - -ms-transform: rotate(316deg); - -o-transform: rotate(316deg); - transform: rotate(316deg); -} -.wi-wind.from-137-deg { - -webkit-transform: rotate(317deg); - -moz-transform: rotate(317deg); - -ms-transform: rotate(317deg); - -o-transform: rotate(317deg); - transform: rotate(317deg); -} -.wi-wind.from-138-deg { - -webkit-transform: rotate(318deg); - -moz-transform: rotate(318deg); - -ms-transform: rotate(318deg); - -o-transform: rotate(318deg); - transform: rotate(318deg); -} -.wi-wind.from-139-deg { - -webkit-transform: rotate(319deg); - -moz-transform: rotate(319deg); - -ms-transform: rotate(319deg); - -o-transform: rotate(319deg); - transform: rotate(319deg); -} -.wi-wind.from-140-deg { - -webkit-transform: rotate(320deg); - -moz-transform: rotate(320deg); - -ms-transform: rotate(320deg); - -o-transform: rotate(320deg); - transform: rotate(320deg); -} -.wi-wind.from-141-deg { - -webkit-transform: rotate(321deg); - -moz-transform: rotate(321deg); - -ms-transform: rotate(321deg); - -o-transform: rotate(321deg); - transform: rotate(321deg); -} -.wi-wind.from-142-deg { - -webkit-transform: rotate(322deg); - -moz-transform: rotate(322deg); - -ms-transform: rotate(322deg); - -o-transform: rotate(322deg); - transform: rotate(322deg); -} -.wi-wind.from-143-deg { - -webkit-transform: rotate(323deg); - -moz-transform: rotate(323deg); - -ms-transform: rotate(323deg); - -o-transform: rotate(323deg); - transform: rotate(323deg); -} -.wi-wind.from-144-deg { - -webkit-transform: rotate(324deg); - -moz-transform: rotate(324deg); - -ms-transform: rotate(324deg); - -o-transform: rotate(324deg); - transform: rotate(324deg); -} -.wi-wind.from-145-deg { - -webkit-transform: rotate(325deg); - -moz-transform: rotate(325deg); - -ms-transform: rotate(325deg); - -o-transform: rotate(325deg); - transform: rotate(325deg); -} -.wi-wind.from-146-deg { - -webkit-transform: rotate(326deg); - -moz-transform: rotate(326deg); - -ms-transform: rotate(326deg); - -o-transform: rotate(326deg); - transform: rotate(326deg); -} -.wi-wind.from-147-deg { - -webkit-transform: rotate(327deg); - -moz-transform: rotate(327deg); - -ms-transform: rotate(327deg); - -o-transform: rotate(327deg); - transform: rotate(327deg); -} -.wi-wind.from-148-deg { - -webkit-transform: rotate(328deg); - -moz-transform: rotate(328deg); - -ms-transform: rotate(328deg); - -o-transform: rotate(328deg); - transform: rotate(328deg); -} -.wi-wind.from-149-deg { - -webkit-transform: rotate(329deg); - -moz-transform: rotate(329deg); - -ms-transform: rotate(329deg); - -o-transform: rotate(329deg); - transform: rotate(329deg); -} -.wi-wind.from-150-deg { - -webkit-transform: rotate(330deg); - -moz-transform: rotate(330deg); - -ms-transform: rotate(330deg); - -o-transform: rotate(330deg); - transform: rotate(330deg); -} -.wi-wind.from-151-deg { - -webkit-transform: rotate(331deg); - -moz-transform: rotate(331deg); - -ms-transform: rotate(331deg); - -o-transform: rotate(331deg); - transform: rotate(331deg); -} -.wi-wind.from-152-deg { - -webkit-transform: rotate(332deg); - -moz-transform: rotate(332deg); - -ms-transform: rotate(332deg); - -o-transform: rotate(332deg); - transform: rotate(332deg); -} -.wi-wind.from-153-deg { - -webkit-transform: rotate(333deg); - -moz-transform: rotate(333deg); - -ms-transform: rotate(333deg); - -o-transform: rotate(333deg); - transform: rotate(333deg); -} -.wi-wind.from-154-deg { - -webkit-transform: rotate(334deg); - -moz-transform: rotate(334deg); - -ms-transform: rotate(334deg); - -o-transform: rotate(334deg); - transform: rotate(334deg); -} -.wi-wind.from-155-deg { - -webkit-transform: rotate(335deg); - -moz-transform: rotate(335deg); - -ms-transform: rotate(335deg); - -o-transform: rotate(335deg); - transform: rotate(335deg); -} -.wi-wind.from-156-deg { - -webkit-transform: rotate(336deg); - -moz-transform: rotate(336deg); - -ms-transform: rotate(336deg); - -o-transform: rotate(336deg); - transform: rotate(336deg); -} -.wi-wind.from-157-deg { - -webkit-transform: rotate(337deg); - -moz-transform: rotate(337deg); - -ms-transform: rotate(337deg); - -o-transform: rotate(337deg); - transform: rotate(337deg); -} -.wi-wind.from-158-deg { - -webkit-transform: rotate(338deg); - -moz-transform: rotate(338deg); - -ms-transform: rotate(338deg); - -o-transform: rotate(338deg); - transform: rotate(338deg); -} -.wi-wind.from-159-deg { - -webkit-transform: rotate(339deg); - -moz-transform: rotate(339deg); - -ms-transform: rotate(339deg); - -o-transform: rotate(339deg); - transform: rotate(339deg); -} -.wi-wind.from-160-deg { - -webkit-transform: rotate(340deg); - -moz-transform: rotate(340deg); - -ms-transform: rotate(340deg); - -o-transform: rotate(340deg); - transform: rotate(340deg); -} -.wi-wind.from-161-deg { - -webkit-transform: rotate(341deg); - -moz-transform: rotate(341deg); - -ms-transform: rotate(341deg); - -o-transform: rotate(341deg); - transform: rotate(341deg); -} -.wi-wind.from-162-deg { - -webkit-transform: rotate(342deg); - -moz-transform: rotate(342deg); - -ms-transform: rotate(342deg); - -o-transform: rotate(342deg); - transform: rotate(342deg); -} -.wi-wind.from-163-deg { - -webkit-transform: rotate(343deg); - -moz-transform: rotate(343deg); - -ms-transform: rotate(343deg); - -o-transform: rotate(343deg); - transform: rotate(343deg); -} -.wi-wind.from-164-deg { - -webkit-transform: rotate(344deg); - -moz-transform: rotate(344deg); - -ms-transform: rotate(344deg); - -o-transform: rotate(344deg); - transform: rotate(344deg); -} -.wi-wind.from-165-deg { - -webkit-transform: rotate(345deg); - -moz-transform: rotate(345deg); - -ms-transform: rotate(345deg); - -o-transform: rotate(345deg); - transform: rotate(345deg); -} -.wi-wind.from-166-deg { - -webkit-transform: rotate(346deg); - -moz-transform: rotate(346deg); - -ms-transform: rotate(346deg); - -o-transform: rotate(346deg); - transform: rotate(346deg); -} -.wi-wind.from-167-deg { - -webkit-transform: rotate(347deg); - -moz-transform: rotate(347deg); - -ms-transform: rotate(347deg); - -o-transform: rotate(347deg); - transform: rotate(347deg); -} -.wi-wind.from-168-deg { - -webkit-transform: rotate(348deg); - -moz-transform: rotate(348deg); - -ms-transform: rotate(348deg); - -o-transform: rotate(348deg); - transform: rotate(348deg); -} -.wi-wind.from-169-deg { - -webkit-transform: rotate(349deg); - -moz-transform: rotate(349deg); - -ms-transform: rotate(349deg); - -o-transform: rotate(349deg); - transform: rotate(349deg); -} -.wi-wind.from-170-deg { - -webkit-transform: rotate(350deg); - -moz-transform: rotate(350deg); - -ms-transform: rotate(350deg); - -o-transform: rotate(350deg); - transform: rotate(350deg); -} -.wi-wind.from-171-deg { - -webkit-transform: rotate(351deg); - -moz-transform: rotate(351deg); - -ms-transform: rotate(351deg); - -o-transform: rotate(351deg); - transform: rotate(351deg); -} -.wi-wind.from-172-deg { - -webkit-transform: rotate(352deg); - -moz-transform: rotate(352deg); - -ms-transform: rotate(352deg); - -o-transform: rotate(352deg); - transform: rotate(352deg); -} -.wi-wind.from-173-deg { - -webkit-transform: rotate(353deg); - -moz-transform: rotate(353deg); - -ms-transform: rotate(353deg); - -o-transform: rotate(353deg); - transform: rotate(353deg); -} -.wi-wind.from-174-deg { - -webkit-transform: rotate(354deg); - -moz-transform: rotate(354deg); - -ms-transform: rotate(354deg); - -o-transform: rotate(354deg); - transform: rotate(354deg); -} -.wi-wind.from-175-deg { - -webkit-transform: rotate(355deg); - -moz-transform: rotate(355deg); - -ms-transform: rotate(355deg); - -o-transform: rotate(355deg); - transform: rotate(355deg); -} -.wi-wind.from-176-deg { - -webkit-transform: rotate(356deg); - -moz-transform: rotate(356deg); - -ms-transform: rotate(356deg); - -o-transform: rotate(356deg); - transform: rotate(356deg); -} -.wi-wind.from-177-deg { - -webkit-transform: rotate(357deg); - -moz-transform: rotate(357deg); - -ms-transform: rotate(357deg); - -o-transform: rotate(357deg); - transform: rotate(357deg); -} -.wi-wind.from-178-deg { - -webkit-transform: rotate(358deg); - -moz-transform: rotate(358deg); - -ms-transform: rotate(358deg); - -o-transform: rotate(358deg); - transform: rotate(358deg); -} -.wi-wind.from-179-deg { - -webkit-transform: rotate(359deg); - -moz-transform: rotate(359deg); - -ms-transform: rotate(359deg); - -o-transform: rotate(359deg); - transform: rotate(359deg); -} -.wi-wind.from-180-deg { - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -o-transform: rotate(0deg); - transform: rotate(0deg); -} -.wi-wind.from-181-deg { - -webkit-transform: rotate(1deg); - -moz-transform: rotate(1deg); - -ms-transform: rotate(1deg); - -o-transform: rotate(1deg); - transform: rotate(1deg); -} -.wi-wind.from-182-deg { - -webkit-transform: rotate(2deg); - -moz-transform: rotate(2deg); - -ms-transform: rotate(2deg); - -o-transform: rotate(2deg); - transform: rotate(2deg); -} -.wi-wind.from-183-deg { - -webkit-transform: rotate(3deg); - -moz-transform: rotate(3deg); - -ms-transform: rotate(3deg); - -o-transform: rotate(3deg); - transform: rotate(3deg); -} -.wi-wind.from-184-deg { - -webkit-transform: rotate(4deg); - -moz-transform: rotate(4deg); - -ms-transform: rotate(4deg); - -o-transform: rotate(4deg); - transform: rotate(4deg); -} -.wi-wind.from-185-deg { - -webkit-transform: rotate(5deg); - -moz-transform: rotate(5deg); - -ms-transform: rotate(5deg); - -o-transform: rotate(5deg); - transform: rotate(5deg); -} -.wi-wind.from-186-deg { - -webkit-transform: rotate(6deg); - -moz-transform: rotate(6deg); - -ms-transform: rotate(6deg); - -o-transform: rotate(6deg); - transform: rotate(6deg); -} -.wi-wind.from-187-deg { - -webkit-transform: rotate(7deg); - -moz-transform: rotate(7deg); - -ms-transform: rotate(7deg); - -o-transform: rotate(7deg); - transform: rotate(7deg); -} -.wi-wind.from-188-deg { - -webkit-transform: rotate(8deg); - -moz-transform: rotate(8deg); - -ms-transform: rotate(8deg); - -o-transform: rotate(8deg); - transform: rotate(8deg); -} -.wi-wind.from-189-deg { - -webkit-transform: rotate(9deg); - -moz-transform: rotate(9deg); - -ms-transform: rotate(9deg); - -o-transform: rotate(9deg); - transform: rotate(9deg); -} -.wi-wind.from-190-deg { - -webkit-transform: rotate(10deg); - -moz-transform: rotate(10deg); - -ms-transform: rotate(10deg); - -o-transform: rotate(10deg); - transform: rotate(10deg); -} -.wi-wind.from-191-deg { - -webkit-transform: rotate(11deg); - -moz-transform: rotate(11deg); - -ms-transform: rotate(11deg); - -o-transform: rotate(11deg); - transform: rotate(11deg); -} -.wi-wind.from-192-deg { - -webkit-transform: rotate(12deg); - -moz-transform: rotate(12deg); - -ms-transform: rotate(12deg); - -o-transform: rotate(12deg); - transform: rotate(12deg); -} -.wi-wind.from-193-deg { - -webkit-transform: rotate(13deg); - -moz-transform: rotate(13deg); - -ms-transform: rotate(13deg); - -o-transform: rotate(13deg); - transform: rotate(13deg); -} -.wi-wind.from-194-deg { - -webkit-transform: rotate(14deg); - -moz-transform: rotate(14deg); - -ms-transform: rotate(14deg); - -o-transform: rotate(14deg); - transform: rotate(14deg); -} -.wi-wind.from-195-deg { - -webkit-transform: rotate(15deg); - -moz-transform: rotate(15deg); - -ms-transform: rotate(15deg); - -o-transform: rotate(15deg); - transform: rotate(15deg); -} -.wi-wind.from-196-deg { - -webkit-transform: rotate(16deg); - -moz-transform: rotate(16deg); - -ms-transform: rotate(16deg); - -o-transform: rotate(16deg); - transform: rotate(16deg); -} -.wi-wind.from-197-deg { - -webkit-transform: rotate(17deg); - -moz-transform: rotate(17deg); - -ms-transform: rotate(17deg); - -o-transform: rotate(17deg); - transform: rotate(17deg); -} -.wi-wind.from-198-deg { - -webkit-transform: rotate(18deg); - -moz-transform: rotate(18deg); - -ms-transform: rotate(18deg); - -o-transform: rotate(18deg); - transform: rotate(18deg); -} -.wi-wind.from-199-deg { - -webkit-transform: rotate(19deg); - -moz-transform: rotate(19deg); - -ms-transform: rotate(19deg); - -o-transform: rotate(19deg); - transform: rotate(19deg); -} -.wi-wind.from-200-deg { - -webkit-transform: rotate(20deg); - -moz-transform: rotate(20deg); - -ms-transform: rotate(20deg); - -o-transform: rotate(20deg); - transform: rotate(20deg); -} -.wi-wind.from-201-deg { - -webkit-transform: rotate(21deg); - -moz-transform: rotate(21deg); - -ms-transform: rotate(21deg); - -o-transform: rotate(21deg); - transform: rotate(21deg); -} -.wi-wind.from-202-deg { - -webkit-transform: rotate(22deg); - -moz-transform: rotate(22deg); - -ms-transform: rotate(22deg); - -o-transform: rotate(22deg); - transform: rotate(22deg); -} -.wi-wind.from-203-deg { - -webkit-transform: rotate(23deg); - -moz-transform: rotate(23deg); - -ms-transform: rotate(23deg); - -o-transform: rotate(23deg); - transform: rotate(23deg); -} -.wi-wind.from-204-deg { - -webkit-transform: rotate(24deg); - -moz-transform: rotate(24deg); - -ms-transform: rotate(24deg); - -o-transform: rotate(24deg); - transform: rotate(24deg); -} -.wi-wind.from-205-deg { - -webkit-transform: rotate(25deg); - -moz-transform: rotate(25deg); - -ms-transform: rotate(25deg); - -o-transform: rotate(25deg); - transform: rotate(25deg); -} -.wi-wind.from-206-deg { - -webkit-transform: rotate(26deg); - -moz-transform: rotate(26deg); - -ms-transform: rotate(26deg); - -o-transform: rotate(26deg); - transform: rotate(26deg); -} -.wi-wind.from-207-deg { - -webkit-transform: rotate(27deg); - -moz-transform: rotate(27deg); - -ms-transform: rotate(27deg); - -o-transform: rotate(27deg); - transform: rotate(27deg); -} -.wi-wind.from-208-deg { - -webkit-transform: rotate(28deg); - -moz-transform: rotate(28deg); - -ms-transform: rotate(28deg); - -o-transform: rotate(28deg); - transform: rotate(28deg); -} -.wi-wind.from-209-deg { - -webkit-transform: rotate(29deg); - -moz-transform: rotate(29deg); - -ms-transform: rotate(29deg); - -o-transform: rotate(29deg); - transform: rotate(29deg); -} -.wi-wind.from-210-deg { - -webkit-transform: rotate(30deg); - -moz-transform: rotate(30deg); - -ms-transform: rotate(30deg); - -o-transform: rotate(30deg); - transform: rotate(30deg); -} -.wi-wind.from-211-deg { - -webkit-transform: rotate(31deg); - -moz-transform: rotate(31deg); - -ms-transform: rotate(31deg); - -o-transform: rotate(31deg); - transform: rotate(31deg); -} -.wi-wind.from-212-deg { - -webkit-transform: rotate(32deg); - -moz-transform: rotate(32deg); - -ms-transform: rotate(32deg); - -o-transform: rotate(32deg); - transform: rotate(32deg); -} -.wi-wind.from-213-deg { - -webkit-transform: rotate(33deg); - -moz-transform: rotate(33deg); - -ms-transform: rotate(33deg); - -o-transform: rotate(33deg); - transform: rotate(33deg); -} -.wi-wind.from-214-deg { - -webkit-transform: rotate(34deg); - -moz-transform: rotate(34deg); - -ms-transform: rotate(34deg); - -o-transform: rotate(34deg); - transform: rotate(34deg); -} -.wi-wind.from-215-deg { - -webkit-transform: rotate(35deg); - -moz-transform: rotate(35deg); - -ms-transform: rotate(35deg); - -o-transform: rotate(35deg); - transform: rotate(35deg); -} -.wi-wind.from-216-deg { - -webkit-transform: rotate(36deg); - -moz-transform: rotate(36deg); - -ms-transform: rotate(36deg); - -o-transform: rotate(36deg); - transform: rotate(36deg); -} -.wi-wind.from-217-deg { - -webkit-transform: rotate(37deg); - -moz-transform: rotate(37deg); - -ms-transform: rotate(37deg); - -o-transform: rotate(37deg); - transform: rotate(37deg); -} -.wi-wind.from-218-deg { - -webkit-transform: rotate(38deg); - -moz-transform: rotate(38deg); - -ms-transform: rotate(38deg); - -o-transform: rotate(38deg); - transform: rotate(38deg); -} -.wi-wind.from-219-deg { - -webkit-transform: rotate(39deg); - -moz-transform: rotate(39deg); - -ms-transform: rotate(39deg); - -o-transform: rotate(39deg); - transform: rotate(39deg); -} -.wi-wind.from-220-deg { - -webkit-transform: rotate(40deg); - -moz-transform: rotate(40deg); - -ms-transform: rotate(40deg); - -o-transform: rotate(40deg); - transform: rotate(40deg); -} -.wi-wind.from-221-deg { - -webkit-transform: rotate(41deg); - -moz-transform: rotate(41deg); - -ms-transform: rotate(41deg); - -o-transform: rotate(41deg); - transform: rotate(41deg); -} -.wi-wind.from-222-deg { - -webkit-transform: rotate(42deg); - -moz-transform: rotate(42deg); - -ms-transform: rotate(42deg); - -o-transform: rotate(42deg); - transform: rotate(42deg); -} -.wi-wind.from-223-deg { - -webkit-transform: rotate(43deg); - -moz-transform: rotate(43deg); - -ms-transform: rotate(43deg); - -o-transform: rotate(43deg); - transform: rotate(43deg); -} -.wi-wind.from-224-deg { - -webkit-transform: rotate(44deg); - -moz-transform: rotate(44deg); - -ms-transform: rotate(44deg); - -o-transform: rotate(44deg); - transform: rotate(44deg); -} -.wi-wind.from-225-deg { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.wi-wind.from-226-deg { - -webkit-transform: rotate(46deg); - -moz-transform: rotate(46deg); - -ms-transform: rotate(46deg); - -o-transform: rotate(46deg); - transform: rotate(46deg); -} -.wi-wind.from-227-deg { - -webkit-transform: rotate(47deg); - -moz-transform: rotate(47deg); - -ms-transform: rotate(47deg); - -o-transform: rotate(47deg); - transform: rotate(47deg); -} -.wi-wind.from-228-deg { - -webkit-transform: rotate(48deg); - -moz-transform: rotate(48deg); - -ms-transform: rotate(48deg); - -o-transform: rotate(48deg); - transform: rotate(48deg); -} -.wi-wind.from-229-deg { - -webkit-transform: rotate(49deg); - -moz-transform: rotate(49deg); - -ms-transform: rotate(49deg); - -o-transform: rotate(49deg); - transform: rotate(49deg); -} -.wi-wind.from-230-deg { - -webkit-transform: rotate(50deg); - -moz-transform: rotate(50deg); - -ms-transform: rotate(50deg); - -o-transform: rotate(50deg); - transform: rotate(50deg); -} -.wi-wind.from-231-deg { - -webkit-transform: rotate(51deg); - -moz-transform: rotate(51deg); - -ms-transform: rotate(51deg); - -o-transform: rotate(51deg); - transform: rotate(51deg); -} -.wi-wind.from-232-deg { - -webkit-transform: rotate(52deg); - -moz-transform: rotate(52deg); - -ms-transform: rotate(52deg); - -o-transform: rotate(52deg); - transform: rotate(52deg); -} -.wi-wind.from-233-deg { - -webkit-transform: rotate(53deg); - -moz-transform: rotate(53deg); - -ms-transform: rotate(53deg); - -o-transform: rotate(53deg); - transform: rotate(53deg); -} -.wi-wind.from-234-deg { - -webkit-transform: rotate(54deg); - -moz-transform: rotate(54deg); - -ms-transform: rotate(54deg); - -o-transform: rotate(54deg); - transform: rotate(54deg); -} -.wi-wind.from-235-deg { - -webkit-transform: rotate(55deg); - -moz-transform: rotate(55deg); - -ms-transform: rotate(55deg); - -o-transform: rotate(55deg); - transform: rotate(55deg); -} -.wi-wind.from-236-deg { - -webkit-transform: rotate(56deg); - -moz-transform: rotate(56deg); - -ms-transform: rotate(56deg); - -o-transform: rotate(56deg); - transform: rotate(56deg); -} -.wi-wind.from-237-deg { - -webkit-transform: rotate(57deg); - -moz-transform: rotate(57deg); - -ms-transform: rotate(57deg); - -o-transform: rotate(57deg); - transform: rotate(57deg); -} -.wi-wind.from-238-deg { - -webkit-transform: rotate(58deg); - -moz-transform: rotate(58deg); - -ms-transform: rotate(58deg); - -o-transform: rotate(58deg); - transform: rotate(58deg); -} -.wi-wind.from-239-deg { - -webkit-transform: rotate(59deg); - -moz-transform: rotate(59deg); - -ms-transform: rotate(59deg); - -o-transform: rotate(59deg); - transform: rotate(59deg); -} -.wi-wind.from-240-deg { - -webkit-transform: rotate(60deg); - -moz-transform: rotate(60deg); - -ms-transform: rotate(60deg); - -o-transform: rotate(60deg); - transform: rotate(60deg); -} -.wi-wind.from-241-deg { - -webkit-transform: rotate(61deg); - -moz-transform: rotate(61deg); - -ms-transform: rotate(61deg); - -o-transform: rotate(61deg); - transform: rotate(61deg); -} -.wi-wind.from-242-deg { - -webkit-transform: rotate(62deg); - -moz-transform: rotate(62deg); - -ms-transform: rotate(62deg); - -o-transform: rotate(62deg); - transform: rotate(62deg); -} -.wi-wind.from-243-deg { - -webkit-transform: rotate(63deg); - -moz-transform: rotate(63deg); - -ms-transform: rotate(63deg); - -o-transform: rotate(63deg); - transform: rotate(63deg); -} -.wi-wind.from-244-deg { - -webkit-transform: rotate(64deg); - -moz-transform: rotate(64deg); - -ms-transform: rotate(64deg); - -o-transform: rotate(64deg); - transform: rotate(64deg); -} -.wi-wind.from-245-deg { - -webkit-transform: rotate(65deg); - -moz-transform: rotate(65deg); - -ms-transform: rotate(65deg); - -o-transform: rotate(65deg); - transform: rotate(65deg); -} -.wi-wind.from-246-deg { - -webkit-transform: rotate(66deg); - -moz-transform: rotate(66deg); - -ms-transform: rotate(66deg); - -o-transform: rotate(66deg); - transform: rotate(66deg); -} -.wi-wind.from-247-deg { - -webkit-transform: rotate(67deg); - -moz-transform: rotate(67deg); - -ms-transform: rotate(67deg); - -o-transform: rotate(67deg); - transform: rotate(67deg); -} -.wi-wind.from-248-deg { - -webkit-transform: rotate(68deg); - -moz-transform: rotate(68deg); - -ms-transform: rotate(68deg); - -o-transform: rotate(68deg); - transform: rotate(68deg); -} -.wi-wind.from-249-deg { - -webkit-transform: rotate(69deg); - -moz-transform: rotate(69deg); - -ms-transform: rotate(69deg); - -o-transform: rotate(69deg); - transform: rotate(69deg); -} -.wi-wind.from-250-deg { - -webkit-transform: rotate(70deg); - -moz-transform: rotate(70deg); - -ms-transform: rotate(70deg); - -o-transform: rotate(70deg); - transform: rotate(70deg); -} -.wi-wind.from-251-deg { - -webkit-transform: rotate(71deg); - -moz-transform: rotate(71deg); - -ms-transform: rotate(71deg); - -o-transform: rotate(71deg); - transform: rotate(71deg); -} -.wi-wind.from-252-deg { - -webkit-transform: rotate(72deg); - -moz-transform: rotate(72deg); - -ms-transform: rotate(72deg); - -o-transform: rotate(72deg); - transform: rotate(72deg); -} -.wi-wind.from-253-deg { - -webkit-transform: rotate(73deg); - -moz-transform: rotate(73deg); - -ms-transform: rotate(73deg); - -o-transform: rotate(73deg); - transform: rotate(73deg); -} -.wi-wind.from-254-deg { - -webkit-transform: rotate(74deg); - -moz-transform: rotate(74deg); - -ms-transform: rotate(74deg); - -o-transform: rotate(74deg); - transform: rotate(74deg); -} -.wi-wind.from-255-deg { - -webkit-transform: rotate(75deg); - -moz-transform: rotate(75deg); - -ms-transform: rotate(75deg); - -o-transform: rotate(75deg); - transform: rotate(75deg); -} -.wi-wind.from-256-deg { - -webkit-transform: rotate(76deg); - -moz-transform: rotate(76deg); - -ms-transform: rotate(76deg); - -o-transform: rotate(76deg); - transform: rotate(76deg); -} -.wi-wind.from-257-deg { - -webkit-transform: rotate(77deg); - -moz-transform: rotate(77deg); - -ms-transform: rotate(77deg); - -o-transform: rotate(77deg); - transform: rotate(77deg); -} -.wi-wind.from-258-deg { - -webkit-transform: rotate(78deg); - -moz-transform: rotate(78deg); - -ms-transform: rotate(78deg); - -o-transform: rotate(78deg); - transform: rotate(78deg); -} -.wi-wind.from-259-deg { - -webkit-transform: rotate(79deg); - -moz-transform: rotate(79deg); - -ms-transform: rotate(79deg); - -o-transform: rotate(79deg); - transform: rotate(79deg); -} -.wi-wind.from-260-deg { - -webkit-transform: rotate(80deg); - -moz-transform: rotate(80deg); - -ms-transform: rotate(80deg); - -o-transform: rotate(80deg); - transform: rotate(80deg); -} -.wi-wind.from-261-deg { - -webkit-transform: rotate(81deg); - -moz-transform: rotate(81deg); - -ms-transform: rotate(81deg); - -o-transform: rotate(81deg); - transform: rotate(81deg); -} -.wi-wind.from-262-deg { - -webkit-transform: rotate(82deg); - -moz-transform: rotate(82deg); - -ms-transform: rotate(82deg); - -o-transform: rotate(82deg); - transform: rotate(82deg); -} -.wi-wind.from-263-deg { - -webkit-transform: rotate(83deg); - -moz-transform: rotate(83deg); - -ms-transform: rotate(83deg); - -o-transform: rotate(83deg); - transform: rotate(83deg); -} -.wi-wind.from-264-deg { - -webkit-transform: rotate(84deg); - -moz-transform: rotate(84deg); - -ms-transform: rotate(84deg); - -o-transform: rotate(84deg); - transform: rotate(84deg); -} -.wi-wind.from-265-deg { - -webkit-transform: rotate(85deg); - -moz-transform: rotate(85deg); - -ms-transform: rotate(85deg); - -o-transform: rotate(85deg); - transform: rotate(85deg); -} -.wi-wind.from-266-deg { - -webkit-transform: rotate(86deg); - -moz-transform: rotate(86deg); - -ms-transform: rotate(86deg); - -o-transform: rotate(86deg); - transform: rotate(86deg); -} -.wi-wind.from-267-deg { - -webkit-transform: rotate(87deg); - -moz-transform: rotate(87deg); - -ms-transform: rotate(87deg); - -o-transform: rotate(87deg); - transform: rotate(87deg); -} -.wi-wind.from-268-deg { - -webkit-transform: rotate(88deg); - -moz-transform: rotate(88deg); - -ms-transform: rotate(88deg); - -o-transform: rotate(88deg); - transform: rotate(88deg); -} -.wi-wind.from-269-deg { - -webkit-transform: rotate(89deg); - -moz-transform: rotate(89deg); - -ms-transform: rotate(89deg); - -o-transform: rotate(89deg); - transform: rotate(89deg); -} -.wi-wind.from-270-deg { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-wind.from-271-deg { - -webkit-transform: rotate(91deg); - -moz-transform: rotate(91deg); - -ms-transform: rotate(91deg); - -o-transform: rotate(91deg); - transform: rotate(91deg); -} -.wi-wind.from-272-deg { - -webkit-transform: rotate(92deg); - -moz-transform: rotate(92deg); - -ms-transform: rotate(92deg); - -o-transform: rotate(92deg); - transform: rotate(92deg); -} -.wi-wind.from-273-deg { - -webkit-transform: rotate(93deg); - -moz-transform: rotate(93deg); - -ms-transform: rotate(93deg); - -o-transform: rotate(93deg); - transform: rotate(93deg); -} -.wi-wind.from-274-deg { - -webkit-transform: rotate(94deg); - -moz-transform: rotate(94deg); - -ms-transform: rotate(94deg); - -o-transform: rotate(94deg); - transform: rotate(94deg); -} -.wi-wind.from-275-deg { - -webkit-transform: rotate(95deg); - -moz-transform: rotate(95deg); - -ms-transform: rotate(95deg); - -o-transform: rotate(95deg); - transform: rotate(95deg); -} -.wi-wind.from-276-deg { - -webkit-transform: rotate(96deg); - -moz-transform: rotate(96deg); - -ms-transform: rotate(96deg); - -o-transform: rotate(96deg); - transform: rotate(96deg); -} -.wi-wind.from-277-deg { - -webkit-transform: rotate(97deg); - -moz-transform: rotate(97deg); - -ms-transform: rotate(97deg); - -o-transform: rotate(97deg); - transform: rotate(97deg); -} -.wi-wind.from-278-deg { - -webkit-transform: rotate(98deg); - -moz-transform: rotate(98deg); - -ms-transform: rotate(98deg); - -o-transform: rotate(98deg); - transform: rotate(98deg); -} -.wi-wind.from-279-deg { - -webkit-transform: rotate(99deg); - -moz-transform: rotate(99deg); - -ms-transform: rotate(99deg); - -o-transform: rotate(99deg); - transform: rotate(99deg); -} -.wi-wind.from-280-deg { - -webkit-transform: rotate(100deg); - -moz-transform: rotate(100deg); - -ms-transform: rotate(100deg); - -o-transform: rotate(100deg); - transform: rotate(100deg); -} -.wi-wind.from-281-deg { - -webkit-transform: rotate(101deg); - -moz-transform: rotate(101deg); - -ms-transform: rotate(101deg); - -o-transform: rotate(101deg); - transform: rotate(101deg); -} -.wi-wind.from-282-deg { - -webkit-transform: rotate(102deg); - -moz-transform: rotate(102deg); - -ms-transform: rotate(102deg); - -o-transform: rotate(102deg); - transform: rotate(102deg); -} -.wi-wind.from-283-deg { - -webkit-transform: rotate(103deg); - -moz-transform: rotate(103deg); - -ms-transform: rotate(103deg); - -o-transform: rotate(103deg); - transform: rotate(103deg); -} -.wi-wind.from-284-deg { - -webkit-transform: rotate(104deg); - -moz-transform: rotate(104deg); - -ms-transform: rotate(104deg); - -o-transform: rotate(104deg); - transform: rotate(104deg); -} -.wi-wind.from-285-deg { - -webkit-transform: rotate(105deg); - -moz-transform: rotate(105deg); - -ms-transform: rotate(105deg); - -o-transform: rotate(105deg); - transform: rotate(105deg); -} -.wi-wind.from-286-deg { - -webkit-transform: rotate(106deg); - -moz-transform: rotate(106deg); - -ms-transform: rotate(106deg); - -o-transform: rotate(106deg); - transform: rotate(106deg); -} -.wi-wind.from-287-deg { - -webkit-transform: rotate(107deg); - -moz-transform: rotate(107deg); - -ms-transform: rotate(107deg); - -o-transform: rotate(107deg); - transform: rotate(107deg); -} -.wi-wind.from-288-deg { - -webkit-transform: rotate(108deg); - -moz-transform: rotate(108deg); - -ms-transform: rotate(108deg); - -o-transform: rotate(108deg); - transform: rotate(108deg); -} -.wi-wind.from-289-deg { - -webkit-transform: rotate(109deg); - -moz-transform: rotate(109deg); - -ms-transform: rotate(109deg); - -o-transform: rotate(109deg); - transform: rotate(109deg); -} -.wi-wind.from-290-deg { - -webkit-transform: rotate(110deg); - -moz-transform: rotate(110deg); - -ms-transform: rotate(110deg); - -o-transform: rotate(110deg); - transform: rotate(110deg); -} -.wi-wind.from-291-deg { - -webkit-transform: rotate(111deg); - -moz-transform: rotate(111deg); - -ms-transform: rotate(111deg); - -o-transform: rotate(111deg); - transform: rotate(111deg); -} -.wi-wind.from-292-deg { - -webkit-transform: rotate(112deg); - -moz-transform: rotate(112deg); - -ms-transform: rotate(112deg); - -o-transform: rotate(112deg); - transform: rotate(112deg); -} -.wi-wind.from-293-deg { - -webkit-transform: rotate(113deg); - -moz-transform: rotate(113deg); - -ms-transform: rotate(113deg); - -o-transform: rotate(113deg); - transform: rotate(113deg); -} -.wi-wind.from-294-deg { - -webkit-transform: rotate(114deg); - -moz-transform: rotate(114deg); - -ms-transform: rotate(114deg); - -o-transform: rotate(114deg); - transform: rotate(114deg); -} -.wi-wind.from-295-deg { - -webkit-transform: rotate(115deg); - -moz-transform: rotate(115deg); - -ms-transform: rotate(115deg); - -o-transform: rotate(115deg); - transform: rotate(115deg); -} -.wi-wind.from-296-deg { - -webkit-transform: rotate(116deg); - -moz-transform: rotate(116deg); - -ms-transform: rotate(116deg); - -o-transform: rotate(116deg); - transform: rotate(116deg); -} -.wi-wind.from-297-deg { - -webkit-transform: rotate(117deg); - -moz-transform: rotate(117deg); - -ms-transform: rotate(117deg); - -o-transform: rotate(117deg); - transform: rotate(117deg); -} -.wi-wind.from-298-deg { - -webkit-transform: rotate(118deg); - -moz-transform: rotate(118deg); - -ms-transform: rotate(118deg); - -o-transform: rotate(118deg); - transform: rotate(118deg); -} -.wi-wind.from-299-deg { - -webkit-transform: rotate(119deg); - -moz-transform: rotate(119deg); - -ms-transform: rotate(119deg); - -o-transform: rotate(119deg); - transform: rotate(119deg); -} -.wi-wind.from-300-deg { - -webkit-transform: rotate(120deg); - -moz-transform: rotate(120deg); - -ms-transform: rotate(120deg); - -o-transform: rotate(120deg); - transform: rotate(120deg); -} -.wi-wind.from-301-deg { - -webkit-transform: rotate(121deg); - -moz-transform: rotate(121deg); - -ms-transform: rotate(121deg); - -o-transform: rotate(121deg); - transform: rotate(121deg); -} -.wi-wind.from-302-deg { - -webkit-transform: rotate(122deg); - -moz-transform: rotate(122deg); - -ms-transform: rotate(122deg); - -o-transform: rotate(122deg); - transform: rotate(122deg); -} -.wi-wind.from-303-deg { - -webkit-transform: rotate(123deg); - -moz-transform: rotate(123deg); - -ms-transform: rotate(123deg); - -o-transform: rotate(123deg); - transform: rotate(123deg); -} -.wi-wind.from-304-deg { - -webkit-transform: rotate(124deg); - -moz-transform: rotate(124deg); - -ms-transform: rotate(124deg); - -o-transform: rotate(124deg); - transform: rotate(124deg); -} -.wi-wind.from-305-deg { - -webkit-transform: rotate(125deg); - -moz-transform: rotate(125deg); - -ms-transform: rotate(125deg); - -o-transform: rotate(125deg); - transform: rotate(125deg); -} -.wi-wind.from-306-deg { - -webkit-transform: rotate(126deg); - -moz-transform: rotate(126deg); - -ms-transform: rotate(126deg); - -o-transform: rotate(126deg); - transform: rotate(126deg); -} -.wi-wind.from-307-deg { - -webkit-transform: rotate(127deg); - -moz-transform: rotate(127deg); - -ms-transform: rotate(127deg); - -o-transform: rotate(127deg); - transform: rotate(127deg); -} -.wi-wind.from-308-deg { - -webkit-transform: rotate(128deg); - -moz-transform: rotate(128deg); - -ms-transform: rotate(128deg); - -o-transform: rotate(128deg); - transform: rotate(128deg); -} -.wi-wind.from-309-deg { - -webkit-transform: rotate(129deg); - -moz-transform: rotate(129deg); - -ms-transform: rotate(129deg); - -o-transform: rotate(129deg); - transform: rotate(129deg); -} -.wi-wind.from-310-deg { - -webkit-transform: rotate(130deg); - -moz-transform: rotate(130deg); - -ms-transform: rotate(130deg); - -o-transform: rotate(130deg); - transform: rotate(130deg); -} -.wi-wind.from-311-deg { - -webkit-transform: rotate(131deg); - -moz-transform: rotate(131deg); - -ms-transform: rotate(131deg); - -o-transform: rotate(131deg); - transform: rotate(131deg); -} -.wi-wind.from-312-deg { - -webkit-transform: rotate(132deg); - -moz-transform: rotate(132deg); - -ms-transform: rotate(132deg); - -o-transform: rotate(132deg); - transform: rotate(132deg); -} -.wi-wind.from-313-deg { - -webkit-transform: rotate(133deg); - -moz-transform: rotate(133deg); - -ms-transform: rotate(133deg); - -o-transform: rotate(133deg); - transform: rotate(133deg); -} -.wi-wind.from-314-deg { - -webkit-transform: rotate(134deg); - -moz-transform: rotate(134deg); - -ms-transform: rotate(134deg); - -o-transform: rotate(134deg); - transform: rotate(134deg); -} -.wi-wind.from-315-deg { - -webkit-transform: rotate(135deg); - -moz-transform: rotate(135deg); - -ms-transform: rotate(135deg); - -o-transform: rotate(135deg); - transform: rotate(135deg); -} -.wi-wind.from-316-deg { - -webkit-transform: rotate(136deg); - -moz-transform: rotate(136deg); - -ms-transform: rotate(136deg); - -o-transform: rotate(136deg); - transform: rotate(136deg); -} -.wi-wind.from-317-deg { - -webkit-transform: rotate(137deg); - -moz-transform: rotate(137deg); - -ms-transform: rotate(137deg); - -o-transform: rotate(137deg); - transform: rotate(137deg); -} -.wi-wind.from-318-deg { - -webkit-transform: rotate(138deg); - -moz-transform: rotate(138deg); - -ms-transform: rotate(138deg); - -o-transform: rotate(138deg); - transform: rotate(138deg); -} -.wi-wind.from-319-deg { - -webkit-transform: rotate(139deg); - -moz-transform: rotate(139deg); - -ms-transform: rotate(139deg); - -o-transform: rotate(139deg); - transform: rotate(139deg); -} -.wi-wind.from-320-deg { - -webkit-transform: rotate(140deg); - -moz-transform: rotate(140deg); - -ms-transform: rotate(140deg); - -o-transform: rotate(140deg); - transform: rotate(140deg); -} -.wi-wind.from-321-deg { - -webkit-transform: rotate(141deg); - -moz-transform: rotate(141deg); - -ms-transform: rotate(141deg); - -o-transform: rotate(141deg); - transform: rotate(141deg); -} -.wi-wind.from-322-deg { - -webkit-transform: rotate(142deg); - -moz-transform: rotate(142deg); - -ms-transform: rotate(142deg); - -o-transform: rotate(142deg); - transform: rotate(142deg); -} -.wi-wind.from-323-deg { - -webkit-transform: rotate(143deg); - -moz-transform: rotate(143deg); - -ms-transform: rotate(143deg); - -o-transform: rotate(143deg); - transform: rotate(143deg); -} -.wi-wind.from-324-deg { - -webkit-transform: rotate(144deg); - -moz-transform: rotate(144deg); - -ms-transform: rotate(144deg); - -o-transform: rotate(144deg); - transform: rotate(144deg); -} -.wi-wind.from-325-deg { - -webkit-transform: rotate(145deg); - -moz-transform: rotate(145deg); - -ms-transform: rotate(145deg); - -o-transform: rotate(145deg); - transform: rotate(145deg); -} -.wi-wind.from-326-deg { - -webkit-transform: rotate(146deg); - -moz-transform: rotate(146deg); - -ms-transform: rotate(146deg); - -o-transform: rotate(146deg); - transform: rotate(146deg); -} -.wi-wind.from-327-deg { - -webkit-transform: rotate(147deg); - -moz-transform: rotate(147deg); - -ms-transform: rotate(147deg); - -o-transform: rotate(147deg); - transform: rotate(147deg); -} -.wi-wind.from-328-deg { - -webkit-transform: rotate(148deg); - -moz-transform: rotate(148deg); - -ms-transform: rotate(148deg); - -o-transform: rotate(148deg); - transform: rotate(148deg); -} -.wi-wind.from-329-deg { - -webkit-transform: rotate(149deg); - -moz-transform: rotate(149deg); - -ms-transform: rotate(149deg); - -o-transform: rotate(149deg); - transform: rotate(149deg); -} -.wi-wind.from-330-deg { - -webkit-transform: rotate(150deg); - -moz-transform: rotate(150deg); - -ms-transform: rotate(150deg); - -o-transform: rotate(150deg); - transform: rotate(150deg); -} -.wi-wind.from-331-deg { - -webkit-transform: rotate(151deg); - -moz-transform: rotate(151deg); - -ms-transform: rotate(151deg); - -o-transform: rotate(151deg); - transform: rotate(151deg); -} -.wi-wind.from-332-deg { - -webkit-transform: rotate(152deg); - -moz-transform: rotate(152deg); - -ms-transform: rotate(152deg); - -o-transform: rotate(152deg); - transform: rotate(152deg); -} -.wi-wind.from-333-deg { - -webkit-transform: rotate(153deg); - -moz-transform: rotate(153deg); - -ms-transform: rotate(153deg); - -o-transform: rotate(153deg); - transform: rotate(153deg); -} -.wi-wind.from-334-deg { - -webkit-transform: rotate(154deg); - -moz-transform: rotate(154deg); - -ms-transform: rotate(154deg); - -o-transform: rotate(154deg); - transform: rotate(154deg); -} -.wi-wind.from-335-deg { - -webkit-transform: rotate(155deg); - -moz-transform: rotate(155deg); - -ms-transform: rotate(155deg); - -o-transform: rotate(155deg); - transform: rotate(155deg); -} -.wi-wind.from-336-deg { - -webkit-transform: rotate(156deg); - -moz-transform: rotate(156deg); - -ms-transform: rotate(156deg); - -o-transform: rotate(156deg); - transform: rotate(156deg); -} -.wi-wind.from-337-deg { - -webkit-transform: rotate(157deg); - -moz-transform: rotate(157deg); - -ms-transform: rotate(157deg); - -o-transform: rotate(157deg); - transform: rotate(157deg); -} -.wi-wind.from-338-deg { - -webkit-transform: rotate(158deg); - -moz-transform: rotate(158deg); - -ms-transform: rotate(158deg); - -o-transform: rotate(158deg); - transform: rotate(158deg); -} -.wi-wind.from-339-deg { - -webkit-transform: rotate(159deg); - -moz-transform: rotate(159deg); - -ms-transform: rotate(159deg); - -o-transform: rotate(159deg); - transform: rotate(159deg); -} -.wi-wind.from-340-deg { - -webkit-transform: rotate(160deg); - -moz-transform: rotate(160deg); - -ms-transform: rotate(160deg); - -o-transform: rotate(160deg); - transform: rotate(160deg); -} -.wi-wind.from-341-deg { - -webkit-transform: rotate(161deg); - -moz-transform: rotate(161deg); - -ms-transform: rotate(161deg); - -o-transform: rotate(161deg); - transform: rotate(161deg); -} -.wi-wind.from-342-deg { - -webkit-transform: rotate(162deg); - -moz-transform: rotate(162deg); - -ms-transform: rotate(162deg); - -o-transform: rotate(162deg); - transform: rotate(162deg); -} -.wi-wind.from-343-deg { - -webkit-transform: rotate(163deg); - -moz-transform: rotate(163deg); - -ms-transform: rotate(163deg); - -o-transform: rotate(163deg); - transform: rotate(163deg); -} -.wi-wind.from-344-deg { - -webkit-transform: rotate(164deg); - -moz-transform: rotate(164deg); - -ms-transform: rotate(164deg); - -o-transform: rotate(164deg); - transform: rotate(164deg); -} -.wi-wind.from-345-deg { - -webkit-transform: rotate(165deg); - -moz-transform: rotate(165deg); - -ms-transform: rotate(165deg); - -o-transform: rotate(165deg); - transform: rotate(165deg); -} -.wi-wind.from-346-deg { - -webkit-transform: rotate(166deg); - -moz-transform: rotate(166deg); - -ms-transform: rotate(166deg); - -o-transform: rotate(166deg); - transform: rotate(166deg); -} -.wi-wind.from-347-deg { - -webkit-transform: rotate(167deg); - -moz-transform: rotate(167deg); - -ms-transform: rotate(167deg); - -o-transform: rotate(167deg); - transform: rotate(167deg); -} -.wi-wind.from-348-deg { - -webkit-transform: rotate(168deg); - -moz-transform: rotate(168deg); - -ms-transform: rotate(168deg); - -o-transform: rotate(168deg); - transform: rotate(168deg); -} -.wi-wind.from-349-deg { - -webkit-transform: rotate(169deg); - -moz-transform: rotate(169deg); - -ms-transform: rotate(169deg); - -o-transform: rotate(169deg); - transform: rotate(169deg); -} -.wi-wind.from-350-deg { - -webkit-transform: rotate(170deg); - -moz-transform: rotate(170deg); - -ms-transform: rotate(170deg); - -o-transform: rotate(170deg); - transform: rotate(170deg); -} -.wi-wind.from-351-deg { - -webkit-transform: rotate(171deg); - -moz-transform: rotate(171deg); - -ms-transform: rotate(171deg); - -o-transform: rotate(171deg); - transform: rotate(171deg); -} -.wi-wind.from-352-deg { - -webkit-transform: rotate(172deg); - -moz-transform: rotate(172deg); - -ms-transform: rotate(172deg); - -o-transform: rotate(172deg); - transform: rotate(172deg); -} -.wi-wind.from-353-deg { - -webkit-transform: rotate(173deg); - -moz-transform: rotate(173deg); - -ms-transform: rotate(173deg); - -o-transform: rotate(173deg); - transform: rotate(173deg); -} -.wi-wind.from-354-deg { - -webkit-transform: rotate(174deg); - -moz-transform: rotate(174deg); - -ms-transform: rotate(174deg); - -o-transform: rotate(174deg); - transform: rotate(174deg); -} -.wi-wind.from-355-deg { - -webkit-transform: rotate(175deg); - -moz-transform: rotate(175deg); - -ms-transform: rotate(175deg); - -o-transform: rotate(175deg); - transform: rotate(175deg); -} -.wi-wind.from-356-deg { - -webkit-transform: rotate(176deg); - -moz-transform: rotate(176deg); - -ms-transform: rotate(176deg); - -o-transform: rotate(176deg); - transform: rotate(176deg); -} -.wi-wind.from-357-deg { - -webkit-transform: rotate(177deg); - -moz-transform: rotate(177deg); - -ms-transform: rotate(177deg); - -o-transform: rotate(177deg); - transform: rotate(177deg); -} -.wi-wind.from-358-deg { - -webkit-transform: rotate(178deg); - -moz-transform: rotate(178deg); - -ms-transform: rotate(178deg); - -o-transform: rotate(178deg); - transform: rotate(178deg); -} -.wi-wind.from-359-deg { - -webkit-transform: rotate(179deg); - -moz-transform: rotate(179deg); - -ms-transform: rotate(179deg); - -o-transform: rotate(179deg); - transform: rotate(179deg); -} -.wi-wind.from-360-deg { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-towards-n { - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -o-transform: rotate(0deg); - transform: rotate(0deg); -} -.wi-towards-nne { - -webkit-transform: rotate(23deg); - -moz-transform: rotate(23deg); - -ms-transform: rotate(23deg); - -o-transform: rotate(23deg); - transform: rotate(23deg); -} -.wi-towards-ne { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.wi-towards-ene { - -webkit-transform: rotate(68deg); - -moz-transform: rotate(68deg); - -ms-transform: rotate(68deg); - -o-transform: rotate(68deg); - transform: rotate(68deg); -} -.wi-towards-e { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-towards-ese { - -webkit-transform: rotate(113deg); - -moz-transform: rotate(113deg); - -ms-transform: rotate(113deg); - -o-transform: rotate(113deg); - transform: rotate(113deg); -} -.wi-towards-se { - -webkit-transform: rotate(135deg); - -moz-transform: rotate(135deg); - -ms-transform: rotate(135deg); - -o-transform: rotate(135deg); - transform: rotate(135deg); -} -.wi-towards-sse { - -webkit-transform: rotate(158deg); - -moz-transform: rotate(158deg); - -ms-transform: rotate(158deg); - -o-transform: rotate(158deg); - transform: rotate(158deg); -} -.wi-towards-s { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-towards-ssw { - -webkit-transform: rotate(203deg); - -moz-transform: rotate(203deg); - -ms-transform: rotate(203deg); - -o-transform: rotate(203deg); - transform: rotate(203deg); -} -.wi-towards-sw { - -webkit-transform: rotate(225deg); - -moz-transform: rotate(225deg); - -ms-transform: rotate(225deg); - -o-transform: rotate(225deg); - transform: rotate(225deg); -} -.wi-towards-wsw { - -webkit-transform: rotate(248deg); - -moz-transform: rotate(248deg); - -ms-transform: rotate(248deg); - -o-transform: rotate(248deg); - transform: rotate(248deg); -} -.wi-towards-w { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-towards-wnw { - -webkit-transform: rotate(293deg); - -moz-transform: rotate(293deg); - -ms-transform: rotate(293deg); - -o-transform: rotate(293deg); - transform: rotate(293deg); -} -.wi-towards-nw { - -webkit-transform: rotate(313deg); - -moz-transform: rotate(313deg); - -ms-transform: rotate(313deg); - -o-transform: rotate(313deg); - transform: rotate(313deg); -} -.wi-towards-nnw { - -webkit-transform: rotate(336deg); - -moz-transform: rotate(336deg); - -ms-transform: rotate(336deg); - -o-transform: rotate(336deg); - transform: rotate(336deg); -} -.wi-from-n { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-from-nne { - -webkit-transform: rotate(203deg); - -moz-transform: rotate(203deg); - -ms-transform: rotate(203deg); - -o-transform: rotate(203deg); - transform: rotate(203deg); -} -.wi-from-ne { - -webkit-transform: rotate(225deg); - -moz-transform: rotate(225deg); - -ms-transform: rotate(225deg); - -o-transform: rotate(225deg); - transform: rotate(225deg); -} -.wi-from-ene { - -webkit-transform: rotate(248deg); - -moz-transform: rotate(248deg); - -ms-transform: rotate(248deg); - -o-transform: rotate(248deg); - transform: rotate(248deg); -} -.wi-from-e { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-from-ese { - -webkit-transform: rotate(293deg); - -moz-transform: rotate(293deg); - -ms-transform: rotate(293deg); - -o-transform: rotate(293deg); - transform: rotate(293deg); -} -.wi-from-se { - -webkit-transform: rotate(315deg); - -moz-transform: rotate(315deg); - -ms-transform: rotate(315deg); - -o-transform: rotate(315deg); - transform: rotate(315deg); -} -.wi-from-sse { - -webkit-transform: rotate(338deg); - -moz-transform: rotate(338deg); - -ms-transform: rotate(338deg); - -o-transform: rotate(338deg); - transform: rotate(338deg); -} -.wi-from-s { - -webkit-transform: rotate(0deg); - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -o-transform: rotate(0deg); - transform: rotate(0deg); -} -.wi-from-ssw { - -webkit-transform: rotate(23deg); - -moz-transform: rotate(23deg); - -ms-transform: rotate(23deg); - -o-transform: rotate(23deg); - transform: rotate(23deg); -} -.wi-from-sw { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.wi-from-wsw { - -webkit-transform: rotate(68deg); - -moz-transform: rotate(68deg); - -ms-transform: rotate(68deg); - -o-transform: rotate(68deg); - transform: rotate(68deg); -} -.wi-from-w { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-from-wnw { - -webkit-transform: rotate(113deg); - -moz-transform: rotate(113deg); - -ms-transform: rotate(113deg); - -o-transform: rotate(113deg); - transform: rotate(113deg); -} -.wi-from-nw { - -webkit-transform: rotate(133deg); - -moz-transform: rotate(133deg); - -ms-transform: rotate(133deg); - -o-transform: rotate(133deg); - transform: rotate(133deg); -} -.wi-from-nnw { - -webkit-transform: rotate(156deg); - -moz-transform: rotate(156deg); - -ms-transform: rotate(156deg); - -o-transform: rotate(156deg); - transform: rotate(156deg); -} diff --git a/vendor/weather-icons/css/weather-icons-wind.min.css b/vendor/weather-icons/css/weather-icons-wind.min.css deleted file mode 100644 index d6568f33..00000000 --- a/vendor/weather-icons/css/weather-icons-wind.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:weathericons;src:url(../font/weathericons-regular-webfont.eot);src:url(../font/weathericons-regular-webfont.eot?#iefix)format('embedded-opentype'),url(../font/weathericons-regular-webfont.woff2)format('woff2'),url(../font/weathericons-regular-webfont.woff)format('woff'),url(../font/weathericons-regular-webfont.ttf)format('truetype'),url(../font/weathericons-regular-webfont.svg#weather_iconsregular)format('svg');font-weight:400;font-style:normal}.wi{display:inline-block;font-family:weathericons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wi-fw{text-align:center;width:1.4em}.wi-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.wi-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.wi-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.wi-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.wi-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.wi-wind:before{content:"\f0b1"}.wi-wind.towards-0-deg{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.wi-wind.towards-1-deg{-webkit-transform:rotate(1deg);-moz-transform:rotate(1deg);-ms-transform:rotate(1deg);-o-transform:rotate(1deg);transform:rotate(1deg)}.wi-wind.towards-2-deg{-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-ms-transform:rotate(2deg);-o-transform:rotate(2deg);transform:rotate(2deg)}.wi-wind.towards-3-deg{-webkit-transform:rotate(3deg);-moz-transform:rotate(3deg);-ms-transform:rotate(3deg);-o-transform:rotate(3deg);transform:rotate(3deg)}.wi-wind.towards-4-deg{-webkit-transform:rotate(4deg);-moz-transform:rotate(4deg);-ms-transform:rotate(4deg);-o-transform:rotate(4deg);transform:rotate(4deg)}.wi-wind.towards-5-deg{-webkit-transform:rotate(5deg);-moz-transform:rotate(5deg);-ms-transform:rotate(5deg);-o-transform:rotate(5deg);transform:rotate(5deg)}.wi-wind.towards-6-deg{-webkit-transform:rotate(6deg);-moz-transform:rotate(6deg);-ms-transform:rotate(6deg);-o-transform:rotate(6deg);transform:rotate(6deg)}.wi-wind.towards-7-deg{-webkit-transform:rotate(7deg);-moz-transform:rotate(7deg);-ms-transform:rotate(7deg);-o-transform:rotate(7deg);transform:rotate(7deg)}.wi-wind.towards-8-deg{-webkit-transform:rotate(8deg);-moz-transform:rotate(8deg);-ms-transform:rotate(8deg);-o-transform:rotate(8deg);transform:rotate(8deg)}.wi-wind.towards-9-deg{-webkit-transform:rotate(9deg);-moz-transform:rotate(9deg);-ms-transform:rotate(9deg);-o-transform:rotate(9deg);transform:rotate(9deg)}.wi-wind.towards-10-deg{-webkit-transform:rotate(10deg);-moz-transform:rotate(10deg);-ms-transform:rotate(10deg);-o-transform:rotate(10deg);transform:rotate(10deg)}.wi-wind.towards-11-deg{-webkit-transform:rotate(11deg);-moz-transform:rotate(11deg);-ms-transform:rotate(11deg);-o-transform:rotate(11deg);transform:rotate(11deg)}.wi-wind.towards-12-deg{-webkit-transform:rotate(12deg);-moz-transform:rotate(12deg);-ms-transform:rotate(12deg);-o-transform:rotate(12deg);transform:rotate(12deg)}.wi-wind.towards-13-deg{-webkit-transform:rotate(13deg);-moz-transform:rotate(13deg);-ms-transform:rotate(13deg);-o-transform:rotate(13deg);transform:rotate(13deg)}.wi-wind.towards-14-deg{-webkit-transform:rotate(14deg);-moz-transform:rotate(14deg);-ms-transform:rotate(14deg);-o-transform:rotate(14deg);transform:rotate(14deg)}.wi-wind.towards-15-deg{-webkit-transform:rotate(15deg);-moz-transform:rotate(15deg);-ms-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg)}.wi-wind.towards-16-deg{-webkit-transform:rotate(16deg);-moz-transform:rotate(16deg);-ms-transform:rotate(16deg);-o-transform:rotate(16deg);transform:rotate(16deg)}.wi-wind.towards-17-deg{-webkit-transform:rotate(17deg);-moz-transform:rotate(17deg);-ms-transform:rotate(17deg);-o-transform:rotate(17deg);transform:rotate(17deg)}.wi-wind.towards-18-deg{-webkit-transform:rotate(18deg);-moz-transform:rotate(18deg);-ms-transform:rotate(18deg);-o-transform:rotate(18deg);transform:rotate(18deg)}.wi-wind.towards-19-deg{-webkit-transform:rotate(19deg);-moz-transform:rotate(19deg);-ms-transform:rotate(19deg);-o-transform:rotate(19deg);transform:rotate(19deg)}.wi-wind.towards-20-deg{-webkit-transform:rotate(20deg);-moz-transform:rotate(20deg);-ms-transform:rotate(20deg);-o-transform:rotate(20deg);transform:rotate(20deg)}.wi-wind.towards-21-deg{-webkit-transform:rotate(21deg);-moz-transform:rotate(21deg);-ms-transform:rotate(21deg);-o-transform:rotate(21deg);transform:rotate(21deg)}.wi-wind.towards-22-deg{-webkit-transform:rotate(22deg);-moz-transform:rotate(22deg);-ms-transform:rotate(22deg);-o-transform:rotate(22deg);transform:rotate(22deg)}.wi-wind.towards-23-deg{-webkit-transform:rotate(23deg);-moz-transform:rotate(23deg);-ms-transform:rotate(23deg);-o-transform:rotate(23deg);transform:rotate(23deg)}.wi-wind.towards-24-deg{-webkit-transform:rotate(24deg);-moz-transform:rotate(24deg);-ms-transform:rotate(24deg);-o-transform:rotate(24deg);transform:rotate(24deg)}.wi-wind.towards-25-deg{-webkit-transform:rotate(25deg);-moz-transform:rotate(25deg);-ms-transform:rotate(25deg);-o-transform:rotate(25deg);transform:rotate(25deg)}.wi-wind.towards-26-deg{-webkit-transform:rotate(26deg);-moz-transform:rotate(26deg);-ms-transform:rotate(26deg);-o-transform:rotate(26deg);transform:rotate(26deg)}.wi-wind.towards-27-deg{-webkit-transform:rotate(27deg);-moz-transform:rotate(27deg);-ms-transform:rotate(27deg);-o-transform:rotate(27deg);transform:rotate(27deg)}.wi-wind.towards-28-deg{-webkit-transform:rotate(28deg);-moz-transform:rotate(28deg);-ms-transform:rotate(28deg);-o-transform:rotate(28deg);transform:rotate(28deg)}.wi-wind.towards-29-deg{-webkit-transform:rotate(29deg);-moz-transform:rotate(29deg);-ms-transform:rotate(29deg);-o-transform:rotate(29deg);transform:rotate(29deg)}.wi-wind.towards-30-deg{-webkit-transform:rotate(30deg);-moz-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}.wi-wind.towards-31-deg{-webkit-transform:rotate(31deg);-moz-transform:rotate(31deg);-ms-transform:rotate(31deg);-o-transform:rotate(31deg);transform:rotate(31deg)}.wi-wind.towards-32-deg{-webkit-transform:rotate(32deg);-moz-transform:rotate(32deg);-ms-transform:rotate(32deg);-o-transform:rotate(32deg);transform:rotate(32deg)}.wi-wind.towards-33-deg{-webkit-transform:rotate(33deg);-moz-transform:rotate(33deg);-ms-transform:rotate(33deg);-o-transform:rotate(33deg);transform:rotate(33deg)}.wi-wind.towards-34-deg{-webkit-transform:rotate(34deg);-moz-transform:rotate(34deg);-ms-transform:rotate(34deg);-o-transform:rotate(34deg);transform:rotate(34deg)}.wi-wind.towards-35-deg{-webkit-transform:rotate(35deg);-moz-transform:rotate(35deg);-ms-transform:rotate(35deg);-o-transform:rotate(35deg);transform:rotate(35deg)}.wi-wind.towards-36-deg{-webkit-transform:rotate(36deg);-moz-transform:rotate(36deg);-ms-transform:rotate(36deg);-o-transform:rotate(36deg);transform:rotate(36deg)}.wi-wind.towards-37-deg{-webkit-transform:rotate(37deg);-moz-transform:rotate(37deg);-ms-transform:rotate(37deg);-o-transform:rotate(37deg);transform:rotate(37deg)}.wi-wind.towards-38-deg{-webkit-transform:rotate(38deg);-moz-transform:rotate(38deg);-ms-transform:rotate(38deg);-o-transform:rotate(38deg);transform:rotate(38deg)}.wi-wind.towards-39-deg{-webkit-transform:rotate(39deg);-moz-transform:rotate(39deg);-ms-transform:rotate(39deg);-o-transform:rotate(39deg);transform:rotate(39deg)}.wi-wind.towards-40-deg{-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg)}.wi-wind.towards-41-deg{-webkit-transform:rotate(41deg);-moz-transform:rotate(41deg);-ms-transform:rotate(41deg);-o-transform:rotate(41deg);transform:rotate(41deg)}.wi-wind.towards-42-deg{-webkit-transform:rotate(42deg);-moz-transform:rotate(42deg);-ms-transform:rotate(42deg);-o-transform:rotate(42deg);transform:rotate(42deg)}.wi-wind.towards-43-deg{-webkit-transform:rotate(43deg);-moz-transform:rotate(43deg);-ms-transform:rotate(43deg);-o-transform:rotate(43deg);transform:rotate(43deg)}.wi-wind.towards-44-deg{-webkit-transform:rotate(44deg);-moz-transform:rotate(44deg);-ms-transform:rotate(44deg);-o-transform:rotate(44deg);transform:rotate(44deg)}.wi-wind.towards-45-deg{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.wi-wind.towards-46-deg{-webkit-transform:rotate(46deg);-moz-transform:rotate(46deg);-ms-transform:rotate(46deg);-o-transform:rotate(46deg);transform:rotate(46deg)}.wi-wind.towards-47-deg{-webkit-transform:rotate(47deg);-moz-transform:rotate(47deg);-ms-transform:rotate(47deg);-o-transform:rotate(47deg);transform:rotate(47deg)}.wi-wind.towards-48-deg{-webkit-transform:rotate(48deg);-moz-transform:rotate(48deg);-ms-transform:rotate(48deg);-o-transform:rotate(48deg);transform:rotate(48deg)}.wi-wind.towards-49-deg{-webkit-transform:rotate(49deg);-moz-transform:rotate(49deg);-ms-transform:rotate(49deg);-o-transform:rotate(49deg);transform:rotate(49deg)}.wi-wind.towards-50-deg{-webkit-transform:rotate(50deg);-moz-transform:rotate(50deg);-ms-transform:rotate(50deg);-o-transform:rotate(50deg);transform:rotate(50deg)}.wi-wind.towards-51-deg{-webkit-transform:rotate(51deg);-moz-transform:rotate(51deg);-ms-transform:rotate(51deg);-o-transform:rotate(51deg);transform:rotate(51deg)}.wi-wind.towards-52-deg{-webkit-transform:rotate(52deg);-moz-transform:rotate(52deg);-ms-transform:rotate(52deg);-o-transform:rotate(52deg);transform:rotate(52deg)}.wi-wind.towards-53-deg{-webkit-transform:rotate(53deg);-moz-transform:rotate(53deg);-ms-transform:rotate(53deg);-o-transform:rotate(53deg);transform:rotate(53deg)}.wi-wind.towards-54-deg{-webkit-transform:rotate(54deg);-moz-transform:rotate(54deg);-ms-transform:rotate(54deg);-o-transform:rotate(54deg);transform:rotate(54deg)}.wi-wind.towards-55-deg{-webkit-transform:rotate(55deg);-moz-transform:rotate(55deg);-ms-transform:rotate(55deg);-o-transform:rotate(55deg);transform:rotate(55deg)}.wi-wind.towards-56-deg{-webkit-transform:rotate(56deg);-moz-transform:rotate(56deg);-ms-transform:rotate(56deg);-o-transform:rotate(56deg);transform:rotate(56deg)}.wi-wind.towards-57-deg{-webkit-transform:rotate(57deg);-moz-transform:rotate(57deg);-ms-transform:rotate(57deg);-o-transform:rotate(57deg);transform:rotate(57deg)}.wi-wind.towards-58-deg{-webkit-transform:rotate(58deg);-moz-transform:rotate(58deg);-ms-transform:rotate(58deg);-o-transform:rotate(58deg);transform:rotate(58deg)}.wi-wind.towards-59-deg{-webkit-transform:rotate(59deg);-moz-transform:rotate(59deg);-ms-transform:rotate(59deg);-o-transform:rotate(59deg);transform:rotate(59deg)}.wi-wind.towards-60-deg{-webkit-transform:rotate(60deg);-moz-transform:rotate(60deg);-ms-transform:rotate(60deg);-o-transform:rotate(60deg);transform:rotate(60deg)}.wi-wind.towards-61-deg{-webkit-transform:rotate(61deg);-moz-transform:rotate(61deg);-ms-transform:rotate(61deg);-o-transform:rotate(61deg);transform:rotate(61deg)}.wi-wind.towards-62-deg{-webkit-transform:rotate(62deg);-moz-transform:rotate(62deg);-ms-transform:rotate(62deg);-o-transform:rotate(62deg);transform:rotate(62deg)}.wi-wind.towards-63-deg{-webkit-transform:rotate(63deg);-moz-transform:rotate(63deg);-ms-transform:rotate(63deg);-o-transform:rotate(63deg);transform:rotate(63deg)}.wi-wind.towards-64-deg{-webkit-transform:rotate(64deg);-moz-transform:rotate(64deg);-ms-transform:rotate(64deg);-o-transform:rotate(64deg);transform:rotate(64deg)}.wi-wind.towards-65-deg{-webkit-transform:rotate(65deg);-moz-transform:rotate(65deg);-ms-transform:rotate(65deg);-o-transform:rotate(65deg);transform:rotate(65deg)}.wi-wind.towards-66-deg{-webkit-transform:rotate(66deg);-moz-transform:rotate(66deg);-ms-transform:rotate(66deg);-o-transform:rotate(66deg);transform:rotate(66deg)}.wi-wind.towards-67-deg{-webkit-transform:rotate(67deg);-moz-transform:rotate(67deg);-ms-transform:rotate(67deg);-o-transform:rotate(67deg);transform:rotate(67deg)}.wi-wind.towards-68-deg{-webkit-transform:rotate(68deg);-moz-transform:rotate(68deg);-ms-transform:rotate(68deg);-o-transform:rotate(68deg);transform:rotate(68deg)}.wi-wind.towards-69-deg{-webkit-transform:rotate(69deg);-moz-transform:rotate(69deg);-ms-transform:rotate(69deg);-o-transform:rotate(69deg);transform:rotate(69deg)}.wi-wind.towards-70-deg{-webkit-transform:rotate(70deg);-moz-transform:rotate(70deg);-ms-transform:rotate(70deg);-o-transform:rotate(70deg);transform:rotate(70deg)}.wi-wind.towards-71-deg{-webkit-transform:rotate(71deg);-moz-transform:rotate(71deg);-ms-transform:rotate(71deg);-o-transform:rotate(71deg);transform:rotate(71deg)}.wi-wind.towards-72-deg{-webkit-transform:rotate(72deg);-moz-transform:rotate(72deg);-ms-transform:rotate(72deg);-o-transform:rotate(72deg);transform:rotate(72deg)}.wi-wind.towards-73-deg{-webkit-transform:rotate(73deg);-moz-transform:rotate(73deg);-ms-transform:rotate(73deg);-o-transform:rotate(73deg);transform:rotate(73deg)}.wi-wind.towards-74-deg{-webkit-transform:rotate(74deg);-moz-transform:rotate(74deg);-ms-transform:rotate(74deg);-o-transform:rotate(74deg);transform:rotate(74deg)}.wi-wind.towards-75-deg{-webkit-transform:rotate(75deg);-moz-transform:rotate(75deg);-ms-transform:rotate(75deg);-o-transform:rotate(75deg);transform:rotate(75deg)}.wi-wind.towards-76-deg{-webkit-transform:rotate(76deg);-moz-transform:rotate(76deg);-ms-transform:rotate(76deg);-o-transform:rotate(76deg);transform:rotate(76deg)}.wi-wind.towards-77-deg{-webkit-transform:rotate(77deg);-moz-transform:rotate(77deg);-ms-transform:rotate(77deg);-o-transform:rotate(77deg);transform:rotate(77deg)}.wi-wind.towards-78-deg{-webkit-transform:rotate(78deg);-moz-transform:rotate(78deg);-ms-transform:rotate(78deg);-o-transform:rotate(78deg);transform:rotate(78deg)}.wi-wind.towards-79-deg{-webkit-transform:rotate(79deg);-moz-transform:rotate(79deg);-ms-transform:rotate(79deg);-o-transform:rotate(79deg);transform:rotate(79deg)}.wi-wind.towards-80-deg{-webkit-transform:rotate(80deg);-moz-transform:rotate(80deg);-ms-transform:rotate(80deg);-o-transform:rotate(80deg);transform:rotate(80deg)}.wi-wind.towards-81-deg{-webkit-transform:rotate(81deg);-moz-transform:rotate(81deg);-ms-transform:rotate(81deg);-o-transform:rotate(81deg);transform:rotate(81deg)}.wi-wind.towards-82-deg{-webkit-transform:rotate(82deg);-moz-transform:rotate(82deg);-ms-transform:rotate(82deg);-o-transform:rotate(82deg);transform:rotate(82deg)}.wi-wind.towards-83-deg{-webkit-transform:rotate(83deg);-moz-transform:rotate(83deg);-ms-transform:rotate(83deg);-o-transform:rotate(83deg);transform:rotate(83deg)}.wi-wind.towards-84-deg{-webkit-transform:rotate(84deg);-moz-transform:rotate(84deg);-ms-transform:rotate(84deg);-o-transform:rotate(84deg);transform:rotate(84deg)}.wi-wind.towards-85-deg{-webkit-transform:rotate(85deg);-moz-transform:rotate(85deg);-ms-transform:rotate(85deg);-o-transform:rotate(85deg);transform:rotate(85deg)}.wi-wind.towards-86-deg{-webkit-transform:rotate(86deg);-moz-transform:rotate(86deg);-ms-transform:rotate(86deg);-o-transform:rotate(86deg);transform:rotate(86deg)}.wi-wind.towards-87-deg{-webkit-transform:rotate(87deg);-moz-transform:rotate(87deg);-ms-transform:rotate(87deg);-o-transform:rotate(87deg);transform:rotate(87deg)}.wi-wind.towards-88-deg{-webkit-transform:rotate(88deg);-moz-transform:rotate(88deg);-ms-transform:rotate(88deg);-o-transform:rotate(88deg);transform:rotate(88deg)}.wi-wind.towards-89-deg{-webkit-transform:rotate(89deg);-moz-transform:rotate(89deg);-ms-transform:rotate(89deg);-o-transform:rotate(89deg);transform:rotate(89deg)}.wi-wind.towards-90-deg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.wi-wind.towards-91-deg{-webkit-transform:rotate(91deg);-moz-transform:rotate(91deg);-ms-transform:rotate(91deg);-o-transform:rotate(91deg);transform:rotate(91deg)}.wi-wind.towards-92-deg{-webkit-transform:rotate(92deg);-moz-transform:rotate(92deg);-ms-transform:rotate(92deg);-o-transform:rotate(92deg);transform:rotate(92deg)}.wi-wind.towards-93-deg{-webkit-transform:rotate(93deg);-moz-transform:rotate(93deg);-ms-transform:rotate(93deg);-o-transform:rotate(93deg);transform:rotate(93deg)}.wi-wind.towards-94-deg{-webkit-transform:rotate(94deg);-moz-transform:rotate(94deg);-ms-transform:rotate(94deg);-o-transform:rotate(94deg);transform:rotate(94deg)}.wi-wind.towards-95-deg{-webkit-transform:rotate(95deg);-moz-transform:rotate(95deg);-ms-transform:rotate(95deg);-o-transform:rotate(95deg);transform:rotate(95deg)}.wi-wind.towards-96-deg{-webkit-transform:rotate(96deg);-moz-transform:rotate(96deg);-ms-transform:rotate(96deg);-o-transform:rotate(96deg);transform:rotate(96deg)}.wi-wind.towards-97-deg{-webkit-transform:rotate(97deg);-moz-transform:rotate(97deg);-ms-transform:rotate(97deg);-o-transform:rotate(97deg);transform:rotate(97deg)}.wi-wind.towards-98-deg{-webkit-transform:rotate(98deg);-moz-transform:rotate(98deg);-ms-transform:rotate(98deg);-o-transform:rotate(98deg);transform:rotate(98deg)}.wi-wind.towards-99-deg{-webkit-transform:rotate(99deg);-moz-transform:rotate(99deg);-ms-transform:rotate(99deg);-o-transform:rotate(99deg);transform:rotate(99deg)}.wi-wind.towards-100-deg{-webkit-transform:rotate(100deg);-moz-transform:rotate(100deg);-ms-transform:rotate(100deg);-o-transform:rotate(100deg);transform:rotate(100deg)}.wi-wind.towards-101-deg{-webkit-transform:rotate(101deg);-moz-transform:rotate(101deg);-ms-transform:rotate(101deg);-o-transform:rotate(101deg);transform:rotate(101deg)}.wi-wind.towards-102-deg{-webkit-transform:rotate(102deg);-moz-transform:rotate(102deg);-ms-transform:rotate(102deg);-o-transform:rotate(102deg);transform:rotate(102deg)}.wi-wind.towards-103-deg{-webkit-transform:rotate(103deg);-moz-transform:rotate(103deg);-ms-transform:rotate(103deg);-o-transform:rotate(103deg);transform:rotate(103deg)}.wi-wind.towards-104-deg{-webkit-transform:rotate(104deg);-moz-transform:rotate(104deg);-ms-transform:rotate(104deg);-o-transform:rotate(104deg);transform:rotate(104deg)}.wi-wind.towards-105-deg{-webkit-transform:rotate(105deg);-moz-transform:rotate(105deg);-ms-transform:rotate(105deg);-o-transform:rotate(105deg);transform:rotate(105deg)}.wi-wind.towards-106-deg{-webkit-transform:rotate(106deg);-moz-transform:rotate(106deg);-ms-transform:rotate(106deg);-o-transform:rotate(106deg);transform:rotate(106deg)}.wi-wind.towards-107-deg{-webkit-transform:rotate(107deg);-moz-transform:rotate(107deg);-ms-transform:rotate(107deg);-o-transform:rotate(107deg);transform:rotate(107deg)}.wi-wind.towards-108-deg{-webkit-transform:rotate(108deg);-moz-transform:rotate(108deg);-ms-transform:rotate(108deg);-o-transform:rotate(108deg);transform:rotate(108deg)}.wi-wind.towards-109-deg{-webkit-transform:rotate(109deg);-moz-transform:rotate(109deg);-ms-transform:rotate(109deg);-o-transform:rotate(109deg);transform:rotate(109deg)}.wi-wind.towards-110-deg{-webkit-transform:rotate(110deg);-moz-transform:rotate(110deg);-ms-transform:rotate(110deg);-o-transform:rotate(110deg);transform:rotate(110deg)}.wi-wind.towards-111-deg{-webkit-transform:rotate(111deg);-moz-transform:rotate(111deg);-ms-transform:rotate(111deg);-o-transform:rotate(111deg);transform:rotate(111deg)}.wi-wind.towards-112-deg{-webkit-transform:rotate(112deg);-moz-transform:rotate(112deg);-ms-transform:rotate(112deg);-o-transform:rotate(112deg);transform:rotate(112deg)}.wi-wind.towards-113-deg{-webkit-transform:rotate(113deg);-moz-transform:rotate(113deg);-ms-transform:rotate(113deg);-o-transform:rotate(113deg);transform:rotate(113deg)}.wi-wind.towards-114-deg{-webkit-transform:rotate(114deg);-moz-transform:rotate(114deg);-ms-transform:rotate(114deg);-o-transform:rotate(114deg);transform:rotate(114deg)}.wi-wind.towards-115-deg{-webkit-transform:rotate(115deg);-moz-transform:rotate(115deg);-ms-transform:rotate(115deg);-o-transform:rotate(115deg);transform:rotate(115deg)}.wi-wind.towards-116-deg{-webkit-transform:rotate(116deg);-moz-transform:rotate(116deg);-ms-transform:rotate(116deg);-o-transform:rotate(116deg);transform:rotate(116deg)}.wi-wind.towards-117-deg{-webkit-transform:rotate(117deg);-moz-transform:rotate(117deg);-ms-transform:rotate(117deg);-o-transform:rotate(117deg);transform:rotate(117deg)}.wi-wind.towards-118-deg{-webkit-transform:rotate(118deg);-moz-transform:rotate(118deg);-ms-transform:rotate(118deg);-o-transform:rotate(118deg);transform:rotate(118deg)}.wi-wind.towards-119-deg{-webkit-transform:rotate(119deg);-moz-transform:rotate(119deg);-ms-transform:rotate(119deg);-o-transform:rotate(119deg);transform:rotate(119deg)}.wi-wind.towards-120-deg{-webkit-transform:rotate(120deg);-moz-transform:rotate(120deg);-ms-transform:rotate(120deg);-o-transform:rotate(120deg);transform:rotate(120deg)}.wi-wind.towards-121-deg{-webkit-transform:rotate(121deg);-moz-transform:rotate(121deg);-ms-transform:rotate(121deg);-o-transform:rotate(121deg);transform:rotate(121deg)}.wi-wind.towards-122-deg{-webkit-transform:rotate(122deg);-moz-transform:rotate(122deg);-ms-transform:rotate(122deg);-o-transform:rotate(122deg);transform:rotate(122deg)}.wi-wind.towards-123-deg{-webkit-transform:rotate(123deg);-moz-transform:rotate(123deg);-ms-transform:rotate(123deg);-o-transform:rotate(123deg);transform:rotate(123deg)}.wi-wind.towards-124-deg{-webkit-transform:rotate(124deg);-moz-transform:rotate(124deg);-ms-transform:rotate(124deg);-o-transform:rotate(124deg);transform:rotate(124deg)}.wi-wind.towards-125-deg{-webkit-transform:rotate(125deg);-moz-transform:rotate(125deg);-ms-transform:rotate(125deg);-o-transform:rotate(125deg);transform:rotate(125deg)}.wi-wind.towards-126-deg{-webkit-transform:rotate(126deg);-moz-transform:rotate(126deg);-ms-transform:rotate(126deg);-o-transform:rotate(126deg);transform:rotate(126deg)}.wi-wind.towards-127-deg{-webkit-transform:rotate(127deg);-moz-transform:rotate(127deg);-ms-transform:rotate(127deg);-o-transform:rotate(127deg);transform:rotate(127deg)}.wi-wind.towards-128-deg{-webkit-transform:rotate(128deg);-moz-transform:rotate(128deg);-ms-transform:rotate(128deg);-o-transform:rotate(128deg);transform:rotate(128deg)}.wi-wind.towards-129-deg{-webkit-transform:rotate(129deg);-moz-transform:rotate(129deg);-ms-transform:rotate(129deg);-o-transform:rotate(129deg);transform:rotate(129deg)}.wi-wind.towards-130-deg{-webkit-transform:rotate(130deg);-moz-transform:rotate(130deg);-ms-transform:rotate(130deg);-o-transform:rotate(130deg);transform:rotate(130deg)}.wi-wind.towards-131-deg{-webkit-transform:rotate(131deg);-moz-transform:rotate(131deg);-ms-transform:rotate(131deg);-o-transform:rotate(131deg);transform:rotate(131deg)}.wi-wind.towards-132-deg{-webkit-transform:rotate(132deg);-moz-transform:rotate(132deg);-ms-transform:rotate(132deg);-o-transform:rotate(132deg);transform:rotate(132deg)}.wi-wind.towards-133-deg{-webkit-transform:rotate(133deg);-moz-transform:rotate(133deg);-ms-transform:rotate(133deg);-o-transform:rotate(133deg);transform:rotate(133deg)}.wi-wind.towards-134-deg{-webkit-transform:rotate(134deg);-moz-transform:rotate(134deg);-ms-transform:rotate(134deg);-o-transform:rotate(134deg);transform:rotate(134deg)}.wi-wind.towards-135-deg{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.wi-wind.towards-136-deg{-webkit-transform:rotate(136deg);-moz-transform:rotate(136deg);-ms-transform:rotate(136deg);-o-transform:rotate(136deg);transform:rotate(136deg)}.wi-wind.towards-137-deg{-webkit-transform:rotate(137deg);-moz-transform:rotate(137deg);-ms-transform:rotate(137deg);-o-transform:rotate(137deg);transform:rotate(137deg)}.wi-wind.towards-138-deg{-webkit-transform:rotate(138deg);-moz-transform:rotate(138deg);-ms-transform:rotate(138deg);-o-transform:rotate(138deg);transform:rotate(138deg)}.wi-wind.towards-139-deg{-webkit-transform:rotate(139deg);-moz-transform:rotate(139deg);-ms-transform:rotate(139deg);-o-transform:rotate(139deg);transform:rotate(139deg)}.wi-wind.towards-140-deg{-webkit-transform:rotate(140deg);-moz-transform:rotate(140deg);-ms-transform:rotate(140deg);-o-transform:rotate(140deg);transform:rotate(140deg)}.wi-wind.towards-141-deg{-webkit-transform:rotate(141deg);-moz-transform:rotate(141deg);-ms-transform:rotate(141deg);-o-transform:rotate(141deg);transform:rotate(141deg)}.wi-wind.towards-142-deg{-webkit-transform:rotate(142deg);-moz-transform:rotate(142deg);-ms-transform:rotate(142deg);-o-transform:rotate(142deg);transform:rotate(142deg)}.wi-wind.towards-143-deg{-webkit-transform:rotate(143deg);-moz-transform:rotate(143deg);-ms-transform:rotate(143deg);-o-transform:rotate(143deg);transform:rotate(143deg)}.wi-wind.towards-144-deg{-webkit-transform:rotate(144deg);-moz-transform:rotate(144deg);-ms-transform:rotate(144deg);-o-transform:rotate(144deg);transform:rotate(144deg)}.wi-wind.towards-145-deg{-webkit-transform:rotate(145deg);-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-o-transform:rotate(145deg);transform:rotate(145deg)}.wi-wind.towards-146-deg{-webkit-transform:rotate(146deg);-moz-transform:rotate(146deg);-ms-transform:rotate(146deg);-o-transform:rotate(146deg);transform:rotate(146deg)}.wi-wind.towards-147-deg{-webkit-transform:rotate(147deg);-moz-transform:rotate(147deg);-ms-transform:rotate(147deg);-o-transform:rotate(147deg);transform:rotate(147deg)}.wi-wind.towards-148-deg{-webkit-transform:rotate(148deg);-moz-transform:rotate(148deg);-ms-transform:rotate(148deg);-o-transform:rotate(148deg);transform:rotate(148deg)}.wi-wind.towards-149-deg{-webkit-transform:rotate(149deg);-moz-transform:rotate(149deg);-ms-transform:rotate(149deg);-o-transform:rotate(149deg);transform:rotate(149deg)}.wi-wind.towards-150-deg{-webkit-transform:rotate(150deg);-moz-transform:rotate(150deg);-ms-transform:rotate(150deg);-o-transform:rotate(150deg);transform:rotate(150deg)}.wi-wind.towards-151-deg{-webkit-transform:rotate(151deg);-moz-transform:rotate(151deg);-ms-transform:rotate(151deg);-o-transform:rotate(151deg);transform:rotate(151deg)}.wi-wind.towards-152-deg{-webkit-transform:rotate(152deg);-moz-transform:rotate(152deg);-ms-transform:rotate(152deg);-o-transform:rotate(152deg);transform:rotate(152deg)}.wi-wind.towards-153-deg{-webkit-transform:rotate(153deg);-moz-transform:rotate(153deg);-ms-transform:rotate(153deg);-o-transform:rotate(153deg);transform:rotate(153deg)}.wi-wind.towards-154-deg{-webkit-transform:rotate(154deg);-moz-transform:rotate(154deg);-ms-transform:rotate(154deg);-o-transform:rotate(154deg);transform:rotate(154deg)}.wi-wind.towards-155-deg{-webkit-transform:rotate(155deg);-moz-transform:rotate(155deg);-ms-transform:rotate(155deg);-o-transform:rotate(155deg);transform:rotate(155deg)}.wi-wind.towards-156-deg{-webkit-transform:rotate(156deg);-moz-transform:rotate(156deg);-ms-transform:rotate(156deg);-o-transform:rotate(156deg);transform:rotate(156deg)}.wi-wind.towards-157-deg{-webkit-transform:rotate(157deg);-moz-transform:rotate(157deg);-ms-transform:rotate(157deg);-o-transform:rotate(157deg);transform:rotate(157deg)}.wi-wind.towards-158-deg{-webkit-transform:rotate(158deg);-moz-transform:rotate(158deg);-ms-transform:rotate(158deg);-o-transform:rotate(158deg);transform:rotate(158deg)}.wi-wind.towards-159-deg{-webkit-transform:rotate(159deg);-moz-transform:rotate(159deg);-ms-transform:rotate(159deg);-o-transform:rotate(159deg);transform:rotate(159deg)}.wi-wind.towards-160-deg{-webkit-transform:rotate(160deg);-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-o-transform:rotate(160deg);transform:rotate(160deg)}.wi-wind.towards-161-deg{-webkit-transform:rotate(161deg);-moz-transform:rotate(161deg);-ms-transform:rotate(161deg);-o-transform:rotate(161deg);transform:rotate(161deg)}.wi-wind.towards-162-deg{-webkit-transform:rotate(162deg);-moz-transform:rotate(162deg);-ms-transform:rotate(162deg);-o-transform:rotate(162deg);transform:rotate(162deg)}.wi-wind.towards-163-deg{-webkit-transform:rotate(163deg);-moz-transform:rotate(163deg);-ms-transform:rotate(163deg);-o-transform:rotate(163deg);transform:rotate(163deg)}.wi-wind.towards-164-deg{-webkit-transform:rotate(164deg);-moz-transform:rotate(164deg);-ms-transform:rotate(164deg);-o-transform:rotate(164deg);transform:rotate(164deg)}.wi-wind.towards-165-deg{-webkit-transform:rotate(165deg);-moz-transform:rotate(165deg);-ms-transform:rotate(165deg);-o-transform:rotate(165deg);transform:rotate(165deg)}.wi-wind.towards-166-deg{-webkit-transform:rotate(166deg);-moz-transform:rotate(166deg);-ms-transform:rotate(166deg);-o-transform:rotate(166deg);transform:rotate(166deg)}.wi-wind.towards-167-deg{-webkit-transform:rotate(167deg);-moz-transform:rotate(167deg);-ms-transform:rotate(167deg);-o-transform:rotate(167deg);transform:rotate(167deg)}.wi-wind.towards-168-deg{-webkit-transform:rotate(168deg);-moz-transform:rotate(168deg);-ms-transform:rotate(168deg);-o-transform:rotate(168deg);transform:rotate(168deg)}.wi-wind.towards-169-deg{-webkit-transform:rotate(169deg);-moz-transform:rotate(169deg);-ms-transform:rotate(169deg);-o-transform:rotate(169deg);transform:rotate(169deg)}.wi-wind.towards-170-deg{-webkit-transform:rotate(170deg);-moz-transform:rotate(170deg);-ms-transform:rotate(170deg);-o-transform:rotate(170deg);transform:rotate(170deg)}.wi-wind.towards-171-deg{-webkit-transform:rotate(171deg);-moz-transform:rotate(171deg);-ms-transform:rotate(171deg);-o-transform:rotate(171deg);transform:rotate(171deg)}.wi-wind.towards-172-deg{-webkit-transform:rotate(172deg);-moz-transform:rotate(172deg);-ms-transform:rotate(172deg);-o-transform:rotate(172deg);transform:rotate(172deg)}.wi-wind.towards-173-deg{-webkit-transform:rotate(173deg);-moz-transform:rotate(173deg);-ms-transform:rotate(173deg);-o-transform:rotate(173deg);transform:rotate(173deg)}.wi-wind.towards-174-deg{-webkit-transform:rotate(174deg);-moz-transform:rotate(174deg);-ms-transform:rotate(174deg);-o-transform:rotate(174deg);transform:rotate(174deg)}.wi-wind.towards-175-deg{-webkit-transform:rotate(175deg);-moz-transform:rotate(175deg);-ms-transform:rotate(175deg);-o-transform:rotate(175deg);transform:rotate(175deg)}.wi-wind.towards-176-deg{-webkit-transform:rotate(176deg);-moz-transform:rotate(176deg);-ms-transform:rotate(176deg);-o-transform:rotate(176deg);transform:rotate(176deg)}.wi-wind.towards-177-deg{-webkit-transform:rotate(177deg);-moz-transform:rotate(177deg);-ms-transform:rotate(177deg);-o-transform:rotate(177deg);transform:rotate(177deg)}.wi-wind.towards-178-deg{-webkit-transform:rotate(178deg);-moz-transform:rotate(178deg);-ms-transform:rotate(178deg);-o-transform:rotate(178deg);transform:rotate(178deg)}.wi-wind.towards-179-deg{-webkit-transform:rotate(179deg);-moz-transform:rotate(179deg);-ms-transform:rotate(179deg);-o-transform:rotate(179deg);transform:rotate(179deg)}.wi-wind.towards-180-deg{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.wi-wind.towards-181-deg{-webkit-transform:rotate(181deg);-moz-transform:rotate(181deg);-ms-transform:rotate(181deg);-o-transform:rotate(181deg);transform:rotate(181deg)}.wi-wind.towards-182-deg{-webkit-transform:rotate(182deg);-moz-transform:rotate(182deg);-ms-transform:rotate(182deg);-o-transform:rotate(182deg);transform:rotate(182deg)}.wi-wind.towards-183-deg{-webkit-transform:rotate(183deg);-moz-transform:rotate(183deg);-ms-transform:rotate(183deg);-o-transform:rotate(183deg);transform:rotate(183deg)}.wi-wind.towards-184-deg{-webkit-transform:rotate(184deg);-moz-transform:rotate(184deg);-ms-transform:rotate(184deg);-o-transform:rotate(184deg);transform:rotate(184deg)}.wi-wind.towards-185-deg{-webkit-transform:rotate(185deg);-moz-transform:rotate(185deg);-ms-transform:rotate(185deg);-o-transform:rotate(185deg);transform:rotate(185deg)}.wi-wind.towards-186-deg{-webkit-transform:rotate(186deg);-moz-transform:rotate(186deg);-ms-transform:rotate(186deg);-o-transform:rotate(186deg);transform:rotate(186deg)}.wi-wind.towards-187-deg{-webkit-transform:rotate(187deg);-moz-transform:rotate(187deg);-ms-transform:rotate(187deg);-o-transform:rotate(187deg);transform:rotate(187deg)}.wi-wind.towards-188-deg{-webkit-transform:rotate(188deg);-moz-transform:rotate(188deg);-ms-transform:rotate(188deg);-o-transform:rotate(188deg);transform:rotate(188deg)}.wi-wind.towards-189-deg{-webkit-transform:rotate(189deg);-moz-transform:rotate(189deg);-ms-transform:rotate(189deg);-o-transform:rotate(189deg);transform:rotate(189deg)}.wi-wind.towards-190-deg{-webkit-transform:rotate(190deg);-moz-transform:rotate(190deg);-ms-transform:rotate(190deg);-o-transform:rotate(190deg);transform:rotate(190deg)}.wi-wind.towards-191-deg{-webkit-transform:rotate(191deg);-moz-transform:rotate(191deg);-ms-transform:rotate(191deg);-o-transform:rotate(191deg);transform:rotate(191deg)}.wi-wind.towards-192-deg{-webkit-transform:rotate(192deg);-moz-transform:rotate(192deg);-ms-transform:rotate(192deg);-o-transform:rotate(192deg);transform:rotate(192deg)}.wi-wind.towards-193-deg{-webkit-transform:rotate(193deg);-moz-transform:rotate(193deg);-ms-transform:rotate(193deg);-o-transform:rotate(193deg);transform:rotate(193deg)}.wi-wind.towards-194-deg{-webkit-transform:rotate(194deg);-moz-transform:rotate(194deg);-ms-transform:rotate(194deg);-o-transform:rotate(194deg);transform:rotate(194deg)}.wi-wind.towards-195-deg{-webkit-transform:rotate(195deg);-moz-transform:rotate(195deg);-ms-transform:rotate(195deg);-o-transform:rotate(195deg);transform:rotate(195deg)}.wi-wind.towards-196-deg{-webkit-transform:rotate(196deg);-moz-transform:rotate(196deg);-ms-transform:rotate(196deg);-o-transform:rotate(196deg);transform:rotate(196deg)}.wi-wind.towards-197-deg{-webkit-transform:rotate(197deg);-moz-transform:rotate(197deg);-ms-transform:rotate(197deg);-o-transform:rotate(197deg);transform:rotate(197deg)}.wi-wind.towards-198-deg{-webkit-transform:rotate(198deg);-moz-transform:rotate(198deg);-ms-transform:rotate(198deg);-o-transform:rotate(198deg);transform:rotate(198deg)}.wi-wind.towards-199-deg{-webkit-transform:rotate(199deg);-moz-transform:rotate(199deg);-ms-transform:rotate(199deg);-o-transform:rotate(199deg);transform:rotate(199deg)}.wi-wind.towards-200-deg{-webkit-transform:rotate(200deg);-moz-transform:rotate(200deg);-ms-transform:rotate(200deg);-o-transform:rotate(200deg);transform:rotate(200deg)}.wi-wind.towards-201-deg{-webkit-transform:rotate(201deg);-moz-transform:rotate(201deg);-ms-transform:rotate(201deg);-o-transform:rotate(201deg);transform:rotate(201deg)}.wi-wind.towards-202-deg{-webkit-transform:rotate(202deg);-moz-transform:rotate(202deg);-ms-transform:rotate(202deg);-o-transform:rotate(202deg);transform:rotate(202deg)}.wi-wind.towards-203-deg{-webkit-transform:rotate(203deg);-moz-transform:rotate(203deg);-ms-transform:rotate(203deg);-o-transform:rotate(203deg);transform:rotate(203deg)}.wi-wind.towards-204-deg{-webkit-transform:rotate(204deg);-moz-transform:rotate(204deg);-ms-transform:rotate(204deg);-o-transform:rotate(204deg);transform:rotate(204deg)}.wi-wind.towards-205-deg{-webkit-transform:rotate(205deg);-moz-transform:rotate(205deg);-ms-transform:rotate(205deg);-o-transform:rotate(205deg);transform:rotate(205deg)}.wi-wind.towards-206-deg{-webkit-transform:rotate(206deg);-moz-transform:rotate(206deg);-ms-transform:rotate(206deg);-o-transform:rotate(206deg);transform:rotate(206deg)}.wi-wind.towards-207-deg{-webkit-transform:rotate(207deg);-moz-transform:rotate(207deg);-ms-transform:rotate(207deg);-o-transform:rotate(207deg);transform:rotate(207deg)}.wi-wind.towards-208-deg{-webkit-transform:rotate(208deg);-moz-transform:rotate(208deg);-ms-transform:rotate(208deg);-o-transform:rotate(208deg);transform:rotate(208deg)}.wi-wind.towards-209-deg{-webkit-transform:rotate(209deg);-moz-transform:rotate(209deg);-ms-transform:rotate(209deg);-o-transform:rotate(209deg);transform:rotate(209deg)}.wi-wind.towards-210-deg{-webkit-transform:rotate(210deg);-moz-transform:rotate(210deg);-ms-transform:rotate(210deg);-o-transform:rotate(210deg);transform:rotate(210deg)}.wi-wind.towards-211-deg{-webkit-transform:rotate(211deg);-moz-transform:rotate(211deg);-ms-transform:rotate(211deg);-o-transform:rotate(211deg);transform:rotate(211deg)}.wi-wind.towards-212-deg{-webkit-transform:rotate(212deg);-moz-transform:rotate(212deg);-ms-transform:rotate(212deg);-o-transform:rotate(212deg);transform:rotate(212deg)}.wi-wind.towards-213-deg{-webkit-transform:rotate(213deg);-moz-transform:rotate(213deg);-ms-transform:rotate(213deg);-o-transform:rotate(213deg);transform:rotate(213deg)}.wi-wind.towards-214-deg{-webkit-transform:rotate(214deg);-moz-transform:rotate(214deg);-ms-transform:rotate(214deg);-o-transform:rotate(214deg);transform:rotate(214deg)}.wi-wind.towards-215-deg{-webkit-transform:rotate(215deg);-moz-transform:rotate(215deg);-ms-transform:rotate(215deg);-o-transform:rotate(215deg);transform:rotate(215deg)}.wi-wind.towards-216-deg{-webkit-transform:rotate(216deg);-moz-transform:rotate(216deg);-ms-transform:rotate(216deg);-o-transform:rotate(216deg);transform:rotate(216deg)}.wi-wind.towards-217-deg{-webkit-transform:rotate(217deg);-moz-transform:rotate(217deg);-ms-transform:rotate(217deg);-o-transform:rotate(217deg);transform:rotate(217deg)}.wi-wind.towards-218-deg{-webkit-transform:rotate(218deg);-moz-transform:rotate(218deg);-ms-transform:rotate(218deg);-o-transform:rotate(218deg);transform:rotate(218deg)}.wi-wind.towards-219-deg{-webkit-transform:rotate(219deg);-moz-transform:rotate(219deg);-ms-transform:rotate(219deg);-o-transform:rotate(219deg);transform:rotate(219deg)}.wi-wind.towards-220-deg{-webkit-transform:rotate(220deg);-moz-transform:rotate(220deg);-ms-transform:rotate(220deg);-o-transform:rotate(220deg);transform:rotate(220deg)}.wi-wind.towards-221-deg{-webkit-transform:rotate(221deg);-moz-transform:rotate(221deg);-ms-transform:rotate(221deg);-o-transform:rotate(221deg);transform:rotate(221deg)}.wi-wind.towards-222-deg{-webkit-transform:rotate(222deg);-moz-transform:rotate(222deg);-ms-transform:rotate(222deg);-o-transform:rotate(222deg);transform:rotate(222deg)}.wi-wind.towards-223-deg{-webkit-transform:rotate(223deg);-moz-transform:rotate(223deg);-ms-transform:rotate(223deg);-o-transform:rotate(223deg);transform:rotate(223deg)}.wi-wind.towards-224-deg{-webkit-transform:rotate(224deg);-moz-transform:rotate(224deg);-ms-transform:rotate(224deg);-o-transform:rotate(224deg);transform:rotate(224deg)}.wi-wind.towards-225-deg{-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}.wi-wind.towards-226-deg{-webkit-transform:rotate(226deg);-moz-transform:rotate(226deg);-ms-transform:rotate(226deg);-o-transform:rotate(226deg);transform:rotate(226deg)}.wi-wind.towards-227-deg{-webkit-transform:rotate(227deg);-moz-transform:rotate(227deg);-ms-transform:rotate(227deg);-o-transform:rotate(227deg);transform:rotate(227deg)}.wi-wind.towards-228-deg{-webkit-transform:rotate(228deg);-moz-transform:rotate(228deg);-ms-transform:rotate(228deg);-o-transform:rotate(228deg);transform:rotate(228deg)}.wi-wind.towards-229-deg{-webkit-transform:rotate(229deg);-moz-transform:rotate(229deg);-ms-transform:rotate(229deg);-o-transform:rotate(229deg);transform:rotate(229deg)}.wi-wind.towards-230-deg{-webkit-transform:rotate(230deg);-moz-transform:rotate(230deg);-ms-transform:rotate(230deg);-o-transform:rotate(230deg);transform:rotate(230deg)}.wi-wind.towards-231-deg{-webkit-transform:rotate(231deg);-moz-transform:rotate(231deg);-ms-transform:rotate(231deg);-o-transform:rotate(231deg);transform:rotate(231deg)}.wi-wind.towards-232-deg{-webkit-transform:rotate(232deg);-moz-transform:rotate(232deg);-ms-transform:rotate(232deg);-o-transform:rotate(232deg);transform:rotate(232deg)}.wi-wind.towards-233-deg{-webkit-transform:rotate(233deg);-moz-transform:rotate(233deg);-ms-transform:rotate(233deg);-o-transform:rotate(233deg);transform:rotate(233deg)}.wi-wind.towards-234-deg{-webkit-transform:rotate(234deg);-moz-transform:rotate(234deg);-ms-transform:rotate(234deg);-o-transform:rotate(234deg);transform:rotate(234deg)}.wi-wind.towards-235-deg{-webkit-transform:rotate(235deg);-moz-transform:rotate(235deg);-ms-transform:rotate(235deg);-o-transform:rotate(235deg);transform:rotate(235deg)}.wi-wind.towards-236-deg{-webkit-transform:rotate(236deg);-moz-transform:rotate(236deg);-ms-transform:rotate(236deg);-o-transform:rotate(236deg);transform:rotate(236deg)}.wi-wind.towards-237-deg{-webkit-transform:rotate(237deg);-moz-transform:rotate(237deg);-ms-transform:rotate(237deg);-o-transform:rotate(237deg);transform:rotate(237deg)}.wi-wind.towards-238-deg{-webkit-transform:rotate(238deg);-moz-transform:rotate(238deg);-ms-transform:rotate(238deg);-o-transform:rotate(238deg);transform:rotate(238deg)}.wi-wind.towards-239-deg{-webkit-transform:rotate(239deg);-moz-transform:rotate(239deg);-ms-transform:rotate(239deg);-o-transform:rotate(239deg);transform:rotate(239deg)}.wi-wind.towards-240-deg{-webkit-transform:rotate(240deg);-moz-transform:rotate(240deg);-ms-transform:rotate(240deg);-o-transform:rotate(240deg);transform:rotate(240deg)}.wi-wind.towards-241-deg{-webkit-transform:rotate(241deg);-moz-transform:rotate(241deg);-ms-transform:rotate(241deg);-o-transform:rotate(241deg);transform:rotate(241deg)}.wi-wind.towards-242-deg{-webkit-transform:rotate(242deg);-moz-transform:rotate(242deg);-ms-transform:rotate(242deg);-o-transform:rotate(242deg);transform:rotate(242deg)}.wi-wind.towards-243-deg{-webkit-transform:rotate(243deg);-moz-transform:rotate(243deg);-ms-transform:rotate(243deg);-o-transform:rotate(243deg);transform:rotate(243deg)}.wi-wind.towards-244-deg{-webkit-transform:rotate(244deg);-moz-transform:rotate(244deg);-ms-transform:rotate(244deg);-o-transform:rotate(244deg);transform:rotate(244deg)}.wi-wind.towards-245-deg{-webkit-transform:rotate(245deg);-moz-transform:rotate(245deg);-ms-transform:rotate(245deg);-o-transform:rotate(245deg);transform:rotate(245deg)}.wi-wind.towards-246-deg{-webkit-transform:rotate(246deg);-moz-transform:rotate(246deg);-ms-transform:rotate(246deg);-o-transform:rotate(246deg);transform:rotate(246deg)}.wi-wind.towards-247-deg{-webkit-transform:rotate(247deg);-moz-transform:rotate(247deg);-ms-transform:rotate(247deg);-o-transform:rotate(247deg);transform:rotate(247deg)}.wi-wind.towards-248-deg{-webkit-transform:rotate(248deg);-moz-transform:rotate(248deg);-ms-transform:rotate(248deg);-o-transform:rotate(248deg);transform:rotate(248deg)}.wi-wind.towards-249-deg{-webkit-transform:rotate(249deg);-moz-transform:rotate(249deg);-ms-transform:rotate(249deg);-o-transform:rotate(249deg);transform:rotate(249deg)}.wi-wind.towards-250-deg{-webkit-transform:rotate(250deg);-moz-transform:rotate(250deg);-ms-transform:rotate(250deg);-o-transform:rotate(250deg);transform:rotate(250deg)}.wi-wind.towards-251-deg{-webkit-transform:rotate(251deg);-moz-transform:rotate(251deg);-ms-transform:rotate(251deg);-o-transform:rotate(251deg);transform:rotate(251deg)}.wi-wind.towards-252-deg{-webkit-transform:rotate(252deg);-moz-transform:rotate(252deg);-ms-transform:rotate(252deg);-o-transform:rotate(252deg);transform:rotate(252deg)}.wi-wind.towards-253-deg{-webkit-transform:rotate(253deg);-moz-transform:rotate(253deg);-ms-transform:rotate(253deg);-o-transform:rotate(253deg);transform:rotate(253deg)}.wi-wind.towards-254-deg{-webkit-transform:rotate(254deg);-moz-transform:rotate(254deg);-ms-transform:rotate(254deg);-o-transform:rotate(254deg);transform:rotate(254deg)}.wi-wind.towards-255-deg{-webkit-transform:rotate(255deg);-moz-transform:rotate(255deg);-ms-transform:rotate(255deg);-o-transform:rotate(255deg);transform:rotate(255deg)}.wi-wind.towards-256-deg{-webkit-transform:rotate(256deg);-moz-transform:rotate(256deg);-ms-transform:rotate(256deg);-o-transform:rotate(256deg);transform:rotate(256deg)}.wi-wind.towards-257-deg{-webkit-transform:rotate(257deg);-moz-transform:rotate(257deg);-ms-transform:rotate(257deg);-o-transform:rotate(257deg);transform:rotate(257deg)}.wi-wind.towards-258-deg{-webkit-transform:rotate(258deg);-moz-transform:rotate(258deg);-ms-transform:rotate(258deg);-o-transform:rotate(258deg);transform:rotate(258deg)}.wi-wind.towards-259-deg{-webkit-transform:rotate(259deg);-moz-transform:rotate(259deg);-ms-transform:rotate(259deg);-o-transform:rotate(259deg);transform:rotate(259deg)}.wi-wind.towards-260-deg{-webkit-transform:rotate(260deg);-moz-transform:rotate(260deg);-ms-transform:rotate(260deg);-o-transform:rotate(260deg);transform:rotate(260deg)}.wi-wind.towards-261-deg{-webkit-transform:rotate(261deg);-moz-transform:rotate(261deg);-ms-transform:rotate(261deg);-o-transform:rotate(261deg);transform:rotate(261deg)}.wi-wind.towards-262-deg{-webkit-transform:rotate(262deg);-moz-transform:rotate(262deg);-ms-transform:rotate(262deg);-o-transform:rotate(262deg);transform:rotate(262deg)}.wi-wind.towards-263-deg{-webkit-transform:rotate(263deg);-moz-transform:rotate(263deg);-ms-transform:rotate(263deg);-o-transform:rotate(263deg);transform:rotate(263deg)}.wi-wind.towards-264-deg{-webkit-transform:rotate(264deg);-moz-transform:rotate(264deg);-ms-transform:rotate(264deg);-o-transform:rotate(264deg);transform:rotate(264deg)}.wi-wind.towards-265-deg{-webkit-transform:rotate(265deg);-moz-transform:rotate(265deg);-ms-transform:rotate(265deg);-o-transform:rotate(265deg);transform:rotate(265deg)}.wi-wind.towards-266-deg{-webkit-transform:rotate(266deg);-moz-transform:rotate(266deg);-ms-transform:rotate(266deg);-o-transform:rotate(266deg);transform:rotate(266deg)}.wi-wind.towards-267-deg{-webkit-transform:rotate(267deg);-moz-transform:rotate(267deg);-ms-transform:rotate(267deg);-o-transform:rotate(267deg);transform:rotate(267deg)}.wi-wind.towards-268-deg{-webkit-transform:rotate(268deg);-moz-transform:rotate(268deg);-ms-transform:rotate(268deg);-o-transform:rotate(268deg);transform:rotate(268deg)}.wi-wind.towards-269-deg{-webkit-transform:rotate(269deg);-moz-transform:rotate(269deg);-ms-transform:rotate(269deg);-o-transform:rotate(269deg);transform:rotate(269deg)}.wi-wind.towards-270-deg{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.wi-wind.towards-271-deg{-webkit-transform:rotate(271deg);-moz-transform:rotate(271deg);-ms-transform:rotate(271deg);-o-transform:rotate(271deg);transform:rotate(271deg)}.wi-wind.towards-272-deg{-webkit-transform:rotate(272deg);-moz-transform:rotate(272deg);-ms-transform:rotate(272deg);-o-transform:rotate(272deg);transform:rotate(272deg)}.wi-wind.towards-273-deg{-webkit-transform:rotate(273deg);-moz-transform:rotate(273deg);-ms-transform:rotate(273deg);-o-transform:rotate(273deg);transform:rotate(273deg)}.wi-wind.towards-274-deg{-webkit-transform:rotate(274deg);-moz-transform:rotate(274deg);-ms-transform:rotate(274deg);-o-transform:rotate(274deg);transform:rotate(274deg)}.wi-wind.towards-275-deg{-webkit-transform:rotate(275deg);-moz-transform:rotate(275deg);-ms-transform:rotate(275deg);-o-transform:rotate(275deg);transform:rotate(275deg)}.wi-wind.towards-276-deg{-webkit-transform:rotate(276deg);-moz-transform:rotate(276deg);-ms-transform:rotate(276deg);-o-transform:rotate(276deg);transform:rotate(276deg)}.wi-wind.towards-277-deg{-webkit-transform:rotate(277deg);-moz-transform:rotate(277deg);-ms-transform:rotate(277deg);-o-transform:rotate(277deg);transform:rotate(277deg)}.wi-wind.towards-278-deg{-webkit-transform:rotate(278deg);-moz-transform:rotate(278deg);-ms-transform:rotate(278deg);-o-transform:rotate(278deg);transform:rotate(278deg)}.wi-wind.towards-279-deg{-webkit-transform:rotate(279deg);-moz-transform:rotate(279deg);-ms-transform:rotate(279deg);-o-transform:rotate(279deg);transform:rotate(279deg)}.wi-wind.towards-280-deg{-webkit-transform:rotate(280deg);-moz-transform:rotate(280deg);-ms-transform:rotate(280deg);-o-transform:rotate(280deg);transform:rotate(280deg)}.wi-wind.towards-281-deg{-webkit-transform:rotate(281deg);-moz-transform:rotate(281deg);-ms-transform:rotate(281deg);-o-transform:rotate(281deg);transform:rotate(281deg)}.wi-wind.towards-282-deg{-webkit-transform:rotate(282deg);-moz-transform:rotate(282deg);-ms-transform:rotate(282deg);-o-transform:rotate(282deg);transform:rotate(282deg)}.wi-wind.towards-283-deg{-webkit-transform:rotate(283deg);-moz-transform:rotate(283deg);-ms-transform:rotate(283deg);-o-transform:rotate(283deg);transform:rotate(283deg)}.wi-wind.towards-284-deg{-webkit-transform:rotate(284deg);-moz-transform:rotate(284deg);-ms-transform:rotate(284deg);-o-transform:rotate(284deg);transform:rotate(284deg)}.wi-wind.towards-285-deg{-webkit-transform:rotate(285deg);-moz-transform:rotate(285deg);-ms-transform:rotate(285deg);-o-transform:rotate(285deg);transform:rotate(285deg)}.wi-wind.towards-286-deg{-webkit-transform:rotate(286deg);-moz-transform:rotate(286deg);-ms-transform:rotate(286deg);-o-transform:rotate(286deg);transform:rotate(286deg)}.wi-wind.towards-287-deg{-webkit-transform:rotate(287deg);-moz-transform:rotate(287deg);-ms-transform:rotate(287deg);-o-transform:rotate(287deg);transform:rotate(287deg)}.wi-wind.towards-288-deg{-webkit-transform:rotate(288deg);-moz-transform:rotate(288deg);-ms-transform:rotate(288deg);-o-transform:rotate(288deg);transform:rotate(288deg)}.wi-wind.towards-289-deg{-webkit-transform:rotate(289deg);-moz-transform:rotate(289deg);-ms-transform:rotate(289deg);-o-transform:rotate(289deg);transform:rotate(289deg)}.wi-wind.towards-290-deg{-webkit-transform:rotate(290deg);-moz-transform:rotate(290deg);-ms-transform:rotate(290deg);-o-transform:rotate(290deg);transform:rotate(290deg)}.wi-wind.towards-291-deg{-webkit-transform:rotate(291deg);-moz-transform:rotate(291deg);-ms-transform:rotate(291deg);-o-transform:rotate(291deg);transform:rotate(291deg)}.wi-wind.towards-292-deg{-webkit-transform:rotate(292deg);-moz-transform:rotate(292deg);-ms-transform:rotate(292deg);-o-transform:rotate(292deg);transform:rotate(292deg)}.wi-wind.towards-293-deg{-webkit-transform:rotate(293deg);-moz-transform:rotate(293deg);-ms-transform:rotate(293deg);-o-transform:rotate(293deg);transform:rotate(293deg)}.wi-wind.towards-294-deg{-webkit-transform:rotate(294deg);-moz-transform:rotate(294deg);-ms-transform:rotate(294deg);-o-transform:rotate(294deg);transform:rotate(294deg)}.wi-wind.towards-295-deg{-webkit-transform:rotate(295deg);-moz-transform:rotate(295deg);-ms-transform:rotate(295deg);-o-transform:rotate(295deg);transform:rotate(295deg)}.wi-wind.towards-296-deg{-webkit-transform:rotate(296deg);-moz-transform:rotate(296deg);-ms-transform:rotate(296deg);-o-transform:rotate(296deg);transform:rotate(296deg)}.wi-wind.towards-297-deg{-webkit-transform:rotate(297deg);-moz-transform:rotate(297deg);-ms-transform:rotate(297deg);-o-transform:rotate(297deg);transform:rotate(297deg)}.wi-wind.towards-298-deg{-webkit-transform:rotate(298deg);-moz-transform:rotate(298deg);-ms-transform:rotate(298deg);-o-transform:rotate(298deg);transform:rotate(298deg)}.wi-wind.towards-299-deg{-webkit-transform:rotate(299deg);-moz-transform:rotate(299deg);-ms-transform:rotate(299deg);-o-transform:rotate(299deg);transform:rotate(299deg)}.wi-wind.towards-300-deg{-webkit-transform:rotate(300deg);-moz-transform:rotate(300deg);-ms-transform:rotate(300deg);-o-transform:rotate(300deg);transform:rotate(300deg)}.wi-wind.towards-301-deg{-webkit-transform:rotate(301deg);-moz-transform:rotate(301deg);-ms-transform:rotate(301deg);-o-transform:rotate(301deg);transform:rotate(301deg)}.wi-wind.towards-302-deg{-webkit-transform:rotate(302deg);-moz-transform:rotate(302deg);-ms-transform:rotate(302deg);-o-transform:rotate(302deg);transform:rotate(302deg)}.wi-wind.towards-303-deg{-webkit-transform:rotate(303deg);-moz-transform:rotate(303deg);-ms-transform:rotate(303deg);-o-transform:rotate(303deg);transform:rotate(303deg)}.wi-wind.towards-304-deg{-webkit-transform:rotate(304deg);-moz-transform:rotate(304deg);-ms-transform:rotate(304deg);-o-transform:rotate(304deg);transform:rotate(304deg)}.wi-wind.towards-305-deg{-webkit-transform:rotate(305deg);-moz-transform:rotate(305deg);-ms-transform:rotate(305deg);-o-transform:rotate(305deg);transform:rotate(305deg)}.wi-wind.towards-306-deg{-webkit-transform:rotate(306deg);-moz-transform:rotate(306deg);-ms-transform:rotate(306deg);-o-transform:rotate(306deg);transform:rotate(306deg)}.wi-wind.towards-307-deg{-webkit-transform:rotate(307deg);-moz-transform:rotate(307deg);-ms-transform:rotate(307deg);-o-transform:rotate(307deg);transform:rotate(307deg)}.wi-wind.towards-308-deg{-webkit-transform:rotate(308deg);-moz-transform:rotate(308deg);-ms-transform:rotate(308deg);-o-transform:rotate(308deg);transform:rotate(308deg)}.wi-wind.towards-309-deg{-webkit-transform:rotate(309deg);-moz-transform:rotate(309deg);-ms-transform:rotate(309deg);-o-transform:rotate(309deg);transform:rotate(309deg)}.wi-wind.towards-310-deg{-webkit-transform:rotate(310deg);-moz-transform:rotate(310deg);-ms-transform:rotate(310deg);-o-transform:rotate(310deg);transform:rotate(310deg)}.wi-wind.towards-311-deg{-webkit-transform:rotate(311deg);-moz-transform:rotate(311deg);-ms-transform:rotate(311deg);-o-transform:rotate(311deg);transform:rotate(311deg)}.wi-wind.towards-312-deg{-webkit-transform:rotate(312deg);-moz-transform:rotate(312deg);-ms-transform:rotate(312deg);-o-transform:rotate(312deg);transform:rotate(312deg)}.wi-wind.towards-313-deg{-webkit-transform:rotate(313deg);-moz-transform:rotate(313deg);-ms-transform:rotate(313deg);-o-transform:rotate(313deg);transform:rotate(313deg)}.wi-wind.towards-314-deg{-webkit-transform:rotate(314deg);-moz-transform:rotate(314deg);-ms-transform:rotate(314deg);-o-transform:rotate(314deg);transform:rotate(314deg)}.wi-wind.towards-315-deg{-webkit-transform:rotate(315deg);-moz-transform:rotate(315deg);-ms-transform:rotate(315deg);-o-transform:rotate(315deg);transform:rotate(315deg)}.wi-wind.towards-316-deg{-webkit-transform:rotate(316deg);-moz-transform:rotate(316deg);-ms-transform:rotate(316deg);-o-transform:rotate(316deg);transform:rotate(316deg)}.wi-wind.towards-317-deg{-webkit-transform:rotate(317deg);-moz-transform:rotate(317deg);-ms-transform:rotate(317deg);-o-transform:rotate(317deg);transform:rotate(317deg)}.wi-wind.towards-318-deg{-webkit-transform:rotate(318deg);-moz-transform:rotate(318deg);-ms-transform:rotate(318deg);-o-transform:rotate(318deg);transform:rotate(318deg)}.wi-wind.towards-319-deg{-webkit-transform:rotate(319deg);-moz-transform:rotate(319deg);-ms-transform:rotate(319deg);-o-transform:rotate(319deg);transform:rotate(319deg)}.wi-wind.towards-320-deg{-webkit-transform:rotate(320deg);-moz-transform:rotate(320deg);-ms-transform:rotate(320deg);-o-transform:rotate(320deg);transform:rotate(320deg)}.wi-wind.towards-321-deg{-webkit-transform:rotate(321deg);-moz-transform:rotate(321deg);-ms-transform:rotate(321deg);-o-transform:rotate(321deg);transform:rotate(321deg)}.wi-wind.towards-322-deg{-webkit-transform:rotate(322deg);-moz-transform:rotate(322deg);-ms-transform:rotate(322deg);-o-transform:rotate(322deg);transform:rotate(322deg)}.wi-wind.towards-323-deg{-webkit-transform:rotate(323deg);-moz-transform:rotate(323deg);-ms-transform:rotate(323deg);-o-transform:rotate(323deg);transform:rotate(323deg)}.wi-wind.towards-324-deg{-webkit-transform:rotate(324deg);-moz-transform:rotate(324deg);-ms-transform:rotate(324deg);-o-transform:rotate(324deg);transform:rotate(324deg)}.wi-wind.towards-325-deg{-webkit-transform:rotate(325deg);-moz-transform:rotate(325deg);-ms-transform:rotate(325deg);-o-transform:rotate(325deg);transform:rotate(325deg)}.wi-wind.towards-326-deg{-webkit-transform:rotate(326deg);-moz-transform:rotate(326deg);-ms-transform:rotate(326deg);-o-transform:rotate(326deg);transform:rotate(326deg)}.wi-wind.towards-327-deg{-webkit-transform:rotate(327deg);-moz-transform:rotate(327deg);-ms-transform:rotate(327deg);-o-transform:rotate(327deg);transform:rotate(327deg)}.wi-wind.towards-328-deg{-webkit-transform:rotate(328deg);-moz-transform:rotate(328deg);-ms-transform:rotate(328deg);-o-transform:rotate(328deg);transform:rotate(328deg)}.wi-wind.towards-329-deg{-webkit-transform:rotate(329deg);-moz-transform:rotate(329deg);-ms-transform:rotate(329deg);-o-transform:rotate(329deg);transform:rotate(329deg)}.wi-wind.towards-330-deg{-webkit-transform:rotate(330deg);-moz-transform:rotate(330deg);-ms-transform:rotate(330deg);-o-transform:rotate(330deg);transform:rotate(330deg)}.wi-wind.towards-331-deg{-webkit-transform:rotate(331deg);-moz-transform:rotate(331deg);-ms-transform:rotate(331deg);-o-transform:rotate(331deg);transform:rotate(331deg)}.wi-wind.towards-332-deg{-webkit-transform:rotate(332deg);-moz-transform:rotate(332deg);-ms-transform:rotate(332deg);-o-transform:rotate(332deg);transform:rotate(332deg)}.wi-wind.towards-333-deg{-webkit-transform:rotate(333deg);-moz-transform:rotate(333deg);-ms-transform:rotate(333deg);-o-transform:rotate(333deg);transform:rotate(333deg)}.wi-wind.towards-334-deg{-webkit-transform:rotate(334deg);-moz-transform:rotate(334deg);-ms-transform:rotate(334deg);-o-transform:rotate(334deg);transform:rotate(334deg)}.wi-wind.towards-335-deg{-webkit-transform:rotate(335deg);-moz-transform:rotate(335deg);-ms-transform:rotate(335deg);-o-transform:rotate(335deg);transform:rotate(335deg)}.wi-wind.towards-336-deg{-webkit-transform:rotate(336deg);-moz-transform:rotate(336deg);-ms-transform:rotate(336deg);-o-transform:rotate(336deg);transform:rotate(336deg)}.wi-wind.towards-337-deg{-webkit-transform:rotate(337deg);-moz-transform:rotate(337deg);-ms-transform:rotate(337deg);-o-transform:rotate(337deg);transform:rotate(337deg)}.wi-wind.towards-338-deg{-webkit-transform:rotate(338deg);-moz-transform:rotate(338deg);-ms-transform:rotate(338deg);-o-transform:rotate(338deg);transform:rotate(338deg)}.wi-wind.towards-339-deg{-webkit-transform:rotate(339deg);-moz-transform:rotate(339deg);-ms-transform:rotate(339deg);-o-transform:rotate(339deg);transform:rotate(339deg)}.wi-wind.towards-340-deg{-webkit-transform:rotate(340deg);-moz-transform:rotate(340deg);-ms-transform:rotate(340deg);-o-transform:rotate(340deg);transform:rotate(340deg)}.wi-wind.towards-341-deg{-webkit-transform:rotate(341deg);-moz-transform:rotate(341deg);-ms-transform:rotate(341deg);-o-transform:rotate(341deg);transform:rotate(341deg)}.wi-wind.towards-342-deg{-webkit-transform:rotate(342deg);-moz-transform:rotate(342deg);-ms-transform:rotate(342deg);-o-transform:rotate(342deg);transform:rotate(342deg)}.wi-wind.towards-343-deg{-webkit-transform:rotate(343deg);-moz-transform:rotate(343deg);-ms-transform:rotate(343deg);-o-transform:rotate(343deg);transform:rotate(343deg)}.wi-wind.towards-344-deg{-webkit-transform:rotate(344deg);-moz-transform:rotate(344deg);-ms-transform:rotate(344deg);-o-transform:rotate(344deg);transform:rotate(344deg)}.wi-wind.towards-345-deg{-webkit-transform:rotate(345deg);-moz-transform:rotate(345deg);-ms-transform:rotate(345deg);-o-transform:rotate(345deg);transform:rotate(345deg)}.wi-wind.towards-346-deg{-webkit-transform:rotate(346deg);-moz-transform:rotate(346deg);-ms-transform:rotate(346deg);-o-transform:rotate(346deg);transform:rotate(346deg)}.wi-wind.towards-347-deg{-webkit-transform:rotate(347deg);-moz-transform:rotate(347deg);-ms-transform:rotate(347deg);-o-transform:rotate(347deg);transform:rotate(347deg)}.wi-wind.towards-348-deg{-webkit-transform:rotate(348deg);-moz-transform:rotate(348deg);-ms-transform:rotate(348deg);-o-transform:rotate(348deg);transform:rotate(348deg)}.wi-wind.towards-349-deg{-webkit-transform:rotate(349deg);-moz-transform:rotate(349deg);-ms-transform:rotate(349deg);-o-transform:rotate(349deg);transform:rotate(349deg)}.wi-wind.towards-350-deg{-webkit-transform:rotate(350deg);-moz-transform:rotate(350deg);-ms-transform:rotate(350deg);-o-transform:rotate(350deg);transform:rotate(350deg)}.wi-wind.towards-351-deg{-webkit-transform:rotate(351deg);-moz-transform:rotate(351deg);-ms-transform:rotate(351deg);-o-transform:rotate(351deg);transform:rotate(351deg)}.wi-wind.towards-352-deg{-webkit-transform:rotate(352deg);-moz-transform:rotate(352deg);-ms-transform:rotate(352deg);-o-transform:rotate(352deg);transform:rotate(352deg)}.wi-wind.towards-353-deg{-webkit-transform:rotate(353deg);-moz-transform:rotate(353deg);-ms-transform:rotate(353deg);-o-transform:rotate(353deg);transform:rotate(353deg)}.wi-wind.towards-354-deg{-webkit-transform:rotate(354deg);-moz-transform:rotate(354deg);-ms-transform:rotate(354deg);-o-transform:rotate(354deg);transform:rotate(354deg)}.wi-wind.towards-355-deg{-webkit-transform:rotate(355deg);-moz-transform:rotate(355deg);-ms-transform:rotate(355deg);-o-transform:rotate(355deg);transform:rotate(355deg)}.wi-wind.towards-356-deg{-webkit-transform:rotate(356deg);-moz-transform:rotate(356deg);-ms-transform:rotate(356deg);-o-transform:rotate(356deg);transform:rotate(356deg)}.wi-wind.towards-357-deg{-webkit-transform:rotate(357deg);-moz-transform:rotate(357deg);-ms-transform:rotate(357deg);-o-transform:rotate(357deg);transform:rotate(357deg)}.wi-wind.towards-358-deg{-webkit-transform:rotate(358deg);-moz-transform:rotate(358deg);-ms-transform:rotate(358deg);-o-transform:rotate(358deg);transform:rotate(358deg)}.wi-wind.towards-359-deg{-webkit-transform:rotate(359deg);-moz-transform:rotate(359deg);-ms-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}.wi-wind.towards-360-deg{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.wi-wind.from-0-deg{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.wi-wind.from-1-deg{-webkit-transform:rotate(181deg);-moz-transform:rotate(181deg);-ms-transform:rotate(181deg);-o-transform:rotate(181deg);transform:rotate(181deg)}.wi-wind.from-2-deg{-webkit-transform:rotate(182deg);-moz-transform:rotate(182deg);-ms-transform:rotate(182deg);-o-transform:rotate(182deg);transform:rotate(182deg)}.wi-wind.from-3-deg{-webkit-transform:rotate(183deg);-moz-transform:rotate(183deg);-ms-transform:rotate(183deg);-o-transform:rotate(183deg);transform:rotate(183deg)}.wi-wind.from-4-deg{-webkit-transform:rotate(184deg);-moz-transform:rotate(184deg);-ms-transform:rotate(184deg);-o-transform:rotate(184deg);transform:rotate(184deg)}.wi-wind.from-5-deg{-webkit-transform:rotate(185deg);-moz-transform:rotate(185deg);-ms-transform:rotate(185deg);-o-transform:rotate(185deg);transform:rotate(185deg)}.wi-wind.from-6-deg{-webkit-transform:rotate(186deg);-moz-transform:rotate(186deg);-ms-transform:rotate(186deg);-o-transform:rotate(186deg);transform:rotate(186deg)}.wi-wind.from-7-deg{-webkit-transform:rotate(187deg);-moz-transform:rotate(187deg);-ms-transform:rotate(187deg);-o-transform:rotate(187deg);transform:rotate(187deg)}.wi-wind.from-8-deg{-webkit-transform:rotate(188deg);-moz-transform:rotate(188deg);-ms-transform:rotate(188deg);-o-transform:rotate(188deg);transform:rotate(188deg)}.wi-wind.from-9-deg{-webkit-transform:rotate(189deg);-moz-transform:rotate(189deg);-ms-transform:rotate(189deg);-o-transform:rotate(189deg);transform:rotate(189deg)}.wi-wind.from-10-deg{-webkit-transform:rotate(190deg);-moz-transform:rotate(190deg);-ms-transform:rotate(190deg);-o-transform:rotate(190deg);transform:rotate(190deg)}.wi-wind.from-11-deg{-webkit-transform:rotate(191deg);-moz-transform:rotate(191deg);-ms-transform:rotate(191deg);-o-transform:rotate(191deg);transform:rotate(191deg)}.wi-wind.from-12-deg{-webkit-transform:rotate(192deg);-moz-transform:rotate(192deg);-ms-transform:rotate(192deg);-o-transform:rotate(192deg);transform:rotate(192deg)}.wi-wind.from-13-deg{-webkit-transform:rotate(193deg);-moz-transform:rotate(193deg);-ms-transform:rotate(193deg);-o-transform:rotate(193deg);transform:rotate(193deg)}.wi-wind.from-14-deg{-webkit-transform:rotate(194deg);-moz-transform:rotate(194deg);-ms-transform:rotate(194deg);-o-transform:rotate(194deg);transform:rotate(194deg)}.wi-wind.from-15-deg{-webkit-transform:rotate(195deg);-moz-transform:rotate(195deg);-ms-transform:rotate(195deg);-o-transform:rotate(195deg);transform:rotate(195deg)}.wi-wind.from-16-deg{-webkit-transform:rotate(196deg);-moz-transform:rotate(196deg);-ms-transform:rotate(196deg);-o-transform:rotate(196deg);transform:rotate(196deg)}.wi-wind.from-17-deg{-webkit-transform:rotate(197deg);-moz-transform:rotate(197deg);-ms-transform:rotate(197deg);-o-transform:rotate(197deg);transform:rotate(197deg)}.wi-wind.from-18-deg{-webkit-transform:rotate(198deg);-moz-transform:rotate(198deg);-ms-transform:rotate(198deg);-o-transform:rotate(198deg);transform:rotate(198deg)}.wi-wind.from-19-deg{-webkit-transform:rotate(199deg);-moz-transform:rotate(199deg);-ms-transform:rotate(199deg);-o-transform:rotate(199deg);transform:rotate(199deg)}.wi-wind.from-20-deg{-webkit-transform:rotate(200deg);-moz-transform:rotate(200deg);-ms-transform:rotate(200deg);-o-transform:rotate(200deg);transform:rotate(200deg)}.wi-wind.from-21-deg{-webkit-transform:rotate(201deg);-moz-transform:rotate(201deg);-ms-transform:rotate(201deg);-o-transform:rotate(201deg);transform:rotate(201deg)}.wi-wind.from-22-deg{-webkit-transform:rotate(202deg);-moz-transform:rotate(202deg);-ms-transform:rotate(202deg);-o-transform:rotate(202deg);transform:rotate(202deg)}.wi-wind.from-23-deg{-webkit-transform:rotate(203deg);-moz-transform:rotate(203deg);-ms-transform:rotate(203deg);-o-transform:rotate(203deg);transform:rotate(203deg)}.wi-wind.from-24-deg{-webkit-transform:rotate(204deg);-moz-transform:rotate(204deg);-ms-transform:rotate(204deg);-o-transform:rotate(204deg);transform:rotate(204deg)}.wi-wind.from-25-deg{-webkit-transform:rotate(205deg);-moz-transform:rotate(205deg);-ms-transform:rotate(205deg);-o-transform:rotate(205deg);transform:rotate(205deg)}.wi-wind.from-26-deg{-webkit-transform:rotate(206deg);-moz-transform:rotate(206deg);-ms-transform:rotate(206deg);-o-transform:rotate(206deg);transform:rotate(206deg)}.wi-wind.from-27-deg{-webkit-transform:rotate(207deg);-moz-transform:rotate(207deg);-ms-transform:rotate(207deg);-o-transform:rotate(207deg);transform:rotate(207deg)}.wi-wind.from-28-deg{-webkit-transform:rotate(208deg);-moz-transform:rotate(208deg);-ms-transform:rotate(208deg);-o-transform:rotate(208deg);transform:rotate(208deg)}.wi-wind.from-29-deg{-webkit-transform:rotate(209deg);-moz-transform:rotate(209deg);-ms-transform:rotate(209deg);-o-transform:rotate(209deg);transform:rotate(209deg)}.wi-wind.from-30-deg{-webkit-transform:rotate(210deg);-moz-transform:rotate(210deg);-ms-transform:rotate(210deg);-o-transform:rotate(210deg);transform:rotate(210deg)}.wi-wind.from-31-deg{-webkit-transform:rotate(211deg);-moz-transform:rotate(211deg);-ms-transform:rotate(211deg);-o-transform:rotate(211deg);transform:rotate(211deg)}.wi-wind.from-32-deg{-webkit-transform:rotate(212deg);-moz-transform:rotate(212deg);-ms-transform:rotate(212deg);-o-transform:rotate(212deg);transform:rotate(212deg)}.wi-wind.from-33-deg{-webkit-transform:rotate(213deg);-moz-transform:rotate(213deg);-ms-transform:rotate(213deg);-o-transform:rotate(213deg);transform:rotate(213deg)}.wi-wind.from-34-deg{-webkit-transform:rotate(214deg);-moz-transform:rotate(214deg);-ms-transform:rotate(214deg);-o-transform:rotate(214deg);transform:rotate(214deg)}.wi-wind.from-35-deg{-webkit-transform:rotate(215deg);-moz-transform:rotate(215deg);-ms-transform:rotate(215deg);-o-transform:rotate(215deg);transform:rotate(215deg)}.wi-wind.from-36-deg{-webkit-transform:rotate(216deg);-moz-transform:rotate(216deg);-ms-transform:rotate(216deg);-o-transform:rotate(216deg);transform:rotate(216deg)}.wi-wind.from-37-deg{-webkit-transform:rotate(217deg);-moz-transform:rotate(217deg);-ms-transform:rotate(217deg);-o-transform:rotate(217deg);transform:rotate(217deg)}.wi-wind.from-38-deg{-webkit-transform:rotate(218deg);-moz-transform:rotate(218deg);-ms-transform:rotate(218deg);-o-transform:rotate(218deg);transform:rotate(218deg)}.wi-wind.from-39-deg{-webkit-transform:rotate(219deg);-moz-transform:rotate(219deg);-ms-transform:rotate(219deg);-o-transform:rotate(219deg);transform:rotate(219deg)}.wi-wind.from-40-deg{-webkit-transform:rotate(220deg);-moz-transform:rotate(220deg);-ms-transform:rotate(220deg);-o-transform:rotate(220deg);transform:rotate(220deg)}.wi-wind.from-41-deg{-webkit-transform:rotate(221deg);-moz-transform:rotate(221deg);-ms-transform:rotate(221deg);-o-transform:rotate(221deg);transform:rotate(221deg)}.wi-wind.from-42-deg{-webkit-transform:rotate(222deg);-moz-transform:rotate(222deg);-ms-transform:rotate(222deg);-o-transform:rotate(222deg);transform:rotate(222deg)}.wi-wind.from-43-deg{-webkit-transform:rotate(223deg);-moz-transform:rotate(223deg);-ms-transform:rotate(223deg);-o-transform:rotate(223deg);transform:rotate(223deg)}.wi-wind.from-44-deg{-webkit-transform:rotate(224deg);-moz-transform:rotate(224deg);-ms-transform:rotate(224deg);-o-transform:rotate(224deg);transform:rotate(224deg)}.wi-wind.from-45-deg{-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}.wi-wind.from-46-deg{-webkit-transform:rotate(226deg);-moz-transform:rotate(226deg);-ms-transform:rotate(226deg);-o-transform:rotate(226deg);transform:rotate(226deg)}.wi-wind.from-47-deg{-webkit-transform:rotate(227deg);-moz-transform:rotate(227deg);-ms-transform:rotate(227deg);-o-transform:rotate(227deg);transform:rotate(227deg)}.wi-wind.from-48-deg{-webkit-transform:rotate(228deg);-moz-transform:rotate(228deg);-ms-transform:rotate(228deg);-o-transform:rotate(228deg);transform:rotate(228deg)}.wi-wind.from-49-deg{-webkit-transform:rotate(229deg);-moz-transform:rotate(229deg);-ms-transform:rotate(229deg);-o-transform:rotate(229deg);transform:rotate(229deg)}.wi-wind.from-50-deg{-webkit-transform:rotate(230deg);-moz-transform:rotate(230deg);-ms-transform:rotate(230deg);-o-transform:rotate(230deg);transform:rotate(230deg)}.wi-wind.from-51-deg{-webkit-transform:rotate(231deg);-moz-transform:rotate(231deg);-ms-transform:rotate(231deg);-o-transform:rotate(231deg);transform:rotate(231deg)}.wi-wind.from-52-deg{-webkit-transform:rotate(232deg);-moz-transform:rotate(232deg);-ms-transform:rotate(232deg);-o-transform:rotate(232deg);transform:rotate(232deg)}.wi-wind.from-53-deg{-webkit-transform:rotate(233deg);-moz-transform:rotate(233deg);-ms-transform:rotate(233deg);-o-transform:rotate(233deg);transform:rotate(233deg)}.wi-wind.from-54-deg{-webkit-transform:rotate(234deg);-moz-transform:rotate(234deg);-ms-transform:rotate(234deg);-o-transform:rotate(234deg);transform:rotate(234deg)}.wi-wind.from-55-deg{-webkit-transform:rotate(235deg);-moz-transform:rotate(235deg);-ms-transform:rotate(235deg);-o-transform:rotate(235deg);transform:rotate(235deg)}.wi-wind.from-56-deg{-webkit-transform:rotate(236deg);-moz-transform:rotate(236deg);-ms-transform:rotate(236deg);-o-transform:rotate(236deg);transform:rotate(236deg)}.wi-wind.from-57-deg{-webkit-transform:rotate(237deg);-moz-transform:rotate(237deg);-ms-transform:rotate(237deg);-o-transform:rotate(237deg);transform:rotate(237deg)}.wi-wind.from-58-deg{-webkit-transform:rotate(238deg);-moz-transform:rotate(238deg);-ms-transform:rotate(238deg);-o-transform:rotate(238deg);transform:rotate(238deg)}.wi-wind.from-59-deg{-webkit-transform:rotate(239deg);-moz-transform:rotate(239deg);-ms-transform:rotate(239deg);-o-transform:rotate(239deg);transform:rotate(239deg)}.wi-wind.from-60-deg{-webkit-transform:rotate(240deg);-moz-transform:rotate(240deg);-ms-transform:rotate(240deg);-o-transform:rotate(240deg);transform:rotate(240deg)}.wi-wind.from-61-deg{-webkit-transform:rotate(241deg);-moz-transform:rotate(241deg);-ms-transform:rotate(241deg);-o-transform:rotate(241deg);transform:rotate(241deg)}.wi-wind.from-62-deg{-webkit-transform:rotate(242deg);-moz-transform:rotate(242deg);-ms-transform:rotate(242deg);-o-transform:rotate(242deg);transform:rotate(242deg)}.wi-wind.from-63-deg{-webkit-transform:rotate(243deg);-moz-transform:rotate(243deg);-ms-transform:rotate(243deg);-o-transform:rotate(243deg);transform:rotate(243deg)}.wi-wind.from-64-deg{-webkit-transform:rotate(244deg);-moz-transform:rotate(244deg);-ms-transform:rotate(244deg);-o-transform:rotate(244deg);transform:rotate(244deg)}.wi-wind.from-65-deg{-webkit-transform:rotate(245deg);-moz-transform:rotate(245deg);-ms-transform:rotate(245deg);-o-transform:rotate(245deg);transform:rotate(245deg)}.wi-wind.from-66-deg{-webkit-transform:rotate(246deg);-moz-transform:rotate(246deg);-ms-transform:rotate(246deg);-o-transform:rotate(246deg);transform:rotate(246deg)}.wi-wind.from-67-deg{-webkit-transform:rotate(247deg);-moz-transform:rotate(247deg);-ms-transform:rotate(247deg);-o-transform:rotate(247deg);transform:rotate(247deg)}.wi-wind.from-68-deg{-webkit-transform:rotate(248deg);-moz-transform:rotate(248deg);-ms-transform:rotate(248deg);-o-transform:rotate(248deg);transform:rotate(248deg)}.wi-wind.from-69-deg{-webkit-transform:rotate(249deg);-moz-transform:rotate(249deg);-ms-transform:rotate(249deg);-o-transform:rotate(249deg);transform:rotate(249deg)}.wi-wind.from-70-deg{-webkit-transform:rotate(250deg);-moz-transform:rotate(250deg);-ms-transform:rotate(250deg);-o-transform:rotate(250deg);transform:rotate(250deg)}.wi-wind.from-71-deg{-webkit-transform:rotate(251deg);-moz-transform:rotate(251deg);-ms-transform:rotate(251deg);-o-transform:rotate(251deg);transform:rotate(251deg)}.wi-wind.from-72-deg{-webkit-transform:rotate(252deg);-moz-transform:rotate(252deg);-ms-transform:rotate(252deg);-o-transform:rotate(252deg);transform:rotate(252deg)}.wi-wind.from-73-deg{-webkit-transform:rotate(253deg);-moz-transform:rotate(253deg);-ms-transform:rotate(253deg);-o-transform:rotate(253deg);transform:rotate(253deg)}.wi-wind.from-74-deg{-webkit-transform:rotate(254deg);-moz-transform:rotate(254deg);-ms-transform:rotate(254deg);-o-transform:rotate(254deg);transform:rotate(254deg)}.wi-wind.from-75-deg{-webkit-transform:rotate(255deg);-moz-transform:rotate(255deg);-ms-transform:rotate(255deg);-o-transform:rotate(255deg);transform:rotate(255deg)}.wi-wind.from-76-deg{-webkit-transform:rotate(256deg);-moz-transform:rotate(256deg);-ms-transform:rotate(256deg);-o-transform:rotate(256deg);transform:rotate(256deg)}.wi-wind.from-77-deg{-webkit-transform:rotate(257deg);-moz-transform:rotate(257deg);-ms-transform:rotate(257deg);-o-transform:rotate(257deg);transform:rotate(257deg)}.wi-wind.from-78-deg{-webkit-transform:rotate(258deg);-moz-transform:rotate(258deg);-ms-transform:rotate(258deg);-o-transform:rotate(258deg);transform:rotate(258deg)}.wi-wind.from-79-deg{-webkit-transform:rotate(259deg);-moz-transform:rotate(259deg);-ms-transform:rotate(259deg);-o-transform:rotate(259deg);transform:rotate(259deg)}.wi-wind.from-80-deg{-webkit-transform:rotate(260deg);-moz-transform:rotate(260deg);-ms-transform:rotate(260deg);-o-transform:rotate(260deg);transform:rotate(260deg)}.wi-wind.from-81-deg{-webkit-transform:rotate(261deg);-moz-transform:rotate(261deg);-ms-transform:rotate(261deg);-o-transform:rotate(261deg);transform:rotate(261deg)}.wi-wind.from-82-deg{-webkit-transform:rotate(262deg);-moz-transform:rotate(262deg);-ms-transform:rotate(262deg);-o-transform:rotate(262deg);transform:rotate(262deg)}.wi-wind.from-83-deg{-webkit-transform:rotate(263deg);-moz-transform:rotate(263deg);-ms-transform:rotate(263deg);-o-transform:rotate(263deg);transform:rotate(263deg)}.wi-wind.from-84-deg{-webkit-transform:rotate(264deg);-moz-transform:rotate(264deg);-ms-transform:rotate(264deg);-o-transform:rotate(264deg);transform:rotate(264deg)}.wi-wind.from-85-deg{-webkit-transform:rotate(265deg);-moz-transform:rotate(265deg);-ms-transform:rotate(265deg);-o-transform:rotate(265deg);transform:rotate(265deg)}.wi-wind.from-86-deg{-webkit-transform:rotate(266deg);-moz-transform:rotate(266deg);-ms-transform:rotate(266deg);-o-transform:rotate(266deg);transform:rotate(266deg)}.wi-wind.from-87-deg{-webkit-transform:rotate(267deg);-moz-transform:rotate(267deg);-ms-transform:rotate(267deg);-o-transform:rotate(267deg);transform:rotate(267deg)}.wi-wind.from-88-deg{-webkit-transform:rotate(268deg);-moz-transform:rotate(268deg);-ms-transform:rotate(268deg);-o-transform:rotate(268deg);transform:rotate(268deg)}.wi-wind.from-89-deg{-webkit-transform:rotate(269deg);-moz-transform:rotate(269deg);-ms-transform:rotate(269deg);-o-transform:rotate(269deg);transform:rotate(269deg)}.wi-wind.from-90-deg{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.wi-wind.from-91-deg{-webkit-transform:rotate(271deg);-moz-transform:rotate(271deg);-ms-transform:rotate(271deg);-o-transform:rotate(271deg);transform:rotate(271deg)}.wi-wind.from-92-deg{-webkit-transform:rotate(272deg);-moz-transform:rotate(272deg);-ms-transform:rotate(272deg);-o-transform:rotate(272deg);transform:rotate(272deg)}.wi-wind.from-93-deg{-webkit-transform:rotate(273deg);-moz-transform:rotate(273deg);-ms-transform:rotate(273deg);-o-transform:rotate(273deg);transform:rotate(273deg)}.wi-wind.from-94-deg{-webkit-transform:rotate(274deg);-moz-transform:rotate(274deg);-ms-transform:rotate(274deg);-o-transform:rotate(274deg);transform:rotate(274deg)}.wi-wind.from-95-deg{-webkit-transform:rotate(275deg);-moz-transform:rotate(275deg);-ms-transform:rotate(275deg);-o-transform:rotate(275deg);transform:rotate(275deg)}.wi-wind.from-96-deg{-webkit-transform:rotate(276deg);-moz-transform:rotate(276deg);-ms-transform:rotate(276deg);-o-transform:rotate(276deg);transform:rotate(276deg)}.wi-wind.from-97-deg{-webkit-transform:rotate(277deg);-moz-transform:rotate(277deg);-ms-transform:rotate(277deg);-o-transform:rotate(277deg);transform:rotate(277deg)}.wi-wind.from-98-deg{-webkit-transform:rotate(278deg);-moz-transform:rotate(278deg);-ms-transform:rotate(278deg);-o-transform:rotate(278deg);transform:rotate(278deg)}.wi-wind.from-99-deg{-webkit-transform:rotate(279deg);-moz-transform:rotate(279deg);-ms-transform:rotate(279deg);-o-transform:rotate(279deg);transform:rotate(279deg)}.wi-wind.from-100-deg{-webkit-transform:rotate(280deg);-moz-transform:rotate(280deg);-ms-transform:rotate(280deg);-o-transform:rotate(280deg);transform:rotate(280deg)}.wi-wind.from-101-deg{-webkit-transform:rotate(281deg);-moz-transform:rotate(281deg);-ms-transform:rotate(281deg);-o-transform:rotate(281deg);transform:rotate(281deg)}.wi-wind.from-102-deg{-webkit-transform:rotate(282deg);-moz-transform:rotate(282deg);-ms-transform:rotate(282deg);-o-transform:rotate(282deg);transform:rotate(282deg)}.wi-wind.from-103-deg{-webkit-transform:rotate(283deg);-moz-transform:rotate(283deg);-ms-transform:rotate(283deg);-o-transform:rotate(283deg);transform:rotate(283deg)}.wi-wind.from-104-deg{-webkit-transform:rotate(284deg);-moz-transform:rotate(284deg);-ms-transform:rotate(284deg);-o-transform:rotate(284deg);transform:rotate(284deg)}.wi-wind.from-105-deg{-webkit-transform:rotate(285deg);-moz-transform:rotate(285deg);-ms-transform:rotate(285deg);-o-transform:rotate(285deg);transform:rotate(285deg)}.wi-wind.from-106-deg{-webkit-transform:rotate(286deg);-moz-transform:rotate(286deg);-ms-transform:rotate(286deg);-o-transform:rotate(286deg);transform:rotate(286deg)}.wi-wind.from-107-deg{-webkit-transform:rotate(287deg);-moz-transform:rotate(287deg);-ms-transform:rotate(287deg);-o-transform:rotate(287deg);transform:rotate(287deg)}.wi-wind.from-108-deg{-webkit-transform:rotate(288deg);-moz-transform:rotate(288deg);-ms-transform:rotate(288deg);-o-transform:rotate(288deg);transform:rotate(288deg)}.wi-wind.from-109-deg{-webkit-transform:rotate(289deg);-moz-transform:rotate(289deg);-ms-transform:rotate(289deg);-o-transform:rotate(289deg);transform:rotate(289deg)}.wi-wind.from-110-deg{-webkit-transform:rotate(290deg);-moz-transform:rotate(290deg);-ms-transform:rotate(290deg);-o-transform:rotate(290deg);transform:rotate(290deg)}.wi-wind.from-111-deg{-webkit-transform:rotate(291deg);-moz-transform:rotate(291deg);-ms-transform:rotate(291deg);-o-transform:rotate(291deg);transform:rotate(291deg)}.wi-wind.from-112-deg{-webkit-transform:rotate(292deg);-moz-transform:rotate(292deg);-ms-transform:rotate(292deg);-o-transform:rotate(292deg);transform:rotate(292deg)}.wi-wind.from-113-deg{-webkit-transform:rotate(293deg);-moz-transform:rotate(293deg);-ms-transform:rotate(293deg);-o-transform:rotate(293deg);transform:rotate(293deg)}.wi-wind.from-114-deg{-webkit-transform:rotate(294deg);-moz-transform:rotate(294deg);-ms-transform:rotate(294deg);-o-transform:rotate(294deg);transform:rotate(294deg)}.wi-wind.from-115-deg{-webkit-transform:rotate(295deg);-moz-transform:rotate(295deg);-ms-transform:rotate(295deg);-o-transform:rotate(295deg);transform:rotate(295deg)}.wi-wind.from-116-deg{-webkit-transform:rotate(296deg);-moz-transform:rotate(296deg);-ms-transform:rotate(296deg);-o-transform:rotate(296deg);transform:rotate(296deg)}.wi-wind.from-117-deg{-webkit-transform:rotate(297deg);-moz-transform:rotate(297deg);-ms-transform:rotate(297deg);-o-transform:rotate(297deg);transform:rotate(297deg)}.wi-wind.from-118-deg{-webkit-transform:rotate(298deg);-moz-transform:rotate(298deg);-ms-transform:rotate(298deg);-o-transform:rotate(298deg);transform:rotate(298deg)}.wi-wind.from-119-deg{-webkit-transform:rotate(299deg);-moz-transform:rotate(299deg);-ms-transform:rotate(299deg);-o-transform:rotate(299deg);transform:rotate(299deg)}.wi-wind.from-120-deg{-webkit-transform:rotate(300deg);-moz-transform:rotate(300deg);-ms-transform:rotate(300deg);-o-transform:rotate(300deg);transform:rotate(300deg)}.wi-wind.from-121-deg{-webkit-transform:rotate(301deg);-moz-transform:rotate(301deg);-ms-transform:rotate(301deg);-o-transform:rotate(301deg);transform:rotate(301deg)}.wi-wind.from-122-deg{-webkit-transform:rotate(302deg);-moz-transform:rotate(302deg);-ms-transform:rotate(302deg);-o-transform:rotate(302deg);transform:rotate(302deg)}.wi-wind.from-123-deg{-webkit-transform:rotate(303deg);-moz-transform:rotate(303deg);-ms-transform:rotate(303deg);-o-transform:rotate(303deg);transform:rotate(303deg)}.wi-wind.from-124-deg{-webkit-transform:rotate(304deg);-moz-transform:rotate(304deg);-ms-transform:rotate(304deg);-o-transform:rotate(304deg);transform:rotate(304deg)}.wi-wind.from-125-deg{-webkit-transform:rotate(305deg);-moz-transform:rotate(305deg);-ms-transform:rotate(305deg);-o-transform:rotate(305deg);transform:rotate(305deg)}.wi-wind.from-126-deg{-webkit-transform:rotate(306deg);-moz-transform:rotate(306deg);-ms-transform:rotate(306deg);-o-transform:rotate(306deg);transform:rotate(306deg)}.wi-wind.from-127-deg{-webkit-transform:rotate(307deg);-moz-transform:rotate(307deg);-ms-transform:rotate(307deg);-o-transform:rotate(307deg);transform:rotate(307deg)}.wi-wind.from-128-deg{-webkit-transform:rotate(308deg);-moz-transform:rotate(308deg);-ms-transform:rotate(308deg);-o-transform:rotate(308deg);transform:rotate(308deg)}.wi-wind.from-129-deg{-webkit-transform:rotate(309deg);-moz-transform:rotate(309deg);-ms-transform:rotate(309deg);-o-transform:rotate(309deg);transform:rotate(309deg)}.wi-wind.from-130-deg{-webkit-transform:rotate(310deg);-moz-transform:rotate(310deg);-ms-transform:rotate(310deg);-o-transform:rotate(310deg);transform:rotate(310deg)}.wi-wind.from-131-deg{-webkit-transform:rotate(311deg);-moz-transform:rotate(311deg);-ms-transform:rotate(311deg);-o-transform:rotate(311deg);transform:rotate(311deg)}.wi-wind.from-132-deg{-webkit-transform:rotate(312deg);-moz-transform:rotate(312deg);-ms-transform:rotate(312deg);-o-transform:rotate(312deg);transform:rotate(312deg)}.wi-wind.from-133-deg{-webkit-transform:rotate(313deg);-moz-transform:rotate(313deg);-ms-transform:rotate(313deg);-o-transform:rotate(313deg);transform:rotate(313deg)}.wi-wind.from-134-deg{-webkit-transform:rotate(314deg);-moz-transform:rotate(314deg);-ms-transform:rotate(314deg);-o-transform:rotate(314deg);transform:rotate(314deg)}.wi-wind.from-135-deg{-webkit-transform:rotate(315deg);-moz-transform:rotate(315deg);-ms-transform:rotate(315deg);-o-transform:rotate(315deg);transform:rotate(315deg)}.wi-wind.from-136-deg{-webkit-transform:rotate(316deg);-moz-transform:rotate(316deg);-ms-transform:rotate(316deg);-o-transform:rotate(316deg);transform:rotate(316deg)}.wi-wind.from-137-deg{-webkit-transform:rotate(317deg);-moz-transform:rotate(317deg);-ms-transform:rotate(317deg);-o-transform:rotate(317deg);transform:rotate(317deg)}.wi-wind.from-138-deg{-webkit-transform:rotate(318deg);-moz-transform:rotate(318deg);-ms-transform:rotate(318deg);-o-transform:rotate(318deg);transform:rotate(318deg)}.wi-wind.from-139-deg{-webkit-transform:rotate(319deg);-moz-transform:rotate(319deg);-ms-transform:rotate(319deg);-o-transform:rotate(319deg);transform:rotate(319deg)}.wi-wind.from-140-deg{-webkit-transform:rotate(320deg);-moz-transform:rotate(320deg);-ms-transform:rotate(320deg);-o-transform:rotate(320deg);transform:rotate(320deg)}.wi-wind.from-141-deg{-webkit-transform:rotate(321deg);-moz-transform:rotate(321deg);-ms-transform:rotate(321deg);-o-transform:rotate(321deg);transform:rotate(321deg)}.wi-wind.from-142-deg{-webkit-transform:rotate(322deg);-moz-transform:rotate(322deg);-ms-transform:rotate(322deg);-o-transform:rotate(322deg);transform:rotate(322deg)}.wi-wind.from-143-deg{-webkit-transform:rotate(323deg);-moz-transform:rotate(323deg);-ms-transform:rotate(323deg);-o-transform:rotate(323deg);transform:rotate(323deg)}.wi-wind.from-144-deg{-webkit-transform:rotate(324deg);-moz-transform:rotate(324deg);-ms-transform:rotate(324deg);-o-transform:rotate(324deg);transform:rotate(324deg)}.wi-wind.from-145-deg{-webkit-transform:rotate(325deg);-moz-transform:rotate(325deg);-ms-transform:rotate(325deg);-o-transform:rotate(325deg);transform:rotate(325deg)}.wi-wind.from-146-deg{-webkit-transform:rotate(326deg);-moz-transform:rotate(326deg);-ms-transform:rotate(326deg);-o-transform:rotate(326deg);transform:rotate(326deg)}.wi-wind.from-147-deg{-webkit-transform:rotate(327deg);-moz-transform:rotate(327deg);-ms-transform:rotate(327deg);-o-transform:rotate(327deg);transform:rotate(327deg)}.wi-wind.from-148-deg{-webkit-transform:rotate(328deg);-moz-transform:rotate(328deg);-ms-transform:rotate(328deg);-o-transform:rotate(328deg);transform:rotate(328deg)}.wi-wind.from-149-deg{-webkit-transform:rotate(329deg);-moz-transform:rotate(329deg);-ms-transform:rotate(329deg);-o-transform:rotate(329deg);transform:rotate(329deg)}.wi-wind.from-150-deg{-webkit-transform:rotate(330deg);-moz-transform:rotate(330deg);-ms-transform:rotate(330deg);-o-transform:rotate(330deg);transform:rotate(330deg)}.wi-wind.from-151-deg{-webkit-transform:rotate(331deg);-moz-transform:rotate(331deg);-ms-transform:rotate(331deg);-o-transform:rotate(331deg);transform:rotate(331deg)}.wi-wind.from-152-deg{-webkit-transform:rotate(332deg);-moz-transform:rotate(332deg);-ms-transform:rotate(332deg);-o-transform:rotate(332deg);transform:rotate(332deg)}.wi-wind.from-153-deg{-webkit-transform:rotate(333deg);-moz-transform:rotate(333deg);-ms-transform:rotate(333deg);-o-transform:rotate(333deg);transform:rotate(333deg)}.wi-wind.from-154-deg{-webkit-transform:rotate(334deg);-moz-transform:rotate(334deg);-ms-transform:rotate(334deg);-o-transform:rotate(334deg);transform:rotate(334deg)}.wi-wind.from-155-deg{-webkit-transform:rotate(335deg);-moz-transform:rotate(335deg);-ms-transform:rotate(335deg);-o-transform:rotate(335deg);transform:rotate(335deg)}.wi-wind.from-156-deg{-webkit-transform:rotate(336deg);-moz-transform:rotate(336deg);-ms-transform:rotate(336deg);-o-transform:rotate(336deg);transform:rotate(336deg)}.wi-wind.from-157-deg{-webkit-transform:rotate(337deg);-moz-transform:rotate(337deg);-ms-transform:rotate(337deg);-o-transform:rotate(337deg);transform:rotate(337deg)}.wi-wind.from-158-deg{-webkit-transform:rotate(338deg);-moz-transform:rotate(338deg);-ms-transform:rotate(338deg);-o-transform:rotate(338deg);transform:rotate(338deg)}.wi-wind.from-159-deg{-webkit-transform:rotate(339deg);-moz-transform:rotate(339deg);-ms-transform:rotate(339deg);-o-transform:rotate(339deg);transform:rotate(339deg)}.wi-wind.from-160-deg{-webkit-transform:rotate(340deg);-moz-transform:rotate(340deg);-ms-transform:rotate(340deg);-o-transform:rotate(340deg);transform:rotate(340deg)}.wi-wind.from-161-deg{-webkit-transform:rotate(341deg);-moz-transform:rotate(341deg);-ms-transform:rotate(341deg);-o-transform:rotate(341deg);transform:rotate(341deg)}.wi-wind.from-162-deg{-webkit-transform:rotate(342deg);-moz-transform:rotate(342deg);-ms-transform:rotate(342deg);-o-transform:rotate(342deg);transform:rotate(342deg)}.wi-wind.from-163-deg{-webkit-transform:rotate(343deg);-moz-transform:rotate(343deg);-ms-transform:rotate(343deg);-o-transform:rotate(343deg);transform:rotate(343deg)}.wi-wind.from-164-deg{-webkit-transform:rotate(344deg);-moz-transform:rotate(344deg);-ms-transform:rotate(344deg);-o-transform:rotate(344deg);transform:rotate(344deg)}.wi-wind.from-165-deg{-webkit-transform:rotate(345deg);-moz-transform:rotate(345deg);-ms-transform:rotate(345deg);-o-transform:rotate(345deg);transform:rotate(345deg)}.wi-wind.from-166-deg{-webkit-transform:rotate(346deg);-moz-transform:rotate(346deg);-ms-transform:rotate(346deg);-o-transform:rotate(346deg);transform:rotate(346deg)}.wi-wind.from-167-deg{-webkit-transform:rotate(347deg);-moz-transform:rotate(347deg);-ms-transform:rotate(347deg);-o-transform:rotate(347deg);transform:rotate(347deg)}.wi-wind.from-168-deg{-webkit-transform:rotate(348deg);-moz-transform:rotate(348deg);-ms-transform:rotate(348deg);-o-transform:rotate(348deg);transform:rotate(348deg)}.wi-wind.from-169-deg{-webkit-transform:rotate(349deg);-moz-transform:rotate(349deg);-ms-transform:rotate(349deg);-o-transform:rotate(349deg);transform:rotate(349deg)}.wi-wind.from-170-deg{-webkit-transform:rotate(350deg);-moz-transform:rotate(350deg);-ms-transform:rotate(350deg);-o-transform:rotate(350deg);transform:rotate(350deg)}.wi-wind.from-171-deg{-webkit-transform:rotate(351deg);-moz-transform:rotate(351deg);-ms-transform:rotate(351deg);-o-transform:rotate(351deg);transform:rotate(351deg)}.wi-wind.from-172-deg{-webkit-transform:rotate(352deg);-moz-transform:rotate(352deg);-ms-transform:rotate(352deg);-o-transform:rotate(352deg);transform:rotate(352deg)}.wi-wind.from-173-deg{-webkit-transform:rotate(353deg);-moz-transform:rotate(353deg);-ms-transform:rotate(353deg);-o-transform:rotate(353deg);transform:rotate(353deg)}.wi-wind.from-174-deg{-webkit-transform:rotate(354deg);-moz-transform:rotate(354deg);-ms-transform:rotate(354deg);-o-transform:rotate(354deg);transform:rotate(354deg)}.wi-wind.from-175-deg{-webkit-transform:rotate(355deg);-moz-transform:rotate(355deg);-ms-transform:rotate(355deg);-o-transform:rotate(355deg);transform:rotate(355deg)}.wi-wind.from-176-deg{-webkit-transform:rotate(356deg);-moz-transform:rotate(356deg);-ms-transform:rotate(356deg);-o-transform:rotate(356deg);transform:rotate(356deg)}.wi-wind.from-177-deg{-webkit-transform:rotate(357deg);-moz-transform:rotate(357deg);-ms-transform:rotate(357deg);-o-transform:rotate(357deg);transform:rotate(357deg)}.wi-wind.from-178-deg{-webkit-transform:rotate(358deg);-moz-transform:rotate(358deg);-ms-transform:rotate(358deg);-o-transform:rotate(358deg);transform:rotate(358deg)}.wi-wind.from-179-deg{-webkit-transform:rotate(359deg);-moz-transform:rotate(359deg);-ms-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}.wi-wind.from-180-deg{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.wi-wind.from-181-deg{-webkit-transform:rotate(1deg);-moz-transform:rotate(1deg);-ms-transform:rotate(1deg);-o-transform:rotate(1deg);transform:rotate(1deg)}.wi-wind.from-182-deg{-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-ms-transform:rotate(2deg);-o-transform:rotate(2deg);transform:rotate(2deg)}.wi-wind.from-183-deg{-webkit-transform:rotate(3deg);-moz-transform:rotate(3deg);-ms-transform:rotate(3deg);-o-transform:rotate(3deg);transform:rotate(3deg)}.wi-wind.from-184-deg{-webkit-transform:rotate(4deg);-moz-transform:rotate(4deg);-ms-transform:rotate(4deg);-o-transform:rotate(4deg);transform:rotate(4deg)}.wi-wind.from-185-deg{-webkit-transform:rotate(5deg);-moz-transform:rotate(5deg);-ms-transform:rotate(5deg);-o-transform:rotate(5deg);transform:rotate(5deg)}.wi-wind.from-186-deg{-webkit-transform:rotate(6deg);-moz-transform:rotate(6deg);-ms-transform:rotate(6deg);-o-transform:rotate(6deg);transform:rotate(6deg)}.wi-wind.from-187-deg{-webkit-transform:rotate(7deg);-moz-transform:rotate(7deg);-ms-transform:rotate(7deg);-o-transform:rotate(7deg);transform:rotate(7deg)}.wi-wind.from-188-deg{-webkit-transform:rotate(8deg);-moz-transform:rotate(8deg);-ms-transform:rotate(8deg);-o-transform:rotate(8deg);transform:rotate(8deg)}.wi-wind.from-189-deg{-webkit-transform:rotate(9deg);-moz-transform:rotate(9deg);-ms-transform:rotate(9deg);-o-transform:rotate(9deg);transform:rotate(9deg)}.wi-wind.from-190-deg{-webkit-transform:rotate(10deg);-moz-transform:rotate(10deg);-ms-transform:rotate(10deg);-o-transform:rotate(10deg);transform:rotate(10deg)}.wi-wind.from-191-deg{-webkit-transform:rotate(11deg);-moz-transform:rotate(11deg);-ms-transform:rotate(11deg);-o-transform:rotate(11deg);transform:rotate(11deg)}.wi-wind.from-192-deg{-webkit-transform:rotate(12deg);-moz-transform:rotate(12deg);-ms-transform:rotate(12deg);-o-transform:rotate(12deg);transform:rotate(12deg)}.wi-wind.from-193-deg{-webkit-transform:rotate(13deg);-moz-transform:rotate(13deg);-ms-transform:rotate(13deg);-o-transform:rotate(13deg);transform:rotate(13deg)}.wi-wind.from-194-deg{-webkit-transform:rotate(14deg);-moz-transform:rotate(14deg);-ms-transform:rotate(14deg);-o-transform:rotate(14deg);transform:rotate(14deg)}.wi-wind.from-195-deg{-webkit-transform:rotate(15deg);-moz-transform:rotate(15deg);-ms-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg)}.wi-wind.from-196-deg{-webkit-transform:rotate(16deg);-moz-transform:rotate(16deg);-ms-transform:rotate(16deg);-o-transform:rotate(16deg);transform:rotate(16deg)}.wi-wind.from-197-deg{-webkit-transform:rotate(17deg);-moz-transform:rotate(17deg);-ms-transform:rotate(17deg);-o-transform:rotate(17deg);transform:rotate(17deg)}.wi-wind.from-198-deg{-webkit-transform:rotate(18deg);-moz-transform:rotate(18deg);-ms-transform:rotate(18deg);-o-transform:rotate(18deg);transform:rotate(18deg)}.wi-wind.from-199-deg{-webkit-transform:rotate(19deg);-moz-transform:rotate(19deg);-ms-transform:rotate(19deg);-o-transform:rotate(19deg);transform:rotate(19deg)}.wi-wind.from-200-deg{-webkit-transform:rotate(20deg);-moz-transform:rotate(20deg);-ms-transform:rotate(20deg);-o-transform:rotate(20deg);transform:rotate(20deg)}.wi-wind.from-201-deg{-webkit-transform:rotate(21deg);-moz-transform:rotate(21deg);-ms-transform:rotate(21deg);-o-transform:rotate(21deg);transform:rotate(21deg)}.wi-wind.from-202-deg{-webkit-transform:rotate(22deg);-moz-transform:rotate(22deg);-ms-transform:rotate(22deg);-o-transform:rotate(22deg);transform:rotate(22deg)}.wi-wind.from-203-deg{-webkit-transform:rotate(23deg);-moz-transform:rotate(23deg);-ms-transform:rotate(23deg);-o-transform:rotate(23deg);transform:rotate(23deg)}.wi-wind.from-204-deg{-webkit-transform:rotate(24deg);-moz-transform:rotate(24deg);-ms-transform:rotate(24deg);-o-transform:rotate(24deg);transform:rotate(24deg)}.wi-wind.from-205-deg{-webkit-transform:rotate(25deg);-moz-transform:rotate(25deg);-ms-transform:rotate(25deg);-o-transform:rotate(25deg);transform:rotate(25deg)}.wi-wind.from-206-deg{-webkit-transform:rotate(26deg);-moz-transform:rotate(26deg);-ms-transform:rotate(26deg);-o-transform:rotate(26deg);transform:rotate(26deg)}.wi-wind.from-207-deg{-webkit-transform:rotate(27deg);-moz-transform:rotate(27deg);-ms-transform:rotate(27deg);-o-transform:rotate(27deg);transform:rotate(27deg)}.wi-wind.from-208-deg{-webkit-transform:rotate(28deg);-moz-transform:rotate(28deg);-ms-transform:rotate(28deg);-o-transform:rotate(28deg);transform:rotate(28deg)}.wi-wind.from-209-deg{-webkit-transform:rotate(29deg);-moz-transform:rotate(29deg);-ms-transform:rotate(29deg);-o-transform:rotate(29deg);transform:rotate(29deg)}.wi-wind.from-210-deg{-webkit-transform:rotate(30deg);-moz-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}.wi-wind.from-211-deg{-webkit-transform:rotate(31deg);-moz-transform:rotate(31deg);-ms-transform:rotate(31deg);-o-transform:rotate(31deg);transform:rotate(31deg)}.wi-wind.from-212-deg{-webkit-transform:rotate(32deg);-moz-transform:rotate(32deg);-ms-transform:rotate(32deg);-o-transform:rotate(32deg);transform:rotate(32deg)}.wi-wind.from-213-deg{-webkit-transform:rotate(33deg);-moz-transform:rotate(33deg);-ms-transform:rotate(33deg);-o-transform:rotate(33deg);transform:rotate(33deg)}.wi-wind.from-214-deg{-webkit-transform:rotate(34deg);-moz-transform:rotate(34deg);-ms-transform:rotate(34deg);-o-transform:rotate(34deg);transform:rotate(34deg)}.wi-wind.from-215-deg{-webkit-transform:rotate(35deg);-moz-transform:rotate(35deg);-ms-transform:rotate(35deg);-o-transform:rotate(35deg);transform:rotate(35deg)}.wi-wind.from-216-deg{-webkit-transform:rotate(36deg);-moz-transform:rotate(36deg);-ms-transform:rotate(36deg);-o-transform:rotate(36deg);transform:rotate(36deg)}.wi-wind.from-217-deg{-webkit-transform:rotate(37deg);-moz-transform:rotate(37deg);-ms-transform:rotate(37deg);-o-transform:rotate(37deg);transform:rotate(37deg)}.wi-wind.from-218-deg{-webkit-transform:rotate(38deg);-moz-transform:rotate(38deg);-ms-transform:rotate(38deg);-o-transform:rotate(38deg);transform:rotate(38deg)}.wi-wind.from-219-deg{-webkit-transform:rotate(39deg);-moz-transform:rotate(39deg);-ms-transform:rotate(39deg);-o-transform:rotate(39deg);transform:rotate(39deg)}.wi-wind.from-220-deg{-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg)}.wi-wind.from-221-deg{-webkit-transform:rotate(41deg);-moz-transform:rotate(41deg);-ms-transform:rotate(41deg);-o-transform:rotate(41deg);transform:rotate(41deg)}.wi-wind.from-222-deg{-webkit-transform:rotate(42deg);-moz-transform:rotate(42deg);-ms-transform:rotate(42deg);-o-transform:rotate(42deg);transform:rotate(42deg)}.wi-wind.from-223-deg{-webkit-transform:rotate(43deg);-moz-transform:rotate(43deg);-ms-transform:rotate(43deg);-o-transform:rotate(43deg);transform:rotate(43deg)}.wi-wind.from-224-deg{-webkit-transform:rotate(44deg);-moz-transform:rotate(44deg);-ms-transform:rotate(44deg);-o-transform:rotate(44deg);transform:rotate(44deg)}.wi-wind.from-225-deg{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.wi-wind.from-226-deg{-webkit-transform:rotate(46deg);-moz-transform:rotate(46deg);-ms-transform:rotate(46deg);-o-transform:rotate(46deg);transform:rotate(46deg)}.wi-wind.from-227-deg{-webkit-transform:rotate(47deg);-moz-transform:rotate(47deg);-ms-transform:rotate(47deg);-o-transform:rotate(47deg);transform:rotate(47deg)}.wi-wind.from-228-deg{-webkit-transform:rotate(48deg);-moz-transform:rotate(48deg);-ms-transform:rotate(48deg);-o-transform:rotate(48deg);transform:rotate(48deg)}.wi-wind.from-229-deg{-webkit-transform:rotate(49deg);-moz-transform:rotate(49deg);-ms-transform:rotate(49deg);-o-transform:rotate(49deg);transform:rotate(49deg)}.wi-wind.from-230-deg{-webkit-transform:rotate(50deg);-moz-transform:rotate(50deg);-ms-transform:rotate(50deg);-o-transform:rotate(50deg);transform:rotate(50deg)}.wi-wind.from-231-deg{-webkit-transform:rotate(51deg);-moz-transform:rotate(51deg);-ms-transform:rotate(51deg);-o-transform:rotate(51deg);transform:rotate(51deg)}.wi-wind.from-232-deg{-webkit-transform:rotate(52deg);-moz-transform:rotate(52deg);-ms-transform:rotate(52deg);-o-transform:rotate(52deg);transform:rotate(52deg)}.wi-wind.from-233-deg{-webkit-transform:rotate(53deg);-moz-transform:rotate(53deg);-ms-transform:rotate(53deg);-o-transform:rotate(53deg);transform:rotate(53deg)}.wi-wind.from-234-deg{-webkit-transform:rotate(54deg);-moz-transform:rotate(54deg);-ms-transform:rotate(54deg);-o-transform:rotate(54deg);transform:rotate(54deg)}.wi-wind.from-235-deg{-webkit-transform:rotate(55deg);-moz-transform:rotate(55deg);-ms-transform:rotate(55deg);-o-transform:rotate(55deg);transform:rotate(55deg)}.wi-wind.from-236-deg{-webkit-transform:rotate(56deg);-moz-transform:rotate(56deg);-ms-transform:rotate(56deg);-o-transform:rotate(56deg);transform:rotate(56deg)}.wi-wind.from-237-deg{-webkit-transform:rotate(57deg);-moz-transform:rotate(57deg);-ms-transform:rotate(57deg);-o-transform:rotate(57deg);transform:rotate(57deg)}.wi-wind.from-238-deg{-webkit-transform:rotate(58deg);-moz-transform:rotate(58deg);-ms-transform:rotate(58deg);-o-transform:rotate(58deg);transform:rotate(58deg)}.wi-wind.from-239-deg{-webkit-transform:rotate(59deg);-moz-transform:rotate(59deg);-ms-transform:rotate(59deg);-o-transform:rotate(59deg);transform:rotate(59deg)}.wi-wind.from-240-deg{-webkit-transform:rotate(60deg);-moz-transform:rotate(60deg);-ms-transform:rotate(60deg);-o-transform:rotate(60deg);transform:rotate(60deg)}.wi-wind.from-241-deg{-webkit-transform:rotate(61deg);-moz-transform:rotate(61deg);-ms-transform:rotate(61deg);-o-transform:rotate(61deg);transform:rotate(61deg)}.wi-wind.from-242-deg{-webkit-transform:rotate(62deg);-moz-transform:rotate(62deg);-ms-transform:rotate(62deg);-o-transform:rotate(62deg);transform:rotate(62deg)}.wi-wind.from-243-deg{-webkit-transform:rotate(63deg);-moz-transform:rotate(63deg);-ms-transform:rotate(63deg);-o-transform:rotate(63deg);transform:rotate(63deg)}.wi-wind.from-244-deg{-webkit-transform:rotate(64deg);-moz-transform:rotate(64deg);-ms-transform:rotate(64deg);-o-transform:rotate(64deg);transform:rotate(64deg)}.wi-wind.from-245-deg{-webkit-transform:rotate(65deg);-moz-transform:rotate(65deg);-ms-transform:rotate(65deg);-o-transform:rotate(65deg);transform:rotate(65deg)}.wi-wind.from-246-deg{-webkit-transform:rotate(66deg);-moz-transform:rotate(66deg);-ms-transform:rotate(66deg);-o-transform:rotate(66deg);transform:rotate(66deg)}.wi-wind.from-247-deg{-webkit-transform:rotate(67deg);-moz-transform:rotate(67deg);-ms-transform:rotate(67deg);-o-transform:rotate(67deg);transform:rotate(67deg)}.wi-wind.from-248-deg{-webkit-transform:rotate(68deg);-moz-transform:rotate(68deg);-ms-transform:rotate(68deg);-o-transform:rotate(68deg);transform:rotate(68deg)}.wi-wind.from-249-deg{-webkit-transform:rotate(69deg);-moz-transform:rotate(69deg);-ms-transform:rotate(69deg);-o-transform:rotate(69deg);transform:rotate(69deg)}.wi-wind.from-250-deg{-webkit-transform:rotate(70deg);-moz-transform:rotate(70deg);-ms-transform:rotate(70deg);-o-transform:rotate(70deg);transform:rotate(70deg)}.wi-wind.from-251-deg{-webkit-transform:rotate(71deg);-moz-transform:rotate(71deg);-ms-transform:rotate(71deg);-o-transform:rotate(71deg);transform:rotate(71deg)}.wi-wind.from-252-deg{-webkit-transform:rotate(72deg);-moz-transform:rotate(72deg);-ms-transform:rotate(72deg);-o-transform:rotate(72deg);transform:rotate(72deg)}.wi-wind.from-253-deg{-webkit-transform:rotate(73deg);-moz-transform:rotate(73deg);-ms-transform:rotate(73deg);-o-transform:rotate(73deg);transform:rotate(73deg)}.wi-wind.from-254-deg{-webkit-transform:rotate(74deg);-moz-transform:rotate(74deg);-ms-transform:rotate(74deg);-o-transform:rotate(74deg);transform:rotate(74deg)}.wi-wind.from-255-deg{-webkit-transform:rotate(75deg);-moz-transform:rotate(75deg);-ms-transform:rotate(75deg);-o-transform:rotate(75deg);transform:rotate(75deg)}.wi-wind.from-256-deg{-webkit-transform:rotate(76deg);-moz-transform:rotate(76deg);-ms-transform:rotate(76deg);-o-transform:rotate(76deg);transform:rotate(76deg)}.wi-wind.from-257-deg{-webkit-transform:rotate(77deg);-moz-transform:rotate(77deg);-ms-transform:rotate(77deg);-o-transform:rotate(77deg);transform:rotate(77deg)}.wi-wind.from-258-deg{-webkit-transform:rotate(78deg);-moz-transform:rotate(78deg);-ms-transform:rotate(78deg);-o-transform:rotate(78deg);transform:rotate(78deg)}.wi-wind.from-259-deg{-webkit-transform:rotate(79deg);-moz-transform:rotate(79deg);-ms-transform:rotate(79deg);-o-transform:rotate(79deg);transform:rotate(79deg)}.wi-wind.from-260-deg{-webkit-transform:rotate(80deg);-moz-transform:rotate(80deg);-ms-transform:rotate(80deg);-o-transform:rotate(80deg);transform:rotate(80deg)}.wi-wind.from-261-deg{-webkit-transform:rotate(81deg);-moz-transform:rotate(81deg);-ms-transform:rotate(81deg);-o-transform:rotate(81deg);transform:rotate(81deg)}.wi-wind.from-262-deg{-webkit-transform:rotate(82deg);-moz-transform:rotate(82deg);-ms-transform:rotate(82deg);-o-transform:rotate(82deg);transform:rotate(82deg)}.wi-wind.from-263-deg{-webkit-transform:rotate(83deg);-moz-transform:rotate(83deg);-ms-transform:rotate(83deg);-o-transform:rotate(83deg);transform:rotate(83deg)}.wi-wind.from-264-deg{-webkit-transform:rotate(84deg);-moz-transform:rotate(84deg);-ms-transform:rotate(84deg);-o-transform:rotate(84deg);transform:rotate(84deg)}.wi-wind.from-265-deg{-webkit-transform:rotate(85deg);-moz-transform:rotate(85deg);-ms-transform:rotate(85deg);-o-transform:rotate(85deg);transform:rotate(85deg)}.wi-wind.from-266-deg{-webkit-transform:rotate(86deg);-moz-transform:rotate(86deg);-ms-transform:rotate(86deg);-o-transform:rotate(86deg);transform:rotate(86deg)}.wi-wind.from-267-deg{-webkit-transform:rotate(87deg);-moz-transform:rotate(87deg);-ms-transform:rotate(87deg);-o-transform:rotate(87deg);transform:rotate(87deg)}.wi-wind.from-268-deg{-webkit-transform:rotate(88deg);-moz-transform:rotate(88deg);-ms-transform:rotate(88deg);-o-transform:rotate(88deg);transform:rotate(88deg)}.wi-wind.from-269-deg{-webkit-transform:rotate(89deg);-moz-transform:rotate(89deg);-ms-transform:rotate(89deg);-o-transform:rotate(89deg);transform:rotate(89deg)}.wi-wind.from-270-deg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.wi-wind.from-271-deg{-webkit-transform:rotate(91deg);-moz-transform:rotate(91deg);-ms-transform:rotate(91deg);-o-transform:rotate(91deg);transform:rotate(91deg)}.wi-wind.from-272-deg{-webkit-transform:rotate(92deg);-moz-transform:rotate(92deg);-ms-transform:rotate(92deg);-o-transform:rotate(92deg);transform:rotate(92deg)}.wi-wind.from-273-deg{-webkit-transform:rotate(93deg);-moz-transform:rotate(93deg);-ms-transform:rotate(93deg);-o-transform:rotate(93deg);transform:rotate(93deg)}.wi-wind.from-274-deg{-webkit-transform:rotate(94deg);-moz-transform:rotate(94deg);-ms-transform:rotate(94deg);-o-transform:rotate(94deg);transform:rotate(94deg)}.wi-wind.from-275-deg{-webkit-transform:rotate(95deg);-moz-transform:rotate(95deg);-ms-transform:rotate(95deg);-o-transform:rotate(95deg);transform:rotate(95deg)}.wi-wind.from-276-deg{-webkit-transform:rotate(96deg);-moz-transform:rotate(96deg);-ms-transform:rotate(96deg);-o-transform:rotate(96deg);transform:rotate(96deg)}.wi-wind.from-277-deg{-webkit-transform:rotate(97deg);-moz-transform:rotate(97deg);-ms-transform:rotate(97deg);-o-transform:rotate(97deg);transform:rotate(97deg)}.wi-wind.from-278-deg{-webkit-transform:rotate(98deg);-moz-transform:rotate(98deg);-ms-transform:rotate(98deg);-o-transform:rotate(98deg);transform:rotate(98deg)}.wi-wind.from-279-deg{-webkit-transform:rotate(99deg);-moz-transform:rotate(99deg);-ms-transform:rotate(99deg);-o-transform:rotate(99deg);transform:rotate(99deg)}.wi-wind.from-280-deg{-webkit-transform:rotate(100deg);-moz-transform:rotate(100deg);-ms-transform:rotate(100deg);-o-transform:rotate(100deg);transform:rotate(100deg)}.wi-wind.from-281-deg{-webkit-transform:rotate(101deg);-moz-transform:rotate(101deg);-ms-transform:rotate(101deg);-o-transform:rotate(101deg);transform:rotate(101deg)}.wi-wind.from-282-deg{-webkit-transform:rotate(102deg);-moz-transform:rotate(102deg);-ms-transform:rotate(102deg);-o-transform:rotate(102deg);transform:rotate(102deg)}.wi-wind.from-283-deg{-webkit-transform:rotate(103deg);-moz-transform:rotate(103deg);-ms-transform:rotate(103deg);-o-transform:rotate(103deg);transform:rotate(103deg)}.wi-wind.from-284-deg{-webkit-transform:rotate(104deg);-moz-transform:rotate(104deg);-ms-transform:rotate(104deg);-o-transform:rotate(104deg);transform:rotate(104deg)}.wi-wind.from-285-deg{-webkit-transform:rotate(105deg);-moz-transform:rotate(105deg);-ms-transform:rotate(105deg);-o-transform:rotate(105deg);transform:rotate(105deg)}.wi-wind.from-286-deg{-webkit-transform:rotate(106deg);-moz-transform:rotate(106deg);-ms-transform:rotate(106deg);-o-transform:rotate(106deg);transform:rotate(106deg)}.wi-wind.from-287-deg{-webkit-transform:rotate(107deg);-moz-transform:rotate(107deg);-ms-transform:rotate(107deg);-o-transform:rotate(107deg);transform:rotate(107deg)}.wi-wind.from-288-deg{-webkit-transform:rotate(108deg);-moz-transform:rotate(108deg);-ms-transform:rotate(108deg);-o-transform:rotate(108deg);transform:rotate(108deg)}.wi-wind.from-289-deg{-webkit-transform:rotate(109deg);-moz-transform:rotate(109deg);-ms-transform:rotate(109deg);-o-transform:rotate(109deg);transform:rotate(109deg)}.wi-wind.from-290-deg{-webkit-transform:rotate(110deg);-moz-transform:rotate(110deg);-ms-transform:rotate(110deg);-o-transform:rotate(110deg);transform:rotate(110deg)}.wi-wind.from-291-deg{-webkit-transform:rotate(111deg);-moz-transform:rotate(111deg);-ms-transform:rotate(111deg);-o-transform:rotate(111deg);transform:rotate(111deg)}.wi-wind.from-292-deg{-webkit-transform:rotate(112deg);-moz-transform:rotate(112deg);-ms-transform:rotate(112deg);-o-transform:rotate(112deg);transform:rotate(112deg)}.wi-wind.from-293-deg{-webkit-transform:rotate(113deg);-moz-transform:rotate(113deg);-ms-transform:rotate(113deg);-o-transform:rotate(113deg);transform:rotate(113deg)}.wi-wind.from-294-deg{-webkit-transform:rotate(114deg);-moz-transform:rotate(114deg);-ms-transform:rotate(114deg);-o-transform:rotate(114deg);transform:rotate(114deg)}.wi-wind.from-295-deg{-webkit-transform:rotate(115deg);-moz-transform:rotate(115deg);-ms-transform:rotate(115deg);-o-transform:rotate(115deg);transform:rotate(115deg)}.wi-wind.from-296-deg{-webkit-transform:rotate(116deg);-moz-transform:rotate(116deg);-ms-transform:rotate(116deg);-o-transform:rotate(116deg);transform:rotate(116deg)}.wi-wind.from-297-deg{-webkit-transform:rotate(117deg);-moz-transform:rotate(117deg);-ms-transform:rotate(117deg);-o-transform:rotate(117deg);transform:rotate(117deg)}.wi-wind.from-298-deg{-webkit-transform:rotate(118deg);-moz-transform:rotate(118deg);-ms-transform:rotate(118deg);-o-transform:rotate(118deg);transform:rotate(118deg)}.wi-wind.from-299-deg{-webkit-transform:rotate(119deg);-moz-transform:rotate(119deg);-ms-transform:rotate(119deg);-o-transform:rotate(119deg);transform:rotate(119deg)}.wi-wind.from-300-deg{-webkit-transform:rotate(120deg);-moz-transform:rotate(120deg);-ms-transform:rotate(120deg);-o-transform:rotate(120deg);transform:rotate(120deg)}.wi-wind.from-301-deg{-webkit-transform:rotate(121deg);-moz-transform:rotate(121deg);-ms-transform:rotate(121deg);-o-transform:rotate(121deg);transform:rotate(121deg)}.wi-wind.from-302-deg{-webkit-transform:rotate(122deg);-moz-transform:rotate(122deg);-ms-transform:rotate(122deg);-o-transform:rotate(122deg);transform:rotate(122deg)}.wi-wind.from-303-deg{-webkit-transform:rotate(123deg);-moz-transform:rotate(123deg);-ms-transform:rotate(123deg);-o-transform:rotate(123deg);transform:rotate(123deg)}.wi-wind.from-304-deg{-webkit-transform:rotate(124deg);-moz-transform:rotate(124deg);-ms-transform:rotate(124deg);-o-transform:rotate(124deg);transform:rotate(124deg)}.wi-wind.from-305-deg{-webkit-transform:rotate(125deg);-moz-transform:rotate(125deg);-ms-transform:rotate(125deg);-o-transform:rotate(125deg);transform:rotate(125deg)}.wi-wind.from-306-deg{-webkit-transform:rotate(126deg);-moz-transform:rotate(126deg);-ms-transform:rotate(126deg);-o-transform:rotate(126deg);transform:rotate(126deg)}.wi-wind.from-307-deg{-webkit-transform:rotate(127deg);-moz-transform:rotate(127deg);-ms-transform:rotate(127deg);-o-transform:rotate(127deg);transform:rotate(127deg)}.wi-wind.from-308-deg{-webkit-transform:rotate(128deg);-moz-transform:rotate(128deg);-ms-transform:rotate(128deg);-o-transform:rotate(128deg);transform:rotate(128deg)}.wi-wind.from-309-deg{-webkit-transform:rotate(129deg);-moz-transform:rotate(129deg);-ms-transform:rotate(129deg);-o-transform:rotate(129deg);transform:rotate(129deg)}.wi-wind.from-310-deg{-webkit-transform:rotate(130deg);-moz-transform:rotate(130deg);-ms-transform:rotate(130deg);-o-transform:rotate(130deg);transform:rotate(130deg)}.wi-wind.from-311-deg{-webkit-transform:rotate(131deg);-moz-transform:rotate(131deg);-ms-transform:rotate(131deg);-o-transform:rotate(131deg);transform:rotate(131deg)}.wi-wind.from-312-deg{-webkit-transform:rotate(132deg);-moz-transform:rotate(132deg);-ms-transform:rotate(132deg);-o-transform:rotate(132deg);transform:rotate(132deg)}.wi-wind.from-313-deg{-webkit-transform:rotate(133deg);-moz-transform:rotate(133deg);-ms-transform:rotate(133deg);-o-transform:rotate(133deg);transform:rotate(133deg)}.wi-wind.from-314-deg{-webkit-transform:rotate(134deg);-moz-transform:rotate(134deg);-ms-transform:rotate(134deg);-o-transform:rotate(134deg);transform:rotate(134deg)}.wi-wind.from-315-deg{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.wi-wind.from-316-deg{-webkit-transform:rotate(136deg);-moz-transform:rotate(136deg);-ms-transform:rotate(136deg);-o-transform:rotate(136deg);transform:rotate(136deg)}.wi-wind.from-317-deg{-webkit-transform:rotate(137deg);-moz-transform:rotate(137deg);-ms-transform:rotate(137deg);-o-transform:rotate(137deg);transform:rotate(137deg)}.wi-wind.from-318-deg{-webkit-transform:rotate(138deg);-moz-transform:rotate(138deg);-ms-transform:rotate(138deg);-o-transform:rotate(138deg);transform:rotate(138deg)}.wi-wind.from-319-deg{-webkit-transform:rotate(139deg);-moz-transform:rotate(139deg);-ms-transform:rotate(139deg);-o-transform:rotate(139deg);transform:rotate(139deg)}.wi-wind.from-320-deg{-webkit-transform:rotate(140deg);-moz-transform:rotate(140deg);-ms-transform:rotate(140deg);-o-transform:rotate(140deg);transform:rotate(140deg)}.wi-wind.from-321-deg{-webkit-transform:rotate(141deg);-moz-transform:rotate(141deg);-ms-transform:rotate(141deg);-o-transform:rotate(141deg);transform:rotate(141deg)}.wi-wind.from-322-deg{-webkit-transform:rotate(142deg);-moz-transform:rotate(142deg);-ms-transform:rotate(142deg);-o-transform:rotate(142deg);transform:rotate(142deg)}.wi-wind.from-323-deg{-webkit-transform:rotate(143deg);-moz-transform:rotate(143deg);-ms-transform:rotate(143deg);-o-transform:rotate(143deg);transform:rotate(143deg)}.wi-wind.from-324-deg{-webkit-transform:rotate(144deg);-moz-transform:rotate(144deg);-ms-transform:rotate(144deg);-o-transform:rotate(144deg);transform:rotate(144deg)}.wi-wind.from-325-deg{-webkit-transform:rotate(145deg);-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-o-transform:rotate(145deg);transform:rotate(145deg)}.wi-wind.from-326-deg{-webkit-transform:rotate(146deg);-moz-transform:rotate(146deg);-ms-transform:rotate(146deg);-o-transform:rotate(146deg);transform:rotate(146deg)}.wi-wind.from-327-deg{-webkit-transform:rotate(147deg);-moz-transform:rotate(147deg);-ms-transform:rotate(147deg);-o-transform:rotate(147deg);transform:rotate(147deg)}.wi-wind.from-328-deg{-webkit-transform:rotate(148deg);-moz-transform:rotate(148deg);-ms-transform:rotate(148deg);-o-transform:rotate(148deg);transform:rotate(148deg)}.wi-wind.from-329-deg{-webkit-transform:rotate(149deg);-moz-transform:rotate(149deg);-ms-transform:rotate(149deg);-o-transform:rotate(149deg);transform:rotate(149deg)}.wi-wind.from-330-deg{-webkit-transform:rotate(150deg);-moz-transform:rotate(150deg);-ms-transform:rotate(150deg);-o-transform:rotate(150deg);transform:rotate(150deg)}.wi-wind.from-331-deg{-webkit-transform:rotate(151deg);-moz-transform:rotate(151deg);-ms-transform:rotate(151deg);-o-transform:rotate(151deg);transform:rotate(151deg)}.wi-wind.from-332-deg{-webkit-transform:rotate(152deg);-moz-transform:rotate(152deg);-ms-transform:rotate(152deg);-o-transform:rotate(152deg);transform:rotate(152deg)}.wi-wind.from-333-deg{-webkit-transform:rotate(153deg);-moz-transform:rotate(153deg);-ms-transform:rotate(153deg);-o-transform:rotate(153deg);transform:rotate(153deg)}.wi-wind.from-334-deg{-webkit-transform:rotate(154deg);-moz-transform:rotate(154deg);-ms-transform:rotate(154deg);-o-transform:rotate(154deg);transform:rotate(154deg)}.wi-wind.from-335-deg{-webkit-transform:rotate(155deg);-moz-transform:rotate(155deg);-ms-transform:rotate(155deg);-o-transform:rotate(155deg);transform:rotate(155deg)}.wi-wind.from-336-deg{-webkit-transform:rotate(156deg);-moz-transform:rotate(156deg);-ms-transform:rotate(156deg);-o-transform:rotate(156deg);transform:rotate(156deg)}.wi-wind.from-337-deg{-webkit-transform:rotate(157deg);-moz-transform:rotate(157deg);-ms-transform:rotate(157deg);-o-transform:rotate(157deg);transform:rotate(157deg)}.wi-wind.from-338-deg{-webkit-transform:rotate(158deg);-moz-transform:rotate(158deg);-ms-transform:rotate(158deg);-o-transform:rotate(158deg);transform:rotate(158deg)}.wi-wind.from-339-deg{-webkit-transform:rotate(159deg);-moz-transform:rotate(159deg);-ms-transform:rotate(159deg);-o-transform:rotate(159deg);transform:rotate(159deg)}.wi-wind.from-340-deg{-webkit-transform:rotate(160deg);-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-o-transform:rotate(160deg);transform:rotate(160deg)}.wi-wind.from-341-deg{-webkit-transform:rotate(161deg);-moz-transform:rotate(161deg);-ms-transform:rotate(161deg);-o-transform:rotate(161deg);transform:rotate(161deg)}.wi-wind.from-342-deg{-webkit-transform:rotate(162deg);-moz-transform:rotate(162deg);-ms-transform:rotate(162deg);-o-transform:rotate(162deg);transform:rotate(162deg)}.wi-wind.from-343-deg{-webkit-transform:rotate(163deg);-moz-transform:rotate(163deg);-ms-transform:rotate(163deg);-o-transform:rotate(163deg);transform:rotate(163deg)}.wi-wind.from-344-deg{-webkit-transform:rotate(164deg);-moz-transform:rotate(164deg);-ms-transform:rotate(164deg);-o-transform:rotate(164deg);transform:rotate(164deg)}.wi-wind.from-345-deg{-webkit-transform:rotate(165deg);-moz-transform:rotate(165deg);-ms-transform:rotate(165deg);-o-transform:rotate(165deg);transform:rotate(165deg)}.wi-wind.from-346-deg{-webkit-transform:rotate(166deg);-moz-transform:rotate(166deg);-ms-transform:rotate(166deg);-o-transform:rotate(166deg);transform:rotate(166deg)}.wi-wind.from-347-deg{-webkit-transform:rotate(167deg);-moz-transform:rotate(167deg);-ms-transform:rotate(167deg);-o-transform:rotate(167deg);transform:rotate(167deg)}.wi-wind.from-348-deg{-webkit-transform:rotate(168deg);-moz-transform:rotate(168deg);-ms-transform:rotate(168deg);-o-transform:rotate(168deg);transform:rotate(168deg)}.wi-wind.from-349-deg{-webkit-transform:rotate(169deg);-moz-transform:rotate(169deg);-ms-transform:rotate(169deg);-o-transform:rotate(169deg);transform:rotate(169deg)}.wi-wind.from-350-deg{-webkit-transform:rotate(170deg);-moz-transform:rotate(170deg);-ms-transform:rotate(170deg);-o-transform:rotate(170deg);transform:rotate(170deg)}.wi-wind.from-351-deg{-webkit-transform:rotate(171deg);-moz-transform:rotate(171deg);-ms-transform:rotate(171deg);-o-transform:rotate(171deg);transform:rotate(171deg)}.wi-wind.from-352-deg{-webkit-transform:rotate(172deg);-moz-transform:rotate(172deg);-ms-transform:rotate(172deg);-o-transform:rotate(172deg);transform:rotate(172deg)}.wi-wind.from-353-deg{-webkit-transform:rotate(173deg);-moz-transform:rotate(173deg);-ms-transform:rotate(173deg);-o-transform:rotate(173deg);transform:rotate(173deg)}.wi-wind.from-354-deg{-webkit-transform:rotate(174deg);-moz-transform:rotate(174deg);-ms-transform:rotate(174deg);-o-transform:rotate(174deg);transform:rotate(174deg)}.wi-wind.from-355-deg{-webkit-transform:rotate(175deg);-moz-transform:rotate(175deg);-ms-transform:rotate(175deg);-o-transform:rotate(175deg);transform:rotate(175deg)}.wi-wind.from-356-deg{-webkit-transform:rotate(176deg);-moz-transform:rotate(176deg);-ms-transform:rotate(176deg);-o-transform:rotate(176deg);transform:rotate(176deg)}.wi-wind.from-357-deg{-webkit-transform:rotate(177deg);-moz-transform:rotate(177deg);-ms-transform:rotate(177deg);-o-transform:rotate(177deg);transform:rotate(177deg)}.wi-wind.from-358-deg{-webkit-transform:rotate(178deg);-moz-transform:rotate(178deg);-ms-transform:rotate(178deg);-o-transform:rotate(178deg);transform:rotate(178deg)}.wi-wind.from-359-deg{-webkit-transform:rotate(179deg);-moz-transform:rotate(179deg);-ms-transform:rotate(179deg);-o-transform:rotate(179deg);transform:rotate(179deg)}.wi-wind.from-360-deg{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.wi-towards-n{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.wi-towards-nne{-webkit-transform:rotate(23deg);-moz-transform:rotate(23deg);-ms-transform:rotate(23deg);-o-transform:rotate(23deg);transform:rotate(23deg)}.wi-towards-ne{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.wi-towards-ene{-webkit-transform:rotate(68deg);-moz-transform:rotate(68deg);-ms-transform:rotate(68deg);-o-transform:rotate(68deg);transform:rotate(68deg)}.wi-towards-e{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.wi-towards-ese{-webkit-transform:rotate(113deg);-moz-transform:rotate(113deg);-ms-transform:rotate(113deg);-o-transform:rotate(113deg);transform:rotate(113deg)}.wi-towards-se{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.wi-towards-sse{-webkit-transform:rotate(158deg);-moz-transform:rotate(158deg);-ms-transform:rotate(158deg);-o-transform:rotate(158deg);transform:rotate(158deg)}.wi-towards-s{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.wi-towards-ssw{-webkit-transform:rotate(203deg);-moz-transform:rotate(203deg);-ms-transform:rotate(203deg);-o-transform:rotate(203deg);transform:rotate(203deg)}.wi-towards-sw{-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}.wi-towards-wsw{-webkit-transform:rotate(248deg);-moz-transform:rotate(248deg);-ms-transform:rotate(248deg);-o-transform:rotate(248deg);transform:rotate(248deg)}.wi-towards-w{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.wi-towards-wnw{-webkit-transform:rotate(293deg);-moz-transform:rotate(293deg);-ms-transform:rotate(293deg);-o-transform:rotate(293deg);transform:rotate(293deg)}.wi-towards-nw{-webkit-transform:rotate(313deg);-moz-transform:rotate(313deg);-ms-transform:rotate(313deg);-o-transform:rotate(313deg);transform:rotate(313deg)}.wi-towards-nnw{-webkit-transform:rotate(336deg);-moz-transform:rotate(336deg);-ms-transform:rotate(336deg);-o-transform:rotate(336deg);transform:rotate(336deg)}.wi-from-n{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.wi-from-nne{-webkit-transform:rotate(203deg);-moz-transform:rotate(203deg);-ms-transform:rotate(203deg);-o-transform:rotate(203deg);transform:rotate(203deg)}.wi-from-ne{-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}.wi-from-ene{-webkit-transform:rotate(248deg);-moz-transform:rotate(248deg);-ms-transform:rotate(248deg);-o-transform:rotate(248deg);transform:rotate(248deg)}.wi-from-e{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.wi-from-ese{-webkit-transform:rotate(293deg);-moz-transform:rotate(293deg);-ms-transform:rotate(293deg);-o-transform:rotate(293deg);transform:rotate(293deg)}.wi-from-se{-webkit-transform:rotate(315deg);-moz-transform:rotate(315deg);-ms-transform:rotate(315deg);-o-transform:rotate(315deg);transform:rotate(315deg)}.wi-from-sse{-webkit-transform:rotate(338deg);-moz-transform:rotate(338deg);-ms-transform:rotate(338deg);-o-transform:rotate(338deg);transform:rotate(338deg)}.wi-from-s{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.wi-from-ssw{-webkit-transform:rotate(23deg);-moz-transform:rotate(23deg);-ms-transform:rotate(23deg);-o-transform:rotate(23deg);transform:rotate(23deg)}.wi-from-sw{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.wi-from-wsw{-webkit-transform:rotate(68deg);-moz-transform:rotate(68deg);-ms-transform:rotate(68deg);-o-transform:rotate(68deg);transform:rotate(68deg)}.wi-from-w{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.wi-from-wnw{-webkit-transform:rotate(113deg);-moz-transform:rotate(113deg);-ms-transform:rotate(113deg);-o-transform:rotate(113deg);transform:rotate(113deg)}.wi-from-nw{-webkit-transform:rotate(133deg);-moz-transform:rotate(133deg);-ms-transform:rotate(133deg);-o-transform:rotate(133deg);transform:rotate(133deg)}.wi-from-nnw{-webkit-transform:rotate(156deg);-moz-transform:rotate(156deg);-ms-transform:rotate(156deg);-o-transform:rotate(156deg);transform:rotate(156deg)} \ No newline at end of file diff --git a/vendor/weather-icons/css/weather-icons.css b/vendor/weather-icons/css/weather-icons.css deleted file mode 100644 index a742f327..00000000 --- a/vendor/weather-icons/css/weather-icons.css +++ /dev/null @@ -1,1838 +0,0 @@ -/*! - * Weather Icons 2.0.8 - * Updated September 19, 2015 - * Weather themed icons for Bootstrap - * Author - Erik Flowers - erik@helloerik.com - * Email: erik@helloerik.com - * Twitter: http://twitter.com/Erik_UX - * ------------------------------------------------------------------------------ - * Maintained at http://erikflowers.github.io/weather-icons - * - * License - * ------------------------------------------------------------------------------ - * - Font licensed under SIL OFL 1.1 - - * http://scripts.sil.org/OFL - * - CSS, SCSS and LESS are licensed under MIT License - - * http://opensource.org/licenses/mit-license.html - * - Documentation licensed under CC BY 3.0 - - * http://creativecommons.org/licenses/by/3.0/ - * - Inspired by and works great as a companion with Font Awesome - * "Font Awesome by Dave Gandy - http://fontawesome.io" - */ -@font-face { - font-family: 'weathericons'; - src: url('../font/weathericons-regular-webfont.eot'); - src: url('../font/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../font/weathericons-regular-webfont.woff2') format('woff2'), url('../font/weathericons-regular-webfont.woff') format('woff'), url('../font/weathericons-regular-webfont.ttf') format('truetype'), url('../font/weathericons-regular-webfont.svg#weather_iconsregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.wi { - display: inline-block; - font-family: 'weathericons'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.wi-fw { - text-align: center; - width: 1.4em; -} -.wi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.wi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.wi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.wi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.wi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -.wi-day-sunny:before { - content: "\f00d"; -} -.wi-day-cloudy:before { - content: "\f002"; -} -.wi-day-cloudy-gusts:before { - content: "\f000"; -} -.wi-day-cloudy-windy:before { - content: "\f001"; -} -.wi-day-fog:before { - content: "\f003"; -} -.wi-day-hail:before { - content: "\f004"; -} -.wi-day-haze:before { - content: "\f0b6"; -} -.wi-day-lightning:before { - content: "\f005"; -} -.wi-day-rain:before { - content: "\f008"; -} -.wi-day-rain-mix:before { - content: "\f006"; -} -.wi-day-rain-wind:before { - content: "\f007"; -} -.wi-day-showers:before { - content: "\f009"; -} -.wi-day-sleet:before { - content: "\f0b2"; -} -.wi-day-sleet-storm:before { - content: "\f068"; -} -.wi-day-snow:before { - content: "\f00a"; -} -.wi-day-snow-thunderstorm:before { - content: "\f06b"; -} -.wi-day-snow-wind:before { - content: "\f065"; -} -.wi-day-sprinkle:before { - content: "\f00b"; -} -.wi-day-storm-showers:before { - content: "\f00e"; -} -.wi-day-sunny-overcast:before { - content: "\f00c"; -} -.wi-day-thunderstorm:before { - content: "\f010"; -} -.wi-day-windy:before { - content: "\f085"; -} -.wi-solar-eclipse:before { - content: "\f06e"; -} -.wi-hot:before { - content: "\f072"; -} -.wi-day-cloudy-high:before { - content: "\f07d"; -} -.wi-day-light-wind:before { - content: "\f0c4"; -} -.wi-night-clear:before { - content: "\f02e"; -} -.wi-night-alt-cloudy:before { - content: "\f086"; -} -.wi-night-alt-cloudy-gusts:before { - content: "\f022"; -} -.wi-night-alt-cloudy-windy:before { - content: "\f023"; -} -.wi-night-alt-hail:before { - content: "\f024"; -} -.wi-night-alt-lightning:before { - content: "\f025"; -} -.wi-night-alt-rain:before { - content: "\f028"; -} -.wi-night-alt-rain-mix:before { - content: "\f026"; -} -.wi-night-alt-rain-wind:before { - content: "\f027"; -} -.wi-night-alt-showers:before { - content: "\f029"; -} -.wi-night-alt-sleet:before { - content: "\f0b4"; -} -.wi-night-alt-sleet-storm:before { - content: "\f06a"; -} -.wi-night-alt-snow:before { - content: "\f02a"; -} -.wi-night-alt-snow-thunderstorm:before { - content: "\f06d"; -} -.wi-night-alt-snow-wind:before { - content: "\f067"; -} -.wi-night-alt-sprinkle:before { - content: "\f02b"; -} -.wi-night-alt-storm-showers:before { - content: "\f02c"; -} -.wi-night-alt-thunderstorm:before { - content: "\f02d"; -} -.wi-night-cloudy:before { - content: "\f031"; -} -.wi-night-cloudy-gusts:before { - content: "\f02f"; -} -.wi-night-cloudy-windy:before { - content: "\f030"; -} -.wi-night-fog:before { - content: "\f04a"; -} -.wi-night-hail:before { - content: "\f032"; -} -.wi-night-lightning:before { - content: "\f033"; -} -.wi-night-partly-cloudy:before { - content: "\f083"; -} -.wi-night-rain:before { - content: "\f036"; -} -.wi-night-rain-mix:before { - content: "\f034"; -} -.wi-night-rain-wind:before { - content: "\f035"; -} -.wi-night-showers:before { - content: "\f037"; -} -.wi-night-sleet:before { - content: "\f0b3"; -} -.wi-night-sleet-storm:before { - content: "\f069"; -} -.wi-night-snow:before { - content: "\f038"; -} -.wi-night-snow-thunderstorm:before { - content: "\f06c"; -} -.wi-night-snow-wind:before { - content: "\f066"; -} -.wi-night-sprinkle:before { - content: "\f039"; -} -.wi-night-storm-showers:before { - content: "\f03a"; -} -.wi-night-thunderstorm:before { - content: "\f03b"; -} -.wi-lunar-eclipse:before { - content: "\f070"; -} -.wi-stars:before { - content: "\f077"; -} -.wi-storm-showers:before { - content: "\f01d"; -} -.wi-thunderstorm:before { - content: "\f01e"; -} -.wi-night-alt-cloudy-high:before { - content: "\f07e"; -} -.wi-night-cloudy-high:before { - content: "\f080"; -} -.wi-night-alt-partly-cloudy:before { - content: "\f081"; -} -.wi-cloud:before { - content: "\f041"; -} -.wi-cloudy:before { - content: "\f013"; -} -.wi-cloudy-gusts:before { - content: "\f011"; -} -.wi-cloudy-windy:before { - content: "\f012"; -} -.wi-fog:before { - content: "\f014"; -} -.wi-hail:before { - content: "\f015"; -} -.wi-rain:before { - content: "\f019"; -} -.wi-rain-mix:before { - content: "\f017"; -} -.wi-rain-wind:before { - content: "\f018"; -} -.wi-showers:before { - content: "\f01a"; -} -.wi-sleet:before { - content: "\f0b5"; -} -.wi-snow:before { - content: "\f01b"; -} -.wi-sprinkle:before { - content: "\f01c"; -} -.wi-storm-showers:before { - content: "\f01d"; -} -.wi-thunderstorm:before { - content: "\f01e"; -} -.wi-snow-wind:before { - content: "\f064"; -} -.wi-snow:before { - content: "\f01b"; -} -.wi-smog:before { - content: "\f074"; -} -.wi-smoke:before { - content: "\f062"; -} -.wi-lightning:before { - content: "\f016"; -} -.wi-raindrops:before { - content: "\f04e"; -} -.wi-raindrop:before { - content: "\f078"; -} -.wi-dust:before { - content: "\f063"; -} -.wi-snowflake-cold:before { - content: "\f076"; -} -.wi-windy:before { - content: "\f021"; -} -.wi-strong-wind:before { - content: "\f050"; -} -.wi-sandstorm:before { - content: "\f082"; -} -.wi-earthquake:before { - content: "\f0c6"; -} -.wi-fire:before { - content: "\f0c7"; -} -.wi-flood:before { - content: "\f07c"; -} -.wi-meteor:before { - content: "\f071"; -} -.wi-tsunami:before { - content: "\f0c5"; -} -.wi-volcano:before { - content: "\f0c8"; -} -.wi-hurricane:before { - content: "\f073"; -} -.wi-tornado:before { - content: "\f056"; -} -.wi-small-craft-advisory:before { - content: "\f0cc"; -} -.wi-gale-warning:before { - content: "\f0cd"; -} -.wi-storm-warning:before { - content: "\f0ce"; -} -.wi-hurricane-warning:before { - content: "\f0cf"; -} -.wi-wind-direction:before { - content: "\f0b1"; -} -.wi-alien:before { - content: "\f075"; -} -.wi-celsius:before { - content: "\f03c"; -} -.wi-fahrenheit:before { - content: "\f045"; -} -.wi-degrees:before { - content: "\f042"; -} -.wi-thermometer:before { - content: "\f055"; -} -.wi-thermometer-exterior:before { - content: "\f053"; -} -.wi-thermometer-internal:before { - content: "\f054"; -} -.wi-cloud-down:before { - content: "\f03d"; -} -.wi-cloud-up:before { - content: "\f040"; -} -.wi-cloud-refresh:before { - content: "\f03e"; -} -.wi-horizon:before { - content: "\f047"; -} -.wi-horizon-alt:before { - content: "\f046"; -} -.wi-sunrise:before { - content: "\f051"; -} -.wi-sunset:before { - content: "\f052"; -} -.wi-moonrise:before { - content: "\f0c9"; -} -.wi-moonset:before { - content: "\f0ca"; -} -.wi-refresh:before { - content: "\f04c"; -} -.wi-refresh-alt:before { - content: "\f04b"; -} -.wi-umbrella:before { - content: "\f084"; -} -.wi-barometer:before { - content: "\f079"; -} -.wi-humidity:before { - content: "\f07a"; -} -.wi-na:before { - content: "\f07b"; -} -.wi-train:before { - content: "\f0cb"; -} -.wi-moon-new:before { - content: "\f095"; -} -.wi-moon-waxing-crescent-1:before { - content: "\f096"; -} -.wi-moon-waxing-crescent-2:before { - content: "\f097"; -} -.wi-moon-waxing-crescent-3:before { - content: "\f098"; -} -.wi-moon-waxing-crescent-4:before { - content: "\f099"; -} -.wi-moon-waxing-crescent-5:before { - content: "\f09a"; -} -.wi-moon-waxing-crescent-6:before { - content: "\f09b"; -} -.wi-moon-first-quarter:before { - content: "\f09c"; -} -.wi-moon-waxing-gibbous-1:before { - content: "\f09d"; -} -.wi-moon-waxing-gibbous-2:before { - content: "\f09e"; -} -.wi-moon-waxing-gibbous-3:before { - content: "\f09f"; -} -.wi-moon-waxing-gibbous-4:before { - content: "\f0a0"; -} -.wi-moon-waxing-gibbous-5:before { - content: "\f0a1"; -} -.wi-moon-waxing-gibbous-6:before { - content: "\f0a2"; -} -.wi-moon-full:before { - content: "\f0a3"; -} -.wi-moon-waning-gibbous-1:before { - content: "\f0a4"; -} -.wi-moon-waning-gibbous-2:before { - content: "\f0a5"; -} -.wi-moon-waning-gibbous-3:before { - content: "\f0a6"; -} -.wi-moon-waning-gibbous-4:before { - content: "\f0a7"; -} -.wi-moon-waning-gibbous-5:before { - content: "\f0a8"; -} -.wi-moon-waning-gibbous-6:before { - content: "\f0a9"; -} -.wi-moon-third-quarter:before { - content: "\f0aa"; -} -.wi-moon-waning-crescent-1:before { - content: "\f0ab"; -} -.wi-moon-waning-crescent-2:before { - content: "\f0ac"; -} -.wi-moon-waning-crescent-3:before { - content: "\f0ad"; -} -.wi-moon-waning-crescent-4:before { - content: "\f0ae"; -} -.wi-moon-waning-crescent-5:before { - content: "\f0af"; -} -.wi-moon-waning-crescent-6:before { - content: "\f0b0"; -} -.wi-moon-alt-new:before { - content: "\f0eb"; -} -.wi-moon-alt-waxing-crescent-1:before { - content: "\f0d0"; -} -.wi-moon-alt-waxing-crescent-2:before { - content: "\f0d1"; -} -.wi-moon-alt-waxing-crescent-3:before { - content: "\f0d2"; -} -.wi-moon-alt-waxing-crescent-4:before { - content: "\f0d3"; -} -.wi-moon-alt-waxing-crescent-5:before { - content: "\f0d4"; -} -.wi-moon-alt-waxing-crescent-6:before { - content: "\f0d5"; -} -.wi-moon-alt-first-quarter:before { - content: "\f0d6"; -} -.wi-moon-alt-waxing-gibbous-1:before { - content: "\f0d7"; -} -.wi-moon-alt-waxing-gibbous-2:before { - content: "\f0d8"; -} -.wi-moon-alt-waxing-gibbous-3:before { - content: "\f0d9"; -} -.wi-moon-alt-waxing-gibbous-4:before { - content: "\f0da"; -} -.wi-moon-alt-waxing-gibbous-5:before { - content: "\f0db"; -} -.wi-moon-alt-waxing-gibbous-6:before { - content: "\f0dc"; -} -.wi-moon-alt-full:before { - content: "\f0dd"; -} -.wi-moon-alt-waning-gibbous-1:before { - content: "\f0de"; -} -.wi-moon-alt-waning-gibbous-2:before { - content: "\f0df"; -} -.wi-moon-alt-waning-gibbous-3:before { - content: "\f0e0"; -} -.wi-moon-alt-waning-gibbous-4:before { - content: "\f0e1"; -} -.wi-moon-alt-waning-gibbous-5:before { - content: "\f0e2"; -} -.wi-moon-alt-waning-gibbous-6:before { - content: "\f0e3"; -} -.wi-moon-alt-third-quarter:before { - content: "\f0e4"; -} -.wi-moon-alt-waning-crescent-1:before { - content: "\f0e5"; -} -.wi-moon-alt-waning-crescent-2:before { - content: "\f0e6"; -} -.wi-moon-alt-waning-crescent-3:before { - content: "\f0e7"; -} -.wi-moon-alt-waning-crescent-4:before { - content: "\f0e8"; -} -.wi-moon-alt-waning-crescent-5:before { - content: "\f0e9"; -} -.wi-moon-alt-waning-crescent-6:before { - content: "\f0ea"; -} -.wi-moon-0:before { - content: "\f095"; -} -.wi-moon-1:before { - content: "\f096"; -} -.wi-moon-2:before { - content: "\f097"; -} -.wi-moon-3:before { - content: "\f098"; -} -.wi-moon-4:before { - content: "\f099"; -} -.wi-moon-5:before { - content: "\f09a"; -} -.wi-moon-6:before { - content: "\f09b"; -} -.wi-moon-7:before { - content: "\f09c"; -} -.wi-moon-8:before { - content: "\f09d"; -} -.wi-moon-9:before { - content: "\f09e"; -} -.wi-moon-10:before { - content: "\f09f"; -} -.wi-moon-11:before { - content: "\f0a0"; -} -.wi-moon-12:before { - content: "\f0a1"; -} -.wi-moon-13:before { - content: "\f0a2"; -} -.wi-moon-14:before { - content: "\f0a3"; -} -.wi-moon-15:before { - content: "\f0a4"; -} -.wi-moon-16:before { - content: "\f0a5"; -} -.wi-moon-17:before { - content: "\f0a6"; -} -.wi-moon-18:before { - content: "\f0a7"; -} -.wi-moon-19:before { - content: "\f0a8"; -} -.wi-moon-20:before { - content: "\f0a9"; -} -.wi-moon-21:before { - content: "\f0aa"; -} -.wi-moon-22:before { - content: "\f0ab"; -} -.wi-moon-23:before { - content: "\f0ac"; -} -.wi-moon-24:before { - content: "\f0ad"; -} -.wi-moon-25:before { - content: "\f0ae"; -} -.wi-moon-26:before { - content: "\f0af"; -} -.wi-moon-27:before { - content: "\f0b0"; -} -.wi-time-1:before { - content: "\f08a"; -} -.wi-time-2:before { - content: "\f08b"; -} -.wi-time-3:before { - content: "\f08c"; -} -.wi-time-4:before { - content: "\f08d"; -} -.wi-time-5:before { - content: "\f08e"; -} -.wi-time-6:before { - content: "\f08f"; -} -.wi-time-7:before { - content: "\f090"; -} -.wi-time-8:before { - content: "\f091"; -} -.wi-time-9:before { - content: "\f092"; -} -.wi-time-10:before { - content: "\f093"; -} -.wi-time-11:before { - content: "\f094"; -} -.wi-time-12:before { - content: "\f089"; -} -.wi-direction-up:before { - content: "\f058"; -} -.wi-direction-up-right:before { - content: "\f057"; -} -.wi-direction-right:before { - content: "\f04d"; -} -.wi-direction-down-right:before { - content: "\f088"; -} -.wi-direction-down:before { - content: "\f044"; -} -.wi-direction-down-left:before { - content: "\f043"; -} -.wi-direction-left:before { - content: "\f048"; -} -.wi-direction-up-left:before { - content: "\f087"; -} -.wi-wind-beaufort-0:before { - content: "\f0b7"; -} -.wi-wind-beaufort-1:before { - content: "\f0b8"; -} -.wi-wind-beaufort-2:before { - content: "\f0b9"; -} -.wi-wind-beaufort-3:before { - content: "\f0ba"; -} -.wi-wind-beaufort-4:before { - content: "\f0bb"; -} -.wi-wind-beaufort-5:before { - content: "\f0bc"; -} -.wi-wind-beaufort-6:before { - content: "\f0bd"; -} -.wi-wind-beaufort-7:before { - content: "\f0be"; -} -.wi-wind-beaufort-8:before { - content: "\f0bf"; -} -.wi-wind-beaufort-9:before { - content: "\f0c0"; -} -.wi-wind-beaufort-10:before { - content: "\f0c1"; -} -.wi-wind-beaufort-11:before { - content: "\f0c2"; -} -.wi-wind-beaufort-12:before { - content: "\f0c3"; -} -.wi-yahoo-0:before { - content: "\f056"; -} -.wi-yahoo-1:before { - content: "\f00e"; -} -.wi-yahoo-2:before { - content: "\f073"; -} -.wi-yahoo-3:before { - content: "\f01e"; -} -.wi-yahoo-4:before { - content: "\f01e"; -} -.wi-yahoo-5:before { - content: "\f017"; -} -.wi-yahoo-6:before { - content: "\f017"; -} -.wi-yahoo-7:before { - content: "\f017"; -} -.wi-yahoo-8:before { - content: "\f015"; -} -.wi-yahoo-9:before { - content: "\f01a"; -} -.wi-yahoo-10:before { - content: "\f015"; -} -.wi-yahoo-11:before { - content: "\f01a"; -} -.wi-yahoo-12:before { - content: "\f01a"; -} -.wi-yahoo-13:before { - content: "\f01b"; -} -.wi-yahoo-14:before { - content: "\f00a"; -} -.wi-yahoo-15:before { - content: "\f064"; -} -.wi-yahoo-16:before { - content: "\f01b"; -} -.wi-yahoo-17:before { - content: "\f015"; -} -.wi-yahoo-18:before { - content: "\f017"; -} -.wi-yahoo-19:before { - content: "\f063"; -} -.wi-yahoo-20:before { - content: "\f014"; -} -.wi-yahoo-21:before { - content: "\f021"; -} -.wi-yahoo-22:before { - content: "\f062"; -} -.wi-yahoo-23:before { - content: "\f050"; -} -.wi-yahoo-24:before { - content: "\f050"; -} -.wi-yahoo-25:before { - content: "\f076"; -} -.wi-yahoo-26:before { - content: "\f013"; -} -.wi-yahoo-27:before { - content: "\f031"; -} -.wi-yahoo-28:before { - content: "\f002"; -} -.wi-yahoo-29:before { - content: "\f031"; -} -.wi-yahoo-30:before { - content: "\f002"; -} -.wi-yahoo-31:before { - content: "\f02e"; -} -.wi-yahoo-32:before { - content: "\f00d"; -} -.wi-yahoo-33:before { - content: "\f083"; -} -.wi-yahoo-34:before { - content: "\f00c"; -} -.wi-yahoo-35:before { - content: "\f017"; -} -.wi-yahoo-36:before { - content: "\f072"; -} -.wi-yahoo-37:before { - content: "\f00e"; -} -.wi-yahoo-38:before { - content: "\f00e"; -} -.wi-yahoo-39:before { - content: "\f00e"; -} -.wi-yahoo-40:before { - content: "\f01a"; -} -.wi-yahoo-41:before { - content: "\f064"; -} -.wi-yahoo-42:before { - content: "\f01b"; -} -.wi-yahoo-43:before { - content: "\f064"; -} -.wi-yahoo-44:before { - content: "\f00c"; -} -.wi-yahoo-45:before { - content: "\f00e"; -} -.wi-yahoo-46:before { - content: "\f01b"; -} -.wi-yahoo-47:before { - content: "\f00e"; -} -.wi-yahoo-3200:before { - content: "\f077"; -} -.wi-forecast-io-clear-day:before { - content: "\f00d"; -} -.wi-forecast-io-clear-night:before { - content: "\f02e"; -} -.wi-forecast-io-rain:before { - content: "\f019"; -} -.wi-forecast-io-snow:before { - content: "\f01b"; -} -.wi-forecast-io-sleet:before { - content: "\f0b5"; -} -.wi-forecast-io-wind:before { - content: "\f050"; -} -.wi-forecast-io-fog:before { - content: "\f014"; -} -.wi-forecast-io-cloudy:before { - content: "\f013"; -} -.wi-forecast-io-partly-cloudy-day:before { - content: "\f002"; -} -.wi-forecast-io-partly-cloudy-night:before { - content: "\f031"; -} -.wi-forecast-io-hail:before { - content: "\f015"; -} -.wi-forecast-io-thunderstorm:before { - content: "\f01e"; -} -.wi-forecast-io-tornado:before { - content: "\f056"; -} -.wi-wmo4680-0:before, -.wi-wmo4680-00:before { - content: "\f055"; -} -.wi-wmo4680-1:before, -.wi-wmo4680-01:before { - content: "\f013"; -} -.wi-wmo4680-2:before, -.wi-wmo4680-02:before { - content: "\f055"; -} -.wi-wmo4680-3:before, -.wi-wmo4680-03:before { - content: "\f013"; -} -.wi-wmo4680-4:before, -.wi-wmo4680-04:before { - content: "\f014"; -} -.wi-wmo4680-5:before, -.wi-wmo4680-05:before { - content: "\f014"; -} -.wi-wmo4680-10:before { - content: "\f014"; -} -.wi-wmo4680-11:before { - content: "\f014"; -} -.wi-wmo4680-12:before { - content: "\f016"; -} -.wi-wmo4680-18:before { - content: "\f050"; -} -.wi-wmo4680-20:before { - content: "\f014"; -} -.wi-wmo4680-21:before { - content: "\f017"; -} -.wi-wmo4680-22:before { - content: "\f017"; -} -.wi-wmo4680-23:before { - content: "\f019"; -} -.wi-wmo4680-24:before { - content: "\f01b"; -} -.wi-wmo4680-25:before { - content: "\f015"; -} -.wi-wmo4680-26:before { - content: "\f01e"; -} -.wi-wmo4680-27:before { - content: "\f063"; -} -.wi-wmo4680-28:before { - content: "\f063"; -} -.wi-wmo4680-29:before { - content: "\f063"; -} -.wi-wmo4680-30:before { - content: "\f014"; -} -.wi-wmo4680-31:before { - content: "\f014"; -} -.wi-wmo4680-32:before { - content: "\f014"; -} -.wi-wmo4680-33:before { - content: "\f014"; -} -.wi-wmo4680-34:before { - content: "\f014"; -} -.wi-wmo4680-35:before { - content: "\f014"; -} -.wi-wmo4680-40:before { - content: "\f017"; -} -.wi-wmo4680-41:before { - content: "\f01c"; -} -.wi-wmo4680-42:before { - content: "\f019"; -} -.wi-wmo4680-43:before { - content: "\f01c"; -} -.wi-wmo4680-44:before { - content: "\f019"; -} -.wi-wmo4680-45:before { - content: "\f015"; -} -.wi-wmo4680-46:before { - content: "\f015"; -} -.wi-wmo4680-47:before { - content: "\f01b"; -} -.wi-wmo4680-48:before { - content: "\f01b"; -} -.wi-wmo4680-50:before { - content: "\f01c"; -} -.wi-wmo4680-51:before { - content: "\f01c"; -} -.wi-wmo4680-52:before { - content: "\f019"; -} -.wi-wmo4680-53:before { - content: "\f019"; -} -.wi-wmo4680-54:before { - content: "\f076"; -} -.wi-wmo4680-55:before { - content: "\f076"; -} -.wi-wmo4680-56:before { - content: "\f076"; -} -.wi-wmo4680-57:before { - content: "\f01c"; -} -.wi-wmo4680-58:before { - content: "\f019"; -} -.wi-wmo4680-60:before { - content: "\f01c"; -} -.wi-wmo4680-61:before { - content: "\f01c"; -} -.wi-wmo4680-62:before { - content: "\f019"; -} -.wi-wmo4680-63:before { - content: "\f019"; -} -.wi-wmo4680-64:before { - content: "\f015"; -} -.wi-wmo4680-65:before { - content: "\f015"; -} -.wi-wmo4680-66:before { - content: "\f015"; -} -.wi-wmo4680-67:before { - content: "\f017"; -} -.wi-wmo4680-68:before { - content: "\f017"; -} -.wi-wmo4680-70:before { - content: "\f01b"; -} -.wi-wmo4680-71:before { - content: "\f01b"; -} -.wi-wmo4680-72:before { - content: "\f01b"; -} -.wi-wmo4680-73:before { - content: "\f01b"; -} -.wi-wmo4680-74:before { - content: "\f076"; -} -.wi-wmo4680-75:before { - content: "\f076"; -} -.wi-wmo4680-76:before { - content: "\f076"; -} -.wi-wmo4680-77:before { - content: "\f01b"; -} -.wi-wmo4680-78:before { - content: "\f076"; -} -.wi-wmo4680-80:before { - content: "\f019"; -} -.wi-wmo4680-81:before { - content: "\f01c"; -} -.wi-wmo4680-82:before { - content: "\f019"; -} -.wi-wmo4680-83:before { - content: "\f019"; -} -.wi-wmo4680-84:before { - content: "\f01d"; -} -.wi-wmo4680-85:before { - content: "\f017"; -} -.wi-wmo4680-86:before { - content: "\f017"; -} -.wi-wmo4680-87:before { - content: "\f017"; -} -.wi-wmo4680-89:before { - content: "\f015"; -} -.wi-wmo4680-90:before { - content: "\f016"; -} -.wi-wmo4680-91:before { - content: "\f01d"; -} -.wi-wmo4680-92:before { - content: "\f01e"; -} -.wi-wmo4680-93:before { - content: "\f01e"; -} -.wi-wmo4680-94:before { - content: "\f016"; -} -.wi-wmo4680-95:before { - content: "\f01e"; -} -.wi-wmo4680-96:before { - content: "\f01e"; -} -.wi-wmo4680-99:before { - content: "\f056"; -} -.wi-owm-200:before { - content: "\f01e"; -} -.wi-owm-201:before { - content: "\f01e"; -} -.wi-owm-202:before { - content: "\f01e"; -} -.wi-owm-210:before { - content: "\f016"; -} -.wi-owm-211:before { - content: "\f016"; -} -.wi-owm-212:before { - content: "\f016"; -} -.wi-owm-221:before { - content: "\f016"; -} -.wi-owm-230:before { - content: "\f01e"; -} -.wi-owm-231:before { - content: "\f01e"; -} -.wi-owm-232:before { - content: "\f01e"; -} -.wi-owm-300:before { - content: "\f01c"; -} -.wi-owm-301:before { - content: "\f01c"; -} -.wi-owm-302:before { - content: "\f019"; -} -.wi-owm-310:before { - content: "\f017"; -} -.wi-owm-311:before { - content: "\f019"; -} -.wi-owm-312:before { - content: "\f019"; -} -.wi-owm-313:before { - content: "\f01a"; -} -.wi-owm-314:before { - content: "\f019"; -} -.wi-owm-321:before { - content: "\f01c"; -} -.wi-owm-500:before { - content: "\f01c"; -} -.wi-owm-501:before { - content: "\f019"; -} -.wi-owm-502:before { - content: "\f019"; -} -.wi-owm-503:before { - content: "\f019"; -} -.wi-owm-504:before { - content: "\f019"; -} -.wi-owm-511:before { - content: "\f017"; -} -.wi-owm-520:before { - content: "\f01a"; -} -.wi-owm-521:before { - content: "\f01a"; -} -.wi-owm-522:before { - content: "\f01a"; -} -.wi-owm-531:before { - content: "\f01d"; -} -.wi-owm-600:before { - content: "\f01b"; -} -.wi-owm-601:before { - content: "\f01b"; -} -.wi-owm-602:before { - content: "\f0b5"; -} -.wi-owm-611:before { - content: "\f017"; -} -.wi-owm-612:before { - content: "\f017"; -} -.wi-owm-615:before { - content: "\f017"; -} -.wi-owm-616:before { - content: "\f017"; -} -.wi-owm-620:before { - content: "\f017"; -} -.wi-owm-621:before { - content: "\f01b"; -} -.wi-owm-622:before { - content: "\f01b"; -} -.wi-owm-701:before { - content: "\f01a"; -} -.wi-owm-711:before { - content: "\f062"; -} -.wi-owm-721:before { - content: "\f0b6"; -} -.wi-owm-731:before { - content: "\f063"; -} -.wi-owm-741:before { - content: "\f014"; -} -.wi-owm-761:before { - content: "\f063"; -} -.wi-owm-762:before { - content: "\f063"; -} -.wi-owm-771:before { - content: "\f011"; -} -.wi-owm-781:before { - content: "\f056"; -} -.wi-owm-800:before { - content: "\f00d"; -} -.wi-owm-801:before { - content: "\f011"; -} -.wi-owm-802:before { - content: "\f011"; -} -.wi-owm-803:before { - content: "\f012"; -} -.wi-owm-804:before { - content: "\f013"; -} -.wi-owm-900:before { - content: "\f056"; -} -.wi-owm-901:before { - content: "\f01d"; -} -.wi-owm-902:before { - content: "\f073"; -} -.wi-owm-903:before { - content: "\f076"; -} -.wi-owm-904:before { - content: "\f072"; -} -.wi-owm-905:before { - content: "\f021"; -} -.wi-owm-906:before { - content: "\f015"; -} -.wi-owm-957:before { - content: "\f050"; -} -.wi-owm-day-200:before { - content: "\f010"; -} -.wi-owm-day-201:before { - content: "\f010"; -} -.wi-owm-day-202:before { - content: "\f010"; -} -.wi-owm-day-210:before { - content: "\f005"; -} -.wi-owm-day-211:before { - content: "\f005"; -} -.wi-owm-day-212:before { - content: "\f005"; -} -.wi-owm-day-221:before { - content: "\f005"; -} -.wi-owm-day-230:before { - content: "\f010"; -} -.wi-owm-day-231:before { - content: "\f010"; -} -.wi-owm-day-232:before { - content: "\f010"; -} -.wi-owm-day-300:before { - content: "\f00b"; -} -.wi-owm-day-301:before { - content: "\f00b"; -} -.wi-owm-day-302:before { - content: "\f008"; -} -.wi-owm-day-310:before { - content: "\f008"; -} -.wi-owm-day-311:before { - content: "\f008"; -} -.wi-owm-day-312:before { - content: "\f008"; -} -.wi-owm-day-313:before { - content: "\f008"; -} -.wi-owm-day-314:before { - content: "\f008"; -} -.wi-owm-day-321:before { - content: "\f00b"; -} -.wi-owm-day-500:before { - content: "\f00b"; -} -.wi-owm-day-501:before { - content: "\f008"; -} -.wi-owm-day-502:before { - content: "\f008"; -} -.wi-owm-day-503:before { - content: "\f008"; -} -.wi-owm-day-504:before { - content: "\f008"; -} -.wi-owm-day-511:before { - content: "\f006"; -} -.wi-owm-day-520:before { - content: "\f009"; -} -.wi-owm-day-521:before { - content: "\f009"; -} -.wi-owm-day-522:before { - content: "\f009"; -} -.wi-owm-day-531:before { - content: "\f00e"; -} -.wi-owm-day-600:before { - content: "\f00a"; -} -.wi-owm-day-601:before { - content: "\f0b2"; -} -.wi-owm-day-602:before { - content: "\f00a"; -} -.wi-owm-day-611:before { - content: "\f006"; -} -.wi-owm-day-612:before { - content: "\f006"; -} -.wi-owm-day-615:before { - content: "\f006"; -} -.wi-owm-day-616:before { - content: "\f006"; -} -.wi-owm-day-620:before { - content: "\f006"; -} -.wi-owm-day-621:before { - content: "\f00a"; -} -.wi-owm-day-622:before { - content: "\f00a"; -} -.wi-owm-day-701:before { - content: "\f009"; -} -.wi-owm-day-711:before { - content: "\f062"; -} -.wi-owm-day-721:before { - content: "\f0b6"; -} -.wi-owm-day-731:before { - content: "\f063"; -} -.wi-owm-day-741:before { - content: "\f003"; -} -.wi-owm-day-761:before { - content: "\f063"; -} -.wi-owm-day-762:before { - content: "\f063"; -} -.wi-owm-day-781:before { - content: "\f056"; -} -.wi-owm-day-800:before { - content: "\f00d"; -} -.wi-owm-day-801:before { - content: "\f000"; -} -.wi-owm-day-802:before { - content: "\f000"; -} -.wi-owm-day-803:before { - content: "\f000"; -} -.wi-owm-day-804:before { - content: "\f00c"; -} -.wi-owm-day-900:before { - content: "\f056"; -} -.wi-owm-day-902:before { - content: "\f073"; -} -.wi-owm-day-903:before { - content: "\f076"; -} -.wi-owm-day-904:before { - content: "\f072"; -} -.wi-owm-day-906:before { - content: "\f004"; -} -.wi-owm-day-957:before { - content: "\f050"; -} -.wi-owm-night-200:before { - content: "\f02d"; -} -.wi-owm-night-201:before { - content: "\f02d"; -} -.wi-owm-night-202:before { - content: "\f02d"; -} -.wi-owm-night-210:before { - content: "\f025"; -} -.wi-owm-night-211:before { - content: "\f025"; -} -.wi-owm-night-212:before { - content: "\f025"; -} -.wi-owm-night-221:before { - content: "\f025"; -} -.wi-owm-night-230:before { - content: "\f02d"; -} -.wi-owm-night-231:before { - content: "\f02d"; -} -.wi-owm-night-232:before { - content: "\f02d"; -} -.wi-owm-night-300:before { - content: "\f02b"; -} -.wi-owm-night-301:before { - content: "\f02b"; -} -.wi-owm-night-302:before { - content: "\f028"; -} -.wi-owm-night-310:before { - content: "\f028"; -} -.wi-owm-night-311:before { - content: "\f028"; -} -.wi-owm-night-312:before { - content: "\f028"; -} -.wi-owm-night-313:before { - content: "\f028"; -} -.wi-owm-night-314:before { - content: "\f028"; -} -.wi-owm-night-321:before { - content: "\f02b"; -} -.wi-owm-night-500:before { - content: "\f02b"; -} -.wi-owm-night-501:before { - content: "\f028"; -} -.wi-owm-night-502:before { - content: "\f028"; -} -.wi-owm-night-503:before { - content: "\f028"; -} -.wi-owm-night-504:before { - content: "\f028"; -} -.wi-owm-night-511:before { - content: "\f026"; -} -.wi-owm-night-520:before { - content: "\f029"; -} -.wi-owm-night-521:before { - content: "\f029"; -} -.wi-owm-night-522:before { - content: "\f029"; -} -.wi-owm-night-531:before { - content: "\f02c"; -} -.wi-owm-night-600:before { - content: "\f02a"; -} -.wi-owm-night-601:before { - content: "\f0b4"; -} -.wi-owm-night-602:before { - content: "\f02a"; -} -.wi-owm-night-611:before { - content: "\f026"; -} -.wi-owm-night-612:before { - content: "\f026"; -} -.wi-owm-night-615:before { - content: "\f026"; -} -.wi-owm-night-616:before { - content: "\f026"; -} -.wi-owm-night-620:before { - content: "\f026"; -} -.wi-owm-night-621:before { - content: "\f02a"; -} -.wi-owm-night-622:before { - content: "\f02a"; -} -.wi-owm-night-701:before { - content: "\f029"; -} -.wi-owm-night-711:before { - content: "\f062"; -} -.wi-owm-night-721:before { - content: "\f0b6"; -} -.wi-owm-night-731:before { - content: "\f063"; -} -.wi-owm-night-741:before { - content: "\f04a"; -} -.wi-owm-night-761:before { - content: "\f063"; -} -.wi-owm-night-762:before { - content: "\f063"; -} -.wi-owm-night-781:before { - content: "\f056"; -} -.wi-owm-night-800:before { - content: "\f02e"; -} -.wi-owm-night-801:before { - content: "\f022"; -} -.wi-owm-night-802:before { - content: "\f022"; -} -.wi-owm-night-803:before { - content: "\f022"; -} -.wi-owm-night-804:before { - content: "\f086"; -} -.wi-owm-night-900:before { - content: "\f056"; -} -.wi-owm-night-902:before { - content: "\f073"; -} -.wi-owm-night-903:before { - content: "\f076"; -} -.wi-owm-night-904:before { - content: "\f072"; -} -.wi-owm-night-906:before { - content: "\f024"; -} -.wi-owm-night-957:before { - content: "\f050"; -} -.wi-wu-chanceflurries:before { - content: "\f064"; -} -.wi-wu-chancerain:before { - content: "\f019"; -} -.wi-wu-chancesleat:before { - content: "\f0b5"; -} -.wi-wu-chancesnow:before { - content: "\f01b"; -} -.wi-wu-chancetstorms:before { - content: "\f01e"; -} -.wi-wu-clear:before { - content: "\f00d"; -} -.wi-wu-cloudy:before { - content: "\f002"; -} -.wi-wu-flurries:before { - content: "\f064"; -} -.wi-wu-hazy:before { - content: "\f0b6"; -} -.wi-wu-mostlycloudy:before { - content: "\f002"; -} -.wi-wu-mostlysunny:before { - content: "\f00d"; -} -.wi-wu-partlycloudy:before { - content: "\f002"; -} -.wi-wu-partlysunny:before { - content: "\f00d"; -} -.wi-wu-rain:before { - content: "\f01a"; -} -.wi-wu-sleat:before { - content: "\f0b5"; -} -.wi-wu-snow:before { - content: "\f01b"; -} -.wi-wu-sunny:before { - content: "\f00d"; -} -.wi-wu-tstorms:before { - content: "\f01e"; -} -.wi-wu-unknown:before { - content: "\f00d"; -} diff --git a/vendor/weather-icons/css/weather-icons.min.css b/vendor/weather-icons/css/weather-icons.min.css deleted file mode 100644 index 4ec4215e..00000000 --- a/vendor/weather-icons/css/weather-icons.min.css +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * Weather Icons 2.0 - * Updated August 1, 2015 - * Weather themed icons for Bootstrap - * Author - Erik Flowers - erik@helloerik.com - * Email: erik@helloerik.com - * Twitter: http://twitter.com/Erik_UX - * ------------------------------------------------------------------------------ - * Maintained at http://erikflowers.github.io/weather-icons - * - * License - * ------------------------------------------------------------------------------ - * - Font licensed under SIL OFL 1.1 - - * http://scripts.sil.org/OFL - * - CSS, SCSS and LESS are licensed under MIT License - - * http://opensource.org/licenses/mit-license.html - * - Documentation licensed under CC BY 3.0 - - * http://creativecommons.org/licenses/by/3.0/ - * - Inspired by and works great as a companion with Font Awesome - * "Font Awesome by Dave Gandy - http://fontawesome.io" - *//*! - * Weather Icons 2.0 - * Updated August 1, 2015 - * Weather themed icons for Bootstrap - * Author - Erik Flowers - erik@helloerik.com - * Email: erik@helloerik.com - * Twitter: http://twitter.com/Erik_UX - * ------------------------------------------------------------------------------ - * Maintained at http://erikflowers.github.io/weather-icons - * - * License - * ------------------------------------------------------------------------------ - * - Font licensed under SIL OFL 1.1 - - * http://scripts.sil.org/OFL - * - CSS, SCSS and LESS are licensed under MIT License - - * http://opensource.org/licenses/mit-license.html - * - Documentation licensed under CC BY 3.0 - - * http://creativecommons.org/licenses/by/3.0/ - * - Inspired by and works great as a companion with Font Awesome - * "Font Awesome by Dave Gandy - http://fontawesome.io" - */@font-face{font-family:weathericons;src:url(../font/weathericons-regular-webfont.eot);src:url(../font/weathericons-regular-webfont.eot?#iefix) format('embedded-opentype'),url(../font/weathericons-regular-webfont.woff2) format('woff2'),url(../font/weathericons-regular-webfont.woff) format('woff'),url(../font/weathericons-regular-webfont.ttf) format('truetype'),url(../font/weathericons-regular-webfont.svg#weather_iconsregular) format('svg');font-weight:400;font-style:normal}.wi{display:inline-block;font-family:weathericons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wi-fw{text-align:center;width:1.4em}.wi-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.wi-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.wi-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.wi-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.wi-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.wi-day-sunny:before{content:"\f00d"}.wi-day-cloudy:before{content:"\f002"}.wi-day-cloudy-gusts:before{content:"\f000"}.wi-day-cloudy-windy:before{content:"\f001"}.wi-day-fog:before{content:"\f003"}.wi-day-hail:before{content:"\f004"}.wi-day-haze:before{content:"\f0b6"}.wi-day-lightning:before{content:"\f005"}.wi-day-rain:before{content:"\f008"}.wi-day-rain-mix:before{content:"\f006"}.wi-day-rain-wind:before{content:"\f007"}.wi-day-showers:before{content:"\f009"}.wi-day-sleet:before{content:"\f0b2"}.wi-day-sleet-storm:before{content:"\f068"}.wi-day-snow:before{content:"\f00a"}.wi-day-snow-thunderstorm:before{content:"\f06b"}.wi-day-snow-wind:before{content:"\f065"}.wi-day-sprinkle:before{content:"\f00b"}.wi-day-storm-showers:before{content:"\f00e"}.wi-day-sunny-overcast:before{content:"\f00c"}.wi-day-thunderstorm:before{content:"\f010"}.wi-day-windy:before{content:"\f085"}.wi-solar-eclipse:before{content:"\f06e"}.wi-hot:before{content:"\f072"}.wi-day-cloudy-high:before{content:"\f07d"}.wi-day-light-wind:before{content:"\f0c4"}.wi-night-clear:before{content:"\f02e"}.wi-night-alt-cloudy:before{content:"\f086"}.wi-night-alt-cloudy-gusts:before{content:"\f022"}.wi-night-alt-cloudy-windy:before{content:"\f023"}.wi-night-alt-hail:before{content:"\f024"}.wi-night-alt-lightning:before{content:"\f025"}.wi-night-alt-rain:before{content:"\f028"}.wi-night-alt-rain-mix:before{content:"\f026"}.wi-night-alt-rain-wind:before{content:"\f027"}.wi-night-alt-showers:before{content:"\f029"}.wi-night-alt-sleet:before{content:"\f0b4"}.wi-night-alt-sleet-storm:before{content:"\f06a"}.wi-night-alt-snow:before{content:"\f02a"}.wi-night-alt-snow-thunderstorm:before{content:"\f06d"}.wi-night-alt-snow-wind:before{content:"\f067"}.wi-night-alt-sprinkle:before{content:"\f02b"}.wi-night-alt-storm-showers:before{content:"\f02c"}.wi-night-alt-thunderstorm:before{content:"\f02d"}.wi-night-cloudy:before{content:"\f031"}.wi-night-cloudy-gusts:before{content:"\f02f"}.wi-night-cloudy-windy:before{content:"\f030"}.wi-night-fog:before{content:"\f04a"}.wi-night-hail:before{content:"\f032"}.wi-night-lightning:before{content:"\f033"}.wi-night-partly-cloudy:before{content:"\f083"}.wi-night-rain:before{content:"\f036"}.wi-night-rain-mix:before{content:"\f034"}.wi-night-rain-wind:before{content:"\f035"}.wi-night-showers:before{content:"\f037"}.wi-night-sleet:before{content:"\f0b3"}.wi-night-sleet-storm:before{content:"\f069"}.wi-night-snow:before{content:"\f038"}.wi-night-snow-thunderstorm:before{content:"\f06c"}.wi-night-snow-wind:before{content:"\f066"}.wi-night-sprinkle:before{content:"\f039"}.wi-night-storm-showers:before{content:"\f03a"}.wi-night-thunderstorm:before{content:"\f03b"}.wi-lunar-eclipse:before{content:"\f070"}.wi-stars:before{content:"\f077"}.wi-storm-showers:before{content:"\f01d"}.wi-thunderstorm:before{content:"\f01e"}.wi-night-alt-cloudy-high:before{content:"\f07e"}.wi-night-cloudy-high:before{content:"\f080"}.wi-night-alt-partly-cloudy:before{content:"\f081"}.wi-cloud:before{content:"\f041"}.wi-cloudy:before{content:"\f013"}.wi-cloudy-gusts:before{content:"\f011"}.wi-cloudy-windy:before{content:"\f012"}.wi-fog:before{content:"\f014"}.wi-hail:before{content:"\f015"}.wi-rain:before{content:"\f019"}.wi-rain-mix:before{content:"\f017"}.wi-rain-wind:before{content:"\f018"}.wi-showers:before{content:"\f01a"}.wi-sleet:before{content:"\f0b5"}.wi-snow:before{content:"\f01b"}.wi-sprinkle:before{content:"\f01c"}.wi-storm-showers:before{content:"\f01d"}.wi-thunderstorm:before{content:"\f01e"}.wi-snow-wind:before{content:"\f064"}.wi-snow:before{content:"\f01b"}.wi-smog:before{content:"\f074"}.wi-smoke:before{content:"\f062"}.wi-lightning:before{content:"\f016"}.wi-raindrops:before{content:"\f04e"}.wi-raindrop:before{content:"\f078"}.wi-dust:before{content:"\f063"}.wi-snowflake-cold:before{content:"\f076"}.wi-windy:before{content:"\f021"}.wi-strong-wind:before{content:"\f050"}.wi-sandstorm:before{content:"\f082"}.wi-earthquake:before{content:"\f0c6"}.wi-fire:before{content:"\f0c7"}.wi-flood:before{content:"\f07c"}.wi-meteor:before{content:"\f071"}.wi-tsunami:before{content:"\f0c5"}.wi-volcano:before{content:"\f0c8"}.wi-hurricane:before{content:"\f073"}.wi-tornado:before{content:"\f056"}.wi-small-craft-advisory:before{content:"\f0cc"}.wi-gale-warning:before{content:"\f0cd"}.wi-storm-warning:before{content:"\f0ce"}.wi-hurricane-warning:before{content:"\f0cf"}.wi-wind-direction:before{content:"\f0b1"}.wi-alien:before{content:"\f075"}.wi-celsius:before{content:"\f03c"}.wi-fahrenheit:before{content:"\f045"}.wi-degrees:before{content:"\f042"}.wi-thermometer:before{content:"\f055"}.wi-thermometer-exterior:before{content:"\f053"}.wi-thermometer-internal:before{content:"\f054"}.wi-cloud-down:before{content:"\f03d"}.wi-cloud-up:before{content:"\f040"}.wi-cloud-refresh:before{content:"\f03e"}.wi-horizon:before{content:"\f047"}.wi-horizon-alt:before{content:"\f046"}.wi-sunrise:before{content:"\f051"}.wi-sunset:before{content:"\f052"}.wi-moonrise:before{content:"\f0c9"}.wi-moonset:before{content:"\f0ca"}.wi-refresh:before{content:"\f04c"}.wi-refresh-alt:before{content:"\f04b"}.wi-umbrella:before{content:"\f084"}.wi-barometer:before{content:"\f079"}.wi-humidity:before{content:"\f07a"}.wi-na:before{content:"\f07b"}.wi-train:before{content:"\f0cb"}.wi-moon-new:before{content:"\f095"}.wi-moon-waxing-crescent-1:before{content:"\f096"}.wi-moon-waxing-crescent-2:before{content:"\f097"}.wi-moon-waxing-crescent-3:before{content:"\f098"}.wi-moon-waxing-crescent-4:before{content:"\f099"}.wi-moon-waxing-crescent-5:before{content:"\f09a"}.wi-moon-waxing-crescent-6:before{content:"\f09b"}.wi-moon-first-quarter:before{content:"\f09c"}.wi-moon-waxing-gibbous-1:before{content:"\f09d"}.wi-moon-waxing-gibbous-2:before{content:"\f09e"}.wi-moon-waxing-gibbous-3:before{content:"\f09f"}.wi-moon-waxing-gibbous-4:before{content:"\f0a0"}.wi-moon-waxing-gibbous-5:before{content:"\f0a1"}.wi-moon-waxing-gibbous-6:before{content:"\f0a2"}.wi-moon-full:before{content:"\f0a3"}.wi-moon-waning-gibbous-1:before{content:"\f0a4"}.wi-moon-waning-gibbous-2:before{content:"\f0a5"}.wi-moon-waning-gibbous-3:before{content:"\f0a6"}.wi-moon-waning-gibbous-4:before{content:"\f0a7"}.wi-moon-waning-gibbous-5:before{content:"\f0a8"}.wi-moon-waning-gibbous-6:before{content:"\f0a9"}.wi-moon-third-quarter:before{content:"\f0aa"}.wi-moon-waning-crescent-1:before{content:"\f0ab"}.wi-moon-waning-crescent-2:before{content:"\f0ac"}.wi-moon-waning-crescent-3:before{content:"\f0ad"}.wi-moon-waning-crescent-4:before{content:"\f0ae"}.wi-moon-waning-crescent-5:before{content:"\f0af"}.wi-moon-waning-crescent-6:before{content:"\f0b0"}.wi-moon-alt-new:before{content:"\f0eb"}.wi-moon-alt-waxing-crescent-1:before{content:"\f0d0"}.wi-moon-alt-waxing-crescent-2:before{content:"\f0d1"}.wi-moon-alt-waxing-crescent-3:before{content:"\f0d2"}.wi-moon-alt-waxing-crescent-4:before{content:"\f0d3"}.wi-moon-alt-waxing-crescent-5:before{content:"\f0d4"}.wi-moon-alt-waxing-crescent-6:before{content:"\f0d5"}.wi-moon-alt-first-quarter:before{content:"\f0d6"}.wi-moon-alt-waxing-gibbous-1:before{content:"\f0d7"}.wi-moon-alt-waxing-gibbous-2:before{content:"\f0d8"}.wi-moon-alt-waxing-gibbous-3:before{content:"\f0d9"}.wi-moon-alt-waxing-gibbous-4:before{content:"\f0da"}.wi-moon-alt-waxing-gibbous-5:before{content:"\f0db"}.wi-moon-alt-waxing-gibbous-6:before{content:"\f0dc"}.wi-moon-alt-full:before{content:"\f0dd"}.wi-moon-alt-waning-gibbous-1:before{content:"\f0de"}.wi-moon-alt-waning-gibbous-2:before{content:"\f0df"}.wi-moon-alt-waning-gibbous-3:before{content:"\f0e0"}.wi-moon-alt-waning-gibbous-4:before{content:"\f0e1"}.wi-moon-alt-waning-gibbous-5:before{content:"\f0e2"}.wi-moon-alt-waning-gibbous-6:before{content:"\f0e3"}.wi-moon-alt-third-quarter:before{content:"\f0e4"}.wi-moon-alt-waning-crescent-1:before{content:"\f0e5"}.wi-moon-alt-waning-crescent-2:before{content:"\f0e6"}.wi-moon-alt-waning-crescent-3:before{content:"\f0e7"}.wi-moon-alt-waning-crescent-4:before{content:"\f0e8"}.wi-moon-alt-waning-crescent-5:before{content:"\f0e9"}.wi-moon-alt-waning-crescent-6:before{content:"\f0ea"}.wi-moon-0:before{content:"\f095"}.wi-moon-1:before{content:"\f096"}.wi-moon-2:before{content:"\f097"}.wi-moon-3:before{content:"\f098"}.wi-moon-4:before{content:"\f099"}.wi-moon-5:before{content:"\f09a"}.wi-moon-6:before{content:"\f09b"}.wi-moon-7:before{content:"\f09c"}.wi-moon-8:before{content:"\f09d"}.wi-moon-9:before{content:"\f09e"}.wi-moon-10:before{content:"\f09f"}.wi-moon-11:before{content:"\f0a0"}.wi-moon-12:before{content:"\f0a1"}.wi-moon-13:before{content:"\f0a2"}.wi-moon-14:before{content:"\f0a3"}.wi-moon-15:before{content:"\f0a4"}.wi-moon-16:before{content:"\f0a5"}.wi-moon-17:before{content:"\f0a6"}.wi-moon-18:before{content:"\f0a7"}.wi-moon-19:before{content:"\f0a8"}.wi-moon-20:before{content:"\f0a9"}.wi-moon-21:before{content:"\f0aa"}.wi-moon-22:before{content:"\f0ab"}.wi-moon-23:before{content:"\f0ac"}.wi-moon-24:before{content:"\f0ad"}.wi-moon-25:before{content:"\f0ae"}.wi-moon-26:before{content:"\f0af"}.wi-moon-27:before{content:"\f0b0"}.wi-time-1:before{content:"\f08a"}.wi-time-2:before{content:"\f08b"}.wi-time-3:before{content:"\f08c"}.wi-time-4:before{content:"\f08d"}.wi-time-5:before{content:"\f08e"}.wi-time-6:before{content:"\f08f"}.wi-time-7:before{content:"\f090"}.wi-time-8:before{content:"\f091"}.wi-time-9:before{content:"\f092"}.wi-time-10:before{content:"\f093"}.wi-time-11:before{content:"\f094"}.wi-time-12:before{content:"\f089"}.wi-direction-up:before{content:"\f058"}.wi-direction-up-right:before{content:"\f057"}.wi-direction-right:before{content:"\f04d"}.wi-direction-down-right:before{content:"\f088"}.wi-direction-down:before{content:"\f044"}.wi-direction-down-left:before{content:"\f043"}.wi-direction-left:before{content:"\f048"}.wi-direction-up-left:before{content:"\f087"}.wi-wind-beaufort-0:before{content:"\f0b7"}.wi-wind-beaufort-1:before{content:"\f0b8"}.wi-wind-beaufort-2:before{content:"\f0b9"}.wi-wind-beaufort-3:before{content:"\f0ba"}.wi-wind-beaufort-4:before{content:"\f0bb"}.wi-wind-beaufort-5:before{content:"\f0bc"}.wi-wind-beaufort-6:before{content:"\f0bd"}.wi-wind-beaufort-7:before{content:"\f0be"}.wi-wind-beaufort-8:before{content:"\f0bf"}.wi-wind-beaufort-9:before{content:"\f0c0"}.wi-wind-beaufort-10:before{content:"\f0c1"}.wi-wind-beaufort-11:before{content:"\f0c2"}.wi-wind-beaufort-12:before{content:"\f0c3"}.wi-yahoo-0:before{content:"\f056"}.wi-yahoo-1:before{content:"\f00e"}.wi-yahoo-2:before{content:"\f073"}.wi-yahoo-3:before{content:"\f01e"}.wi-yahoo-4:before{content:"\f01e"}.wi-yahoo-5:before{content:"\f017"}.wi-yahoo-6:before{content:"\f017"}.wi-yahoo-7:before{content:"\f017"}.wi-yahoo-8:before{content:"\f015"}.wi-yahoo-9:before{content:"\f01a"}.wi-yahoo-10:before{content:"\f015"}.wi-yahoo-11:before{content:"\f01a"}.wi-yahoo-12:before{content:"\f01a"}.wi-yahoo-13:before{content:"\f01b"}.wi-yahoo-14:before{content:"\f00a"}.wi-yahoo-15:before{content:"\f064"}.wi-yahoo-16:before{content:"\f01b"}.wi-yahoo-17:before{content:"\f015"}.wi-yahoo-18:before{content:"\f017"}.wi-yahoo-19:before{content:"\f063"}.wi-yahoo-20:before{content:"\f014"}.wi-yahoo-21:before{content:"\f021"}.wi-yahoo-22:before{content:"\f062"}.wi-yahoo-23:before{content:"\f050"}.wi-yahoo-24:before{content:"\f050"}.wi-yahoo-25:before{content:"\f076"}.wi-yahoo-26:before{content:"\f013"}.wi-yahoo-27:before{content:"\f031"}.wi-yahoo-28:before{content:"\f002"}.wi-yahoo-29:before{content:"\f031"}.wi-yahoo-30:before{content:"\f002"}.wi-yahoo-31:before{content:"\f02e"}.wi-yahoo-32:before{content:"\f00d"}.wi-yahoo-33:before{content:"\f083"}.wi-yahoo-34:before{content:"\f00c"}.wi-yahoo-35:before{content:"\f017"}.wi-yahoo-36:before{content:"\f072"}.wi-yahoo-37:before{content:"\f00e"}.wi-yahoo-38:before{content:"\f00e"}.wi-yahoo-39:before{content:"\f00e"}.wi-yahoo-40:before{content:"\f01a"}.wi-yahoo-41:before{content:"\f064"}.wi-yahoo-42:before{content:"\f01b"}.wi-yahoo-43:before{content:"\f064"}.wi-yahoo-44:before{content:"\f00c"}.wi-yahoo-45:before{content:"\f00e"}.wi-yahoo-46:before{content:"\f01b"}.wi-yahoo-47:before{content:"\f00e"}.wi-yahoo-3200:before{content:"\f077"}.wi-forecast-io-clear-day:before{content:"\f00d"}.wi-forecast-io-clear-night:before{content:"\f02e"}.wi-forecast-io-rain:before{content:"\f019"}.wi-forecast-io-snow:before{content:"\f01b"}.wi-forecast-io-sleet:before{content:"\f0b5"}.wi-forecast-io-wind:before{content:"\f050"}.wi-forecast-io-fog:before{content:"\f014"}.wi-forecast-io-cloudy:before{content:"\f013"}.wi-forecast-io-partly-cloudy-day:before{content:"\f002"}.wi-forecast-io-partly-cloudy-night:before{content:"\f031"}.wi-forecast-io-hail:before{content:"\f015"}.wi-forecast-io-thunderstorm:before{content:"\f01e"}.wi-forecast-io-tornado:before{content:"\f056"}.wi-wmo4680-00:before,.wi-wmo4680-0:before{content:"\f055"}.wi-wmo4680-01:before,.wi-wmo4680-1:before{content:"\f013"}.wi-wmo4680-02:before,.wi-wmo4680-2:before{content:"\f055"}.wi-wmo4680-03:before,.wi-wmo4680-3:before{content:"\f013"}.wi-wmo4680-04:before,.wi-wmo4680-4:before{content:"\f014"}.wi-wmo4680-05:before,.wi-wmo4680-5:before{content:"\f014"}.wi-wmo4680-10:before{content:"\f014"}.wi-wmo4680-11:before{content:"\f014"}.wi-wmo4680-12:before{content:"\f016"}.wi-wmo4680-18:before{content:"\f050"}.wi-wmo4680-20:before{content:"\f014"}.wi-wmo4680-21:before{content:"\f017"}.wi-wmo4680-22:before{content:"\f017"}.wi-wmo4680-23:before{content:"\f019"}.wi-wmo4680-24:before{content:"\f01b"}.wi-wmo4680-25:before{content:"\f015"}.wi-wmo4680-26:before{content:"\f01e"}.wi-wmo4680-27:before{content:"\f063"}.wi-wmo4680-28:before{content:"\f063"}.wi-wmo4680-29:before{content:"\f063"}.wi-wmo4680-30:before{content:"\f014"}.wi-wmo4680-31:before{content:"\f014"}.wi-wmo4680-32:before{content:"\f014"}.wi-wmo4680-33:before{content:"\f014"}.wi-wmo4680-34:before{content:"\f014"}.wi-wmo4680-35:before{content:"\f014"}.wi-wmo4680-40:before{content:"\f017"}.wi-wmo4680-41:before{content:"\f01c"}.wi-wmo4680-42:before{content:"\f019"}.wi-wmo4680-43:before{content:"\f01c"}.wi-wmo4680-44:before{content:"\f019"}.wi-wmo4680-45:before{content:"\f015"}.wi-wmo4680-46:before{content:"\f015"}.wi-wmo4680-47:before{content:"\f01b"}.wi-wmo4680-48:before{content:"\f01b"}.wi-wmo4680-50:before{content:"\f01c"}.wi-wmo4680-51:before{content:"\f01c"}.wi-wmo4680-52:before{content:"\f019"}.wi-wmo4680-53:before{content:"\f019"}.wi-wmo4680-54:before{content:"\f076"}.wi-wmo4680-55:before{content:"\f076"}.wi-wmo4680-56:before{content:"\f076"}.wi-wmo4680-57:before{content:"\f01c"}.wi-wmo4680-58:before{content:"\f019"}.wi-wmo4680-60:before{content:"\f01c"}.wi-wmo4680-61:before{content:"\f01c"}.wi-wmo4680-62:before{content:"\f019"}.wi-wmo4680-63:before{content:"\f019"}.wi-wmo4680-64:before{content:"\f015"}.wi-wmo4680-65:before{content:"\f015"}.wi-wmo4680-66:before{content:"\f015"}.wi-wmo4680-67:before{content:"\f017"}.wi-wmo4680-68:before{content:"\f017"}.wi-wmo4680-70:before{content:"\f01b"}.wi-wmo4680-71:before{content:"\f01b"}.wi-wmo4680-72:before{content:"\f01b"}.wi-wmo4680-73:before{content:"\f01b"}.wi-wmo4680-74:before{content:"\f076"}.wi-wmo4680-75:before{content:"\f076"}.wi-wmo4680-76:before{content:"\f076"}.wi-wmo4680-77:before{content:"\f01b"}.wi-wmo4680-78:before{content:"\f076"}.wi-wmo4680-80:before{content:"\f019"}.wi-wmo4680-81:before{content:"\f01c"}.wi-wmo4680-82:before{content:"\f019"}.wi-wmo4680-83:before{content:"\f019"}.wi-wmo4680-84:before{content:"\f01d"}.wi-wmo4680-85:before{content:"\f017"}.wi-wmo4680-86:before{content:"\f017"}.wi-wmo4680-87:before{content:"\f017"}.wi-wmo4680-89:before{content:"\f015"}.wi-wmo4680-90:before{content:"\f016"}.wi-wmo4680-91:before{content:"\f01d"}.wi-wmo4680-92:before{content:"\f01e"}.wi-wmo4680-93:before{content:"\f01e"}.wi-wmo4680-94:before{content:"\f016"}.wi-wmo4680-95:before{content:"\f01e"}.wi-wmo4680-96:before{content:"\f01e"}.wi-wmo4680-99:before{content:"\f056"}.wi-owm-200:before{content:"\f01e"}.wi-owm-201:before{content:"\f01e"}.wi-owm-202:before{content:"\f01e"}.wi-owm-210:before{content:"\f016"}.wi-owm-211:before{content:"\f016"}.wi-owm-212:before{content:"\f016"}.wi-owm-221:before{content:"\f016"}.wi-owm-230:before{content:"\f01e"}.wi-owm-231:before{content:"\f01e"}.wi-owm-232:before{content:"\f01e"}.wi-owm-300:before{content:"\f01c"}.wi-owm-301:before{content:"\f01c"}.wi-owm-302:before{content:"\f019"}.wi-owm-310:before{content:"\f017"}.wi-owm-311:before{content:"\f019"}.wi-owm-312:before{content:"\f019"}.wi-owm-313:before{content:"\f01a"}.wi-owm-314:before{content:"\f019"}.wi-owm-321:before{content:"\f01c"}.wi-owm-500:before{content:"\f01c"}.wi-owm-501:before{content:"\f019"}.wi-owm-502:before{content:"\f019"}.wi-owm-503:before{content:"\f019"}.wi-owm-504:before{content:"\f019"}.wi-owm-511:before{content:"\f017"}.wi-owm-520:before{content:"\f01a"}.wi-owm-521:before{content:"\f01a"}.wi-owm-522:before{content:"\f01a"}.wi-owm-531:before{content:"\f01d"}.wi-owm-600:before{content:"\f01b"}.wi-owm-601:before{content:"\f01b"}.wi-owm-602:before{content:"\f0b5"}.wi-owm-611:before{content:"\f017"}.wi-owm-612:before{content:"\f017"}.wi-owm-615:before{content:"\f017"}.wi-owm-616:before{content:"\f017"}.wi-owm-620:before{content:"\f017"}.wi-owm-621:before{content:"\f01b"}.wi-owm-622:before{content:"\f01b"}.wi-owm-701:before{content:"\f01a"}.wi-owm-711:before{content:"\f062"}.wi-owm-721:before{content:"\f0b6"}.wi-owm-731:before{content:"\f063"}.wi-owm-741:before{content:"\f014"}.wi-owm-761:before{content:"\f063"}.wi-owm-762:before{content:"\f063"}.wi-owm-771:before{content:"\f011"}.wi-owm-781:before{content:"\f056"}.wi-owm-800:before{content:"\f00d"}.wi-owm-801:before{content:"\f011"}.wi-owm-802:before{content:"\f011"}.wi-owm-803:before{content:"\f012"}.wi-owm-804:before{content:"\f013"}.wi-owm-900:before{content:"\f056"}.wi-owm-901:before{content:"\f01d"}.wi-owm-902:before{content:"\f073"}.wi-owm-903:before{content:"\f076"}.wi-owm-904:before{content:"\f072"}.wi-owm-905:before{content:"\f021"}.wi-owm-906:before{content:"\f015"}.wi-owm-957:before{content:"\f050"}.wi-owm-day-200:before{content:"\f010"}.wi-owm-day-201:before{content:"\f010"}.wi-owm-day-202:before{content:"\f010"}.wi-owm-day-210:before{content:"\f005"}.wi-owm-day-211:before{content:"\f005"}.wi-owm-day-212:before{content:"\f005"}.wi-owm-day-221:before{content:"\f005"}.wi-owm-day-230:before{content:"\f010"}.wi-owm-day-231:before{content:"\f010"}.wi-owm-day-232:before{content:"\f010"}.wi-owm-day-300:before{content:"\f00b"}.wi-owm-day-301:before{content:"\f00b"}.wi-owm-day-302:before{content:"\f008"}.wi-owm-day-310:before{content:"\f008"}.wi-owm-day-311:before{content:"\f008"}.wi-owm-day-312:before{content:"\f008"}.wi-owm-day-313:before{content:"\f008"}.wi-owm-day-314:before{content:"\f008"}.wi-owm-day-321:before{content:"\f00b"}.wi-owm-day-500:before{content:"\f00b"}.wi-owm-day-501:before{content:"\f008"}.wi-owm-day-502:before{content:"\f008"}.wi-owm-day-503:before{content:"\f008"}.wi-owm-day-504:before{content:"\f008"}.wi-owm-day-511:before{content:"\f006"}.wi-owm-day-520:before{content:"\f009"}.wi-owm-day-521:before{content:"\f009"}.wi-owm-day-522:before{content:"\f009"}.wi-owm-day-531:before{content:"\f00e"}.wi-owm-day-600:before{content:"\f00a"}.wi-owm-day-601:before{content:"\f0b2"}.wi-owm-day-602:before{content:"\f00a"}.wi-owm-day-611:before{content:"\f006"}.wi-owm-day-612:before{content:"\f006"}.wi-owm-day-615:before{content:"\f006"}.wi-owm-day-616:before{content:"\f006"}.wi-owm-day-620:before{content:"\f006"}.wi-owm-day-621:before{content:"\f00a"}.wi-owm-day-622:before{content:"\f00a"}.wi-owm-day-701:before{content:"\f009"}.wi-owm-day-711:before{content:"\f062"}.wi-owm-day-721:before{content:"\f0b6"}.wi-owm-day-731:before{content:"\f063"}.wi-owm-day-741:before{content:"\f003"}.wi-owm-day-761:before{content:"\f063"}.wi-owm-day-762:before{content:"\f063"}.wi-owm-day-781:before{content:"\f056"}.wi-owm-day-800:before{content:"\f00d"}.wi-owm-day-801:before{content:"\f000"}.wi-owm-day-802:before{content:"\f000"}.wi-owm-day-803:before{content:"\f000"}.wi-owm-day-804:before{content:"\f00c"}.wi-owm-day-900:before{content:"\f056"}.wi-owm-day-902:before{content:"\f073"}.wi-owm-day-903:before{content:"\f076"}.wi-owm-day-904:before{content:"\f072"}.wi-owm-day-906:before{content:"\f004"}.wi-owm-day-957:before{content:"\f050"}.wi-owm-night-200:before{content:"\f02d"}.wi-owm-night-201:before{content:"\f02d"}.wi-owm-night-202:before{content:"\f02d"}.wi-owm-night-210:before{content:"\f025"}.wi-owm-night-211:before{content:"\f025"}.wi-owm-night-212:before{content:"\f025"}.wi-owm-night-221:before{content:"\f025"}.wi-owm-night-230:before{content:"\f02d"}.wi-owm-night-231:before{content:"\f02d"}.wi-owm-night-232:before{content:"\f02d"}.wi-owm-night-300:before{content:"\f02b"}.wi-owm-night-301:before{content:"\f02b"}.wi-owm-night-302:before{content:"\f028"}.wi-owm-night-310:before{content:"\f028"}.wi-owm-night-311:before{content:"\f028"}.wi-owm-night-312:before{content:"\f028"}.wi-owm-night-313:before{content:"\f028"}.wi-owm-night-314:before{content:"\f028"}.wi-owm-night-321:before{content:"\f02b"}.wi-owm-night-500:before{content:"\f02b"}.wi-owm-night-501:before{content:"\f028"}.wi-owm-night-502:before{content:"\f028"}.wi-owm-night-503:before{content:"\f028"}.wi-owm-night-504:before{content:"\f028"}.wi-owm-night-511:before{content:"\f026"}.wi-owm-night-520:before{content:"\f029"}.wi-owm-night-521:before{content:"\f029"}.wi-owm-night-522:before{content:"\f029"}.wi-owm-night-531:before{content:"\f02c"}.wi-owm-night-600:before{content:"\f02a"}.wi-owm-night-601:before{content:"\f0b4"}.wi-owm-night-602:before{content:"\f02a"}.wi-owm-night-611:before{content:"\f026"}.wi-owm-night-612:before{content:"\f026"}.wi-owm-night-615:before{content:"\f026"}.wi-owm-night-616:before{content:"\f026"}.wi-owm-night-620:before{content:"\f026"}.wi-owm-night-621:before{content:"\f02a"}.wi-owm-night-622:before{content:"\f02a"}.wi-owm-night-701:before{content:"\f029"}.wi-owm-night-711:before{content:"\f062"}.wi-owm-night-721:before{content:"\f0b6"}.wi-owm-night-731:before{content:"\f063"}.wi-owm-night-741:before{content:"\f04a"}.wi-owm-night-761:before{content:"\f063"}.wi-owm-night-762:before{content:"\f063"}.wi-owm-night-781:before{content:"\f056"}.wi-owm-night-800:before{content:"\f02e"}.wi-owm-night-801:before{content:"\f022"}.wi-owm-night-802:before{content:"\f022"}.wi-owm-night-803:before{content:"\f022"}.wi-owm-night-804:before{content:"\f086"}.wi-owm-night-900:before{content:"\f056"}.wi-owm-night-902:before{content:"\f073"}.wi-owm-night-903:before{content:"\f076"}.wi-owm-night-904:before{content:"\f072"}.wi-owm-night-906:before{content:"\f024"}.wi-owm-night-957:before{content:"\f050"}.wi-wu-chanceflurries:before{content:"\f064"}.wi-wu-chancerain:before{content:"\f019"}.wi-wu-chancesleat:before{content:"\f0b5"}.wi-wu-chancesnow:before{content:"\f01b"}.wi-wu-chancetstorms:before{content:"\f01e"}.wi-wu-clear:before{content:"\f00d"}.wi-wu-cloudy:before{content:"\f002"}.wi-wu-flurries:before{content:"\f064"}.wi-wu-hazy:before{content:"\f0b6"}.wi-wu-mostlycloudy:before{content:"\f002"}.wi-wu-mostlysunny:before{content:"\f00d"}.wi-wu-partlycloudy:before{content:"\f002"}.wi-wu-partlysunny:before{content:"\f00d"}.wi-wu-rain:before{content:"\f01a"}.wi-wu-sleat:before{content:"\f0b5"}.wi-wu-snow:before{content:"\f01b"}.wi-wu-sunny:before{content:"\f00d"}.wi-wu-tstorms:before{content:"\f01e"}.wi-wu-unknown:before{content:"\f00d"} \ No newline at end of file diff --git a/vendor/weather-icons/font/weathericons-regular-webfont.eot b/vendor/weather-icons/font/weathericons-regular-webfont.eot deleted file mode 100755 index 330b7ec7a0f940fa5b4313d8ac5cefb6de3093e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99774 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 p##vq(L8#LV9vn6j*a;3LuV9<{|9$`GJ*gA diff --git a/vendor/weather-icons/font/weathericons-regular-webfont.svg b/vendor/weather-icons/font/weathericons-regular-webfont.svg deleted file mode 100755 index 397d7305..00000000 --- a/vendor/weather-icons/font/weathericons-regular-webfont.svg +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/weather-icons/font/weathericons-regular-webfont.ttf b/vendor/weather-icons/font/weathericons-regular-webfont.ttf deleted file mode 100755 index 948f0a5d26e899539e7821aa5a500932f76ba582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99564 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%0D#Rj$k_pOl`WL;%6e`2iA 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 C!5iiP diff --git a/vendor/weather-icons/font/weathericons-regular-webfont.woff b/vendor/weather-icons/font/weathericons-regular-webfont.woff deleted file mode 100755 index e0b2f94833249963a4d6650571fdb36f6911c02f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56468 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

TZ8`9ATt!WOE6>PfWhmJv?;)2K3m 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

9M~{`GU5w5T>Oe(l_R83nX{Cr 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 diff --git a/vendor/weather-icons/font/weathericons-regular-webfont.woff2 b/vendor/weather-icons/font/weathericons-regular-webfont.woff2 deleted file mode 100755 index bb0c19ddfa700f04c76c942b7e04a65972c31fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44720 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 z 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 From f2ea701d34ec524b635260df0a1ae1a217cf2e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 14 Mar 2017 22:53:37 -0300 Subject: [PATCH 227/257] Fix eslintignore for vendor/vendor.js and fix the eslint validation --- .eslintignore | 4 ++-- Gruntfile.js | 2 +- vendor/vendor.js | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.eslintignore b/.eslintignore index 2e1f92d3..ee60c2ea 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,6 @@ -vendor/ +vendor/* !/vendor/vendor.js !/modules/default/** !/modules/node_helper !/modules/node_helper/** -!/modules/default/defaultmodules.js \ No newline at end of file +!/modules/default/defaultmodules.js diff --git a/Gruntfile.js b/Gruntfile.js index 73836ba4..06fed2d5 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,7 +10,7 @@ module.exports = function(grunt) { "serveronly/*.js", "*.js", "tests/*/*.js", "!modules/default/alert/notificationFx.js", "!modules/default/alert/modernizr.custom.js", "!modules/default/alert/classie.js", "config/*", - "translations/translations.js" + "translations/translations.js", "vendor/vendor.js" ] }, diff --git a/vendor/vendor.js b/vendor/vendor.js index 32eab950..7076cc45 100644 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -8,9 +8,9 @@ */ var vendor = { - 'moment.js' : 'node_modules/moment/min/moment-with-locales.js', - 'moment-timezone.js' : 'node_modules/moment-timezone/moment-timezone.js', - 'weather-icons.css': 'node_modules/weathericons/css/weather-icons.css', - 'weather-icons-wind.css': 'node_modules/weathericons/css/weather-icons-wind.css', - 'font-awesome.css': 'node_modules/font-awesome/css/font-awesome.min.css' + "moment.js" : "node_modules/moment/min/moment-with-locales.js", + "moment-timezone.js" : "node_modules/moment-timezone/moment-timezone.js", + "weather-icons.css": "node_modules/weathericons/css/weather-icons.css", + "weather-icons-wind.css": "node_modules/weathericons/css/weather-icons-wind.css", + "font-awesome.css": "node_modules/font-awesome/css/font-awesome.min.css" }; From ccb81179ab7485cefc40a46e4df67671bd757dca Mon Sep 17 00:00:00 2001 From: fewieden Date: Thu, 16 Mar 2017 16:57:55 +0100 Subject: [PATCH 228/257] fix config option --- CHANGELOG.md | 1 + modules/default/calendar/README.md | 2 +- modules/default/calendar/calendar.js | 28 +++++++++++++++++++--------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..3db41e98 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Added multiple calendar icon support. ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index bc2e9771..a8e3cc9e 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -68,7 +68,7 @@ config: { | Option | Description | --------------------- | ----------- | `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. -| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. +| `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. To have multiple symbols you can define them in an array e.g. `["calendar", "plane"]` | `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). | `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` | `user` | The username for HTTP Basic authentication. diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 644fc1f6..529994eb 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -130,10 +130,20 @@ Module.register("calendar", { if (this.config.displaySymbol) { var symbolWrapper = document.createElement("td"); - symbolWrapper.className = "symbol"; - var symbol = document.createElement("span"); - symbol.className = "fa fa-" + this.symbolForUrl(event.url); - symbolWrapper.appendChild(symbol); + symbolWrapper.className = "symbol align-right"; + var symbols = this.symbolsForUrl(event.url); + if(typeof symbols === "string") { + symbols = [symbols]; + } + + for(var i = 0; i < symbols.length; i++) { + var symbol = document.createElement("span"); + symbol.className = "fa fa-" + symbols[i]; + if(i > 0){ + symbol.style.paddingLeft = "5px"; + } + symbolWrapper.appendChild(symbol); + } eventWrapper.appendChild(symbolWrapper); } @@ -324,14 +334,14 @@ Module.register("calendar", { }); }, - /* symbolForUrl(url) - * Retrieves the symbol for a specific url. + /* symbolsForUrl(url) + * Retrieves the symbols for a specific url. * * argument url string - Url to look for. * - * return string - The Symbol + * return string/array - The Symbols */ - symbolForUrl: function (url) { + symbolsForUrl: function (url) { return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol); }, @@ -369,7 +379,7 @@ Module.register("calendar", { getCalendarProperty: function (url, property, defaultValue) { for (var c in this.config.calendars) { var calendar = this.config.calendars[c]; - if (calendar.url === url && typeof calendar[property] === "string") { + if (calendar.url === url && calendar.hasOwnProperty(property)) { return calendar[property]; } } From 44509e027c4e383683ef2efe79ec905b7ded99c1 Mon Sep 17 00:00:00 2001 From: BeatIdo Date: Fri, 17 Mar 2017 09:06:29 +0100 Subject: [PATCH 229/257] Add hideLoading option description --- modules/default/newsfeed/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index bfaa1aad..fabe73d3 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -63,6 +63,7 @@ The following properties can be configured: | `showSourceTitle` | Display the title of the source.

**Possible values:** `true` or `false`
**Default value:** `true` | `showPublishDate` | Display the publish date of an headline.

**Possible values:** `true` or `false`
**Default value:** `true` | `showDescription` | Display the description of an item.

**Possible values:** `true` or `false`
**Default value:** `false` +| `hideLoading` | Hide module instead of showing LOADING status.

**Possible values:** `true` or `false`
**Default value:** `false` | `reloadInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | `updateInterval` | How often do you want to display a new headline? (Milliseconds)

**Possible values:**`1000` - `60000`
**Default value:** `10000` (10 seconds) | `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `2500` (2.5 seconds) From 1f5ea40bf68b496867514378d16939bc974ace7d Mon Sep 17 00:00:00 2001 From: BeatIdo Date: Fri, 17 Mar 2017 09:08:45 +0100 Subject: [PATCH 230/257] News Feed hideLoading option --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..4a0d1212 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Added hideLoading option for News Feed module ### Fixed - Update .gitignore to not ignore default modules folder. From a18e7eb0894ad1aa840c2e5e4d4827158a9f706d Mon Sep 17 00:00:00 2001 From: Andrew McOlash Date: Fri, 17 Mar 2017 07:08:00 -0500 Subject: [PATCH 231/257] Fix conflict with CHANGELOG, merge with upstream/develop --- CHANGELOG.md | 2 +- config/config.js.sample | 4 +- js/app.js | 4 +- js/main.js | 7 +- modules/default/calendar/README.md | 21 +- modules/default/calendar/calendar.js | 17 +- modules/default/calendar/calendarfetcher.js | 26 ++- modules/default/calendar/debug.js | 14 +- modules/default/calendar/node_helper.js | 6 +- package.json | 1 + tests/configs/data/calendar_test.ics | 190 ++++++++++++++++++ .../configs/modules/calendar/auth-default.js | 41 ++++ tests/configs/modules/calendar/basic-auth.js | 42 ++++ tests/configs/modules/calendar/default.js | 37 ++++ .../modules/calendar/old-basic-auth.js | 39 ++++ tests/configs/noIpWhiteList.js | 25 +++ tests/e2e/ipWhistlist_spec.js | 30 +++ tests/e2e/modules/calendar_spec.js | 70 +++++++ tests/servers/basic-auth.js | 30 +++ translations/hu.json | 6 +- translations/id.json | 30 --- translations/nb.json | 7 +- translations/nn.json | 7 +- translations/translations.js | 1 - 24 files changed, 579 insertions(+), 78 deletions(-) mode change 100755 => 100644 CHANGELOG.md mode change 100755 => 100644 js/main.js create mode 100644 tests/configs/data/calendar_test.ics create mode 100644 tests/configs/modules/calendar/auth-default.js create mode 100644 tests/configs/modules/calendar/basic-auth.js create mode 100644 tests/configs/modules/calendar/default.js create mode 100644 tests/configs/modules/calendar/old-basic-auth.js create mode 100644 tests/configs/noIpWhiteList.js create mode 100644 tests/e2e/ipWhistlist_spec.js create mode 100644 tests/e2e/modules/calendar_spec.js create mode 100644 tests/servers/basic-auth.js delete mode 100644 translations/id.json mode change 100755 => 100644 translations/nb.json mode change 100755 => 100644 translations/nn.json diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100755 new mode 100644 index 7dc1c2b7..058d71f6 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,7 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). -- Add option to display temperature unit label +- Add option to display temperature unit label for current weather module ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/config/config.js.sample b/config/config.js.sample index eab22972..d50b6428 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -46,7 +46,7 @@ var config = { position: "top_right", config: { location: "New York", - locationID: "", //ID from http://www.openweathermap.org + locationID: "", //ID from http://www.openweathermap.org/help/city_list.txt appid: "YOUR_OPENWEATHER_API_KEY" } }, @@ -56,7 +56,7 @@ var config = { header: "Weather Forecast", config: { location: "New York", - locationID: "5128581", //ID from http://www.openweathermap.org + locationID: "5128581", //ID from http://www.openweathermap.org/help/city_list.txt appid: "YOUR_OPENWEATHER_API_KEY" } }, diff --git a/js/app.js b/js/app.js index f8825f7e..6c1f6ea2 100644 --- a/js/app.js +++ b/js/app.js @@ -69,12 +69,14 @@ var App = function() { } catch (e) { if (e.code == "ENOENT") { console.error("WARNING! Could not find config file. Please create one. Starting with default configuration."); + callback(defaults); } else if (e instanceof ReferenceError || e instanceof SyntaxError) { console.error("WARNING! Could not validate config file. Please correct syntax errors. Starting with default configuration."); + callback(defaults); } else { console.error("WARNING! Could not load config file. Starting with default configuration. Error found: " + e); + callback(defaults); } - callback(defaults); } }; diff --git a/js/main.js b/js/main.js old mode 100755 new mode 100644 index ad1486ca..e1a13d8a --- a/js/main.js +++ b/js/main.js @@ -245,18 +245,15 @@ var MM = (function() { moduleWrapper.style.transition = "opacity " + speed / 1000 + "s"; // Restore the postition. See hideModule() for more info. moduleWrapper.style.position = "static"; + moduleWrapper.style.opacity = 1; updateWrapperStates(); - // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. - var dummy = moduleWrapper.parentElement.parentElement.offsetHeight; - - moduleWrapper.style.opacity = 1; - clearTimeout(module.showHideTimer); module.showHideTimer = setTimeout(function() { if (typeof callback === "function") { callback(); } }, speed); + } }; diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index bc2e9771..655ab89c 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -53,25 +53,36 @@ The `colored` property gives the option for an individual color for each calenda #### Default value: ````javascript config: { - colored: false, + colored: false, calendars: [ { url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics', symbol: 'calendar', + auth: { + user: 'username', + pass: 'superstrongpassword', + method: 'basic' + } }, ], } ```` - #### Calendar configuration options: | Option | Description | --------------------- | ----------- | `url` | The url of the calendar .ical. This property is required.

**Possible values:** Any public accessble .ical calendar. | `symbol` | The symbol to show in front of an event. This property is optional.

**Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website. -| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). +| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true.

**Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)). | `repeatingCountTitle` | The count title for yearly repating events in this calendar.

**Example:** `'Birthday'` -| `user` | The username for HTTP Basic authentication. -| `pass` | The password for HTTP Basic authentication. | `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100` | `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting +| `auth` | The object containing options for authentication against the calendar. + + +#### Calendar authentication options: +| Option | Description +| --------------------- | ----------- +| `user` | The username for HTTP authentication. +| `pass` | The password for HTTP authentication. (If you use Bearer authentication, this should be your BearerToken.) +| `method` | Which authentication method should be used. HTTP Basic, Digest and Bearer authentication methods are supported. Basic authentication is used by default if this option is omitted. **Possible values:** `digest`, `basic`, `bearer` **Default value:** `basic` diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 644fc1f6..79e9edca 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -72,10 +72,18 @@ Module.register("calendar", { var calendarConfig = { maximumEntries: calendar.maximumEntries, - maximumNumberOfDays: calendar.maximumNumberOfDays, + maximumNumberOfDays: calendar.maximumNumberOfDays }; - this.addCalendar(calendar.url, calendar.user, calendar.pass, calendarConfig); + // we check user and password here for backwards compatibility with old configs + if(calendar.user && calendar.pass){ + calendar.auth = { + user: calendar.user, + pass: calendar.pass + } + } + + this.addCalendar(calendar.url, calendar.auth, calendarConfig); } this.calendarData = {}; @@ -313,14 +321,13 @@ Module.register("calendar", { * * argument url string - Url to add. */ - addCalendar: function (url, user, pass, calendarConfig) { + addCalendar: function (url, auth, calendarConfig) { this.sendSocketNotification("ADD_CALENDAR", { url: url, maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries, maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays, fetchInterval: this.config.fetchInterval, - user: user, - pass: pass + auth: auth }); }, diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index d5ca075e..9655f21e 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -8,7 +8,7 @@ var ical = require("./vendor/ical.js"); var moment = require("moment"); -var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, user, pass) { +var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, auth) { var self = this; var reloadTimer = null; @@ -32,11 +32,23 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe } }; - if (user && pass) { - opts.auth = { - user: user, - pass: pass, - sendImmediately: true + if (auth) { + if(auth.method === "bearer"){ + opts.auth = { + bearer: auth.pass + } + + }else{ + opts.auth = { + user: auth.user, + pass: auth.pass + }; + + if(auth.method === "digest"){ + opts.auth.sendImmediately = false; + }else{ + opts.auth.sendImmediately = true; + } } } @@ -47,7 +59,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe return; } - //console.log(data); + // console.log(data); newEvents = []; var limitFunction = function(date, i) {return i < maximumEntries;}; diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index 9b72d51d..ddf0fb42 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -8,14 +8,22 @@ var CalendarFetcher = require("./calendarfetcher.js"); -var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; +var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; // Standard test URL +// var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events/"; // URL for Bearer auth (must be configured in Google OAuth2 first) var fetchInterval = 60 * 60 * 1000; var maximumEntries = 10; var maximumNumberOfDays = 365; +var user = "magicmirror"; +var pass = "MyStrongPass"; + +var auth = { + user: user, + pass: pass +}; console.log("Create fetcher ..."); -fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays); +fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth); fetcher.onReceive(function(fetcher) { console.log(fetcher.events()); @@ -29,4 +37,4 @@ fetcher.onError(function(fetcher, error) { fetcher.startFetch(); -console.log("Create fetcher done! "); +console.log("Create fetcher done! "); \ No newline at end of file diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index cc511659..90c286c8 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -24,7 +24,7 @@ module.exports = NodeHelper.create({ socketNotificationReceived: function(notification, payload) { if (notification === "ADD_CALENDAR") { //console.log('ADD_CALENDAR: '); - this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.user, payload.pass); + this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth); } }, @@ -36,7 +36,7 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass) { + createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth) { var self = this; if (!validUrl.isUri(url)) { @@ -47,7 +47,7 @@ module.exports = NodeHelper.create({ var fetcher; if (typeof self.fetchers[url] === "undefined") { console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); - fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass); + fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth); fetcher.onReceive(function(fetcher) { //console.log('Broadcast events.'); diff --git a/package.json b/package.json index 704f8394..66886cad 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "grunt-markdownlint": "^1.0.13", "grunt-stylelint": "latest", "grunt-yamllint": "latest", + "http-auth": "^3.1.3", "mocha": "^3.2.0", "spectron": "^3.4.1", "stylelint-config-standard": "latest", diff --git a/tests/configs/data/calendar_test.ics b/tests/configs/data/calendar_test.ics new file mode 100644 index 00000000..63e001ce --- /dev/null +++ b/tests/configs/data/calendar_test.ics @@ -0,0 +1,190 @@ +BEGIN:VCALENDAR +PRODID:-//Google Inc//Google Calendar 70.9054//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALNAME:MagicMirrorTest +X-WR-TIMEZONE:America/Santiago +X-WR-CALDESC:Testing propose MagicMirror +BEGIN:VTIMEZONE +TZID:America/Santiago +X-LIC-LOCATION:America/Santiago +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:-04 +DTSTART:19700510T000000 +RDATE:19700510T030000 +RDATE:19710509T030000 +RDATE:19720514T030000 +RDATE:19730513T030000 +RDATE:19740512T030000 +RDATE:19750511T030000 +RDATE:19760509T030000 +RDATE:19770515T030000 +RDATE:19780514T030000 +RDATE:19790513T030000 +RDATE:19800511T030000 +RDATE:19810510T030000 +RDATE:19820509T030000 +RDATE:19830515T030000 +RDATE:19840513T030000 +RDATE:19850512T030000 +RDATE:19860511T030000 +RDATE:19870510T030000 +RDATE:19880515T030000 +RDATE:19890514T030000 +RDATE:19900513T030000 +RDATE:19910512T030000 +RDATE:19920510T030000 +RDATE:19930509T030000 +RDATE:19940515T030000 +RDATE:19950514T030000 +RDATE:19960512T030000 +RDATE:19970511T030000 +RDATE:19980510T030000 +RDATE:19990509T030000 +RDATE:20000514T030000 +RDATE:20010513T030000 +RDATE:20020512T030000 +RDATE:20030511T030000 +RDATE:20040509T030000 +RDATE:20050515T030000 +RDATE:20060514T030000 +RDATE:20070513T030000 +RDATE:20080511T030000 +RDATE:20090510T030000 +RDATE:20100509T030000 +RDATE:20110515T030000 +RDATE:20120513T030000 +RDATE:20130512T030000 +RDATE:20140511T030000 +RDATE:20150510T030000 +RDATE:20160515T030000 +RDATE:20170514T030000 +RDATE:20180513T030000 +RDATE:20190512T030000 +RDATE:20200510T030000 +RDATE:20210509T030000 +RDATE:20220515T030000 +RDATE:20230514T030000 +RDATE:20240512T030000 +RDATE:20250511T030000 +RDATE:20260510T030000 +RDATE:20270509T030000 +RDATE:20280514T030000 +RDATE:20290513T030000 +RDATE:20300512T030000 +RDATE:20310511T030000 +RDATE:20320509T030000 +RDATE:20330515T030000 +RDATE:20340514T030000 +RDATE:20350513T030000 +RDATE:20360511T030000 +RDATE:20370510T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:-04 +DTSTART:20380509T000000 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:-03 +DTSTART:19700809T000000 +RDATE:19700809T040000 +RDATE:19710815T040000 +RDATE:19720813T040000 +RDATE:19730812T040000 +RDATE:19740811T040000 +RDATE:19750810T040000 +RDATE:19760815T040000 +RDATE:19770814T040000 +RDATE:19780813T040000 +RDATE:19790812T040000 +RDATE:19800810T040000 +RDATE:19810809T040000 +RDATE:19820815T040000 +RDATE:19830814T040000 +RDATE:19840812T040000 +RDATE:19850811T040000 +RDATE:19860810T040000 +RDATE:19870809T040000 +RDATE:19880814T040000 +RDATE:19890813T040000 +RDATE:19900812T040000 +RDATE:19910811T040000 +RDATE:19920809T040000 +RDATE:19930815T040000 +RDATE:19940814T040000 +RDATE:19950813T040000 +RDATE:19960811T040000 +RDATE:19970810T040000 +RDATE:19980809T040000 +RDATE:19990815T040000 +RDATE:20000813T040000 +RDATE:20010812T040000 +RDATE:20020811T040000 +RDATE:20030810T040000 +RDATE:20040815T040000 +RDATE:20050814T040000 +RDATE:20060813T040000 +RDATE:20070812T040000 +RDATE:20080810T040000 +RDATE:20090809T040000 +RDATE:20100815T040000 +RDATE:20110814T040000 +RDATE:20120812T040000 +RDATE:20130811T040000 +RDATE:20140810T040000 +RDATE:20150809T040000 +RDATE:20160814T040000 +RDATE:20170813T040000 +RDATE:20180812T040000 +RDATE:20190811T040000 +RDATE:20200809T040000 +RDATE:20210815T040000 +RDATE:20220814T040000 +RDATE:20230813T040000 +RDATE:20240811T040000 +RDATE:20250810T040000 +RDATE:20260809T040000 +RDATE:20270815T040000 +RDATE:20280813T040000 +RDATE:20290812T040000 +RDATE:20300811T040000 +RDATE:20310810T040000 +RDATE:20320815T040000 +RDATE:20330814T040000 +RDATE:20340813T040000 +RDATE:20350812T040000 +RDATE:20360810T040000 +RDATE:20370809T040000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:-03 +DTSTART:20380815T000000 +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SU +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID=America/Santiago:20170309T100000 +DTEND;TZID=America/Santiago:20170309T110000 +RRULE:FREQ=MONTHLY;INTERVAL=30;BYMONTHDAY=9 +DTSTAMP:20170310T172720Z +UID:80rl9kuu5bq49gme99eklov27k@google.com +CREATED:20170310T172400Z +DESCRIPTION: +LAST-MODIFIED:20170310T172400Z +LOCATION: +SEQUENCE:0 +STATUS:CONFIRMED +SUMMARY:TestEvent +TRANSP:OPAQUE +END:VEVENT +END:VCALENDAR diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js new file mode 100644 index 00000000..3fee5015 --- /dev/null +++ b/tests/configs/modules/calendar/auth-default.js @@ -0,0 +1,41 @@ +/* Magic Mirror Test config default calendar with auth by default + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8011/tests/configs/data/calendar_test.ics", + auth: { + user: "MagicMirror", + pass: "CallMeADog" + } + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js new file mode 100644 index 00000000..1b210102 --- /dev/null +++ b/tests/configs/modules/calendar/basic-auth.js @@ -0,0 +1,42 @@ +/* Magic Mirror Test config default calendar + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8010/tests/configs/data/calendar_test.ics", + auth: { + user: "MagicMirror", + pass: "CallMeADog", + method: "basic" + } + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js new file mode 100644 index 00000000..3f70d930 --- /dev/null +++ b/tests/configs/modules/calendar/default.js @@ -0,0 +1,37 @@ +/* Magic Mirror Test config default calendar + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8080/tests/configs/data/calendar_test.ics" + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js new file mode 100644 index 00000000..76e2df3a --- /dev/null +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -0,0 +1,39 @@ +/* Magic Mirror Test config default calendar + * with authenticacion old config + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "calendar", + position: "bottom_bar", + config: { + calendars: [ + { + maximumNumberOfDays: 10000, + url: "http://localhost:8012/tests/configs/data/calendar_test.ics", + user: "MagicMirror", + pass: "CallMeADog" + } + ] + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js new file mode 100644 index 00000000..79366e09 --- /dev/null +++ b/tests/configs/noIpWhiteList.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample ipWhitelist + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["x.x.x.x"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/ipWhistlist_spec.js b/tests/e2e/ipWhistlist_spec.js new file mode 100644 index 00000000..01ab6787 --- /dev/null +++ b/tests/e2e/ipWhistlist_spec.js @@ -0,0 +1,30 @@ +const globalSetup = require("./global-setup"); +const app = globalSetup.app; +const request = require("request"); +const chai = require("chai"); +const expect = chai.expect; + +describe("Set ipWhitelist without access", function () { + + this.timeout(20000); + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/noIpWhiteList.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("should return 403", function (done) { + request.get("http://localhost:8080", function (err, res, body) { + expect(res.statusCode).to.equal(403); + done(); + }); + }); +}); diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js new file mode 100644 index 00000000..21939f06 --- /dev/null +++ b/tests/e2e/modules/calendar_spec.js @@ -0,0 +1,70 @@ +const globalSetup = require("../global-setup"); +const serverBasicAuth = require("../../servers/basic-auth.js"); +const app = globalSetup.app; +const chai = require("chai"); +const expect = chai.expect; + +describe("Calendar module", function () { + + this.timeout(20000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + describe("Default configuration", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/default.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + + describe("Basic auth", function() { + before(function() { + serverBasicAuth.listen(8010); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/basic-auth.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + + describe("Basic auth by default", function() { + before(function() { + serverBasicAuth.listen(8011); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/auth-default.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + describe("Basic auth backward compatibilty configuration", function() { + before(function() { + serverBasicAuth.listen(8012); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/old-basic-auth.js"; + }); + + it("Should return TestEvents", function () { + return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); + }); + }); + + + +}); diff --git a/tests/servers/basic-auth.js b/tests/servers/basic-auth.js new file mode 100644 index 00000000..238bdc26 --- /dev/null +++ b/tests/servers/basic-auth.js @@ -0,0 +1,30 @@ +var http = require("http"); +var path = require("path"); +var auth = require("http-auth"); +var express = require("express") + +var basic = auth.basic({ + realm: "MagicMirror Area restricted." +}, (username, password, callback) => { + callback(username === "MagicMirror" && password === "CallMeADog"); +}); + +this.server = express(); +this.server.use(auth.connect(basic)); + +// Set directories availables +var directories = ["/tests/configs"]; +var directory; +rootPath = path.resolve(__dirname + "/../../"); +for (i in directories) { + directory = directories[i]; + this.server.use(directory, express.static(path.resolve(rootPath + directory))); +} + +exports.listen = function () { + this.server.listen.apply(this.server, arguments); +}; + +exports.close = function (callback) { + this.server.close(callback); +}; diff --git a/translations/hu.json b/translations/hu.json index 4723fe9a..de18d82e 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -24,7 +24,7 @@ "NW": "ÉNy", "NNW": "ÉÉNy", - "UPDATE_NOTIFICATION": "Elérhető MagicMirror² frissítés.", - "UPDATE_NOTIFICATION_MODULE": "Frissítés érhető el a MODULE_NAME modulhoz.", - "UPDATE_INFO": "A jelenlegi telepített verzió COMMIT_COUNT commit-al régebbi a BRANCH_NAME branch-en." + "UPDATE_NOTIFICATION": "MagicMirror² elérhető egy frissítés!", + "UPDATE_NOTIFICATION_MODULE": "A frissítés MODULE_NAME modul néven érhető el.", + "UPDATE_INFO": "A jelenlegi telepítés COMMIT_COUNT mögött BRANCH_NAME ágon található." } diff --git a/translations/id.json b/translations/id.json deleted file mode 100644 index a311f960..00000000 --- a/translations/id.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "LOADING": "Memuat …", - - "TODAY": "Hari ini", - "TOMORROW": "Besok", - "DAYAFTERTOMORROW": "Lusa", - "RUNNING": "Berakhir dalam", - "EMPTY": "Tidak ada agenda", - - "N": "U", - "NNE": "UUT", - "NE": "NE", - "ENE": "TUT", - "E": "T", - "ESE": "TST", - "SE": "ST", - "SSE": "SST", - "S": "S", - "SSW": "SSB", - "SW": "SB", - "WSW": "BSB", - "W": "B", - "WNW": "BUB", - "NW": "UB", - "NNW": "UUB", - - "UPDATE_NOTIFICATION": "Update MagicMirror² tersedia.", - "UPDATE_NOTIFICATION_MODULE": "Update tersedia untuk modul MODULE_NAME.", - "UPDATE_INFO": "Instalasi saat ini tertinggal COMMIT_COUNT pada cabang BRANCH_NAME." -} diff --git a/translations/nb.json b/translations/nb.json old mode 100755 new mode 100644 index 9a3060be..1b57a5fa --- a/translations/nb.json +++ b/translations/nb.json @@ -3,7 +3,6 @@ "TODAY": "I dag", "TOMORROW": "I morgen", - "DAYAFTERTOMORROW": "I overmorgen", "RUNNING": "Slutter om", "EMPTY": "Ingen kommende arrangementer.", @@ -22,9 +21,5 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV", - - "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengelig.", - "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengelig for modulen MODULE_NAME.", - "UPDATE_INFO": "Nåværende installasjon er COMMIT_COUNT bak BRANCH_NAME grenen." + "NNW": "NNV" } diff --git a/translations/nn.json b/translations/nn.json old mode 100755 new mode 100644 index ebe4cee7..107bec9d --- a/translations/nn.json +++ b/translations/nn.json @@ -3,7 +3,6 @@ "TODAY": "I dag", "TOMORROW": "I morgon", - "DAYAFTERTOMORROW": "I overmorgon", "RUNNING": "Sluttar om", "EMPTY": "Ingen komande hendingar.", @@ -22,9 +21,5 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV", - - "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengeleg.", - "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengeleg for modulen MODULE_NAME.", - "UPDATE_INFO": "noverande installasjon er COMMIT_COUNT bak BRANCH_NAME greinen." + "NNW": "NNV" } diff --git a/translations/translations.js b/translations/translations.js index 61701ab9..0d12a604 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -18,7 +18,6 @@ var translations = { "pt" : "translations/pt.json", // Português "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska - "id" : "translations/id.json", // Indonesian "it" : "translations/it.json", // Italian "zh_cn" : "translations/zh_cn.json", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese From 4aec39df7a1c1726a37d5f12a65c71db2383c40d Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Fri, 17 Mar 2017 14:32:01 +0100 Subject: [PATCH 232/257] Fix Merge Conflicts. --- CHANGELOG.md | 3 ++- modules/default/clock/README.md | 1 + modules/default/clock/clock.js | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1001eef6..ffb4e9c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,8 +50,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added console warning on startup when deprecated config options are used - Add option to display temperature unit label to the current weather module - Added ability to disable wrapping of news items -- Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Updated Norwegian translation. - Added hideLoading option for News Feed module +- Added configurable dateFormat to clock module. ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 5570ff5a..f518a2b2 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -30,6 +30,7 @@ The following properties can be configured: | `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase.

**Possible values:** `true` or `false`
**Default value:** `false` | `clockBold` | Remove the colon and bold the minutes to make a more modern look.

**Possible values:** `true` or `false`
**Default value:** `false` | `showDate` | Turn off or on the Date section.

**Possible values:** `true` or `false`
**Default value:** `true` +| `dateFormat` | Configure the date format as you like.

**Possible values:** [Docs](http://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | `displayType` | Display a digital clock, analog clock, or both together.

**Possible values:** `digital`, `analog`, or `both`
**Default value:** `digital` | `analogSize` | **Specific to the analog clock.** Defines how large the analog display is.

**Possible values:** A positive number of pixels`
**Default value:** `200px` | `analogFace` | **Specific to the analog clock.** Specifies which clock face to use.

**Possible values:** `simple` for a simple border, `none` for no face or border, or `face-###` (where ### is currently a value between 001 and 012, inclusive)
**Default value:** `simple` diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index e15fbbbd..21e665e7 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -16,6 +16,7 @@ Module.register("clock",{ showPeriodUpper: false, clockBold: false, showDate: true, + dateFormat: "dddd, LL", /* specific to the analog clock */ analogSize: "200px", @@ -87,7 +88,7 @@ Module.register("clock",{ } if(this.config.showDate){ - dateWrapper.innerHTML = now.format("dddd, LL"); + dateWrapper.innerHTML = now.format(this.config.dateFormat); } timeWrapper.innerHTML = timeString; secondsWrapper.innerHTML = now.format("ss"); From 0d3c03d1e30c66d254cf8871be2e926fae84413a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Fri, 17 Mar 2017 22:36:09 -0300 Subject: [PATCH 233/257] Restore code removed on Merges on 2017-03-17 --- CHANGELOG.md | 1 + js/app.js | 4 +--- js/main.js | 5 ++++- modules/default/calendar/README.md | 2 +- translations/id.json | 30 ++++++++++++++++++++++++++++++ translations/nb.json | 7 ++++++- translations/nn.json | 7 ++++++- translations/translations.js | 1 + 8 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 translations/id.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ed16095..7fe62971 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Module currentWeather: check if temperature received from api is defined. - Fix an issue with module hidden status changing to `true` although lock string prevented showing it - Fix newsfeed module bug (removeStartTags) +- Fixed missing animation on `this.show(speed)` when module is alone in a region. ## [2.1.0] - 2016-12-31 diff --git a/js/app.js b/js/app.js index 6c1f6ea2..f8825f7e 100644 --- a/js/app.js +++ b/js/app.js @@ -69,14 +69,12 @@ var App = function() { } catch (e) { if (e.code == "ENOENT") { console.error("WARNING! Could not find config file. Please create one. Starting with default configuration."); - callback(defaults); } else if (e instanceof ReferenceError || e instanceof SyntaxError) { console.error("WARNING! Could not validate config file. Please correct syntax errors. Starting with default configuration."); - callback(defaults); } else { console.error("WARNING! Could not load config file. Starting with default configuration. Error found: " + e); - callback(defaults); } + callback(defaults); } }; diff --git a/js/main.js b/js/main.js index e1a13d8a..8c64d880 100644 --- a/js/main.js +++ b/js/main.js @@ -245,10 +245,13 @@ var MM = (function() { moduleWrapper.style.transition = "opacity " + speed / 1000 + "s"; // Restore the postition. See hideModule() for more info. moduleWrapper.style.position = "static"; - moduleWrapper.style.opacity = 1; updateWrapperStates(); + // Waiting for DOM-changes done in updateWrapperStates before we can start the animation. + var dummy = moduleWrapper.parentElement.parentElement.offsetHeight; + moduleWrapper.style.opacity = 1; + clearTimeout(module.showHideTimer); module.showHideTimer = setTimeout(function() { if (typeof callback === "function") { callback(); } diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index a0fe3a30..470560ba 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -54,7 +54,7 @@ The `colored` property gives the option for an individual color for each calenda #### Default value: ````javascript config: { - colored: false, + colored: false, calendars: [ { url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics', diff --git a/translations/id.json b/translations/id.json new file mode 100644 index 00000000..a311f960 --- /dev/null +++ b/translations/id.json @@ -0,0 +1,30 @@ +{ + "LOADING": "Memuat …", + + "TODAY": "Hari ini", + "TOMORROW": "Besok", + "DAYAFTERTOMORROW": "Lusa", + "RUNNING": "Berakhir dalam", + "EMPTY": "Tidak ada agenda", + + "N": "U", + "NNE": "UUT", + "NE": "NE", + "ENE": "TUT", + "E": "T", + "ESE": "TST", + "SE": "ST", + "SSE": "SST", + "S": "S", + "SSW": "SSB", + "SW": "SB", + "WSW": "BSB", + "W": "B", + "WNW": "BUB", + "NW": "UB", + "NNW": "UUB", + + "UPDATE_NOTIFICATION": "Update MagicMirror² tersedia.", + "UPDATE_NOTIFICATION_MODULE": "Update tersedia untuk modul MODULE_NAME.", + "UPDATE_INFO": "Instalasi saat ini tertinggal COMMIT_COUNT pada cabang BRANCH_NAME." +} diff --git a/translations/nb.json b/translations/nb.json index 1b57a5fa..9a3060be 100644 --- a/translations/nb.json +++ b/translations/nb.json @@ -3,6 +3,7 @@ "TODAY": "I dag", "TOMORROW": "I morgen", + "DAYAFTERTOMORROW": "I overmorgen", "RUNNING": "Slutter om", "EMPTY": "Ingen kommende arrangementer.", @@ -21,5 +22,9 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", + + "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengelig.", + "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengelig for modulen MODULE_NAME.", + "UPDATE_INFO": "Nåværende installasjon er COMMIT_COUNT bak BRANCH_NAME grenen." } diff --git a/translations/nn.json b/translations/nn.json index 107bec9d..ebe4cee7 100644 --- a/translations/nn.json +++ b/translations/nn.json @@ -3,6 +3,7 @@ "TODAY": "I dag", "TOMORROW": "I morgon", + "DAYAFTERTOMORROW": "I overmorgon", "RUNNING": "Sluttar om", "EMPTY": "Ingen komande hendingar.", @@ -21,5 +22,9 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", + + "UPDATE_NOTIFICATION": "MagicMirror² oppdatering er tilgjengeleg.", + "UPDATE_NOTIFICATION_MODULE": "Oppdatering tilgjengeleg for modulen MODULE_NAME.", + "UPDATE_INFO": "noverande installasjon er COMMIT_COUNT bak BRANCH_NAME greinen." } diff --git a/translations/translations.js b/translations/translations.js index 0d12a604..61701ab9 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -18,6 +18,7 @@ var translations = { "pt" : "translations/pt.json", // Português "pt_br" : "translations/pt_br.json", // Português Brasileiro "sv" : "translations/sv.json", // Svenska + "id" : "translations/id.json", // Indonesian "it" : "translations/it.json", // Italian "zh_cn" : "translations/zh_cn.json", // Simplified Chinese "zh_tw" : "translations/zh_tw.json", // Traditional Chinese From b23e47464882290b43a4b3fb2e18d1095f13c8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 18 Mar 2017 09:36:50 -0300 Subject: [PATCH 234/257] Format changelog for 2.1.1 --- CHANGELOG.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe62971..f5d33af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,13 +23,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Restructured Test Suite ### Added -- Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673)) -- Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays` +- Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673)). +- Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays`. - Add loaded function to modules, providing an async callback. - Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) -- Add use pm2 for manager process into Installer RaspberryPi script -- Russian Translation -- Afrikaans Translation +- Add use pm2 for manager process into Installer RaspberryPi script. +- Russian Translation. +- Afrikaans Translation. - Add postinstall script to notify user that MagicMirror installed successfully despite warnings from NPM. - Init tests using mocha. - Option to use RegExp in Calendar's titleReplace. @@ -37,22 +37,22 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Icelandic Translation. - Add use a script to prevent when is run by SSH session set DISPLAY enviroment. - Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. -- Option to give each calendar a different color -- Option for colored min-temp and max-temp -- Add test e2e helloworld -- Add test e2e enviroment -- Add `chai-as-promised` npm module to devDependencies -- Basic set of tests for clock module -- Run e2e test in Travis +- Option to give each calendar a different color. +- Option for colored min-temp and max-temp. +- Add test e2e helloworld. +- Add test e2e enviroment. +- Add `chai-as-promised` npm module to devDependencies. +- Basic set of tests for clock module. +- Run e2e test in Travis. - Estonian Translation. -- Add test for compliments module for parts of day +- Add test for compliments module for parts of day. - Korean Translation. -- Added console warning on startup when deprecated config options are used -- Add option to display temperature unit label to the current weather module -- Added ability to disable wrapping of news items +- Added console warning on startup when deprecated config options are used. +- Add option to display temperature unit label to the current weather module. +- Added ability to disable wrapping of news items. - Added in the ability to hide events in the calendar module based on simple string filters. - Updated Norwegian translation. -- Added hideLoading option for News Feed module +- Added hideLoading option for News Feed module. - Added configurable dateFormat to clock module. - Added multiple calendar icon support. @@ -63,7 +63,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix an issue where the analog clock looked scrambled. ([#611](https://github.com/MichMich/MagicMirror/issues/611)) - If units is set to imperial, the showRainAmount option of weatherforecast will show the correct unit. - Module currentWeather: check if temperature received from api is defined. -- Fix an issue with module hidden status changing to `true` although lock string prevented showing it +- Fix an issue with module hidden status changing to `true` although lock string prevented showing it. - Fix newsfeed module bug (removeStartTags) - Fixed missing animation on `this.show(speed)` when module is alone in a region. From ae33de7e7cdcfd74a091ba74a7268390ffa50d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 18 Mar 2017 09:42:36 -0300 Subject: [PATCH 235/257] Add in Changelog missing tests added for 2.1.1 version --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe62971..07d1f2f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added hideLoading option for News Feed module - Added configurable dateFormat to clock module. - Added multiple calendar icon support. +- Added tests for Translations, dev argument, version, dev console. +- Added test anytime feature compliments module. +- Added test ipwhitelist configuration directive. +- Added test for calendar module: default, basic-auth, backward compability, fail-basic-auth. ### Fixed - Update .gitignore to not ignore default modules folder. From 4fb86bd6996f819399fb9077074dd46df793f39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Mar 2017 16:54:36 -0300 Subject: [PATCH 236/257] change description package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a1e7641..a190f12d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "magicmirror", "version": "2.1.1", - "description": "A modular interface for smart mirrors.", + "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { "start": "sh run-start.sh", From f0db135b1d5e17ed96550a2999792144bd5486af Mon Sep 17 00:00:00 2001 From: 42SK <42SK@github.com> Date: Tue, 21 Mar 2017 19:39:51 +0100 Subject: [PATCH 237/257] Added option to ignore old items in the news feed module Outdated news items can be omitted via the ignoreOldItems and the ignoreOlderThan option. --- CHANGELOG.md | 1 + modules/default/newsfeed/README.md | 2 ++ modules/default/newsfeed/newsfeed.js | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe62971..39ecfa6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added hideLoading option for News Feed module - Added configurable dateFormat to clock module. - Added multiple calendar icon support. +- Added `ignoreOldItems` and `ignoreOlderThan` options to the News Feed module ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 9f7b2e7d..7c4ad48d 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -70,6 +70,8 @@ The following properties can be configured: | `updateInterval` | How often do you want to display a new headline? (Milliseconds)

**Possible values:**`1000` - `60000`
**Default value:** `10000` (10 seconds) | `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `2500` (2.5 seconds) | `maxNewsItems` | Total amount of news items to cycle through. (0 for unlimited)

**Possible values:**`0` - `...`
**Default value:** `0` +| `ignoreOldItems` | Ignore news items that are outdated.

**Possible values:**`true` or `false
**Default value:** `false` +| `ignoreOlderThan` | How old should news items be before they are considered outdated? (Milliseconds)

**Possible values:**`1` - `...`
**Default value:** `86400000` (1 day) | `removeStartTags` | Some newsfeeds feature tags at the **beginning** of their titles or descriptions, such as _[VIDEO]_. This setting allows for the removal of specified tags from the beginning of an item's description and/or title.

**Possible values:**`'title'`, `'description'`, `'both'` | `startTags` | List the tags you would like to have removed at the beginning of the feed item

**Possible values:** `['TAG']` or `['TAG1','TAG2',...]` | `removeEndTags` | Remove specified tags from the **end** of an item's description and/or title.

**Possible values:**`'title'`, `'description'`, `'both'` diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 5094355e..b7ec2f58 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -28,6 +28,8 @@ Module.register("newsfeed",{ updateInterval: 10 * 1000, animationSpeed: 2.5 * 1000, maxNewsItems: 0, // 0 for unlimited + ignoreOldItems: false, + ignoreOlderThan: 24 * 60 * 60 * 1000, // 1 day removeStartTags: "", removeEndTags: "", startTags: [], @@ -226,7 +228,9 @@ Module.register("newsfeed",{ for (var i in feedItems) { var item = feedItems[i]; item.sourceTitle = this.titleForFeed(feed); - newsItems.push(item); + if (!(this.config.ignoreOldItems && ((Date.now() - new Date(item.pubdate)) > this.config.ignoreOlderThan))) { + newsItems.push(item); + } } } } From 6a0e16885dc8cdea2b1455c0f5131c59134d743d Mon Sep 17 00:00:00 2001 From: Flo Date: Tue, 21 Mar 2017 20:56:11 +0100 Subject: [PATCH 238/257] Support full screen mode on iOS and enable "click to toggle fullscreen" in standard browsers --- css/main.css | 1 + index.html | 17 +++++- js/screenfull.js | 150 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 js/screenfull.js diff --git a/css/main.css b/css/main.css index 5e63e596..924ec4de 100644 --- a/css/main.css +++ b/css/main.css @@ -1,6 +1,7 @@ html { cursor: none; overflow: hidden; + background: #000; } ::-webkit-scrollbar { diff --git a/index.html b/index.html index 86a69a4a..edc63369 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,12 @@ Magic Mirror + + + + + + @@ -12,8 +18,17 @@ + + + - +

diff --git a/js/screenfull.js b/js/screenfull.js new file mode 100644 index 00000000..de20b55e --- /dev/null +++ b/js/screenfull.js @@ -0,0 +1,150 @@ +/*! +* screenfull +* v3.0.2 - 2017-03-13 +* (c) Sindre Sorhus; MIT License +*/ +(function () { + 'use strict'; + + var isCommonjs = typeof module !== 'undefined' && module.exports; + var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; + + var fn = (function () { + var val; + + var fnMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // new WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + // old WebKit (Safari 5.1) + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + ]; + + var i = 0; + var l = fnMap.length; + var ret = {}; + + for (; i < l; i++) { + val = fnMap[i]; + if (val && val[1] in document) { + for (i = 0; i < val.length; i++) { + ret[fnMap[0][i]] = val[i]; + } + return ret; + } + } + + return false; + })(); + + var screenfull = { + request: function (elem) { + var request = fn.requestFullscreen; + + elem = elem || document.documentElement; + + // Work around Safari 5.1 bug: reports support for + // keyboard in fullscreen even though it doesn't. + // Browser sniffing, since the alternative with + // setTimeout is even worse. + if (/5\.1[.\d]* Safari/.test(navigator.userAgent)) { + elem[request](); + } else { + elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); + } + }, + exit: function () { + document[fn.exitFullscreen](); + }, + toggle: function (elem) { + if (this.isFullscreen) { + this.exit(); + } else { + this.request(elem); + } + }, + onchange: function (callback) { + document.addEventListener(fn.fullscreenchange, callback, false); + }, + onerror: function (callback) { + document.addEventListener(fn.fullscreenerror, callback, false); + }, + raw: fn + }; + + if (!fn) { + if (isCommonjs) { + module.exports = false; + } else { + window.screenfull = false; + } + + return; + } + + Object.defineProperties(screenfull, { + isFullscreen: { + get: function () { + return Boolean(document[fn.fullscreenElement]); + } + }, + element: { + enumerable: true, + get: function () { + return document[fn.fullscreenElement]; + } + }, + enabled: { + enumerable: true, + get: function () { + // Coerce to boolean in case of old WebKit + return Boolean(document[fn.fullscreenEnabled]); + } + } + }); + + if (isCommonjs) { + module.exports = screenfull; + } else { + window.screenfull = screenfull; + } +})(); From 09c03e8ca7687aeea2d01b8cccd909b8cc5d6f32 Mon Sep 17 00:00:00 2001 From: Flo Date: Tue, 21 Mar 2017 20:56:11 +0100 Subject: [PATCH 239/257] Support full screen mode on iOS and enable "click to toggle fullscreen" in standard browsers --- css/main.css | 1 + index.html | 17 +++++- js/screenfull.js | 150 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 js/screenfull.js diff --git a/css/main.css b/css/main.css index 01d40aec..49bfe611 100644 --- a/css/main.css +++ b/css/main.css @@ -1,6 +1,7 @@ html { cursor: none; overflow: hidden; + background: #000; } ::-webkit-scrollbar { diff --git a/index.html b/index.html index 606f5aac..72326719 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,12 @@ Magic Mirror + + + + + + @@ -12,8 +18,17 @@ + + + - +
diff --git a/js/screenfull.js b/js/screenfull.js new file mode 100644 index 00000000..de20b55e --- /dev/null +++ b/js/screenfull.js @@ -0,0 +1,150 @@ +/*! +* screenfull +* v3.0.2 - 2017-03-13 +* (c) Sindre Sorhus; MIT License +*/ +(function () { + 'use strict'; + + var isCommonjs = typeof module !== 'undefined' && module.exports; + var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; + + var fn = (function () { + var val; + + var fnMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // new WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + // old WebKit (Safari 5.1) + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + ]; + + var i = 0; + var l = fnMap.length; + var ret = {}; + + for (; i < l; i++) { + val = fnMap[i]; + if (val && val[1] in document) { + for (i = 0; i < val.length; i++) { + ret[fnMap[0][i]] = val[i]; + } + return ret; + } + } + + return false; + })(); + + var screenfull = { + request: function (elem) { + var request = fn.requestFullscreen; + + elem = elem || document.documentElement; + + // Work around Safari 5.1 bug: reports support for + // keyboard in fullscreen even though it doesn't. + // Browser sniffing, since the alternative with + // setTimeout is even worse. + if (/5\.1[.\d]* Safari/.test(navigator.userAgent)) { + elem[request](); + } else { + elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); + } + }, + exit: function () { + document[fn.exitFullscreen](); + }, + toggle: function (elem) { + if (this.isFullscreen) { + this.exit(); + } else { + this.request(elem); + } + }, + onchange: function (callback) { + document.addEventListener(fn.fullscreenchange, callback, false); + }, + onerror: function (callback) { + document.addEventListener(fn.fullscreenerror, callback, false); + }, + raw: fn + }; + + if (!fn) { + if (isCommonjs) { + module.exports = false; + } else { + window.screenfull = false; + } + + return; + } + + Object.defineProperties(screenfull, { + isFullscreen: { + get: function () { + return Boolean(document[fn.fullscreenElement]); + } + }, + element: { + enumerable: true, + get: function () { + return document[fn.fullscreenElement]; + } + }, + enabled: { + enumerable: true, + get: function () { + // Coerce to boolean in case of old WebKit + return Boolean(document[fn.fullscreenEnabled]); + } + } + }); + + if (isCommonjs) { + module.exports = screenfull; + } else { + window.screenfull = screenfull; + } +})(); From 8b9c274fdd7ce18102b3b560deb244e15cae4b17 Mon Sep 17 00:00:00 2001 From: Flo Date: Wed, 22 Mar 2017 22:27:19 +0100 Subject: [PATCH 240/257] Moved scripts to bottom in index.html --- index.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index 72326719..e2ad7acb 100644 --- a/index.html +++ b/index.html @@ -18,15 +18,6 @@ - - -
@@ -59,5 +50,14 @@ + + + From becb9fc43e36c30e89a3a6c4ab307490b9d4fc4f Mon Sep 17 00:00:00 2001 From: Flo Date: Wed, 22 Mar 2017 22:27:47 +0100 Subject: [PATCH 241/257] Updated CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe62971..2f7d7974 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added hideLoading option for News Feed module - Added configurable dateFormat to clock module. - Added multiple calendar icon support. +- Added meta tags to support fullscreen mode on iOS (for server mode) +- Added fullscreen toggle: within browser, clicking on the page turns it into fullscreen ### Fixed - Update .gitignore to not ignore default modules folder. From af0f1939a3e1c9ed135217e7433bb9d383d20249 Mon Sep 17 00:00:00 2001 From: Flo Date: Wed, 22 Mar 2017 22:28:51 +0100 Subject: [PATCH 242/257] Fixed lint errors --- js/screenfull.js | 68 ++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/js/screenfull.js b/js/screenfull.js index de20b55e..f0818493 100644 --- a/js/screenfull.js +++ b/js/screenfull.js @@ -4,58 +4,58 @@ * (c) Sindre Sorhus; MIT License */ (function () { - 'use strict'; + "use strict"; - var isCommonjs = typeof module !== 'undefined' && module.exports; - var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; + var isCommonjs = typeof module !== "undefined" && module.exports; + var keyboardAllowed = typeof Element !== "undefined" && "ALLOW_KEYBOARD_INPUT" in Element; var fn = (function () { var val; var fnMap = [ [ - 'requestFullscreen', - 'exitFullscreen', - 'fullscreenElement', - 'fullscreenEnabled', - 'fullscreenchange', - 'fullscreenerror' + "requestFullscreen", + "exitFullscreen", + "fullscreenElement", + "fullscreenEnabled", + "fullscreenchange", + "fullscreenerror" ], // new WebKit [ - 'webkitRequestFullscreen', - 'webkitExitFullscreen', - 'webkitFullscreenElement', - 'webkitFullscreenEnabled', - 'webkitfullscreenchange', - 'webkitfullscreenerror' + "webkitRequestFullscreen", + "webkitExitFullscreen", + "webkitFullscreenElement", + "webkitFullscreenEnabled", + "webkitfullscreenchange", + "webkitfullscreenerror" ], // old WebKit (Safari 5.1) [ - 'webkitRequestFullScreen', - 'webkitCancelFullScreen', - 'webkitCurrentFullScreenElement', - 'webkitCancelFullScreen', - 'webkitfullscreenchange', - 'webkitfullscreenerror' + "webkitRequestFullScreen", + "webkitCancelFullScreen", + "webkitCurrentFullScreenElement", + "webkitCancelFullScreen", + "webkitfullscreenchange", + "webkitfullscreenerror" ], [ - 'mozRequestFullScreen', - 'mozCancelFullScreen', - 'mozFullScreenElement', - 'mozFullScreenEnabled', - 'mozfullscreenchange', - 'mozfullscreenerror' + "mozRequestFullScreen", + "mozCancelFullScreen", + "mozFullScreenElement", + "mozFullScreenEnabled", + "mozfullscreenchange", + "mozfullscreenerror" ], [ - 'msRequestFullscreen', - 'msExitFullscreen', - 'msFullscreenElement', - 'msFullscreenEnabled', - 'MSFullscreenChange', - 'MSFullscreenError' + "msRequestFullscreen", + "msExitFullscreen", + "msFullscreenElement", + "msFullscreenEnabled", + "MSFullscreenChange", + "MSFullscreenError" ] ]; @@ -83,7 +83,7 @@ elem = elem || document.documentElement; // Work around Safari 5.1 bug: reports support for - // keyboard in fullscreen even though it doesn't. + // keyboard in fullscreen even though it doesn"t. // Browser sniffing, since the alternative with // setTimeout is even worse. if (/5\.1[.\d]* Safari/.test(navigator.userAgent)) { From b39113f0aefcb825b90305b98150f02d83ad89db Mon Sep 17 00:00:00 2001 From: Flo Date: Fri, 24 Mar 2017 23:10:05 +0100 Subject: [PATCH 243/257] Removed fullscreen toggle; is now own, configurable module --- index.html | 11 +--- js/screenfull.js | 150 ----------------------------------------------- 2 files changed, 1 insertion(+), 160 deletions(-) delete mode 100644 js/screenfull.js diff --git a/index.html b/index.html index e2ad7acb..85951a85 100644 --- a/index.html +++ b/index.html @@ -19,7 +19,7 @@ var version = "#VERSION#"; - +
@@ -50,14 +50,5 @@ - - - diff --git a/js/screenfull.js b/js/screenfull.js deleted file mode 100644 index f0818493..00000000 --- a/js/screenfull.js +++ /dev/null @@ -1,150 +0,0 @@ -/*! -* screenfull -* v3.0.2 - 2017-03-13 -* (c) Sindre Sorhus; MIT License -*/ -(function () { - "use strict"; - - var isCommonjs = typeof module !== "undefined" && module.exports; - var keyboardAllowed = typeof Element !== "undefined" && "ALLOW_KEYBOARD_INPUT" in Element; - - var fn = (function () { - var val; - - var fnMap = [ - [ - "requestFullscreen", - "exitFullscreen", - "fullscreenElement", - "fullscreenEnabled", - "fullscreenchange", - "fullscreenerror" - ], - // new WebKit - [ - "webkitRequestFullscreen", - "webkitExitFullscreen", - "webkitFullscreenElement", - "webkitFullscreenEnabled", - "webkitfullscreenchange", - "webkitfullscreenerror" - - ], - // old WebKit (Safari 5.1) - [ - "webkitRequestFullScreen", - "webkitCancelFullScreen", - "webkitCurrentFullScreenElement", - "webkitCancelFullScreen", - "webkitfullscreenchange", - "webkitfullscreenerror" - - ], - [ - "mozRequestFullScreen", - "mozCancelFullScreen", - "mozFullScreenElement", - "mozFullScreenEnabled", - "mozfullscreenchange", - "mozfullscreenerror" - ], - [ - "msRequestFullscreen", - "msExitFullscreen", - "msFullscreenElement", - "msFullscreenEnabled", - "MSFullscreenChange", - "MSFullscreenError" - ] - ]; - - var i = 0; - var l = fnMap.length; - var ret = {}; - - for (; i < l; i++) { - val = fnMap[i]; - if (val && val[1] in document) { - for (i = 0; i < val.length; i++) { - ret[fnMap[0][i]] = val[i]; - } - return ret; - } - } - - return false; - })(); - - var screenfull = { - request: function (elem) { - var request = fn.requestFullscreen; - - elem = elem || document.documentElement; - - // Work around Safari 5.1 bug: reports support for - // keyboard in fullscreen even though it doesn"t. - // Browser sniffing, since the alternative with - // setTimeout is even worse. - if (/5\.1[.\d]* Safari/.test(navigator.userAgent)) { - elem[request](); - } else { - elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); - } - }, - exit: function () { - document[fn.exitFullscreen](); - }, - toggle: function (elem) { - if (this.isFullscreen) { - this.exit(); - } else { - this.request(elem); - } - }, - onchange: function (callback) { - document.addEventListener(fn.fullscreenchange, callback, false); - }, - onerror: function (callback) { - document.addEventListener(fn.fullscreenerror, callback, false); - }, - raw: fn - }; - - if (!fn) { - if (isCommonjs) { - module.exports = false; - } else { - window.screenfull = false; - } - - return; - } - - Object.defineProperties(screenfull, { - isFullscreen: { - get: function () { - return Boolean(document[fn.fullscreenElement]); - } - }, - element: { - enumerable: true, - get: function () { - return document[fn.fullscreenElement]; - } - }, - enabled: { - enumerable: true, - get: function () { - // Coerce to boolean in case of old WebKit - return Boolean(document[fn.fullscreenEnabled]); - } - } - }); - - if (isCommonjs) { - module.exports = screenfull; - } else { - window.screenfull = screenfull; - } -})(); From 455819566b78dc6cf7c4d1947a62dfb1c9b74f9f Mon Sep 17 00:00:00 2001 From: Flo Date: Fri, 24 Mar 2017 23:13:08 +0100 Subject: [PATCH 244/257] Update CHANGELOG.md --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f7d7974..53b534f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,7 +56,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added configurable dateFormat to clock module. - Added multiple calendar icon support. - Added meta tags to support fullscreen mode on iOS (for server mode) -- Added fullscreen toggle: within browser, clicking on the page turns it into fullscreen ### Fixed - Update .gitignore to not ignore default modules folder. From 9ad22d7405d2b6635456ada82c424f37245f3b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 26 Mar 2017 16:13:54 -0300 Subject: [PATCH 245/257] Add link more information timezone information for configuracion in clock module. --- modules/default/clock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index f518a2b2..cf7c5de8 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -37,4 +37,4 @@ The following properties can be configured: | `secondsColor` | **Specific to the analog clock.** Specifies what color to make the 'seconds' hand.

**Possible values:** `any HTML RGB Color`
**Default value:** `#888888` | `analogPlacement` | **Specific to the analog clock. _(requires displayType set to `'both'`)_** Specifies where the analog clock is in relation to the digital clock

**Possible values:** `top`, `right`, `bottom`, or `left`
**Default value:** `bottom` | `analogShowDate` | **Specific to the analog clock.** If the clock is used as a separate module and set to analog only, this configures whether a date is also displayed with the clock.

**Possible values:** `false`, `top`, or `bottom`
**Default value:** `top` -| `timezone` | Specific a timezone to show clock.

**Possible examples values:** `America/New_York`, `America/Santiago`, `Etc/GMT+10`
**Default value:** `none` +| `timezone` | Specific a timezone to show clock.

**Possible examples values:** `America/New_York`, `America/Santiago`, `Etc/GMT+10`
**Default value:** `none`. See more informations about configuration value [here](https://momentjs.com/timezone/docs/#/data-formats/packed-format/) From 4b4c3ddb2f973d587345a4e146f502af17e6571a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 27 Mar 2017 02:01:42 -0300 Subject: [PATCH 246/257] Add changelog test MM_PORT --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6efc82c..6ee76be7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added multiple calendar icon support. - Added meta tags to support fullscreen mode on iOS (for server mode) - Added `ignoreOldItems` and `ignoreOlderThan` options to the News Feed module +- Added test for MM_PORT enviroment variable. ### Fixed - Update .gitignore to not ignore default modules folder. From f4509e24c66b16107694fd022717cc34743905c0 Mon Sep 17 00:00:00 2001 From: Johan Hammar Date: Tue, 28 Mar 2017 22:02:30 +0200 Subject: [PATCH 247/257] Added a week section to the clock module --- modules/default/clock/README.md | 1 + modules/default/clock/clock.js | 18 ++++++++++- tests/configs/modules/clock/clock_showWeek.js | 32 +++++++++++++++++++ tests/e2e/modules/clock_spec.js | 21 ++++++++++++ translations/en.json | 2 ++ translations/sv.json | 2 ++ 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 tests/configs/modules/clock/clock_showWeek.js diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index f518a2b2..5c803316 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -30,6 +30,7 @@ The following properties can be configured: | `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase.

**Possible values:** `true` or `false`
**Default value:** `false` | `clockBold` | Remove the colon and bold the minutes to make a more modern look.

**Possible values:** `true` or `false`
**Default value:** `false` | `showDate` | Turn off or on the Date section.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showWeek` | Turn off or on the Week section.

**Possible values:** `true` or `false`
**Default value:** `false` | `dateFormat` | Configure the date format as you like.

**Possible values:** [Docs](http://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | `displayType` | Display a digital clock, analog clock, or both together.

**Possible values:** `digital`, `analog`, or `both`
**Default value:** `digital` | `analogSize` | **Specific to the analog clock.** Defines how large the analog display is.

**Possible values:** A positive number of pixels`
**Default value:** `200px` diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 21e665e7..761f3948 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -16,6 +16,7 @@ Module.register("clock",{ showPeriodUpper: false, clockBold: false, showDate: true, + showWeek: false, dateFormat: "dddd, LL", /* specific to the analog clock */ @@ -61,10 +62,12 @@ Module.register("clock",{ var timeWrapper = document.createElement("div"); var secondsWrapper = document.createElement("sup"); var periodWrapper = document.createElement("span"); + var weekWrapper = document.createElement("div") // Style Wrappers dateWrapper.className = "date normal medium"; timeWrapper.className = "time bright large light"; secondsWrapper.className = "dimmed"; + weekWrapper.className = "week dimmed medium" // Set content of wrappers. // The moment().format("h") method has a bug on the Raspberry Pi. @@ -90,6 +93,9 @@ Module.register("clock",{ if(this.config.showDate){ dateWrapper.innerHTML = now.format(this.config.dateFormat); } + if (this.config.showWeek) { + weekWrapper.innerHTML = this.translate("WEEK") + " " + now.week(); + } timeWrapper.innerHTML = timeString; secondsWrapper.innerHTML = now.format("ss"); if (this.config.showPeriodUpper) { @@ -172,16 +178,25 @@ Module.register("clock",{ // Display only a digital clock wrapper.appendChild(dateWrapper); wrapper.appendChild(timeWrapper); + wrapper.appendChild(weekWrapper); } else if (this.config.displayType === "analog") { // Display only an analog clock dateWrapper.style.textAlign = "center"; - dateWrapper.style.paddingBottom = "15px"; + + if (this.config.showWeek) { + weekWrapper.style.paddingBottom = "15px"; + } else { + dateWrapper.style.paddingBottom = "15px"; + } + if (this.config.analogShowDate === "top") { wrapper.appendChild(dateWrapper); + wrapper.appendChild(weekWrapper); wrapper.appendChild(clockCircle); } else if (this.config.analogShowDate === "bottom") { wrapper.appendChild(clockCircle); wrapper.appendChild(dateWrapper); + wrapper.appendChild(weekWrapper); } else { wrapper.appendChild(clockCircle); } @@ -198,6 +213,7 @@ Module.register("clock",{ digitalWrapper.style.cssFloat = "none"; digitalWrapper.appendChild(dateWrapper); digitalWrapper.appendChild(timeWrapper); + digitalWrapper.appendChild(weekWrapper); var appendClocks = function(condition, pos1, pos2) { var padding = [0,0,0,0]; diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js new file mode 100644 index 00000000..8a5f305a --- /dev/null +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config for default clock module + * + * By Johan Hammar + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "clock", + position: "middle_center", + config: { + showWeek: true + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 8c6d9ff6..a24b38d6 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -100,4 +100,25 @@ describe("Clock module", function () { }); }); + describe("with showWeek config enabled", function() { + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showWeek.js"; + }); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("shows week with correct format", function() { + const weekRegex = /^Week [0-9]{1,2}$/; + return app.client.waitUntilWindowLoaded() + .getText(".clock .week").should.eventually.match(weekRegex); + }); + }); + }); diff --git a/translations/en.json b/translations/en.json index 46061738..a1472cf1 100644 --- a/translations/en.json +++ b/translations/en.json @@ -7,6 +7,8 @@ "RUNNING": "Ends in", "EMPTY": "No upcoming events.", + "WEEK": "Week", + "N": "N", "NNE": "NNE", "NE": "NE", diff --git a/translations/sv.json b/translations/sv.json index 1fe3d48d..8025e51e 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -7,6 +7,8 @@ "RUNNING": "Slutar", "EMPTY": "Inga kommande händelser.", + "WEEK": "Vecka", + "N": "N", "NNE": "NNO", "NE": "NO", From 44f50eba5bbd0645becf94201b2f7c876a7897ee Mon Sep 17 00:00:00 2001 From: Johan Hammar Date: Tue, 28 Mar 2017 22:30:48 +0200 Subject: [PATCH 248/257] Updated changelog with information about the new week section of the clock module --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb328821..0801c54e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added multiple calendar icon support. - Added meta tags to support fullscreen mode on iOS (for server mode) - Added `ignoreOldItems` and `ignoreOlderThan` options to the News Feed module +- Added a configurable Week section to the clock module. ### Fixed - Update .gitignore to not ignore default modules folder. From cc9a4296896748fd3b7a95c8d65859ba1941ec8c Mon Sep 17 00:00:00 2001 From: Johan Hammar Date: Tue, 28 Mar 2017 22:44:47 +0200 Subject: [PATCH 249/257] Corrected minor typo --- js/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/server.js b/js/server.js index beb8b84c..c57b74f9 100644 --- a/js/server.js +++ b/js/server.js @@ -15,7 +15,7 @@ var fs = require("fs"); var helmet = require("helmet"); var Server = function(config, callback) { - console.log("Starting server op port " + config.port + " ... "); + console.log("Starting server on port " + config.port + " ... "); server.listen(config.port, config.address ? config.address : null); From 84046170901f81810d3fbc05fe4d4ffd1267e8f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Tue, 28 Mar 2017 17:57:34 -0300 Subject: [PATCH 250/257] Add translations es for Week --- translations/es.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/translations/es.json b/translations/es.json index 914a72ce..adee4dfc 100644 --- a/translations/es.json +++ b/translations/es.json @@ -7,6 +7,8 @@ "RUNNING": "Termina en", "EMPTY": "No hay eventos programados.", + "WEEK": "Semana", + "N": "N", "NNE": "NNE", "NE": "NE", From 945cbdd3a754fc8a233e645ecd8310f994e1e6d8 Mon Sep 17 00:00:00 2001 From: Yuri Date: Thu, 30 Mar 2017 14:47:16 +0800 Subject: [PATCH 251/257] Update zh_cn.json Add Chinese support updated. --- translations/zh_cn.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/translations/zh_cn.json b/translations/zh_cn.json index e7f69616..18fe4534 100644 --- a/translations/zh_cn.json +++ b/translations/zh_cn.json @@ -3,6 +3,7 @@ "TODAY": "今天", "TOMORROW": "明天", + "DAYAFTERTOMORROW": "后天", "RUNNING": "结束日期", "EMPTY": "没有更多的活动。", @@ -22,4 +23,8 @@ "WNW": "西偏北风", "NW": "西北风", "NNW": "北偏西风" + + "UPDATE_NOTIFICATION": "MagicMirror² 有新的更新", + "UPDATE_NOTIFICATION_MODULE": "模块 MODULE_NAME 可更新", + "UPDATE_INFO": "当前已安装版本为 COMMIT_COUNT 落后于分支 BRANCH_NAME " } From 9e5a4189d70a9ddab3a0b2d8fb72c414bf4b7c51 Mon Sep 17 00:00:00 2001 From: Yuri Date: Thu, 30 Mar 2017 14:48:21 +0800 Subject: [PATCH 252/257] Update zh_cn.json --- translations/zh_cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/zh_cn.json b/translations/zh_cn.json index 18fe4534..5efbb691 100644 --- a/translations/zh_cn.json +++ b/translations/zh_cn.json @@ -22,7 +22,7 @@ "W": "西风", "WNW": "西偏北风", "NW": "西北风", - "NNW": "北偏西风" + "NNW": "北偏西风", "UPDATE_NOTIFICATION": "MagicMirror² 有新的更新", "UPDATE_NOTIFICATION_MODULE": "模块 MODULE_NAME 可更新", From 73458078717a8b01ab05547d850bbed4af05328c Mon Sep 17 00:00:00 2001 From: Johan Hammar Date: Thu, 30 Mar 2017 21:15:51 +0200 Subject: [PATCH 253/257] Updated documentation and fixed typos for the newsfeed module. Fixes GH-804 --- modules/default/newsfeed/newsfeed.js | 13 ++++++------- modules/default/newsfeed/node_helper.js | 11 +++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index b7ec2f58..b230fdb1 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -44,9 +44,9 @@ Module.register("newsfeed",{ // Define required translations. getTranslations: function() { - // The translations for the defaut modules are defined in the core translation files. - // Therefor we can just return false. Otherwise we should have returned a dictionairy. - // If you're trying to build yiur own module including translations, check out the documentation. + // The translations for the default modules are defined in the core translation files. + // Therefor we can just return false. Otherwise we should have returned a dictionary. + // If you're trying to build your own module including translations, check out the documentation. return false; }, @@ -204,7 +204,6 @@ Module.register("newsfeed",{ /* registerFeeds() * registers the feeds to be used by the backend. */ - registerFeeds: function() { for (var f in this.config.feeds) { var feed = this.config.feeds[f]; @@ -215,10 +214,10 @@ Module.register("newsfeed",{ } }, - /* registerFeeds() + /* generateFeed() * Generate an ordered list of items for this configured module. * - * attribute feeds object - An object with feeds returned by the nod helper. + * attribute feeds object - An object with feeds returned by the node helper. */ generateFeed: function(feeds) { var newsItems = []; @@ -262,7 +261,7 @@ Module.register("newsfeed",{ return false; }, - /* subscribedToFeed(feedUrl) + /* titleForFeed(feedUrl) * Returns title for a specific feed Url. * * attribute feedUrl string - Url of the feed to check. diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index e5243304..af1d32b8 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -24,14 +24,13 @@ module.exports = NodeHelper.create({ } }, - /* createFetcher(url, reloadInterval) - * Creates a fetcher for a new url if it doesn't exist yet. - * Otherwise it reoses the existing one. + /* createFetcher(feed, config) + * Creates a fetcher for a new feed if it doesn't exist yet. + * Otherwise it reuses the existing one. * - * attribute url string - URL of the news feed. - * attribute reloadInterval number - Reload interval in milliseconds. + * attribute feed object - A feed object. + * attribute config object - A configuration object containing reload interval in milliseconds. */ - createFetcher: function(feed, config) { var self = this; From ef9157174c0d38e280c85349298291c3da04af58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Thu, 30 Mar 2017 16:32:51 -0300 Subject: [PATCH 254/257] Fix broken next test: Now after ran the test MM_PORT of test case for change of port the enviroment variable is deleted. --- tests/e2e/port_config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index e44a2207..44c6b498 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -36,6 +36,10 @@ describe("port directive configuration", function () { // Set config sample for use in this test process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; }); + + after(function(){ + delete process.env.MM_PORT; + }); it("should return 200", function (done) { request.get("http://localhost:8100", function (err, res, body) { expect(res.statusCode).to.equal(200); From 47c356692f4941fad62952a3b4f5d90658883e55 Mon Sep 17 00:00:00 2001 From: Johan Hammar Date: Thu, 30 Mar 2017 22:14:11 +0200 Subject: [PATCH 255/257] Fix a few more typos --- modules/default/calendar/calendar.js | 8 ++++---- modules/default/currentweather/currentweather.js | 4 ++-- modules/default/weatherforecast/weatherforecast.js | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index d2e64cc7..12ce290f 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -54,8 +54,8 @@ Module.register("calendar", { // Define required translations. getTranslations: function () { - // The translations for the defaut modules are defined in the core translation files. - // Therefor we can just return false. Otherwise we should have returned a dictionairy. + // The translations for the default modules are defined in the core translation files. + // Therefor we can just return false. Otherwise we should have returned a dictionary. // If you're trying to build your own module including translations, check out the documentation. return false; }, @@ -409,11 +409,11 @@ Module.register("calendar", { }, /* shorten(string, maxLength) - * Shortens a string if it's longer than maxLenthg. + * Shortens a string if it's longer than maxLength. * Adds an ellipsis to the end. * * argument string string - The string to shorten. - * argument maxLength number - The max lenth of the string. + * argument maxLength number - The max length of the string. * * return string - The shortened string. */ diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 1b55e255..6e23cdcf 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -79,8 +79,8 @@ Module.register("currentweather",{ // Define required translations. getTranslations: function() { - // The translations for the defaut modules are defined in the core translation files. - // Therefor we can just return false. Otherwise we should have returned a dictionairy. + // The translations for the default modules are defined in the core translation files. + // Therefor we can just return false. Otherwise we should have returned a dictionary. // If you're trying to build yiur own module including translations, check out the documentation. return false; }, diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index b269a44a..b8321b17 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -77,8 +77,8 @@ Module.register("weatherforecast",{ // Define required translations. getTranslations: function() { - // The translations for the defaut modules are defined in the core translation files. - // Therefor we can just return false. Otherwise we should have returned a dictionairy. + // The translations for the default modules are defined in the core translation files. + // Therefor we can just return false. Otherwise we should have returned a dictionary. // If you're trying to build yiur own module including translations, check out the documentation. return false; }, From 597a7f7b407b42c766a9f401348d4a651a5d71be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 1 Apr 2017 15:45:39 -0300 Subject: [PATCH 256/257] Bugfix introduced into bb08fe8113e37a6a44dc3ab4ca64fcf8a3ec200e This is work on Pull Request #803 and help of @johanhammar and @fewieden --- vendor/vendor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/vendor.js b/vendor/vendor.js index 7076cc45..953921d3 100644 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -9,7 +9,7 @@ var vendor = { "moment.js" : "node_modules/moment/min/moment-with-locales.js", - "moment-timezone.js" : "node_modules/moment-timezone/moment-timezone.js", + "moment-timezone.js" : "node_modules/moment-timezone/builds/moment-timezone-with-data.js", "weather-icons.css": "node_modules/weathericons/css/weather-icons.css", "weather-icons-wind.css": "node_modules/weathericons/css/weather-icons-wind.css", "font-awesome.css": "node_modules/font-awesome/css/font-awesome.min.css" From 5436050df1095c9f8b790f5abf816fb549252968 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Apr 2017 21:49:52 +0200 Subject: [PATCH 257/257] Prepare for release. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f81b4a6..ccf6eba1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [2.1.1] - Unreleased +## [2.1.1] - 2017-04-01 **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`