From 818ed5d1894d84e512e81c6b2d9c0a2bc7e58fc2 Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Sun, 12 Jan 2020 20:15:04 +0100 Subject: [PATCH 001/219] Add different GitHub repos This commit adds the official docker image repo as well as the installation scripts repo to the issue template to avoid the creation of issue which don't belong to the MagicMirror core. --- .github/ISSUE_TEMPLATE.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 736795d7..897cfb41 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,8 +1,21 @@ -Please only submit reproducible issues. - +## I'm not sure if this is a bug If you're not sure if it's a real bug or if it's just you, please open a topic on the forum: [https://forum.magicmirror.builders/category/15/bug-hunt](https://forum.magicmirror.builders/category/15/bug-hunt) + +## I'm having troubles installing or configuring MagicMirror Problems installing or configuring your MagicMirror? Check out: [https://forum.magicmirror.builders/category/10/troubleshooting](https://forum.magicmirror.builders/category/10/troubleshooting) +## I found a bug in the official MagicMirror Docker image +If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the GitHub repository of the official MagicMirror Docker image: +[https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) + +## I found a bug in the official MagicMirror installer +If you are facing an issue or found a bug while trying to install MagicMirror via the official installer please report it in the respective GitHub repository: +[https://github.com/sdetweil/MagicMirror_scripts](https://github.com/sdetweil/MagicMirror_scripts) + +--- + +## I found a bug in MagicMirror +Please make sure to only submit reproducible issues. You can safely remove everything above dividing line. When submitting a new issue, please supply the following information: **Platform**: Place your platform here... give us your web browser/Electron version *and* your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). From 61256f98ca0dcf3801dc4b10e7bd5c3285c2027b Mon Sep 17 00:00:00 2001 From: Sebastian Limbach Date: Mon, 13 Jan 2020 09:40:38 +0100 Subject: [PATCH 002/219] Fix typo --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 897cfb41..9cd28f10 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -15,7 +15,7 @@ If you are facing an issue or found a bug while trying to install MagicMirror vi --- ## I found a bug in MagicMirror -Please make sure to only submit reproducible issues. You can safely remove everything above dividing line. +Please make sure to only submit reproducible issues. You can safely remove everything above the dividing line. When submitting a new issue, please supply the following information: **Platform**: Place your platform here... give us your web browser/Electron version *and* your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). From 1fd5fd4832296d750fefffc18a78fa68b121e604 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Tue, 14 Jan 2020 09:20:50 +0100 Subject: [PATCH 003/219] Update ISSUE_TEMPLATE.md --- .github/ISSUE_TEMPLATE.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 9cd28f10..43d92597 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -4,14 +4,14 @@ If you're not sure if it's a real bug or if it's just you, please open a topic o ## I'm having troubles installing or configuring MagicMirror Problems installing or configuring your MagicMirror? Check out: [https://forum.magicmirror.builders/category/10/troubleshooting](https://forum.magicmirror.builders/category/10/troubleshooting) -## I found a bug in the official MagicMirror Docker image -If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the GitHub repository of the official MagicMirror Docker image: -[https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) - -## I found a bug in the official MagicMirror installer -If you are facing an issue or found a bug while trying to install MagicMirror via the official installer please report it in the respective GitHub repository: +## I found a bug in the MagicMirror installer +If you are facing an issue or found a bug while trying to install MagicMirror via the installer please report it in the respective GitHub repository: [https://github.com/sdetweil/MagicMirror_scripts](https://github.com/sdetweil/MagicMirror_scripts) +## I found a bug in the MagicMirror Docker image +If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the GitHub repository of the MagicMirror Docker image: +[https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) + --- ## I found a bug in MagicMirror @@ -20,9 +20,9 @@ When submitting a new issue, please supply the following information: **Platform**: Place your platform here... give us your web browser/Electron version *and* your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). -**Node Version**: Make sure it's version 0.12.13 or later. +**Node Version**: Make sure it's version 8 or later. -**MagicMirror Version**: Now that the versions have split, tell us if you are using the PHP version (v1) or the newer JavaScript version (v2). +**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.log` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. From 81aab7e86f7ea5dfbc0de2ea2b09857723527f39 Mon Sep 17 00:00:00 2001 From: Adi Miller Date: Thu, 16 Jan 2020 16:26:20 +0200 Subject: [PATCH 004/219] Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. --- CHANGELOG.md | 3 +- .../default/currentweather/currentweather.js | 55 ++++++++++--------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7e63e7e..476264b8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - cleanup installers folder, remove externalized scripts ### Added -- Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". +- Finish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". +- Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 7d917132..dcf771af 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -44,6 +44,7 @@ Module.register("currentweather",{ calendarClass: "calendar", onlyTemp: false, + hideTemp: false, roundTemp: false, iconTable: { @@ -194,36 +195,38 @@ Module.register("currentweather",{ var large = document.createElement("div"); large.className = "large light"; - var weatherIcon = document.createElement("span"); - weatherIcon.className = "wi weathericon " + this.weatherType; - large.appendChild(weatherIcon); + if (this.config.hideTemp === true) { + var weatherIcon = document.createElement("span"); + weatherIcon.className = "wi weathericon " + this.weatherType; + large.appendChild(weatherIcon); - var degreeLabel = ""; - if (this.config.units === "metric" || this.config.units === "imperial") { - 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.units === "metric" || this.config.units === "imperial") { + degreeLabel += "°"; + } + if(this.config.degreeLabel) { + switch(this.config.units) { + case "metric": + degreeLabel += "C"; + break; + case "imperial": + degreeLabel += "F"; + break; + case "default": + degreeLabel += "K"; + break; + } } - } - if (this.config.decimalSymbol === "") { - this.config.decimalSymbol = "."; - } + if (this.config.decimalSymbol === "") { + this.config.decimalSymbol = "."; + } - var temperature = document.createElement("span"); - temperature.className = "bright"; - temperature.innerHTML = " " + this.temperature.replace(".", this.config.decimalSymbol) + degreeLabel; - large.appendChild(temperature); + var temperature = document.createElement("span"); + temperature.className = "bright"; + temperature.innerHTML = " " + this.temperature.replace(".", this.config.decimalSymbol) + degreeLabel; + large.appendChild(temperature); + } if (this.config.showIndoorTemperature && this.indoorTemperature) { var indoorIcon = document.createElement("span"); From 63950f572a2ebc30fcad25fc2e52ca64679754a7 Mon Sep 17 00:00:00 2001 From: Adi Miller Date: Thu, 16 Jan 2020 16:47:49 +0200 Subject: [PATCH 005/219] Adding trailing enter to avoid build warning. --- modules/default/alert/README.md | 2 +- modules/default/calendar/README.md | 2 +- modules/default/clock/README.md | 2 +- modules/default/compliments/README.md | 2 +- modules/default/currentweather/README.md | 2 +- modules/default/helloworld/README.md | 2 +- modules/default/newsfeed/README.md | 2 +- modules/default/updatenotification/README.md | 2 +- modules/default/weather/README.md | 2 +- modules/default/weatherforecast/README.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 3bd5d00d..4d3c6a65 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -1,4 +1,4 @@ # Module: Alert The alert module is one of the default modules of the MagicMirror. This module displays notifications from other modules. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index fbb8bfd9..5c8f187b 100755 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -2,4 +2,4 @@ The `calendar` module is one of the default modules of the MagicMirror. This module displays events from a public .ical calendar. It can combine multiple calendars. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 1c0bdf8c..34a1448d 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -2,4 +2,4 @@ The `clock` module is one of the default modules of the MagicMirror. This module displays the current date and time. The information will be updated realtime. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index 7825bb02..c746f318 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -2,4 +2,4 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 3cbdcbea..27b047da 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -2,4 +2,4 @@ The `currentweather` module is one of the default modules of the MagicMirror. This module displays the current weather, including the windspeed, the sunset or sunrise time, the temperature and an icon to display the current conditions. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index aa9f87f3..8ad06f77 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -1,4 +1,4 @@ # Module: Hello World The `helloworld` module is one of the default modules of the MagicMirror. It is a simple way to display a static text on the mirror. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 4dc4877b..33690aa6 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -2,4 +2,4 @@ The `newsfeed ` module is one of the default modules of the MagicMirror. 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. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index 652f451f..af6305e6 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -2,4 +2,4 @@ The `updatenotification` module is one of the default modules of the MagicMirror. This will display a message whenever a new version of the MagicMirror application is available. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index 5b03b141..ebc301f4 100755 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -2,4 +2,4 @@ This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 95762daa..7dfbd16f 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -2,4 +2,4 @@ The `weatherforecast` module is one of the default modules of the MagicMirror. This module displays the weather forecast for the coming week, including an an icon to display the current conditions, the minimum temperature and the maximum temperature. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). From 8aa745471b4b8d77909a780bfef43f23cdce9375 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Fri, 17 Jan 2020 22:53:14 -0600 Subject: [PATCH 006/219] fix: Issue #1798 - fixing recurrent calendar events crosstime DST --- config/config.js.sample | 4 +- modules/default/calendar/calendarfetcher.js | 9 +- .../calendar/vendor/ical.js/node-ical.js | 15 +- modules/default/compliments/compliments.js | 22 +-- .../weather/forecastweather_default.js | 46 ++--- .../weather/forecastweather_options.js | 52 ++--- tests/e2e/modules/mocks/weather_current.js | 98 +++++----- tests/e2e/modules/mocks/weather_forecast.js | 184 +++++++++--------- tests/e2e/vendor_spec.js | 8 +- vendor/package-lock.json | 25 +-- 10 files changed, 235 insertions(+), 228 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index 115e2dd2..1d780e23 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -25,11 +25,11 @@ var config = { timeFormat: 24, units: "metric", // serverOnly: true/false/"local" , - // local for armv6l processors, default + // local for armv6l processors, default // starts serveronly and then starts chrome browser // false, default for all NON-armv6l devices // true, force serveronly mode, because you want to.. no UI on this device - + modules: [ { module: "alert", diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index d705905c..57c1586d 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -184,7 +184,14 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri // For recurring events, get the set of start dates that fall within the range // of dates we"re looking for. - var dates = rule.between(past, future, true, limitFunction); + // kblankenship1989 - to fix issue #1798, converting all dates to locale time first, then converting back to UTC time + var pastLocal = moment(past).subtract(past.getTimezoneOffset(), "minutes").toDate(); + var futureLocal = moment(past).subtract(future.getTimezoneOffset(), "minutes").toDate(); + var datesLocal = rule.between(pastLocal, futureLocal, true, limitFunction); + var dates = datesLocal.map(function(dateLocal) { + var date = moment(dateLocal).add(dateLocal.getTimezoneOffset(), "minutes").toDate(); + return date; + }); // The "dates" array contains the set of dates within our desired date range range that are valid // for the recurrence rule. *However*, it"s possible for us to have a specific recurrence that diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index 14855d63..1da04375 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -26,6 +26,17 @@ exports.parseFile = function(filename){ var rrule = require('rrule').RRule +function getLocaleISOString(date) { + var year = date.getFullYear().toString(10).padStart(4,'0'); + var month = date.getMonth().toString(10).padStart(2,'0'); + var day = date.getDate().toString(10).padStart(2,'0'); + var hour = date.getHours().toString(10).padStart(2,'0'); + var minute = date.getMinutes().toString(10).padStart(2,'0'); + var second = date.getSeconds().toString(10).padStart(2,'0'); + + return `${year}${month}${day}T${hour}${minute}${second}Z`; +} + ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ curr.rrule = line; return curr @@ -50,8 +61,8 @@ ical.objectHandlers['END'] = function (val, params, curr, stack) { if (typeof curr.start.toISOString === 'function') { try { - rule += ';DTSTART=' + curr.start.toISOString().replace(/[-:]/g, ''); - rule = rule.replace(/\.[0-9]{3}/, ''); + // kblankenship1989 - to fix issue #1798, converting all dates to locale time first, then converting back to UTC time + rule += ';DTSTART=' + getLocaleISOString(curr.start); } catch (error) { console.error("ERROR when trying to convert to ISOString", error); } diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 198664b7..606da1df 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -39,7 +39,7 @@ Module.register("compliments", { afternoonEndTime: 17, random: true }, - lastIndexUsed:-1, + lastIndexUsed:-1, // Set currentweather from module currentWeatherType: "", @@ -151,7 +151,7 @@ Module.register("compliments", { // get the current time of day compliments list var compliments = this.complimentArray(); // variable for index to next message to display - let index=0 + let index=0; // are we randomizing if(this.config.random){ // yes @@ -160,28 +160,28 @@ Module.register("compliments", { else{ // no, sequetial // if doing sequential, don't fall off the end - index = (this.lastIndexUsed >= (compliments.length-1))?0: ++this.lastIndexUsed + index = (this.lastIndexUsed >= (compliments.length-1))?0: ++this.lastIndexUsed; } return compliments[index]; }, -// Override dom generator. + // Override dom generator. getDom: function() { var wrapper = document.createElement("div"); wrapper.className = this.config.classes ? this.config.classes : "thin xlarge bright pre-line"; - // get the compliment text + // get the compliment text var complimentText = this.randomCompliment(); - // split it into parts on newline text - var parts= complimentText.split('\n') + // split it into parts on newline text + var parts= complimentText.split("\n"); // create a span to hold it all - var compliment=document.createElement('span') - // process all the parts of the compliment text + var compliment=document.createElement("span"); + // process all the parts of the compliment text for (part of parts){ // create a text element for each part - compliment.appendChild(document.createTextNode(part)) + compliment.appendChild(document.createTextNode(part)); // add a break ` - compliment.appendChild(document.createElement('BR')) + compliment.appendChild(document.createElement("BR")); } // remove the last break compliment.lastElementChild.remove(); diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index 697cbeb4..c87ca260 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -6,31 +6,31 @@ */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - }, - }, + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, - modules: [ - { - module: "weather", - position: "bottom_bar", - config: { - type: "forecast", - location: "Munich", - apiKey: "fake key", - weatherEndpoint: "/forecast/daily", - initialLoadDelay: 3000 - } - } - ] + modules: [ + { + module: "weather", + position: "bottom_bar", + config: { + type: "forecast", + location: "Munich", + apiKey: "fake key", + weatherEndpoint: "/forecast/daily", + initialLoadDelay: 3000 + } + } + ] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index cc1b8773..82e3da08 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -6,34 +6,34 @@ */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - }, - }, + language: "en", + timeFormat: 12, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, - modules: [ - { - module: "weather", - position: "bottom_bar", - config: { - type: "forecast", - location: "Munich", - apiKey: "fake key", - weatherEndpoint: "/forecast/daily", - initialLoadDelay: 3000, - showPrecipitationAmount: true, - colored: true, - tableClass: "myTableClass" - } - } - ] + modules: [ + { + module: "weather", + position: "bottom_bar", + config: { + type: "forecast", + location: "Munich", + apiKey: "fake key", + weatherEndpoint: "/forecast/daily", + initialLoadDelay: 3000, + showPrecipitationAmount: true, + colored: true, + tableClass: "myTableClass" + } + } + ] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/e2e/modules/mocks/weather_current.js b/tests/e2e/modules/mocks/weather_current.js index cd87aa11..807ee559 100644 --- a/tests/e2e/modules/mocks/weather_current.js +++ b/tests/e2e/modules/mocks/weather_current.js @@ -1,54 +1,54 @@ -const _ = require('lodash'); +const _ = require("lodash"); function generateWeather(extendedData = {}) { - return JSON.stringify(_.merge({}, { - coord:{ - lon: 11.58, - lat: 48.14 - }, - weather:[ - { - id: 615, - main: "Snow", - description: "light rain and snow", - icon: "13d" - }, - { - id: 500, - main: "Rain", - description: "light rain", - icon: "10d" - } - ], - base: "stations", - main:{ - temp: 1.49, - pressure: 1005, - humidity: 93.7, - temp_min: 1, - temp_max: 2 - }, - visibility: 7000, - wind:{ - speed: 11.8, - deg: 250 - }, - clouds:{ - all: 75 - }, - dt: 1547387400, - sys:{ - type: 1, - id: 1267, - message: 0.0031, - country: "DE", - sunrise: 1547362817, - sunset: 1547394301 - }, - id: 2867714, - name: "Munich", - cod: 200 - }, extendedData)); + return JSON.stringify(_.merge({}, { + coord:{ + lon: 11.58, + lat: 48.14 + }, + weather:[ + { + id: 615, + main: "Snow", + description: "light rain and snow", + icon: "13d" + }, + { + id: 500, + main: "Rain", + description: "light rain", + icon: "10d" + } + ], + base: "stations", + main:{ + temp: 1.49, + pressure: 1005, + humidity: 93.7, + temp_min: 1, + temp_max: 2 + }, + visibility: 7000, + wind:{ + speed: 11.8, + deg: 250 + }, + clouds:{ + all: 75 + }, + dt: 1547387400, + sys:{ + type: 1, + id: 1267, + message: 0.0031, + country: "DE", + sunrise: 1547362817, + sunset: 1547394301 + }, + id: 2867714, + name: "Munich", + cod: 200 + }, extendedData)); } module.exports = generateWeather; diff --git a/tests/e2e/modules/mocks/weather_forecast.js b/tests/e2e/modules/mocks/weather_forecast.js index 420367a0..9e74262f 100644 --- a/tests/e2e/modules/mocks/weather_forecast.js +++ b/tests/e2e/modules/mocks/weather_forecast.js @@ -1,97 +1,97 @@ -const _ = require('lodash'); +const _ = require("lodash"); function generateWeatherForecast(extendedData = {}) { - return JSON.stringify(_.merge({}, { - "city": { - "id": 2867714, - "name": "Munich", - "coord": {"lon": 11.5754, "lat": 48.1371}, - "country": "DE", - "population": 1260391, - "timezone": 7200 - }, - "cod": "200", - "message": 0.9653487, - "cnt": 7, - "list": [{ - "dt": 1568372400, - "sunrise": 1568350044, - "sunset": 1568395948, - "temp": {"day": 24.44, "min": 15.35, "max": 24.44, "night": 15.35, "eve": 18, "morn": 23.03}, - "pressure": 1031.65, - "humidity": 70, - "weather": [{"id": 801, "main": "Clouds", "description": "few clouds", "icon": "02d"}], - "speed": 3.35, - "deg": 314, - "clouds": 21 - }, { - "dt": 1568458800, - "sunrise": 1568436525, - "sunset": 1568482223, - "temp": {"day": 20.81, "min": 13.56, "max": 21.02, "night": 13.56, "eve": 16.6, "morn": 15.88}, - "pressure": 1028.81, - "humidity": 72, - "weather": [{"id": 500, "main": "Rain", "description": "light rain", "icon": "10d"}], - "speed": 2.21, - "deg": 81, - "clouds": 100 - }, { - "dt": 1568545200, - "sunrise": 1568523007, - "sunset": 1568568497, - "temp": {"day": 22.65, "min": 13.76, "max": 22.88, "night": 15.27, "eve": 17.45, "morn": 13.76}, - "pressure": 1023.75, - "humidity": 64, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 1.15, - "deg": 7, - "clouds": 0 - }, { - "dt": 1568631600, - "sunrise": 1568609489, - "sunset": 1568654771, - "temp": {"day": 23.45, "min": 13.95, "max": 23.45, "night": 13.95, "eve": 17.75, "morn": 15.21}, - "pressure": 1020.41, - "humidity": 64, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 3.07, - "deg": 298, - "clouds": 7 - }, { - "dt": 1568718000, - "sunrise": 1568695970, - "sunset": 1568741045, - "temp": {"day": 20.55, "min": 10.95, "max": 20.55, "night": 10.95, "eve": 14.82, "morn": 13.24}, - "pressure": 1019.4, - "humidity": 66, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.8, - "deg": 333, - "clouds": 2 - }, { - "dt": 1568804400, - "sunrise": 1568782452, - "sunset": 1568827319, - "temp": {"day": 18.15, "min": 7.75, "max": 18.15, "night": 7.75, "eve": 12.45, "morn": 9.41}, - "pressure": 1017.56, - "humidity": 52, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.92, - "deg": 34, - "clouds": 0 - }, { - "dt": 1568890800, - "sunrise": 1568868934, - "sunset": 1568913593, - "temp": {"day": 14.85, "min": 5.56, "max": 15.05, "night": 5.56, "eve": 9.56, "morn": 6.25}, - "pressure": 1022.7, - "humidity": 59, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.89, - "deg": 51, - "clouds": 1 - }] - }, extendedData)); + return JSON.stringify(_.merge({}, { + "city": { + "id": 2867714, + "name": "Munich", + "coord": {"lon": 11.5754, "lat": 48.1371}, + "country": "DE", + "population": 1260391, + "timezone": 7200 + }, + "cod": "200", + "message": 0.9653487, + "cnt": 7, + "list": [{ + "dt": 1568372400, + "sunrise": 1568350044, + "sunset": 1568395948, + "temp": {"day": 24.44, "min": 15.35, "max": 24.44, "night": 15.35, "eve": 18, "morn": 23.03}, + "pressure": 1031.65, + "humidity": 70, + "weather": [{"id": 801, "main": "Clouds", "description": "few clouds", "icon": "02d"}], + "speed": 3.35, + "deg": 314, + "clouds": 21 + }, { + "dt": 1568458800, + "sunrise": 1568436525, + "sunset": 1568482223, + "temp": {"day": 20.81, "min": 13.56, "max": 21.02, "night": 13.56, "eve": 16.6, "morn": 15.88}, + "pressure": 1028.81, + "humidity": 72, + "weather": [{"id": 500, "main": "Rain", "description": "light rain", "icon": "10d"}], + "speed": 2.21, + "deg": 81, + "clouds": 100 + }, { + "dt": 1568545200, + "sunrise": 1568523007, + "sunset": 1568568497, + "temp": {"day": 22.65, "min": 13.76, "max": 22.88, "night": 15.27, "eve": 17.45, "morn": 13.76}, + "pressure": 1023.75, + "humidity": 64, + "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], + "speed": 1.15, + "deg": 7, + "clouds": 0 + }, { + "dt": 1568631600, + "sunrise": 1568609489, + "sunset": 1568654771, + "temp": {"day": 23.45, "min": 13.95, "max": 23.45, "night": 13.95, "eve": 17.75, "morn": 15.21}, + "pressure": 1020.41, + "humidity": 64, + "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], + "speed": 3.07, + "deg": 298, + "clouds": 7 + }, { + "dt": 1568718000, + "sunrise": 1568695970, + "sunset": 1568741045, + "temp": {"day": 20.55, "min": 10.95, "max": 20.55, "night": 10.95, "eve": 14.82, "morn": 13.24}, + "pressure": 1019.4, + "humidity": 66, + "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], + "speed": 2.8, + "deg": 333, + "clouds": 2 + }, { + "dt": 1568804400, + "sunrise": 1568782452, + "sunset": 1568827319, + "temp": {"day": 18.15, "min": 7.75, "max": 18.15, "night": 7.75, "eve": 12.45, "morn": 9.41}, + "pressure": 1017.56, + "humidity": 52, + "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], + "speed": 2.92, + "deg": 34, + "clouds": 0 + }, { + "dt": 1568890800, + "sunrise": 1568868934, + "sunset": 1568913593, + "temp": {"day": 14.85, "min": 5.56, "max": 15.05, "night": 5.56, "eve": 9.56, "morn": 6.25}, + "pressure": 1022.7, + "humidity": 59, + "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], + "speed": 2.89, + "deg": 51, + "clouds": 1 + }] + }, extendedData)); } module.exports = generateWeatherForecast; diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 7e53ec5b..834c90d6 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -36,9 +36,9 @@ describe("Vendors", function () { urlVendor = "http://localhost:8080/vendor/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { if (!err) - expect(res.statusCode).to.equal(200); + {expect(res.statusCode).to.equal(200);} else - mlog.pending(`There error vendor 200 test ${err}`); + {mlog.pending(`There error vendor 200 test ${err}`);} }); }); }); @@ -48,9 +48,9 @@ describe("Vendors", function () { urlVendor = "http://localhost:8080/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { if (!err) - expect(res.statusCode).to.equal(404); + {expect(res.statusCode).to.equal(404);} else - mlog.pending(`There error vendor 404 test ${err}`); + {mlog.pending(`There error vendor 404 test ${err}`);} }); }); }); diff --git a/vendor/package-lock.json b/vendor/package-lock.json index 3253cc4e..61c1d19e 100644 --- a/vendor/package-lock.json +++ b/vendor/package-lock.json @@ -703,7 +703,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "optional": true, "requires": { "is-glob": "^2.0.0" } @@ -717,8 +716,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "optional": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "invert-kv": { "version": "1.0.0", @@ -737,8 +735,7 @@ "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "optional": true + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" }, "is-dotfile": { "version": "1.0.3", @@ -764,8 +761,7 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "optional": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -779,7 +775,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -808,8 +803,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isobject": { "version": "2.1.0", @@ -824,7 +818,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -890,7 +883,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -1039,14 +1031,12 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "optional": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "optional": true + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { "version": "1.6.1", @@ -1057,8 +1047,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "optional": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "set-immediate-shim": { "version": "1.0.1", From 762bae907c3b629234d3d18d042ea9150b402d80 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Fri, 17 Jan 2020 23:04:51 -0600 Subject: [PATCH 007/219] perf: updating changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7e63e7e..da66c6c3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) +- Fix calendar time offset for recurring evenst crossing DST (ISSUE #1798) ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). From 84f74c53b5311df731fe81ba813f6dea11485726 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Fri, 17 Jan 2020 23:08:34 -0600 Subject: [PATCH 008/219] perf: fix wording on changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da66c6c3..dc55134e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) -- Fix calendar time offset for recurring evenst crossing DST (ISSUE #1798) +- Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). From 08b9e7b5b5dcd969da116e383647c403fb1f7bbc Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Fri, 17 Jan 2020 21:52:04 -0800 Subject: [PATCH 009/219] add sun/moon rise/set times Icons become bold when the object is above the horizon. Also shows percent of moon illumination. --- CHANGELOG.md | 1 + modules/default/clock/clock.js | 38 +++++++++++++++++++++++++- modules/default/clock/clock_styles.css | 7 +++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7e63e7e..2549defb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". +- Sun and Moon data to the `clock` module. ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index d566c52f..4eb7a6d3 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -26,10 +26,15 @@ Module.register("clock",{ analogShowDate: "top", // options: false, 'top', or 'bottom' secondsColor: "#888888", timezone: null, + + showSunTimes: false, + showMoonTimes: false, + lat: 47.630539, + lon: -122.344147, }, // Define required scripts. getScripts: function() { - return ["moment.js", "moment-timezone.js"]; + return ["moment.js", "moment-timezone.js", "suncalc.js"]; }, // Define styles. getStyles: function() { @@ -93,11 +98,15 @@ Module.register("clock",{ var timeWrapper = document.createElement("div"); var secondsWrapper = document.createElement("sup"); var periodWrapper = document.createElement("span"); + var sunWrapper = document.createElement("div"); + var moonWrapper = document.createElement("div"); var weekWrapper = document.createElement("div"); // Style Wrappers dateWrapper.className = "date normal medium"; timeWrapper.className = "time bright large light"; secondsWrapper.className = "dimmed"; + sunWrapper.className = "sun dimmed small"; + moonWrapper.className = "moon dimmed small"; weekWrapper.className = "week dimmed medium"; // Set content of wrappers. @@ -142,6 +151,29 @@ Module.register("clock",{ timeWrapper.appendChild(periodWrapper); } + function formatTime(config, time) { + var formatString = hourSymbol + ':mm'; + if (config.showPeriod && config.timeFormat !== 24) { + formatString += config.showPeriodUpper ? 'A' : 'a'; + } + return moment(time).format(formatString); + } + if (this.config.showSunTimes) { + const sunTimes = SunCalc.getTimes(now, this.config.lat, this.config.lon); + const isVisible = now.isBetween(sunTimes.sunrise, sunTimes.sunset); + sunWrapper.innerHTML = '' + + '' + formatTime(this.config, sunTimes.sunrise) + '' + + '' + formatTime(this.config, sunTimes.sunset) + ''; + } + if (this.config.showMoonTimes) { + const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); + const moonTimes = SunCalc.getMoonTimes(now, this.config.lat, this.config.lon); + const isVisible = now.isBetween(moonTimes.rise, moonTimes.set); + moonWrapper.innerHTML = ' ' + moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}) + '' + + ' ' + formatTime(this.config, moonTimes.rise) + ''+ + ' ' + formatTime(this.config, moonTimes.set) + ''; + } + /**************************************************************** * Create wrappers for ANALOG clock, only if specified in config */ @@ -210,6 +242,8 @@ Module.register("clock",{ // Display only a digital clock wrapper.appendChild(dateWrapper); wrapper.appendChild(timeWrapper); + wrapper.appendChild(sunWrapper); + wrapper.appendChild(moonWrapper); wrapper.appendChild(weekWrapper); } else if (this.config.displayType === "analog") { // Display only an analog clock @@ -244,6 +278,8 @@ Module.register("clock",{ digitalWrapper.style.cssFloat = "none"; digitalWrapper.appendChild(dateWrapper); digitalWrapper.appendChild(timeWrapper); + digitalWrapper.appendChild(sunWrapper); + digitalWrapper.appendChild(moonWrapper); digitalWrapper.appendChild(weekWrapper); var appendClocks = function(condition, pos1, pos2) { diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index 1df9bf83..7bd4554a 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -66,3 +66,10 @@ -ms-transform-origin: 50% 100%; transform-origin: 50% 100%; } + +.module.clock .sun, .module.clock .moon { + display: flex; +} +.module.clock .sun > *, .module.clock .moon > * { + flex: 1; +} From af9f555e8f8929537f43dee39dda6233bf4e7645 Mon Sep 17 00:00:00 2001 From: kblankenship1989 Date: Sat, 18 Jan 2020 06:28:21 -0600 Subject: [PATCH 010/219] fix: fixing copy / paste error on futureLocal --- modules/default/calendar/calendarfetcher.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 57c1586d..a9bf37ee 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -186,7 +186,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri // of dates we"re looking for. // kblankenship1989 - to fix issue #1798, converting all dates to locale time first, then converting back to UTC time var pastLocal = moment(past).subtract(past.getTimezoneOffset(), "minutes").toDate(); - var futureLocal = moment(past).subtract(future.getTimezoneOffset(), "minutes").toDate(); + var futureLocal = moment(future).subtract(future.getTimezoneOffset(), "minutes").toDate(); var datesLocal = rule.between(pastLocal, futureLocal, true, limitFunction); var dates = datesLocal.map(function(dateLocal) { var date = moment(dateLocal).add(dateLocal.getTimezoneOffset(), "minutes").toDate(); From 70ca9ce2e0e7be3f6974a1b8f8269db712026738 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Sat, 18 Jan 2020 06:38:01 -0600 Subject: [PATCH 011/219] fix: fixing lint error --- modules/default/alert/README.md | 2 +- modules/default/calendar/README.md | 2 +- modules/default/clock/README.md | 2 +- modules/default/compliments/README.md | 2 +- modules/default/currentweather/README.md | 2 +- modules/default/helloworld/README.md | 2 +- modules/default/newsfeed/README.md | 2 +- modules/default/updatenotification/README.md | 2 +- modules/default/weather/README.md | 2 +- modules/default/weatherforecast/README.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 3bd5d00d..4d3c6a65 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -1,4 +1,4 @@ # Module: Alert The alert module is one of the default modules of the MagicMirror. This module displays notifications from other modules. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index fbb8bfd9..5c8f187b 100755 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -2,4 +2,4 @@ The `calendar` module is one of the default modules of the MagicMirror. This module displays events from a public .ical calendar. It can combine multiple calendars. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 1c0bdf8c..34a1448d 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -2,4 +2,4 @@ The `clock` module is one of the default modules of the MagicMirror. This module displays the current date and time. The information will be updated realtime. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index 7825bb02..c746f318 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -2,4 +2,4 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 3cbdcbea..27b047da 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -2,4 +2,4 @@ The `currentweather` module is one of the default modules of the MagicMirror. This module displays the current weather, including the windspeed, the sunset or sunrise time, the temperature and an icon to display the current conditions. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index aa9f87f3..8ad06f77 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -1,4 +1,4 @@ # Module: Hello World The `helloworld` module is one of the default modules of the MagicMirror. It is a simple way to display a static text on the mirror. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 4dc4877b..33690aa6 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -2,4 +2,4 @@ The `newsfeed ` module is one of the default modules of the MagicMirror. 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. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index 652f451f..af6305e6 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -2,4 +2,4 @@ The `updatenotification` module is one of the default modules of the MagicMirror. This will display a message whenever a new version of the MagicMirror application is available. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index 5b03b141..ebc301f4 100755 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -2,4 +2,4 @@ This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 95762daa..7dfbd16f 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -2,4 +2,4 @@ The `weatherforecast` module is one of the default modules of the MagicMirror. This module displays the weather forecast for the coming week, including an an icon to display the current conditions, the minimum temperature and the maximum temperature. -For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). \ No newline at end of file +For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). From 85a52523cf02eb3ec81530fc94874b056748aa43 Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Sat, 18 Jan 2020 08:39:54 -0800 Subject: [PATCH 012/219] show sun/moon as bright rather than bold if obj is visible --- modules/default/clock/clock.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 4eb7a6d3..6022998e 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -161,7 +161,7 @@ Module.register("clock",{ if (this.config.showSunTimes) { const sunTimes = SunCalc.getTimes(now, this.config.lat, this.config.lon); const isVisible = now.isBetween(sunTimes.sunrise, sunTimes.sunset); - sunWrapper.innerHTML = '' + + sunWrapper.innerHTML = '' + '' + formatTime(this.config, sunTimes.sunrise) + '' + '' + formatTime(this.config, sunTimes.sunset) + ''; } @@ -169,7 +169,7 @@ Module.register("clock",{ const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); const moonTimes = SunCalc.getMoonTimes(now, this.config.lat, this.config.lon); const isVisible = now.isBetween(moonTimes.rise, moonTimes.set); - moonWrapper.innerHTML = ' ' + moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}) + '' + + moonWrapper.innerHTML = ' ' + moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}) + '' + ' ' + formatTime(this.config, moonTimes.rise) + ''+ ' ' + formatTime(this.config, moonTimes.set) + ''; } From 40a9f9dd85c861d3e0e2cab28792b51951b07dca Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Sat, 18 Jan 2020 08:45:52 -0800 Subject: [PATCH 013/219] fix stylelint:simple --- modules/default/clock/clock_styles.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index 7bd4554a..fa6c2d5d 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -67,9 +67,12 @@ transform-origin: 50% 100%; } -.module.clock .sun, .module.clock .moon { +.module.clock .sun, +.module.clock .moon { display: flex; } -.module.clock .sun > *, .module.clock .moon > * { + +.module.clock .sun > *, +.module.clock .moon > * { flex: 1; } From 36762a6e46402e7ff5f410775ef2cc9e1750710a Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Sat, 18 Jan 2020 09:50:43 -0800 Subject: [PATCH 014/219] add duration until next sunset/sunrise --- modules/default/clock/clock.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 6022998e..e6ac880b 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -161,7 +161,18 @@ Module.register("clock",{ if (this.config.showSunTimes) { const sunTimes = SunCalc.getTimes(now, this.config.lat, this.config.lon); const isVisible = now.isBetween(sunTimes.sunrise, sunTimes.sunset); - sunWrapper.innerHTML = '' + + var nextEvent; + if (now.isBefore(sunTimes.sunrise)) { + nextEvent = sunTimes.sunrise; + } else if (now.isBefore(sunTimes.sunset)) { + nextEvent = sunTimes.sunset; + } else { + const tomorrowSunTimes = SunCalc.getTimes(now.add(1, 'day'), this.config.lat, this.config.lon); + nextEvent = tomorrowSunTimes.sunrise; + } + const untilNextEvent = moment.duration(moment(nextEvent).diff(now)); + const untilNextEventString = untilNextEvent.hours() + 'h ' + untilNextEvent.minutes() + 'm'; + sunWrapper.innerHTML = ' ' + untilNextEventString + '' + '' + formatTime(this.config, sunTimes.sunrise) + '' + '' + formatTime(this.config, sunTimes.sunset) + ''; } @@ -169,7 +180,8 @@ Module.register("clock",{ const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); const moonTimes = SunCalc.getMoonTimes(now, this.config.lat, this.config.lon); const isVisible = now.isBetween(moonTimes.rise, moonTimes.set); - moonWrapper.innerHTML = ' ' + moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}) + '' + + const illuminatedFractionString = moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}); + moonWrapper.innerHTML = ' ' + illuminatedFractionString + '' + ' ' + formatTime(this.config, moonTimes.rise) + ''+ ' ' + formatTime(this.config, moonTimes.set) + ''; } From e24d1a1261a3e7490b8e9fef95c7eb331938c851 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 18 Jan 2020 21:02:49 +0100 Subject: [PATCH 015/219] Fix newlines? --- modules/default/alert/README.md | 1 + modules/default/calendar/README.md | 1 + modules/default/clock/README.md | 1 + modules/default/compliments/README.md | 1 + modules/default/currentweather/README.md | 1 + modules/default/helloworld/README.md | 1 + modules/default/newsfeed/README.md | 1 + modules/default/updatenotification/README.md | 1 + modules/default/weather/README.md | 1 + modules/default/weatherforecast/README.md | 1 + 10 files changed, 10 insertions(+) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 4d3c6a65..8700aea7 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -2,3 +2,4 @@ The alert module is one of the default modules of the MagicMirror. This module displays notifications from other modules. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). + diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 5c8f187b..e7192eeb 100755 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -3,3 +3,4 @@ The `calendar` module is one of the default modules of the MagicMirror. This module displays events from a public .ical calendar. It can combine multiple calendars. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). + diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 34a1448d..973415cb 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -3,3 +3,4 @@ The `clock` module is one of the default modules of the MagicMirror. This module displays the current date and time. The information will be updated realtime. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). + diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index c746f318..b9d2f448 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -3,3 +3,4 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). + diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 27b047da..d43df316 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -3,3 +3,4 @@ The `currentweather` module is one of the default modules of the MagicMirror. This module displays the current weather, including the windspeed, the sunset or sunrise time, the temperature and an icon to display the current conditions. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). + diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index 8ad06f77..80e66ebd 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -2,3 +2,4 @@ The `helloworld` module is one of the default modules of the MagicMirror. It is a simple way to display a static text on the mirror. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). + diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 33690aa6..b90232fb 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -3,3 +3,4 @@ The `newsfeed ` module is one of the default modules of the MagicMirror. 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. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). + diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index af6305e6..3f7b9533 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -3,3 +3,4 @@ The `updatenotification` module is one of the default modules of the MagicMirror This will display a message whenever a new version of the MagicMirror application is available. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). + diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index ebc301f4..b834bc7d 100755 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -3,3 +3,4 @@ This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). + diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 7dfbd16f..b320afe1 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -3,3 +3,4 @@ The `weatherforecast` module is one of the default modules of the MagicMirror. This module displays the weather forecast for the coming week, including an an icon to display the current conditions, the minimum temperature and the maximum temperature. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). + From a85ed709afe1b1cc5f7a3ee087d4c2afca073dae Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 18 Jan 2020 21:09:18 +0100 Subject: [PATCH 016/219] Remove newlines. --- modules/default/alert/README.md | 1 - modules/default/calendar/README.md | 1 - modules/default/clock/README.md | 1 - modules/default/compliments/README.md | 1 - modules/default/currentweather/README.md | 1 - modules/default/helloworld/README.md | 1 - modules/default/newsfeed/README.md | 1 - modules/default/updatenotification/README.md | 1 - modules/default/weather/README.md | 1 - modules/default/weatherforecast/README.md | 1 - 10 files changed, 10 deletions(-) diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 8700aea7..4d3c6a65 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -2,4 +2,3 @@ The alert module is one of the default modules of the MagicMirror. This module displays notifications from other modules. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). - diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index e7192eeb..5c8f187b 100755 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -3,4 +3,3 @@ The `calendar` module is one of the default modules of the MagicMirror. This module displays events from a public .ical calendar. It can combine multiple calendars. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/calendar.html). - diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 973415cb..34a1448d 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -3,4 +3,3 @@ The `clock` module is one of the default modules of the MagicMirror. This module displays the current date and time. The information will be updated realtime. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/clock.html). - diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index b9d2f448..c746f318 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -3,4 +3,3 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/compliments.html). - diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index d43df316..27b047da 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -3,4 +3,3 @@ The `currentweather` module is one of the default modules of the MagicMirror. This module displays the current weather, including the windspeed, the sunset or sunrise time, the temperature and an icon to display the current conditions. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/currentweather.html). - diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index 80e66ebd..8ad06f77 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -2,4 +2,3 @@ The `helloworld` module is one of the default modules of the MagicMirror. It is a simple way to display a static text on the mirror. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). - diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index b90232fb..33690aa6 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -3,4 +3,3 @@ The `newsfeed ` module is one of the default modules of the MagicMirror. 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. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). - diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index 3f7b9533..af6305e6 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -3,4 +3,3 @@ The `updatenotification` module is one of the default modules of the MagicMirror This will display a message whenever a new version of the MagicMirror application is available. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/updatenotification.html). - diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index b834bc7d..ebc301f4 100755 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -3,4 +3,3 @@ This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). - diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index b320afe1..7dfbd16f 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -3,4 +3,3 @@ The `weatherforecast` module is one of the default modules of the MagicMirror. This module displays the weather forecast for the coming week, including an an icon to display the current conditions, the minimum temperature and the maximum temperature. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weatherforecast.html). - From db72e22e612c13ece03b498a3974de43582f4854 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 18 Jan 2020 21:17:54 +0100 Subject: [PATCH 017/219] Fuck it. --- Gruntfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index ee4ab7b8..a825a766 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -77,7 +77,8 @@ module.exports = function(grunt) { "MD018": false, "MD012": false, "MD026": false, - "MD038": false + "MD038": false, + "MD047": false } }, src: [ From 9cffa3dd676ec2e978bdf1d1ba2e51dd96055df4 Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Sat, 18 Jan 2020 17:01:26 -0800 Subject: [PATCH 018/219] fix calculation of duration until next sunrise --- 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 e6ac880b..96c31143 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -167,7 +167,7 @@ Module.register("clock",{ } else if (now.isBefore(sunTimes.sunset)) { nextEvent = sunTimes.sunset; } else { - const tomorrowSunTimes = SunCalc.getTimes(now.add(1, 'day'), this.config.lat, this.config.lon); + const tomorrowSunTimes = SunCalc.getTimes(now.clone().add(1, 'day'), this.config.lat, this.config.lon); nextEvent = tomorrowSunTimes.sunrise; } const untilNextEvent = moment.duration(moment(nextEvent).diff(now)); From cce57c72298d53a632b2352d678d71f364492704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Jan 2020 04:06:21 -0300 Subject: [PATCH 019/219] Fix the vendor_spec test: This change set after startApplication the configuration to run this test. The previous statement when e2e are running using --recursive the MM_CONFIG_FILE was setting by the test running before this one. --- tests/e2e/vendor_spec.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 834c90d6..addbe335 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -15,6 +15,7 @@ describe("Vendors", function () { var app = null; before(function () { + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; return helpers.startApplication({ args: ["js/electron.js"] }).then(function (startedApp) { app = startedApp; }); @@ -26,10 +27,6 @@ describe("Vendors", function () { describe("Get list vendors", function () { - before(function () { - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; - }); - var vendors = require(__dirname + "/../../vendor/vendor.js"); Object.keys(vendors).forEach(vendor => { it(`should return 200 HTTP code for vendor "${vendor}"`, function () { From 81b310086f012c99dcf66fc8dbdab991c00794f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Jan 2020 04:40:05 -0300 Subject: [PATCH 020/219] Revert permission mode for CHANGELOG This change revert change of permission mode for file CHANGELOG.md introduced in commit a619fc4fefe17a2205537d48131b40e9f8076990 --- CHANGELOG.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100755 new mode 100644 From 6e7edd9824ecb8fb5a6f5b9ae9662b405b224954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sun, 19 Jan 2020 08:19:09 -0300 Subject: [PATCH 021/219] Revert error logging introduced in 1e97b5c --- tests/e2e/vendor_spec.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index addbe335..5824f737 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -32,10 +32,7 @@ describe("Vendors", function () { it(`should return 200 HTTP code for vendor "${vendor}"`, function () { urlVendor = "http://localhost:8080/vendor/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { - if (!err) - {expect(res.statusCode).to.equal(200);} - else - {mlog.pending(`There error vendor 200 test ${err}`);} + expect(res.statusCode).to.equal(200); }); }); }); @@ -44,10 +41,7 @@ describe("Vendors", function () { it(`should return 404 HTTP code for vendor https://localhost/"${vendor}"`, function() { urlVendor = "http://localhost:8080/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { - if (!err) - {expect(res.statusCode).to.equal(404);} - else - {mlog.pending(`There error vendor 404 test ${err}`);} + expect(res.statusCode).to.equal(404); }); }); }); From a7ee2ef3a6c0889bcf999f4b5951162fbb394bfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Mon, 20 Jan 2020 21:57:57 +0000 Subject: [PATCH 022/219] Upgrade to Electron 6: New version of Electron has enable by default sandbox http://www.atom.pe/docs/api/sandbox-option/ There was some issues to migrate a new version of Electron for MagicMirror. Using the new version in Travis CI was failing at this time. The problem is because the testing runner is a Docker enviroment The issue experimented is the same topic mentioned here: - https://github.com/electron/electron/issues/17972 - https://github.com/electron-userland/spectron/issues/443 The fix for to all of this is to set the `--no-sandbox` mode in CI testing https://electronjs.org/docs/all#--no-sandbox This change use the feature to set and disable Sandbox using by enviroment variable `ELECTRON_DISABLE_SANDBOX=1` https://github.com/electron/electron/pull/16576 This change has reference #1800 --- .travis.yml | 1 + package-lock.json | 3521 +++++++++++++++++++-------------------------- package.json | 6 +- 3 files changed, 1453 insertions(+), 2075 deletions(-) diff --git a/.travis.yml b/.travis.yml index 58f85360..5f8f6024 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ before_script: - yarn danger ci - npm install grunt-cli -g - "export DISPLAY=:99.0" + - "export ELECTRON_DISABLE_SANDBOX=1" - "sh -e /etc/init.d/xvfb start" - sleep 5 script: diff --git a/package-lock.json b/package-lock.json index 145947fb..dff1462c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,29 +5,30 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" } }, "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", @@ -62,12 +63,12 @@ } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -82,49 +83,49 @@ } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -164,15 +165,15 @@ } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", + "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" @@ -187,28 +188,28 @@ } }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -232,9 +233,9 @@ } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -242,22 +243,32 @@ "to-fast-properties": "^2.0.0" } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@octokit/rest": { "version": "15.18.3", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.18.3.tgz", @@ -276,31 +287,19 @@ } }, "@prantlf/jsonlint": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-6.2.1.tgz", - "integrity": "sha512-/qPFlMyAYpebu+xS7W9XUlpBrpWyHq9ElslIxfOpfKOxWy+p++gicvxtn7f4GJQ3ikyM738/IIDf6Ngl9ta18w==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-10.2.0.tgz", + "integrity": "sha512-KMFfds0peWLLfCu3bhClTiEN0tdj/Z86QJvn1awKHws6r+Sx6T3a44Eadz6OvqN6ZpsRkqaRpZxqddvvDAdDZQ==", "dev": true, "requires": { - "ajv": "6.10.0", - "commander": "2.20.0" + "ajv": "6.10.2", + "commander": "4.0.1" }, "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==", "dev": true } } @@ -311,33 +310,23 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", "dev": true }, "@types/node": { - "version": "10.17.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", - "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==" + "version": "13.1.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.8.tgz", + "integrity": "sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true }, "@types/parse-json": { "version": "4.0.0", @@ -453,6 +442,12 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, "ansi-escapes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", @@ -472,6 +467,24 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, "apache-crypt": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz", @@ -487,121 +500,6 @@ "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=", "dev": true }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -619,24 +517,6 @@ } } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -654,24 +534,9 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "arraybuffer.slice": { @@ -704,12 +569,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -739,17 +598,17 @@ "dev": true }, "autoprefixer": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", - "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", + "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", "dev": true, "requires": { - "browserslist": "^4.8.0", - "caniuse-lite": "^1.0.30001012", + "browserslist": "^4.8.3", + "caniuse-lite": "^1.0.30001020", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.23", + "postcss": "^7.0.26", "postcss-value-parser": "^4.0.2" }, "dependencies": { @@ -840,61 +699,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -939,63 +743,11 @@ "callsite": "1.0.0" } }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - } - } + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true }, "blob": { "version": "0.0.5", @@ -1063,21 +815,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "fill-range": "^7.0.1" } }, "browser-process-hrtime": { @@ -1087,20 +830,20 @@ "dev": true }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001015", + "caniuse-lite": "^1.0.30001017", "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "node-releases": "^1.1.44" } }, "btoa-lite": { @@ -1163,29 +906,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", @@ -1217,9 +937,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001017", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001017.tgz", - "integrity": "sha512-EDnZyOJ6eYh6lHmCvCdHAFbfV4KJ9lSdfv4h/ppEhrU/Yudkl7jujwMZ1we6RX7DXqBfT04pVMQ4J+1wcTlsKA==", + "version": "1.0.30001021", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", + "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==", "dev": true }, "caseless": { @@ -1304,34 +1024,35 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, "clarinet": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/clarinet/-/clarinet-0.12.4.tgz", "integrity": "sha512-Rx9Zw8KQkoPO3/O2yPRchCZm3cGubCQiRLmmFAlbkDKobUIPP3JYul+bKILR9DIv1gSVwPQSgF8JGGkXzX8Q0w==" }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -1443,16 +1164,6 @@ "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1502,56 +1213,6 @@ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1674,12 +1335,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js": { "version": "2.6.11", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", @@ -1733,54 +1388,6 @@ "buffer": "^5.1.0" } }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -2035,50 +1642,20 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deepmerge": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", - "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "object-keys": "^1.0.12" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true } } }, @@ -2104,33 +1681,24 @@ "dev": true }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "path-type": "^3.0.0" + "path-type": "^4.0.0" }, "dependencies": { "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true } } @@ -2245,24 +1813,32 @@ "dev": true }, "electron": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/electron/-/electron-3.1.13.tgz", - "integrity": "sha512-aRNywoUSO1Va/lpU4nz3K6GDyFqYtlOnHGLcERAAHfhB+IJrJ34cUJW4FVBpm43AwvUdAeuCkVKRLtOmrgx5CA==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-6.1.7.tgz", + "integrity": "sha512-QhBA/fcYJit2XJGkD2xEfxlWTtTaWYu7qkKVohtVWXpELFqkpel2DCDxet5BTo0qs8ukuZHxlQPnIonODnl2bw==", "optional": true, "requires": { - "@types/node": "^10.1.4", + "@types/node": "^10.12.18", "electron-download": "^4.1.0", "extract-zip": "^1.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "optional": true + } } }, "electron-chromedriver": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-1.8.0.tgz", - "integrity": "sha512-m1f3nle5MaGp94bcDTtMZZMMOgPO54+TXoPBlTbBSUjfINR5SJ46yQXLfuE79/qsFfJKslZB1UzWURDDFIRmpQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-6.0.0.tgz", + "integrity": "sha512-UIhRl0sN5flfUjqActXsFrZQU1NmBObvlxzPnyeud8vhR67TllXCoqfvhQJmIrJAJJK+5M1DFhJ5iTGT++dvkg==", "dev": true, "requires": { - "electron-download": "^4.1.0", - "extract-zip": "^1.6.5" + "electron-download": "^4.1.1", + "extract-zip": "^1.6.7" } }, "electron-download": { @@ -2289,9 +1865,9 @@ } }, "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", + "version": "1.3.338", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz", + "integrity": "sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA==", "dev": true }, "emoji-regex": { @@ -2409,6 +1985,44 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.3.tgz", + "integrity": "sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -2685,47 +2299,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -2849,62 +2422,6 @@ } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "extract-zip": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", @@ -2942,80 +2459,16 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", + "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2" } }, "fast-json-stable-stringify": { @@ -3029,6 +2482,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "dev": true, + "requires": { + "reusify": "^1.0.0" + } + }, "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", @@ -3071,15 +2533,12 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -3144,6 +2603,15 @@ } } }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -3161,12 +2629,6 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3187,15 +2649,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "frameguard": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", @@ -3234,6 +2687,19 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -3249,6 +2715,12 @@ "globule": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -3275,12 +2747,6 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -3329,12 +2795,6 @@ "is-glob": "^4.0.1" } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, "global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -3365,45 +2825,23 @@ } }, "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true } } @@ -3470,9 +2908,9 @@ "dev": true }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "grunt": { @@ -3571,12 +3009,12 @@ } }, "grunt-jsonlint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-2.0.0.tgz", - "integrity": "sha512-bCodmPAoHxujSST/Pn5FdR6K1QytaZhlYW3dyU5Ut27h1usDBPnoBLWb7EoPE2EmW1UgQTrSNu/qP9tUMBSrZg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-2.1.1.tgz", + "integrity": "sha512-A3i+rKoYXvLaOSu75kkqQY8UXFXVIcPiuBKQJ7VVCx/8iA7c3IZnFEqkc6ZpU56zDyNLGYhZX2WT691PNSc70Q==", "dev": true, "requires": { - "@prantlf/jsonlint": "6.2.1" + "@prantlf/jsonlint": "10.2.0" } }, "grunt-known-options": { @@ -3746,6 +3184,21 @@ "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -3780,37 +3233,11 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, "he": { "version": "1.1.1", @@ -4029,9 +3456,9 @@ "dev": true }, "iconv-lite": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", - "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", + "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -4115,9 +3542,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", - "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz", + "integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -4238,26 +3665,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-alphabetical": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", @@ -4285,57 +3692,39 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "binary-extensions": "^2.0.0" } }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, "is-decimal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -4380,24 +3769,10 @@ "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "1.0.1", @@ -4411,21 +3786,21 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-regexp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", @@ -4438,6 +3813,15 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -4454,12 +3838,6 @@ "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "is-word-character": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", @@ -4477,12 +3855,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -4733,9 +4105,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "known-css-properties": { @@ -4760,9 +4132,9 @@ "dev": true }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5014,26 +4386,11 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-escapes": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", @@ -5151,41 +4508,6 @@ "requires": { "braces": "^3.0.1", "picomatch": "^2.0.5" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } } }, "mime": { @@ -5212,6 +4534,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "min-indent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", + "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -5227,36 +4555,15 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz", + "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==", "dev": true, "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -5273,42 +4580,116 @@ } }, "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz", + "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.0" }, "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ms": "2.0.0" + "color-convert": "^1.9.0" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5319,25 +4700,151 @@ "path-is-absolute": "^1.0.0" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "ms": { + "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -5464,46 +4971,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5532,6 +4999,16 @@ "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", "dev": true }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, "node-fetch": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", @@ -5539,9 +5016,9 @@ "dev": true }, "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", + "version": "1.1.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz", + "integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==", "dev": true, "requires": { "semver": "^6.3.0" @@ -5575,15 +5052,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -5672,58 +5140,45 @@ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true }, "object-keys": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "isobject": "^3.0.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "isobject": "^3.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "on-finished": { @@ -5963,18 +5418,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -6032,9 +5475,9 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, "pify": { @@ -6073,12 +5516,6 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { "version": "7.0.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", @@ -6162,9 +5599,9 @@ } }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -6184,9 +5621,9 @@ } }, "postcss-jsx": { - "version": "0.36.3", - "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.3.tgz", - "integrity": "sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==", + "version": "0.36.4", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz", + "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==", "dev": true, "requires": { "@babel/core": ">=7.2.2" @@ -6419,9 +5856,9 @@ "dev": true }, "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "range-parser": { @@ -6507,6 +5944,15 @@ "string_decoder": "~0.10.x" } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, "readline-sync": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", @@ -6533,37 +5979,6 @@ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -6648,12 +6063,6 @@ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -6769,10 +6178,10 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rfc6902": { @@ -6835,6 +6244,12 @@ "is-promise": "^2.1.0" } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -6864,15 +6279,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6947,18 +6353,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -7050,125 +6444,6 @@ } } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "socket.io": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", @@ -7343,16 +6618,399 @@ "dev": true }, "spectron": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/spectron/-/spectron-3.8.0.tgz", - "integrity": "sha512-fQ7gFp6UuEaONjXFLifLeIUI022pOsm3b+NFAm696r2umUkSZ9IbnEgHwrvBX+pJ3QUDyCEs5bPHUieYU7FvaQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/spectron/-/spectron-8.0.0.tgz", + "integrity": "sha512-MI9+lAamDnw7S0vKaxXjU3g5qaW5KANaFLc+Hgq+QmMCkQbZLt6ukFFGfalmwIuYrmq+yWQPCD4CXgt3VSHrLA==", "dev": true, "requires": { "dev-null": "^0.1.1", - "electron-chromedriver": "~1.8.0", - "request": "^2.81.0", + "electron-chromedriver": "^6.0.0", + "request": "^2.87.0", "split": "^1.0.0", - "webdriverio": "^4.8.0" + "webdriverio": "^4.13.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "archiver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", + "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "dev": true, + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.2.0" + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "compress-commons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^2.0.0" + } + }, + "deepmerge": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", + "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==", + "dev": true + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.0.1.tgz", + "integrity": "sha512-7FQGOlSQ+AQxBNXJpVDj8efTA/FtyB5wcNE1omXXJ0cq6jm1jjDwuROlYDbnzHqdNPqliWFhcioCWSyav+xBnA==", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "webdriverio": { + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.14.4.tgz", + "integrity": "sha512-Knp2vzuzP5c5ybgLu+zTwy/l1Gh0bRP4zAr8NWcrStbuomm9Krn9oRF0rZucT6AyORpXinETzmeowFwIoo7mNA==", + "dev": true, + "requires": { + "archiver": "~2.1.0", + "babel-runtime": "^6.26.0", + "css-parse": "^2.0.0", + "css-value": "~0.0.1", + "deepmerge": "~2.0.1", + "ejs": "~2.5.6", + "gaze": "~1.1.2", + "glob": "~7.1.1", + "grapheme-splitter": "^1.0.2", + "inquirer": "~3.3.0", + "json-stringify-safe": "~5.0.1", + "mkdirp": "~0.5.1", + "npm-install-package": "~2.1.0", + "optimist": "~0.6.1", + "q": "~1.5.0", + "request": "^2.83.0", + "rgb2hex": "^0.1.9", + "safe-buffer": "~5.1.1", + "supports-color": "~5.0.0", + "url": "~0.11.0", + "wdio-dot-reporter": "~0.0.8", + "wgxpath": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "zip-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "dev": true, + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + } + } } }, "speedometer": { @@ -7369,36 +7027,6 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -7427,27 +7055,6 @@ "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -7469,6 +7076,26 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -7528,12 +7155,12 @@ "dev": true }, "stylelint": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-12.0.1.tgz", - "integrity": "sha512-1mn39pqZiC/e8KUPoRMc1WMM83Upb2ILaSGxkCvKxALHutEOs2txcPQocJiXdO4Zx4FY4prGqjlkwrbthAxqig==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.0.0.tgz", + "integrity": "sha512-6sjgOJbM3iLhnUtmRO0J1vvxie9VnhIZX/2fCehjylv9Gl9u0ytehGCTm9Lhw2p1F8yaNZn5UprvhCB8C3g/Tg==", "dev": true, "requires": { - "autoprefixer": "^9.7.1", + "autoprefixer": "^9.7.3", "balanced-match": "^1.0.0", "chalk": "^3.0.0", "cosmiconfig": "^6.0.0", @@ -7542,7 +7169,7 @@ "file-entry-cache": "^5.0.1", "get-stdin": "^7.0.0", "global-modules": "^2.0.0", - "globby": "^9.2.0", + "globby": "^11.0.0", "globjoin": "^0.1.4", "html-tags": "^3.1.0", "ignore": "^5.1.4", @@ -7553,10 +7180,10 @@ "lodash": "^4.17.15", "log-symbols": "^3.0.0", "mathml-tag-names": "^2.1.1", - "meow": "^5.0.0", + "meow": "^6.0.0", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.21", + "postcss": "^7.0.26", "postcss-html": "^0.36.0", "postcss-jsx": "^0.36.3", "postcss-less": "^3.1.4", @@ -7600,20 +7227,20 @@ } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.1.1.tgz", + "integrity": "sha512-kEPCddRFChEzO0d6w61yh0WbBiSv9gBnfZWGfXRYPlGqIdIGef6HMR6pgqVSEWCYkrp8B0AtEpEXNY+Jx0xk1A==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, "chalk": { @@ -7651,12 +7278,13 @@ } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "get-stdin": { @@ -7678,9 +7306,9 @@ "dev": true }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "is-fullwidth-code-point": { @@ -7689,95 +7317,121 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "p-locate": "^4.1.0" } }, "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", "dev": true }, "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.0.tgz", + "integrity": "sha512-x4rYsjigPBDAxY+BGuK83YLhUIqui5wYyZoqb6QJCUOs+0fiYq+i/NV4Jt8OgIfObZFxG9iTyvLDu4UTohGTFw==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0", - "yargs-parser": "^10.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.1.1", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.0.0", + "minimist-options": "^4.0.1", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.0", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.8.1", + "yargs-parser": "^16.1.0" } }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" } }, "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, "resolve-from": { @@ -7806,17 +7460,14 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } }, "supports-color": { "version": "7.1.0", @@ -7828,18 +7479,19 @@ } }, "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", + "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -7995,65 +7647,6 @@ } } }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8139,67 +7732,13 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toidentifier": { @@ -8367,18 +7906,6 @@ "x-is-string": "^0.1.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -8461,52 +7988,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8545,12 +8026,6 @@ "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8613,12 +8088,6 @@ "vfile-message": "^1.0.0" }, "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - }, "unist-util-stringify-position": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", @@ -8679,240 +8148,6 @@ "integrity": "sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==", "dev": true }, - "webdriverio": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.14.4.tgz", - "integrity": "sha512-Knp2vzuzP5c5ybgLu+zTwy/l1Gh0bRP4zAr8NWcrStbuomm9Krn9oRF0rZucT6AyORpXinETzmeowFwIoo7mNA==", - "dev": true, - "requires": { - "archiver": "~2.1.0", - "babel-runtime": "^6.26.0", - "css-parse": "^2.0.0", - "css-value": "~0.0.1", - "deepmerge": "~2.0.1", - "ejs": "~2.5.6", - "gaze": "~1.1.2", - "glob": "~7.1.1", - "grapheme-splitter": "^1.0.2", - "inquirer": "~3.3.0", - "json-stringify-safe": "~5.0.1", - "mkdirp": "~0.5.1", - "npm-install-package": "~2.1.0", - "optimist": "~0.6.1", - "q": "~1.5.0", - "request": "^2.83.0", - "rgb2hex": "^0.1.9", - "safe-buffer": "~5.1.1", - "supports-color": "~5.0.0", - "url": "~0.11.0", - "wdio-dot-reporter": "~0.0.8", - "wgxpath": "~1.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.0.1.tgz", - "integrity": "sha512-7FQGOlSQ+AQxBNXJpVDj8efTA/FtyB5wcNE1omXXJ0cq6jm1jjDwuROlYDbnzHqdNPqliWFhcioCWSyav+xBnA==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - } - } - } - } - }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -8977,6 +8212,15 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "windows-release": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", @@ -9164,6 +8408,189 @@ } } }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "yauzl": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", @@ -9176,56 +8603,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } } } } diff --git a/package.json b/package.json index b59dee38..308a3a9b 100644 --- a/package.json +++ b/package.json @@ -47,16 +47,16 @@ "http-auth": "^3.2.3", "jsdom": "^11.6.2", "jshint": "^2.10.2", - "mocha": "^4.1.0", + "mocha": "^7.0.0", "mocha-each": "^1.1.0", "mocha-logger": "^1.0.6", - "spectron": "^3.8.0", + "spectron": "^8.0.0", "stylelint": "latest", "stylelint-config-standard": "latest", "time-grunt": "latest" }, "optionalDependencies": { - "electron": "^3.0.13" + "electron": "^6.1.7" }, "dependencies": { "colors": "^1.1.2", From 7ad0cfd5f69515b6ffcdfd36ccde7e54969550c1 Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Tue, 21 Jan 2020 19:16:42 -0800 Subject: [PATCH 023/219] update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6584d0e..6356300d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". - Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. -- Sun and Moon data to the `clock` module. +- The `clock` module now optionally displays sun and moon data, including rise/set times, remaining daylight, and percent of moon illumination. ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) From 2ca81f965a4e0b06483d889262e3cc4e59b9df0a Mon Sep 17 00:00:00 2001 From: adimi Date: Wed, 22 Jan 2020 22:03:34 +0200 Subject: [PATCH 024/219] Add hebrew translation --- CHANGELOG.md | 1 + translations/he.json | 36 ++++++++++++++++++++++++++++++++++++ translations/translations.js | 9 +++++---- 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 translations/he.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 6356300d..08e08d56 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". - Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. - The `clock` module now optionally displays sun and moon data, including rise/set times, remaining daylight, and percent of moon illumination. +- Added Hebrew translation. ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) diff --git a/translations/he.json b/translations/he.json new file mode 100644 index 00000000..5e1f5f8b --- /dev/null +++ b/translations/he.json @@ -0,0 +1,36 @@ +{ + "LOADING": "טוען...", + + "TODAY": "היום", + "TOMORROW": "מחר", + "DAYAFTERTOMORROW": "בעוד יומיים", + "RUNNING": "מסתיים ב", + "EMPTY": "אין ארועים", + + "WEEK": "{weekNumber} שבוע", + + "N": "צ", + "NNE": "צ-צ-מז", + "NE": "צ-מז", + "ENE": "מז-צ-מז", + "E": "מז", + "ESE": "מז-ד-מז", + "SE": "ד-מז", + "SSE": "ד-ד-מז", + "S": "ד", + "SSW": "ד-ד-מע", + "SW": "ד-מע", + "WSW": "מע-ד-מע", + "W": "מע", + "WNW": "מע-ז-מע", + "NW": "ז-מע", + "NNW": "צ-צ-מע", + + "UPDATE_NOTIFICATION": "עדכון זמין ל-MagicMirror", + "UPDATE_NOTIFICATION_MODULE": "עדכון זמין ב-{MODULE_NAME} מודול", + "UPDATE_INFO_SINGLE": "ההתקנה הנוכחית נמצאת מאחור הענף {BRANCH_NAME} ב-{COMMIT_COUNT} מופע", + "UPDATE_INFO_MULTIPLE": "ההתקנה הנוכחית נמצאת מאחור הענף {BRANCH_NAME} ב-{COMMIT_COUNT} מופעים", + + "FEELS": "מרגיש כמו", + "PRECIP": "משקעים" +} diff --git a/translations/translations.js b/translations/translations.js index 767590e8..2b6f65bf 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -36,12 +36,13 @@ var translations = { "kr" : "translations/kr.json", // Korean "ro" : "translations/ro.json", // Romanian "cy" : "translations/cy.json", // Welsh (Cymraeg) - "bg" : "translations/bg.json", // Bulgarian - "cs" : "translations/cs.json", // Czech + "bg" : "translations/bg.json", // Bulgarian + "cs" : "translations/cs.json", // Czech "hr" : "translations/hr.json", // Croatian - "sk" : "translations/sk.json", // Slovak + "sk" : "translations/sk.json", // Slovak "tlh" : "translations/tlh.json", // Klingon - "ms-my" : "translations/ms-my.json" // Malay + "ms-my" : "translations/ms-my.json", // Malay + "he" : "translations/he.json" // Hebrew }; if (typeof module !== "undefined") {module.exports = translations;} From b44ab88927e5aef80190c654b04f4a808d5c0177 Mon Sep 17 00:00:00 2001 From: Karol Sejka Date: Thu, 23 Jan 2020 02:24:47 +0100 Subject: [PATCH 025/219] adds PRECIP polish translation --- translations/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/translations/pl.json b/translations/pl.json index 09f44d88..b81a6dad 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -31,5 +31,6 @@ "UPDATE_INFO_SINGLE": "Zainstalowana wersja odbiega o {COMMIT_COUNT} commit od gałęzi {BRANCH_NAME}.", "UPDATE_INFO_MULTIPLE": "Zainstalowana wersja odbiega o {COMMIT_COUNT} commitów od gałęzi {BRANCH_NAME}.", - "FEELS": "Odczuwalna" + "FEELS": "Odczuwalna", + "PRECIP": "Szansa opadów" } From 95dedf0d800319470abf642cd4710aaa966431bf Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Thu, 23 Jan 2020 19:38:15 +0100 Subject: [PATCH 026/219] Skip weather tests for now --- tests/e2e/modules/weather_spec.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index d6596587..009f5142 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -11,6 +11,13 @@ const {generateWeather, generateWeatherForecast} = require("./mocks"); const wait = () => new Promise(res => setTimeout(res, 3000)); describe("Weather module", function() { + before(function() { + // See issue: https://github.com/MichMich/MagicMirror/issues/1840 + // Skipping the weather tests for now since these seem to give issues. + // Please send a PR if you know how to fix these. Thanks! + this.skip(); + }); + let app; helpers.setupTimeout(this); From 13ebe6d0e1ce966058f0e18b4fd644c578cbe175 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Thu, 23 Jan 2020 19:52:07 +0100 Subject: [PATCH 027/219] Check method --- tests/e2e/modules/weather_spec.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index 009f5142..dad11f50 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -10,13 +10,12 @@ const {generateWeather, generateWeatherForecast} = require("./mocks"); const wait = () => new Promise(res => setTimeout(res, 3000)); -describe("Weather module", function() { - before(function() { - // See issue: https://github.com/MichMich/MagicMirror/issues/1840 - // Skipping the weather tests for now since these seem to give issues. - // Please send a PR if you know how to fix these. Thanks! - this.skip(); - }); +// See issue: https://github.com/MichMich/MagicMirror/issues/1840 +// Skipping the weather tests for now since these seem to give issues. +// Please send a PR if you know how to fix these. Thanks! + + +describe.skip("Weather module", function() { let app; From 6ba5056c960ea62408e2e12f37be7cf5e793e49e Mon Sep 17 00:00:00 2001 From: Jon Kolb Date: Fri, 24 Jan 2020 10:42:45 -0500 Subject: [PATCH 028/219] Fix regression causing 'undefined' to show up when config.hideTemp is false --- .../default/currentweather/currentweather.js | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index dcf771af..2f58de5b 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -195,33 +195,33 @@ Module.register("currentweather",{ var large = document.createElement("div"); large.className = "large light"; + var degreeLabel = ""; + if (this.config.units === "metric" || this.config.units === "imperial") { + degreeLabel += "°"; + } + if(this.config.degreeLabel) { + switch(this.config.units) { + case "metric": + degreeLabel += "C"; + break; + case "imperial": + degreeLabel += "F"; + break; + case "default": + degreeLabel += "K"; + break; + } + } + + if (this.config.decimalSymbol === "") { + this.config.decimalSymbol = "."; + } + if (this.config.hideTemp === true) { var weatherIcon = document.createElement("span"); weatherIcon.className = "wi weathericon " + this.weatherType; large.appendChild(weatherIcon); - var degreeLabel = ""; - if (this.config.units === "metric" || this.config.units === "imperial") { - degreeLabel += "°"; - } - if(this.config.degreeLabel) { - switch(this.config.units) { - case "metric": - degreeLabel += "C"; - break; - case "imperial": - degreeLabel += "F"; - break; - case "default": - degreeLabel += "K"; - break; - } - } - - if (this.config.decimalSymbol === "") { - this.config.decimalSymbol = "."; - } - var temperature = document.createElement("span"); temperature.className = "bright"; temperature.innerHTML = " " + this.temperature.replace(".", this.config.decimalSymbol) + degreeLabel; From a5b09d784659e2dd277c85429f8fb39e627cff99 Mon Sep 17 00:00:00 2001 From: Jon Kolb Date: Fri, 24 Jan 2020 10:50:56 -0500 Subject: [PATCH 029/219] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08e08d56..d036074f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Force declaration of public ip adress in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) +- Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). From 85d26f73204d28679535d5c84e8a1e1511cde948 Mon Sep 17 00:00:00 2001 From: Mpho Mphego Date: Sun, 26 Jan 2020 14:10:24 +0200 Subject: [PATCH 030/219] Grammar fixes to config. This PR does the following: - [x] Corrects grammar on `config.js.sample` --- CHANGELOG.md | 5 +++++ config/config.js.sample | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08e08d56..9707cf8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core. +## [2.11.0] - 2020-01-24 + +### Changed +- Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. + ## [2.11.0] - Unreleased (Develop Branch) *This release is scheduled to be released on 2020-04-01.* diff --git a/config/config.js.sample b/config/config.js.sample index 1ab46833..c22960e5 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -3,7 +3,7 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. * - * For more information how you can configurate this file + * For more information on how you can configure this file * See https://github.com/MichMich/MagicMirror#configuration * */ From 602119fa41010fa8c61e44c5c5cc36b2f6780aec Mon Sep 17 00:00:00 2001 From: sergge1 <49363121+sergge1@users.noreply.github.com> Date: Fri, 31 Jan 2020 11:17:11 +0200 Subject: [PATCH 031/219] Ukrainian translation added --- translations/uk.json | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 translations/uk.json diff --git a/translations/uk.json b/translations/uk.json new file mode 100644 index 00000000..b9e154ab --- /dev/null +++ b/translations/uk.json @@ -0,0 +1,36 @@ +{ + "LOADING": "Завантаження …", + + "TODAY": "Сьогодні", + "TOMORROW": "Завтра", + "DAYAFTERTOMORROW": "Післязавтра", + "RUNNING": "Закінчується через", + "EMPTY": "Немає найближчих подій", + + "WEEK": "Тиждень {weekNumber}", + + "N": "Пн", + "NNE": "ПнПнСх", + "NE": "ПнСх", + "ENE": "СхПнСх", + "E": "Сх", + "ESE": "СхПдСх", + "SE": "СхПд", + "SSE": "СхСхПд", + "S": "Пд", + "SSW": "ПдПдЗх", + "SW": "ПдЗх", + "WSW": "ЗхПдЗх", + "W": "Зх", + "WNW": "ЗхПнЗх", + "NW": "ПнЗх", + "NNW": "ПнПнЗх", + + "UPDATE_NOTIFICATION": "Є оновлення для MagicMirror².", + "UPDATE_NOTIFICATION_MODULE": "Є оновлення для модуля {MODULE_NAME}.", + "UPDATE_INFO_SINGLE": "Поточна версія на {COMMIT_COUNT} комміт позаду від гілки {BRANCH_NAME}.", + "UPDATE_INFO_MULTIPLE": "Поточна інсталяція на {COMMIT_COUNT} комітів позаду від гілки {BRANCH_NAME}.", + + "FEELS": "Відчувається як", + "PRECIP": "Опади" +} From c41d6965abfc45a8b56b443b1cb7115324e31c87 Mon Sep 17 00:00:00 2001 From: sergge1 <49363121+sergge1@users.noreply.github.com> Date: Fri, 31 Jan 2020 11:18:43 +0200 Subject: [PATCH 032/219] added Ukrainian translation --- translations/translations.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/translations/translations.js b/translations/translations.js index 2b6f65bf..4cc6420d 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -42,7 +42,8 @@ var translations = { "sk" : "translations/sk.json", // Slovak "tlh" : "translations/tlh.json", // Klingon "ms-my" : "translations/ms-my.json", // Malay - "he" : "translations/he.json" // Hebrew + "he" : "translations/he.json", // Hebrew + "uk" : "translations/uk.json" // Ukrainian }; if (typeof module !== "undefined") {module.exports = translations;} From d7f6f46805e4f0618c6caf07a8b3e19dcac479a0 Mon Sep 17 00:00:00 2001 From: sergge1 <49363121+sergge1@users.noreply.github.com> Date: Fri, 31 Jan 2020 11:28:00 +0200 Subject: [PATCH 033/219] 2.11.0 - added Ukrainian translation --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 060abab6..53441236 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - cleanup installers folder, remove externalized scripts ### Added +- Ukrainian translation. - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". - Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. - The `clock` module now optionally displays sun and moon data, including rise/set times, remaining daylight, and percent of moon illumination. From 88b15797a0a55807034f249f6a9643ba3d8fba60 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Fri, 31 Jan 2020 20:35:46 -0600 Subject: [PATCH 034/219] fix: add missing +1 for month --- modules/default/calendar/vendor/ical.js/node-ical.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index 1da04375..593dc1e0 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -28,7 +28,7 @@ var rrule = require('rrule').RRule function getLocaleISOString(date) { var year = date.getFullYear().toString(10).padStart(4,'0'); - var month = date.getMonth().toString(10).padStart(2,'0'); + var month = (date.getMonth().toString(10) + 1).padStart(2,'0'); var day = date.getDate().toString(10).padStart(2,'0'); var hour = date.getHours().toString(10).padStart(2,'0'); var minute = date.getMinutes().toString(10).padStart(2,'0'); From ca49d8adb323543380cfa72c31851678ee36f644 Mon Sep 17 00:00:00 2001 From: Kurtis Blankenship Date: Fri, 31 Jan 2020 20:46:43 -0600 Subject: [PATCH 035/219] fix: correcting syntax --- modules/default/calendar/vendor/ical.js/node-ical.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index 593dc1e0..424fd2e6 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -28,7 +28,7 @@ var rrule = require('rrule').RRule function getLocaleISOString(date) { var year = date.getFullYear().toString(10).padStart(4,'0'); - var month = (date.getMonth().toString(10) + 1).padStart(2,'0'); + var month = (date.getMonth() + 1).toString(10).padStart(2,'0'); var day = date.getDate().toString(10).padStart(2,'0'); var hour = date.getHours().toString(10).padStart(2,'0'); var minute = date.getMinutes().toString(10).padStart(2,'0'); From c8c327b6abcfcd41edd3ea8cf81ad449ae99b98f Mon Sep 17 00:00:00 2001 From: karenorman Date: Sat, 1 Feb 2020 20:46:26 +0800 Subject: [PATCH 036/219] Add HTTPS support --- CHANGELOG.md | 5 +++++ config/config.js.sample | 4 ++++ js/server.js | 14 ++++++++++++-- serveronly/index.js | 3 ++- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 060abab6..35d38f15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core. +## [2.12.0] - 2020-01-31 + +### Changed +- Add HTTPS support and update config.js.sample + ## [2.11.0] - 2020-01-24 ### Changed diff --git a/config/config.js.sample b/config/config.js.sample index c22960e5..90610106 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -21,6 +21,10 @@ var config = { // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], + useHttps: false, // Support HTTPS or not + httpsPrivateKey: "", // HTTPS Private Key path + httpsCertificate: "", // HTTPS Certificate path + language: "en", timeFormat: 24, units: "metric", diff --git a/js/server.js b/js/server.js index b9c9b0d8..19bdfb91 100644 --- a/js/server.js +++ b/js/server.js @@ -7,8 +7,6 @@ var express = require("express"); var app = require("express")(); -var server = require("http").Server(app); -var io = require("socket.io")(server); var path = require("path"); var ipfilter = require("express-ipfilter").IpFilter; var fs = require("fs"); @@ -22,6 +20,18 @@ var Server = function(config, callback) { port = process.env.MM_PORT; } + var server = null; + if(config.useHttps){ + var options = { + key: fs.readFileSync(config.httpsPrivateKey), + cert: fs.readFileSync(config.httpsCertificate) + } + server = require("https").Server(options, app); + }else{ + server = require("http").Server(app); + } + var io = require("socket.io")(server); + console.log("Starting server on port " + port + " ... "); server.listen(port, config.address ? config.address : "localhost"); diff --git a/serveronly/index.js b/serveronly/index.js index 3b8013ef..f7da58f5 100644 --- a/serveronly/index.js +++ b/serveronly/index.js @@ -1,5 +1,6 @@ var app = require("../js/app.js"); app.start(function(config) { var bindAddress = config.address ? config.address : "localhost"; - console.log("\nReady to go! Please point your browser to: http://" + bindAddress + ":" + config.port); + var httpType = config.useHttps ? "https" : "http"; + console.log("\nReady to go! Please point your browser to: " + httpType + "://" + bindAddress + ":" + config.port); }); From 09c1ea992c669cad3fe24eeb7fd328fc0d526906 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 13:56:15 +0100 Subject: [PATCH 037/219] Update start methods. --- CHANGELOG.md | 3 ++ js/app.js | 6 +++- package.json | 3 +- run-start.sh | 75 -------------------------------------------------- untrack-css.sh | 11 -------- 5 files changed, 10 insertions(+), 88 deletions(-) delete mode 100755 run-start.sh delete mode 100755 untrack-css.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 53441236..a97536ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. +- Remove `run-start.sh` script and update start commands: + - To start using electron, use `npm run start`. + - To start in server only mode, use `npm run server`. ## [2.11.0] - Unreleased (Develop Branch) diff --git a/js/app.js b/js/app.js index 3c7a51f8..920d0c49 100644 --- a/js/app.js +++ b/js/app.js @@ -4,7 +4,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - var fs = require("fs"); var Server = require(__dirname + "/server.js"); var Utils = require(__dirname + "/utils.js"); @@ -24,6 +23,11 @@ console.log("Starting MagicMirror: v" + global.version); // global absolute root path global.root_path = path.resolve(__dirname + "/../"); +if (!process.env.DISPLAY) { + console.log("DISPLAY environment variable not set. Using DISPLAY=:0"); + process.env.DISPLAY = ":0"; +} + if (process.env.MM_CONFIG_FILE) { global.configuration_file = process.env.MM_CONFIG_FILE; } diff --git a/package.json b/package.json index 42baf1da..31490b5f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { - "start": "./run-start.sh", + "start": "./node_modules/.bin/electron js/electron.js", + "server": "node ./serveronly", "install": "cd vendor && npm install", "install-fonts": "cd fonts && npm install", "postinstall": "sh untrack-css.sh && sh installers/postinstall/postinstall.sh && npm run install-fonts", diff --git a/run-start.sh b/run-start.sh deleted file mode 100755 index f4c2d4e3..00000000 --- a/run-start.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash - # use bash instead of sh -./untrack-css.sh - -if grep docker /proc/1/cgroup -qa; then - # if running in docker, only start electron - - electron js/electron.js $1; -else - # not running in docker - - if [ -z "$DISPLAY" ]; then #If not set DISPLAY is SSH remote or tty - export DISPLAY=:0 # Set by default display - fi - # get the processor architecture - arch=$(uname -m) - false='false' - - # get the config option, if any - # only check non comment lines - serveronly=$(grep -v '^\s//' config/config.js | grep -i serveronly: | awk '{print tolower($2)}' | tr -d ,\"\') - # set default if not defined in config - serveronly=${serveronly:-false} - # check for xwindows running - xorg=$(pgrep Xorg) - #check for macOS - mac=$(uname) - # - # if the user requested serveronly OR - # electron support for armv6l has been dropped OR - # system is in text mode - # - if [ "$serveronly." != "false." -o "$arch" == "armv6l" ] || [ "$xorg." == "." -a $mac != 'Darwin' ]; then - - # if user explicitly configured to run server only (no ui local) - # OR there is no xwindows running, so no support for browser graphics - if [ "$serveronly." == "true." -o "$xorg." == "." ]; then - # start server mode, - node serveronly - else - # start the server in the background - # wait for server to be ready - # need bash for this - exec 3< <(node serveronly) - - # Read the output of server line by line until one line 'point your browser' - while read line; do - case "$line" in - *point\ your\ browser*) - echo $line - break - ;; - *) - echo $line - #sleep .25 - ;; - esac - done <&3 - - # Close the file descriptor - exec 3<&- - - # lets use chrome to display here now - # get the server port address from the ready message - port=$(echo $line | awk -F\: '{print $4}') - # start chromium - echo "Starting chromium browser now, have patience, it takes a minute" - chromium-browser -noerrdialogs -kiosk -start_maximized --disable-infobars --app=http://localhost:$port --ignore-certificate-errors-spki-list --ignore-ssl-errors --ignore-certificate-errors 2>/dev/null - exit - fi - else - # we can use electron directly - electron js/electron.js $1; - fi -fi \ No newline at end of file diff --git a/untrack-css.sh b/untrack-css.sh deleted file mode 100755 index d5969b84..00000000 --- a/untrack-css.sh +++ /dev/null @@ -1,11 +0,0 @@ -# Long history here -# https://github.com/MichMich/MagicMirror/pull/1540 -STATUS_CUSTOM_CSS=$(git ls-files -v css/custom.css| awk '{print $1}') - -if [ "$STATUS_CUSTOM_CSS" = "H" ]; then - echo "We'll remove from the repository the css/custom.css" - echo "This script apply git update-index --skip-worktree css/custom.css" - git update-index --skip-worktree css/custom.css - git rm --cached css/custom.css -fi - From 21dbaa1a0335597d558ef733019a7b26f5bcb225 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 13:59:13 +0100 Subject: [PATCH 038/219] Move DISPLAY default to electron script. --- js/app.js | 5 ----- js/electron.js | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/js/app.js b/js/app.js index 920d0c49..08612dd8 100644 --- a/js/app.js +++ b/js/app.js @@ -23,11 +23,6 @@ console.log("Starting MagicMirror: v" + global.version); // global absolute root path global.root_path = path.resolve(__dirname + "/../"); -if (!process.env.DISPLAY) { - console.log("DISPLAY environment variable not set. Using DISPLAY=:0"); - process.env.DISPLAY = ":0"; -} - if (process.env.MM_CONFIG_FILE) { global.configuration_file = process.env.MM_CONFIG_FILE; } diff --git a/js/electron.js b/js/electron.js index c5e9c4cb..77820db2 100644 --- a/js/electron.js +++ b/js/electron.js @@ -1,5 +1,10 @@ /* jshint esversion: 6 */ +if (!process.env.DISPLAY) { + console.log("DISPLAY environment variable not set. Using DISPLAY=:0"); + process.env.DISPLAY = ":0"; +} + "use strict"; const electron = require("electron"); From 7f2ecbd04f2f9f549a581f70ebe0c0d594b5871b Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 14:32:38 +0100 Subject: [PATCH 039/219] Cleanup. --- installers/postinstall/postinstall.sh | 2 -- package.json | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 installers/postinstall/postinstall.sh diff --git a/installers/postinstall/postinstall.sh b/installers/postinstall/postinstall.sh deleted file mode 100644 index dc19df98..00000000 --- a/installers/postinstall/postinstall.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "\033[32mMagicMirror installation successful!" -exit 0 diff --git a/package.json b/package.json index 31490b5f..21618fe1 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "server": "node ./serveronly", "install": "cd vendor && npm install", "install-fonts": "cd fonts && npm install", - "postinstall": "sh untrack-css.sh && sh installers/postinstall/postinstall.sh && npm run install-fonts", + "postinstall": "npm run install-fonts", "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", From e2afee32755a075968760c2e19bf4fd311c40853 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 14:39:50 +0100 Subject: [PATCH 040/219] Add feedback. --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 21618fe1..6209067e 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "scripts": { "start": "./node_modules/.bin/electron js/electron.js", "server": "node ./serveronly", - "install": "cd vendor && npm install", - "install-fonts": "cd fonts && npm install", - "postinstall": "npm run install-fonts", + "install": "echo \"Installing vendor files ...\n\n\" && cd vendor && npm install --loglevel=error", + "install-fonts": "echo \"Installing fonts ...\n\n\" && cd fonts && npm install --loglevel=error", + "postinstall": "npm run install-fonts && echo \"Installing done! Use `npm start` to start MagicMirror. \n\n\"", "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", From 1b38e73eb201d33ae2badad70d1b93b1027d1aaf Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 14:41:46 +0100 Subject: [PATCH 041/219] Fix install scripts. --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6209067e..091aec66 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "scripts": { "start": "./node_modules/.bin/electron js/electron.js", "server": "node ./serveronly", - "install": "echo \"Installing vendor files ...\n\n\" && cd vendor && npm install --loglevel=error", - "install-fonts": "echo \"Installing fonts ...\n\n\" && cd fonts && npm install --loglevel=error", - "postinstall": "npm run install-fonts && echo \"Installing done! Use `npm start` to start MagicMirror. \n\n\"", + "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", + "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", + "postinstall": "npm run install-fonts && echo \"\nInstallation done! \"", "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", From 65b1d61295d4b3cc552f4c4c84544495f2a2d008 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 14:43:43 +0100 Subject: [PATCH 042/219] Improve feedback. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 091aec66..3786b79d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "server": "node ./serveronly", "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", - "postinstall": "npm run install-fonts && echo \"\nInstallation done! \"", + "postinstall": "npm run install-fonts && echo \"Installation finished successfully! \n\"", "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", From e2d4a0fde8f2dfac7a6acb7a041538281f46092f Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 14:52:52 +0100 Subject: [PATCH 043/219] Improve Feedback. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3786b79d..9c753db7 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "server": "node ./serveronly", "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", - "postinstall": "npm run install-fonts && echo \"Installation finished successfully! \n\"", + "postinstall": "npm run install-fonts && echo \"MagicMirror installation finished successfully! \n\"", "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", From 8ef8388c3289ce041ecb8aeb09d96b8844bd090e Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 15:02:47 +0100 Subject: [PATCH 044/219] Set default DISPLAY in package.json. --- js/electron.js | 5 ----- package.json | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/js/electron.js b/js/electron.js index 77820db2..c5e9c4cb 100644 --- a/js/electron.js +++ b/js/electron.js @@ -1,10 +1,5 @@ /* jshint esversion: 6 */ -if (!process.env.DISPLAY) { - console.log("DISPLAY environment variable not set. Using DISPLAY=:0"); - process.env.DISPLAY = ":0"; -} - "use strict"; const electron = require("electron"); diff --git a/package.json b/package.json index 9c753db7..1b150ed4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { - "start": "./node_modules/.bin/electron js/electron.js", + "start": "DISPLAY=\"${DISPLAY:=:0}\" ./node_modules/.bin/electron js/electron.js", "server": "node ./serveronly", "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", From a41bae3132d046a3d30a79dd1ffbff3b70286b76 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 15:05:26 +0100 Subject: [PATCH 045/219] Cleanup --- CHANGELOG.md | 3 ++- installers/pm2_MagicMirror.json | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 installers/pm2_MagicMirror.json diff --git a/CHANGELOG.md b/CHANGELOG.md index a97536ba..bfcfe878 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). *This release is scheduled to be released on 2020-04-01.* ### Deleted -- cleanup installers folder, remove externalized scripts +- Remove installers. +- Remove externalized scripts. ### Added - Ukrainian translation. diff --git a/installers/pm2_MagicMirror.json b/installers/pm2_MagicMirror.json deleted file mode 100644 index 3f905020..00000000 --- a/installers/pm2_MagicMirror.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "apps" : [{ - "name" : "MagicMirror", - "script" : "/home/pi/MagicMirror/installers/mm.sh", - "watch" : ["/home/pi/MagicMirror/config/config.js"] - }] -} From cbcc893f649bfc370f3b5f59308b2e0f94ed3ce6 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 15:16:23 +0100 Subject: [PATCH 046/219] Restore MM.sh to keep PM2 working. --- installers/mm.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100755 installers/mm.sh diff --git a/installers/mm.sh b/installers/mm.sh new file mode 100755 index 00000000..f5a65fbe --- /dev/null +++ b/installers/mm.sh @@ -0,0 +1,3 @@ +# This file is still here to keep PM2 working on older installations. +cd ~/MagicMirror +DISPLAY=:0 npm start. \ No newline at end of file From 19afd89df51147d49888afdd505b8b8b8a0e1e34 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 16:48:35 +0100 Subject: [PATCH 047/219] Fix Typo --- installers/mm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/mm.sh b/installers/mm.sh index f5a65fbe..cbbadd24 100755 --- a/installers/mm.sh +++ b/installers/mm.sh @@ -1,3 +1,3 @@ # This file is still here to keep PM2 working on older installations. cd ~/MagicMirror -DISPLAY=:0 npm start. \ No newline at end of file +DISPLAY=:0 npm start From 1315aceb44913988bda73e2fbd4c2996df40d178 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 17:41:49 +0100 Subject: [PATCH 048/219] Remove duplicate 2.11 entry. --- CHANGELOG.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfcfe878..7d22bbc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,15 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core. - -## [2.11.0] - 2020-01-24 - -### Changed -- Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. -- Remove `run-start.sh` script and update start commands: - - To start using electron, use `npm run start`. - - To start in server only mode, use `npm run server`. +❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² ## [2.11.0] - Unreleased (Develop Branch) @@ -36,6 +28,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). +- Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. +- Removed `run-start.sh` script and update start commands: + - To start using electron, use `npm run start`. + - To start in server only mode, use `npm run server`. ## [2.10.1] - 2020-01-10 From 561827e8967aff98231a1439622074594c0c5a30 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Sat, 1 Feb 2020 19:12:05 +0100 Subject: [PATCH 049/219] Remove logging. --- CHANGELOG.md | 3 ++- js/module.js | 4 ++-- modules/default/calendar/calendar.js | 2 -- modules/default/newsfeed/newsfeed.js | 3 --- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d22bbc2..603ac1b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,12 +26,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false -### Updated +### Changed - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). - Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. - Removed `run-start.sh` script and update start commands: - To start using electron, use `npm run start`. - To start in server only mode, use `npm run server`. +- Remove redundant logging from modules. ## [2.10.1] - 2020-01-10 diff --git a/js/module.js b/js/module.js index 62bf80ce..a245db52 100644 --- a/js/module.js +++ b/js/module.js @@ -151,9 +151,9 @@ var Module = Class.extend({ */ notificationReceived: function (notification, payload, sender) { if (sender) { - Log.log(this.name + " received a module notification: " + notification + " from sender: " + sender.name); + // Log.log(this.name + " received a module notification: " + notification + " from sender: " + sender.name); } else { - Log.log(this.name + " received a system notification: " + notification); + // Log.log(this.name + " received a system notification: " + notification); } }, diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 9c91afe5..2678edae 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -138,8 +138,6 @@ Module.register("calendar", { this.loaded = true; } else if (notification === "INCORRECT_URL") { Log.error("Calendar Error. Incorrect url: " + payload.url); - } else { - Log.log("Calendar received an unknown socket notification: " + notification); } this.updateDom(this.config.animationSpeed); diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index d358110c..9738ccc4 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -367,7 +367,6 @@ Module.register("newsfeed",{ }, notificationReceived: function(notification, payload, sender) { - Log.info(this.name + " - received notification: " + notification); if(notification === "ARTICLE_NEXT"){ var before = this.activeItem; this.activeItem++; @@ -425,8 +424,6 @@ Module.register("newsfeed",{ desc: this.newsItems[this.activeItem].description, url: this.getActiveItemURL() }); - } else { - Log.info(this.name + " - unknown notification, ignoring: " + notification); } }, From 65ea341ed062662a6db48984ebfcf48e519c3cdc Mon Sep 17 00:00:00 2001 From: Rico Date: Mon, 3 Feb 2020 21:39:46 +0100 Subject: [PATCH 050/219] feat: use date in log timestamp I find it quite hard to look something up in the logs, when there is no date in the log file. The time itself is not sufficient for debugging, hence I suggest also logging the date. --- js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/app.js b/js/app.js index 08612dd8..ef66a44c 100644 --- a/js/app.js +++ b/js/app.js @@ -14,7 +14,7 @@ var path = require("path"); require("module-alias/register"); // add timestamps in front of log messages -require("console-stamp")(console, "HH:MM:ss.l"); +require("console-stamp")(console, "yyyy-mm-dd HH:MM:ss.l"); // Get version number. global.version = JSON.parse(fs.readFileSync("package.json", "utf8")).version; From e160f9a0f6f470515f70a581524c962b74e657dc Mon Sep 17 00:00:00 2001 From: Rico Date: Mon, 3 Feb 2020 21:43:45 +0100 Subject: [PATCH 051/219] docs: add info about changed timestamp in changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d22bbc2..be681cbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Removed `run-start.sh` script and update start commands: - To start using electron, use `npm run start`. - To start in server only mode, use `npm run server`. +- Timestamp in log output now also contains the date ## [2.10.1] - 2020-01-10 From 5511c15921d15522db6a66e21cbdb30f187201db Mon Sep 17 00:00:00 2001 From: karenorman Date: Wed, 5 Feb 2020 10:23:49 +0800 Subject: [PATCH 052/219] Update description in config.js.sample --- config/config.js.sample | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index 90610106..01a41caa 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -21,9 +21,9 @@ var config = { // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], - useHttps: false, // Support HTTPS or not - httpsPrivateKey: "", // HTTPS Private Key path - httpsCertificate: "", // HTTPS Certificate path + useHttps: false, // Support HTTPS or not, default "false" will use HTTP + httpsPrivateKey: "", // HTTPS private key path, only require when useHttps is true + httpsCertificate: "", // HTTPS Certificate path, only require when useHttps is true language: "en", timeFormat: 24, From 271f1cd71b5d106ebd39e66c5d3bcbdc444dfb2a Mon Sep 17 00:00:00 2001 From: sergge1 <49363121+sergge1@users.noreply.github.com> Date: Thu, 6 Feb 2020 00:04:48 +0200 Subject: [PATCH 053/219] to make logic of name to actual behaviour hideTemp = false -> temp shold appear at the MM hideTemp === true -> should not appear. This is the logic. Worked vise versa, just corrected in the code --- 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 2f58de5b..ac9e251d 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -217,7 +217,7 @@ Module.register("currentweather",{ this.config.decimalSymbol = "."; } - if (this.config.hideTemp === true) { + if (this.config.hideTemp === false) { var weatherIcon = document.createElement("span"); weatherIcon.className = "wi weathericon " + this.weatherType; large.appendChild(weatherIcon); From d5c02d10318966c5ea225376904659c0f20726a9 Mon Sep 17 00:00:00 2001 From: Stjepan Date: Sun, 9 Feb 2020 10:22:41 +0100 Subject: [PATCH 054/219] Update hr.json Fix FEELS translation in Croatian. --- translations/hr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/hr.json b/translations/hr.json index d714cc7b..6ed6d314 100644 --- a/translations/hr.json +++ b/translations/hr.json @@ -31,5 +31,5 @@ "UPDATE_INFO_SINGLE": "Instalirana verzija {COMMIT_COUNT} commit kasni za branch-om {BRANCH_NAME}.", "UPDATE_INFO_MULTIPLE": "Instalirana verzija {COMMIT_COUNT} commit-ova kasni za branch-om {BRANCH_NAME}.", - "FEELS": "Osjeća" + "FEELS": "Osjećaj" } From 845c2571fe35f225726f81c843e5cc915f70a78f Mon Sep 17 00:00:00 2001 From: Stjepan Date: Sun, 9 Feb 2020 10:24:20 +0100 Subject: [PATCH 055/219] Update CHANGELOG.md Fix FEELS translation in Croatian --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0debd80f..c6a9a6d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false +- Fix FEELS translation for Croatian ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). From f4c3e412a2103d50555cfbde62453eae1fffde10 Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Sun, 9 Feb 2020 21:59:51 -0800 Subject: [PATCH 056/219] fix bugs in showMoonTimes in clock module 1. as reported on https://github.com/MichMich/MagicMirror/pull/1885, toLocaleString is not supported on old iPad Safari 2. SunCalc.getMoonTimes returns moonRise/moonSet times for the given date, so moonRise can be after moonSet. We want to display the most relevant times, which are today's moonRise and the next moonSet. --- modules/default/clock/clock.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 96c31143..6e70f1e2 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -179,11 +179,19 @@ Module.register("clock",{ if (this.config.showMoonTimes) { const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); const moonTimes = SunCalc.getMoonTimes(now, this.config.lat, this.config.lon); - const isVisible = now.isBetween(moonTimes.rise, moonTimes.set); - const illuminatedFractionString = moonIllumination.fraction.toLocaleString(undefined, {style: 'percent'}); + const moonRise = moonTimes.rise; + var moonSet; + if (moment(moonTimes.set).isAfter(moonTimes.rise)) { + moonSet = moonTimes.set; + } else { + const nextMoonTimes = SunCalc.getMoonTimes(now.clone().add(1, 'day'), this.config.lat, this.config.lon); + moonSet = nextMoonTimes.set; + } + const isVisible = now.isBetween(moonRise, moonSet) || moonTimes.alwaysUp === true; + const illuminatedFractionString = moonIllumination.fraction.toFixed(2) * 100 + '%'; moonWrapper.innerHTML = ' ' + illuminatedFractionString + '' + - ' ' + formatTime(this.config, moonTimes.rise) + ''+ - ' ' + formatTime(this.config, moonTimes.set) + ''; + ' ' + (moonRise ? formatTime(this.config, moonRise) : '...') + ''+ + ' ' + (moonSet ? formatTime(this.config, moonSet) : '...') + ''; } /**************************************************************** From de6a9f5811786b0fe64d67425851740af48a4883 Mon Sep 17 00:00:00 2001 From: Felix Wiedenbach Date: Mon, 10 Feb 2020 18:56:55 +0100 Subject: [PATCH 057/219] fix timing issue in weather tests => returning response by url instead of index --- tests/e2e/modules/weather_spec.js | 45 ++++++++----------- tests/node_modules/webdriverajaxstub/index.js | 4 +- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index dad11f50..ea916e5e 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -8,14 +8,7 @@ const helpers = require("../global-setup"); const {generateWeather, generateWeatherForecast} = require("./mocks"); -const wait = () => new Promise(res => setTimeout(res, 3000)); - -// See issue: https://github.com/MichMich/MagicMirror/issues/1840 -// Skipping the weather tests for now since these seem to give issues. -// Please send a PR if you know how to fix these. Thanks! - - -describe.skip("Weather module", function() { +describe("Weather module", function() { let app; @@ -49,7 +42,7 @@ describe.skip("Weather module", function() { it("should render wind speed and wind direction", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "6 WSW", 10000); }); @@ -59,7 +52,7 @@ describe.skip("Weather module", function() { const sunset = moment().startOf("day").unix(); const weather = generateWeather({sys: {sunrise, sunset}}); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather .normal.medium span.wi.dimmed.wi-sunrise", 10000); @@ -71,7 +64,7 @@ describe.skip("Weather module", function() { const sunset = moment().endOf("day").unix(); const weather = generateWeather({sys: {sunrise, sunset}}); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather .normal.medium span.wi.dimmed.wi-sunset", 10000); @@ -80,7 +73,7 @@ describe.skip("Weather module", function() { it("should render temperature with icon", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather .large.light span.wi.weathericon.wi-snow", 10000); @@ -89,7 +82,7 @@ describe.skip("Weather module", function() { it("should render feels like temperature", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); return app.client.waitUntilTextExists(".weather .normal.medium span.dimmed", "Feels like -5.6°", 10000); }); @@ -102,14 +95,14 @@ describe.skip("Weather module", function() { it("should render useBeaufort = false", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "12", 10000); }); it("should render showWindDirectionAsArrow = true", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather .normal.medium sup i.fa-long-arrow-up", 10000); const element = await app.client.getHTML(".weather .normal.medium sup i.fa-long-arrow-up"); @@ -119,7 +112,7 @@ describe.skip("Weather module", function() { it("should render showHumidity = true", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(3)", "93", 10000); return app.client.waitForExist(".weather .normal.medium sup i.wi-humidity", 10000); @@ -127,7 +120,7 @@ describe.skip("Weather module", function() { it("should render degreeLabel = true", async function() { const weather = generateWeather(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitUntilTextExists(".weather .large.light span.bright", "1°C", 10000); @@ -151,7 +144,7 @@ describe.skip("Weather module", function() { speed: 11.8 * 2.23694 }, }); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "6 WSW", 10000); await app.client.waitUntilTextExists(".weather .large.light span.bright", "34,7°", 10000); @@ -169,7 +162,7 @@ describe.skip("Weather module", function() { speed: 11.8 * 2.23694 }, }); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(3)", "93,7", 10000); await app.client.waitUntilTextExists(".weather .large.light span.bright", "34,7°", 10000); @@ -192,7 +185,7 @@ describe.skip("Weather module", function() { it("should render days", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); const days = ["Fri", "Sat", "Sun", "Mon", "Tue"]; @@ -203,7 +196,7 @@ describe.skip("Weather module", function() { it("should render icons", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); const icons = ["day-cloudy", "rain", "day-sunny", "day-sunny", "day-sunny"]; @@ -214,7 +207,7 @@ describe.skip("Weather module", function() { it("should render max temperatures", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); const temperatures = ["24.4°", "21.0°", "22.9°", "23.4°", "20.6°"]; @@ -225,7 +218,7 @@ describe.skip("Weather module", function() { it("should render min temperatures", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); const temperatures = ["15.3°", "13.6°", "13.8°", "13.9°", "10.9°"]; @@ -236,7 +229,7 @@ describe.skip("Weather module", function() { it("should render fading of rows", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); const opacities = [1, 1, 0.8, 0.5333333333333333, 0.2666666666666667]; @@ -256,14 +249,14 @@ describe.skip("Weather module", function() { it("should render custom table class", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather table.myTableClass", 10000); }); it("should render colored rows", async function() { const weather = generateWeatherForecast(); - await setup([weather, template]); + await setup({template, data: weather}); await app.client.waitForExist(".weather table.myTableClass", 10000); diff --git a/tests/node_modules/webdriverajaxstub/index.js b/tests/node_modules/webdriverajaxstub/index.js index ed524ddb..031de5ac 100644 --- a/tests/node_modules/webdriverajaxstub/index.js +++ b/tests/node_modules/webdriverajaxstub/index.js @@ -3,7 +3,7 @@ function plugin (wdInstance, requests) { throw new Error("You can't use WebdriverAjaxStub with this version of WebdriverIO"); } - function stub(requests, done) { + function stub({template, data}, done) { window.XMLHttpRequest = function () { this.open = function (method, url) { this.method = method; @@ -13,7 +13,7 @@ function plugin (wdInstance, requests) { this.send = function () { this.status = 200; this.readyState = 4; - const response = requests.shift() || []; + const response = this.url.includes('.njk') ? template : data; this.response = response; this.responseText = response; this.onreadystatechange(); From cd7b6450c6d472cd2eb2f1e23141e81603caed5e Mon Sep 17 00:00:00 2001 From: fewieden Date: Mon, 10 Feb 2020 21:51:29 +0100 Subject: [PATCH 058/219] Run tests also on lts and last stable version of nodejs --- .travis.yml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5f8f6024..b6f2e352 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,24 @@ dist: trusty language: node_js node_js: - - "10" + - 10 + - lts/* + - node before_install: - npm i -g npm before_script: - - yarn danger ci - - npm install grunt-cli -g - - "export DISPLAY=:99.0" - - "export ELECTRON_DISABLE_SANDBOX=1" - - "sh -e /etc/init.d/xvfb start" - - sleep 5 + - yarn danger ci + - npm install grunt-cli -g + - "export DISPLAY=:99.0" + - "export ELECTRON_DISABLE_SANDBOX=1" + - "sh -e /etc/init.d/xvfb start" + - sleep 5 script: -- npm run test:e2e -- npm run test:unit -- grunt + - npm run test:e2e + - npm run test:unit + - grunt after_script: - - npm list + - npm list cache: - directories: - - node_modules + directories: + - node_modules From 56392e41d0d6803a9cf5cdf2a2f3fca5b082ef90 Mon Sep 17 00:00:00 2001 From: fewieden Date: Mon, 10 Feb 2020 22:05:43 +0100 Subject: [PATCH 059/219] Add 1840 to changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0debd80f..49128c11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,13 +20,14 @@ This project adheres to [Semantic Versioning](http://semver.org/). - The `clock` module now optionally displays sun and moon data, including rise/set times, remaining daylight, and percent of moon illumination. - Added Hebrew translation. - Add HTTPS support and update config.js.sample - +- Run tests on long term support and latest stable version of nodejs ### Fixed - Force declaration of public ip adress in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false +- Fixed weather tests [#1840](https://github.com/MichMich/MagicMirror/issues/1840) ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). From c925e8847522e0f122778fac82b3b4fca5d49bf7 Mon Sep 17 00:00:00 2001 From: buxxi Date: Tue, 11 Feb 2020 18:13:39 +0100 Subject: [PATCH 060/219] Adding support for ignoring update check for certain modules --- CHANGELOG.md | 1 + .../default/updatenotification/node_helper.js | 27 ++++++++++++++----- .../updatenotification/updatenotification.js | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0debd80f..c9bf13c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - The `clock` module now optionally displays sun and moon data, including rise/set times, remaining daylight, and percent of moon illumination. - Added Hebrew translation. - Add HTTPS support and update config.js.sample +- Added the ability to configure a list of modules that shouldn't be update checked. ### Fixed diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 03ecd745..818697c0 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -22,7 +22,7 @@ module.exports = NodeHelper.create({ simpleGits.push({"module": "default", "git": SimpleGit(path.normalize(__dirname + "/../../../"))}); for (moduleName in modules) { - if (defaultModules.indexOf(moduleName) < 0) { + if (!this.ignoreUpdateChecking(moduleName)) { // Default modules are included in the main MagicMirror repo var moduleFolder = path.normalize(__dirname + "/../../" + moduleName); @@ -56,15 +56,15 @@ module.exports = NodeHelper.create({ this.config = payload; } else if(notification === "MODULES") { // if this is the 1st time thru the update check process - if(this.updateProcessStarted==false ){ - this.updateProcessStarted=true; + if (!this.updateProcessStarted) { + this.updateProcessStarted = true; this.configureModules(payload); - this.preformFetch(); + this.performFetch(); } } }, - preformFetch() { + performFetch() { var self = this; simpleGits.forEach(function(sg) { sg.git.fetch().status(function(err, data) { @@ -91,8 +91,23 @@ module.exports = NodeHelper.create({ var self = this; clearTimeout(this.updateTimer); this.updateTimer = setTimeout(function() { - self.preformFetch(); + self.performFetch(); }, delay); + }, + + ignoreUpdateChecking: function(moduleName) { + // Should not check for updates for default modules + if (defaultModules.indexOf(moduleName) >= 0) { + return true; + } + + // Should not check for updates for ignored modules + if (this.config.ignoreModules.indexOf(moduleName) >= 0) { + return true; + } + + // The rest of the modules that passes should check for updates + return false; } }); diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index d4bdc568..35a018bf 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -3,6 +3,7 @@ Module.register("updatenotification", { defaults: { updateInterval: 10 * 60 * 1000, // every 10 minutes refreshInterval: 24 * 60 * 60 * 1000, // one day + ignoreModules: [] }, suspended: false, From 75c8c3f50bd4176197805cd74eaa1f1264dac94e Mon Sep 17 00:00:00 2001 From: buxxi Date: Mon, 17 Feb 2020 22:56:06 +0100 Subject: [PATCH 061/219] Using promises to resolve which modules has a git remote so the modules wont be skipped on the first check --- CHANGELOG.md | 1 + .../default/updatenotification/node_helper.js | 49 +++++++++++-------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1e671f4..91142e06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false - Fix FEELS translation for Croatian - Fixed weather tests [#1840](https://github.com/MichMich/MagicMirror/issues/1840) +- Fix update checking skipping 3rd party modules the first time ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 818697c0..4386b146 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -18,37 +18,30 @@ module.exports = NodeHelper.create({ configureModules: function(modules) { // Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten - // others will be added in front, asynchronously + // others will be added in front + // this method returns promises so we can't wait for every one to resolve before continuing simpleGits.push({"module": "default", "git": SimpleGit(path.normalize(__dirname + "/../../../"))}); + var promises = []; + for (moduleName in modules) { if (!this.ignoreUpdateChecking(moduleName)) { // Default modules are included in the main MagicMirror repo var moduleFolder = path.normalize(__dirname + "/../../" + moduleName); - var stat; try { //console.log("checking git for module="+moduleName) - stat = fs.statSync(path.join(moduleFolder, ".git")); + let stat = fs.statSync(path.join(moduleFolder, ".git")); + promises.push(this.resolveRemote(moduleName, moduleFolder)); } catch(err) { // Error when directory .git doesn't exist // This module is not managed with git, skip continue; } - - var res = function(mn, mf) { - var git = SimpleGit(mf); - git.getRemotes(true, function(err, remotes) { - if (remotes.length < 1 || remotes[0].name.length < 1) { - // No valid remote for folder, skip - return; - } - // Folder has .git and has at least one git remote, watch this folder - simpleGits.unshift({"module": mn, "git": git}); - }); - }(moduleName, moduleFolder); } } + + return Promise.all(promises); }, socketNotificationReceived: function (notification, payload) { @@ -58,19 +51,33 @@ module.exports = NodeHelper.create({ // if this is the 1st time thru the update check process if (!this.updateProcessStarted) { this.updateProcessStarted = true; - this.configureModules(payload); - this.performFetch(); + this.configureModules(payload).then(() => this.performFetch()); } } }, - performFetch() { + resolveRemote: function(moduleName, moduleFolder) { + return new Promise((resolve, reject) => { + var git = SimpleGit(moduleFolder); + git.getRemotes(true, (err, remotes) => { + if (remotes.length < 1 || remotes[0].name.length < 1) { + // No valid remote for folder, skip + return resolve(); + } + // Folder has .git and has at least one git remote, watch this folder + simpleGits.unshift({"module": moduleName, "git": git}); + resolve(); + }); + }); + }, + + performFetch: function() { var self = this; - simpleGits.forEach(function(sg) { - sg.git.fetch().status(function(err, data) { + simpleGits.forEach((sg) => { + sg.git.fetch().status((err, data) => { data.module = sg.module; if (!err) { - sg.git.log({"-1": null}, function(err, data2) { + sg.git.log({"-1": null}, (err, data2) => { if (!err && data2.latest && "hash" in data2.latest) { data.hash = data2.latest.hash; self.sendSocketNotification("STATUS", data); From 7b56817ae60f0e010792cd60e5000fc2edb9bbba Mon Sep 17 00:00:00 2001 From: Leon Kiefer Date: Tue, 18 Feb 2020 17:09:25 +0100 Subject: [PATCH 062/219] use relative path for socket.io fix #1934 --- CHANGELOG.md | 1 + index.html | 2 +- js/socketclient.js | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1e671f4..16babe83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false - Fix FEELS translation for Croatian - Fixed weather tests [#1840](https://github.com/MichMich/MagicMirror/issues/1840) +- Fixed Socket.io can't be used with Reverse Proxy in serveronly mode [#1934](https://github.com/MichMich/MagicMirror/issues/1934) ### Updated - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). diff --git a/index.html b/index.html index d8604256..5a46bb72 100644 --- a/index.html +++ b/index.html @@ -37,7 +37,7 @@
- + diff --git a/js/socketclient.js b/js/socketclient.js index baead68e..62341f27 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -8,7 +8,9 @@ var MMSocket = function(moduleName) { self.moduleName = moduleName; // Private Methods - self.socket = io("/" + self.moduleName); + self.socket = io("/" + self.moduleName, { + path: window.location.pathname + "/socket.io" + }); var notificationCallback = function() {}; var onevent = self.socket.onevent; From b6fc063c754830a07ed5090611f84f31e36dce46 Mon Sep 17 00:00:00 2001 From: mustafa <971530+tosbaha@users.noreply.github.com> Date: Wed, 19 Feb 2020 15:21:25 +0300 Subject: [PATCH 063/219] Turkish translation updated --- translations/tr.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/translations/tr.json b/translations/tr.json index c79956b8..61726f6d 100644 --- a/translations/tr.json +++ b/translations/tr.json @@ -3,8 +3,11 @@ "TODAY": "Bugün", "TOMORROW": "Yarın", + "DAYAFTERTOMORROW": "İki gün içinde", "RUNNING": "Biten", "EMPTY": "Yakında etkinlik yok.", + + "WEEK": "Hafta {weekNumber}", "N": "K", "NNE": "KKD", @@ -21,5 +24,14 @@ "W": "B", "WNW": "BKB", "NW": "KB", - "NNW": "KKB" + "NNW": "KKB", + + "UPDATE_NOTIFICATION": "MagicMirror² güncellemesi mevcut.", + "UPDATE_NOTIFICATION_MODULE": "{MODULE_NAME} modulü için güncelleme mevcut.", + "UPDATE_INFO_SINGLE": "Sahip olduğunuz kurulum {BRANCH_NAME} branchinden {COMMIT_COUNT} commit geridedir.", + "UPDATE_INFO_MULTIPLE": "Sahip olduğunuz kurulum {BRANCH_NAME} branchinden {COMMIT_COUNT} commit geridedir.", + + "FEELS": "Hissedilen", + "PRECIP": "Yağış" + } From 3b7df1d5c23bb024f140c2fdc61e3aed0660d702 Mon Sep 17 00:00:00 2001 From: mustafa <971530+tosbaha@users.noreply.github.com> Date: Wed, 19 Feb 2020 15:25:46 +0300 Subject: [PATCH 064/219] Changelog updated --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1e671f4..a2069abb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - To start using electron, use `npm run start`. - To start in server only mode, use `npm run server`. - Timestamp in log output now also contains the date +- Turkish translation. ## [2.10.1] - 2020-01-10 From 3f78c664eb79b0aef93c2708c3fdeb7d0e1fc023 Mon Sep 17 00:00:00 2001 From: Denis Treskunov Date: Wed, 19 Feb 2020 09:28:40 -0800 Subject: [PATCH 065/219] fix floating point bug in moon illumination calc --- 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 6e70f1e2..2490a0ce 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -188,7 +188,7 @@ Module.register("clock",{ moonSet = nextMoonTimes.set; } const isVisible = now.isBetween(moonRise, moonSet) || moonTimes.alwaysUp === true; - const illuminatedFractionString = moonIllumination.fraction.toFixed(2) * 100 + '%'; + const illuminatedFractionString = Math.round(moonIllumination.fraction * 100) + '%'; moonWrapper.innerHTML = ' ' + illuminatedFractionString + '' + ' ' + (moonRise ? formatTime(this.config, moonRise) : '...') + ''+ ' ' + (moonSet ? formatTime(this.config, moonSet) : '...') + ''; From 6aeec81072f19bbe6670efa8b4a2542a8651a279 Mon Sep 17 00:00:00 2001 From: Leon Kiefer Date: Wed, 19 Feb 2020 20:58:58 +0100 Subject: [PATCH 066/219] removed additional slash from the socket.io path --- js/socketclient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/socketclient.js b/js/socketclient.js index 62341f27..5e138636 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -9,7 +9,7 @@ var MMSocket = function(moduleName) { // Private Methods self.socket = io("/" + self.moduleName, { - path: window.location.pathname + "/socket.io" + path: window.location.pathname + "socket.io" }); var notificationCallback = function() {}; From c877b5fc70e339253b926155aa7b4fcfe82521fe Mon Sep 17 00:00:00 2001 From: Jose Forte Date: Fri, 21 Feb 2020 10:17:05 -0300 Subject: [PATCH 067/219] Add new default config to 'current weather' module --- modules/default/currentweather/currentweather.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 7d917132..c718ff1e 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -42,6 +42,7 @@ Module.register("currentweather",{ appendLocationNameToHeader: true, calendarClass: "calendar", + tableClass: "large", onlyTemp: false, roundTemp: false, @@ -174,6 +175,7 @@ Module.register("currentweather",{ // Override dom generator. getDom: function() { var wrapper = document.createElement("div"); + wrapper.className = this.config.tableClass; if (this.config.appid === "") { wrapper.innerHTML = "Please set the correct openweather appid in the config for module: " + this.name + "."; @@ -192,7 +194,7 @@ Module.register("currentweather",{ } var large = document.createElement("div"); - large.className = "large light"; + large.className = "light"; var weatherIcon = document.createElement("span"); weatherIcon.className = "wi weathericon " + this.weatherType; From f338b68f36d47e60b6495c41db3b98b5d3b26c4b Mon Sep 17 00:00:00 2001 From: Jose Forte Date: Fri, 21 Feb 2020 10:31:40 -0300 Subject: [PATCH 068/219] Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 464d8642..c4ec96b2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² core. +## [2.10.2] - 2020-02-21 + +### Added +- Option to configure the size of the currentweather module. + ## [2.10.1] - 2020-01-10 ### Changed From 5517a913d44c8781983f7e5577df13c1eb3fa67d Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 13 Feb 2020 08:35:09 +0100 Subject: [PATCH 069/219] Run linter manually --- config/config.js.sample | 2 +- js/server.js | 4 ++-- modules/default/clock/clock.js | 16 ++++++++-------- tests/node_modules/webdriverajaxstub/index.js | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index 01a41caa..67656392 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -24,7 +24,7 @@ var config = { useHttps: false, // Support HTTPS or not, default "false" will use HTTP httpsPrivateKey: "", // HTTPS private key path, only require when useHttps is true httpsCertificate: "", // HTTPS Certificate path, only require when useHttps is true - + language: "en", timeFormat: 24, units: "metric", diff --git a/js/server.js b/js/server.js index 19bdfb91..185790af 100644 --- a/js/server.js +++ b/js/server.js @@ -25,13 +25,13 @@ var Server = function(config, callback) { var options = { key: fs.readFileSync(config.httpsPrivateKey), cert: fs.readFileSync(config.httpsCertificate) - } + }; server = require("https").Server(options, app); }else{ server = require("http").Server(app); } var io = require("socket.io")(server); - + console.log("Starting server on port " + port + " ... "); server.listen(port, config.address ? config.address : "localhost"); diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 2490a0ce..ab17a3c7 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -152,9 +152,9 @@ Module.register("clock",{ } function formatTime(config, time) { - var formatString = hourSymbol + ':mm'; + var formatString = hourSymbol + ":mm"; if (config.showPeriod && config.timeFormat !== 24) { - formatString += config.showPeriodUpper ? 'A' : 'a'; + formatString += config.showPeriodUpper ? "A" : "a"; } return moment(time).format(formatString); } @@ -167,14 +167,14 @@ Module.register("clock",{ } else if (now.isBefore(sunTimes.sunset)) { nextEvent = sunTimes.sunset; } else { - const tomorrowSunTimes = SunCalc.getTimes(now.clone().add(1, 'day'), this.config.lat, this.config.lon); + const tomorrowSunTimes = SunCalc.getTimes(now.clone().add(1, "day"), this.config.lat, this.config.lon); nextEvent = tomorrowSunTimes.sunrise; } const untilNextEvent = moment.duration(moment(nextEvent).diff(now)); - const untilNextEventString = untilNextEvent.hours() + 'h ' + untilNextEvent.minutes() + 'm'; - sunWrapper.innerHTML = ' ' + untilNextEventString + '' + - '' + formatTime(this.config, sunTimes.sunrise) + '' + - '' + formatTime(this.config, sunTimes.sunset) + ''; + const untilNextEventString = untilNextEvent.hours() + "h " + untilNextEvent.minutes() + "m"; + sunWrapper.innerHTML = " " + untilNextEventString + "" + + "" + formatTime(this.config, sunTimes.sunrise) + "" + + "" + formatTime(this.config, sunTimes.sunset) + ""; } if (this.config.showMoonTimes) { const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); @@ -184,7 +184,7 @@ Module.register("clock",{ if (moment(moonTimes.set).isAfter(moonTimes.rise)) { moonSet = moonTimes.set; } else { - const nextMoonTimes = SunCalc.getMoonTimes(now.clone().add(1, 'day'), this.config.lat, this.config.lon); + const nextMoonTimes = SunCalc.getMoonTimes(now.clone().add(1, "day"), this.config.lat, this.config.lon); moonSet = nextMoonTimes.set; } const isVisible = now.isBetween(moonRise, moonSet) || moonTimes.alwaysUp === true; diff --git a/tests/node_modules/webdriverajaxstub/index.js b/tests/node_modules/webdriverajaxstub/index.js index 031de5ac..186033b6 100644 --- a/tests/node_modules/webdriverajaxstub/index.js +++ b/tests/node_modules/webdriverajaxstub/index.js @@ -13,7 +13,7 @@ function plugin (wdInstance, requests) { this.send = function () { this.status = 200; this.readyState = 4; - const response = this.url.includes('.njk') ? template : data; + const response = this.url.includes(".njk") ? template : data; this.response = response; this.responseText = response; this.onreadystatechange(); From 6c926b8876bea847bee58daf2386514a50165144 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 8 Mar 2020 16:23:27 +0100 Subject: [PATCH 070/219] Add husky for pre-commit hook --- modules/default/clock/clock.js | 8 +- package-lock.json | 198 +++++++++++++++++++++++++++++++-- package.json | 6 + vendor/package-lock.json | 25 +++-- 4 files changed, 219 insertions(+), 18 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index ab17a3c7..08dcced0 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -188,10 +188,10 @@ Module.register("clock",{ moonSet = nextMoonTimes.set; } const isVisible = now.isBetween(moonRise, moonSet) || moonTimes.alwaysUp === true; - const illuminatedFractionString = Math.round(moonIllumination.fraction * 100) + '%'; - moonWrapper.innerHTML = ' ' + illuminatedFractionString + '' + - ' ' + (moonRise ? formatTime(this.config, moonRise) : '...') + ''+ - ' ' + (moonSet ? formatTime(this.config, moonSet) : '...') + ''; + const illuminatedFractionString = Math.round(moonIllumination.fraction * 100) + "%"; + moonWrapper.innerHTML = " " + illuminatedFractionString + "" + + " " + (moonRise ? formatTime(this.config, moonRise) : "...") + ""+ + " " + (moonSet ? formatTime(this.config, moonSet) : "...") + ""; } /**************************************************************** diff --git a/package-lock.json b/package-lock.json index 2509883d..077f1ff3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1048,6 +1048,12 @@ } } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "clarinet": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/clarinet/-/clarinet-0.12.4.tgz", @@ -1198,6 +1204,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -2579,6 +2591,15 @@ "pinkie-promise": "^2.0.0" } }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, "findup-sync": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", @@ -3100,12 +3121,12 @@ } }, "grunt-markdownlint": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/grunt-markdownlint/-/grunt-markdownlint-2.8.0.tgz", - "integrity": "sha512-3HNNKB1C+qC+iB9ecDGymQMv2CVx+XHFxP3e1n/d1lE44GvJOaJFYCS6IgAc//Fhcz4v4X9XJCHDCTfAWuq5gg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/grunt-markdownlint/-/grunt-markdownlint-2.9.0.tgz", + "integrity": "sha512-jLzTzNVZN/u2iblV2j+2xfJGG+Mv8NMl5CAOWNQftV7SOHnstwR/tiZPac8ZTmJFqwAqCwafIvu9wP2naAS8Og==", "dev": true, "requires": { - "markdownlint": "^0.18.0" + "markdownlint": "^0.19.0" } }, "grunt-stylelint": { @@ -3449,6 +3470,76 @@ "debug": "^3.1.0" } }, + "husky": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", + "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.5.1", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -4417,9 +4508,9 @@ "dev": true }, "markdownlint": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.18.0.tgz", - "integrity": "sha512-nQAfK9Pbq0ZRoMC/abNGterEnV3kL8MZmi0WHhw8WJKoIbsm3cXGufGsxzCRvjW15cxe74KWcxRSKqwplS26Bw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.19.0.tgz", + "integrity": "sha512-+MsWOnYVUH4klcKM7iRx5cno9FQMDAb6FC6mWlZkeXPwIaK6Z5Vd9VkXkykPidRqmLHU2wI+MNyfUMnUCBw3pQ==", "dev": true, "requires": { "markdown-it": "10.0.0" @@ -5207,6 +5298,12 @@ "mimic-fn": "^2.1.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -5504,6 +5601,75 @@ "integrity": "sha1-DPd1eml38b9/ajIge3CeN3OI6HQ=", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, "plur": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", @@ -6294,6 +6460,18 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -8212,6 +8390,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index 1b150ed4..bb431a74 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "grunt-stylelint": "latest", "grunt-yamllint": "latest", "http-auth": "^3.2.3", + "husky": "^4.2.3", "jsdom": "^11.6.2", "jshint": "^2.10.2", "mocha": "^7.0.0", @@ -79,5 +80,10 @@ }, "_moduleAliases": { "node_helper": "js/node_helper.js" + }, + "husky": { + "hooks": { + "pre-commit": "npm run lint" + } } } diff --git a/vendor/package-lock.json b/vendor/package-lock.json index 61c1d19e..3253cc4e 100644 --- a/vendor/package-lock.json +++ b/vendor/package-lock.json @@ -703,6 +703,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "optional": true, "requires": { "is-glob": "^2.0.0" } @@ -716,7 +717,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "optional": true }, "invert-kv": { "version": "1.0.0", @@ -735,7 +737,8 @@ "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "optional": true }, "is-dotfile": { "version": "1.0.3", @@ -761,7 +764,8 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -775,6 +779,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -803,7 +808,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true }, "isobject": { "version": "2.1.0", @@ -818,6 +824,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -883,6 +890,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -1031,12 +1039,14 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "optional": true }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "optional": true }, "repeat-string": { "version": "1.6.1", @@ -1047,7 +1057,8 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "optional": true }, "set-immediate-shim": { "version": "1.0.1", From ca2571b4389d03090a8fd9f41e4284f44f7c2c0c Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 8 Mar 2020 16:31:34 +0100 Subject: [PATCH 071/219] Update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0236e6de..3e8a9643 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,9 +22,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Add HTTPS support and update config.js.sample - Run tests on long term support and latest stable version of nodejs - Added the ability to configure a list of modules that shouldn't be update checked. +- Run linters on git commits ### Fixed -- Force declaration of public ip adress in config file (ISSUE #1852) +- Force declaration of public ip address in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) - Fix regression in currentweather module causing 'undefined' to show up when config.hideTemp is false @@ -584,7 +585,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Added option `remoteFile` to compliments module to load compliment array from filesystem. - Added option `zoom` to scale the whole mirror display with a given factor. - 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 set the classes option to compliments module for style and text size of compliments. - Added ability to configure electronOptions - Calendar module: option to hide private events - Add root_path for global vars From c3d57eef4f26d3c244fa5a79782295ec344c5285 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 08:52:25 +0100 Subject: [PATCH 072/219] Remove husky again, move lint as test to travis --- .travis.yml | 2 +- package.json | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index b6f2e352..2f9f3690 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,9 @@ before_script: - "sh -e /etc/init.d/xvfb start" - sleep 5 script: + - npm run test:lint - npm run test:e2e - npm run test:unit - - grunt after_script: - npm list cache: diff --git a/package.json b/package.json index bb431a74..a3ffd9b8 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", + "test:lint": "grunt", "config:check": "node tests/configs/check_config.js", "lint": "grunt" }, @@ -46,7 +47,6 @@ "grunt-stylelint": "latest", "grunt-yamllint": "latest", "http-auth": "^3.2.3", - "husky": "^4.2.3", "jsdom": "^11.6.2", "jshint": "^2.10.2", "mocha": "^7.0.0", @@ -80,10 +80,5 @@ }, "_moduleAliases": { "node_helper": "js/node_helper.js" - }, - "husky": { - "hooks": { - "pre-commit": "npm run lint" - } } } From 0b2e836e3d39ebf8a05ab1b2ffae7654bd31385c Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 09:01:21 +0100 Subject: [PATCH 073/219] Commit a faulty js to see if travis complains --- modules/default/defaultmodules.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/defaultmodules.js b/modules/default/defaultmodules.js index 656ba6b8..f36d028e 100644 --- a/modules/default/defaultmodules.js +++ b/modules/default/defaultmodules.js @@ -8,7 +8,7 @@ // Modules listed below can be loaded without the 'default/' prefix. Omitting the default folder name. var defaultModules = [ - "alert", + 'alert', "calendar", "clock", "compliments", From 7470a3b8132bb3833df2574f3d977ecc5ae36de7 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 10:48:43 +0100 Subject: [PATCH 074/219] Dont fix eslint errors automatically --- Gruntfile.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index a825a766..829279e2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -4,7 +4,6 @@ module.exports = function(grunt) { pkg: grunt.file.readJSON("package.json"), eslint: { options: { - fix: "true", configFile: ".eslintrc.json" }, target: [ From f22e39e22b83c87a723db5f7b3ee96972dafb535 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 11:12:30 +0100 Subject: [PATCH 075/219] Add switch to auto fix eslint and stylelint issues --- Gruntfile.js | 5 ++++- package.json | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 829279e2..2b2048d7 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,9 +1,10 @@ module.exports = function(grunt) { require("time-grunt")(grunt); + var fix = (grunt.option("env") || "lint") === "lint"; grunt.initConfig({ - pkg: grunt.file.readJSON("package.json"), eslint: { options: { + fix: fix, configFile: ".eslintrc.json" }, target: [ @@ -26,6 +27,7 @@ module.exports = function(grunt) { stylelint: { simple: { options: { + fix: fix, configFile: ".stylelintrc.json" }, src: [ @@ -101,5 +103,6 @@ module.exports = function(grunt) { grunt.loadNpmTasks("grunt-jsonlint"); grunt.loadNpmTasks("grunt-yamllint"); grunt.loadNpmTasks("grunt-markdownlint"); + grunt.registerTask("default", ["eslint", "stylelint", "jsonlint", "markdownlint", "yamllint"]); }; diff --git a/package.json b/package.json index a3ffd9b8..4640e627 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,9 @@ "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", - "test:lint": "grunt", + "test:lint": "grunt --env=test", "config:check": "node tests/configs/check_config.js", - "lint": "grunt" + "lint": "grunt --env=lint" }, "repository": { "type": "git", From f3d45eff697da3d71dd625bd84032f7a9f24012b Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 11:43:45 +0100 Subject: [PATCH 076/219] Fix js error but add a stylelint error --- modules/default/currentweather/currentweather.css | 2 +- modules/default/defaultmodules.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/currentweather/currentweather.css b/modules/default/currentweather/currentweather.css index b7669bda..594dafac 100644 --- a/modules/default/currentweather/currentweather.css +++ b/modules/default/currentweather/currentweather.css @@ -1,7 +1,7 @@ .currentweather .weathericon, .currentweather .fa-home { font-size: 75%; - line-height: 65px; + line-height:65px; display: inline-block; -ms-transform: translate(0, -3px); /* IE 9 */ -webkit-transform: translate(0, -3px); /* Safari */ diff --git a/modules/default/defaultmodules.js b/modules/default/defaultmodules.js index f36d028e..656ba6b8 100644 --- a/modules/default/defaultmodules.js +++ b/modules/default/defaultmodules.js @@ -8,7 +8,7 @@ // Modules listed below can be loaded without the 'default/' prefix. Omitting the default folder name. var defaultModules = [ - 'alert', + "alert", "calendar", "clock", "compliments", From 437d0305027ef9767c5baab4efda924ee65a28c1 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 11 Mar 2020 12:44:44 +0100 Subject: [PATCH 077/219] Remove some dead files, fix stylelint error --- Gruntfile.js | 4 +--- modules/default/currentweather/currentweather.css | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 2b2048d7..36a90c5e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -20,8 +20,7 @@ module.exports = function(grunt) { "!modules/default/alert/classie.js", "config/*", "translations/translations.js", - "vendor/vendor.js", - "modules/node_modules/node_helper/index.js" + "vendor/vendor.js" ] }, stylelint: { @@ -45,7 +44,6 @@ module.exports = function(grunt) { "package.json", ".eslintrc.json", ".stylelintrc.json", - "installers/pm2_MagicMirror.json", "translations/*.json", "modules/default/*/translations/*.json", "vendor/package.json" diff --git a/modules/default/currentweather/currentweather.css b/modules/default/currentweather/currentweather.css index 594dafac..b7669bda 100644 --- a/modules/default/currentweather/currentweather.css +++ b/modules/default/currentweather/currentweather.css @@ -1,7 +1,7 @@ .currentweather .weathericon, .currentweather .fa-home { font-size: 75%; - line-height:65px; + line-height: 65px; display: inline-block; -ms-transform: translate(0, -3px); /* IE 9 */ -webkit-transform: translate(0, -3px); /* Safari */ From 5a4ae9928364c7652425c91d1b027b0ba6fec156 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 15:49:34 +0100 Subject: [PATCH 078/219] Add no-multi-spaces rule to eslint and run it --- .eslintrc.json | 1 + config/config.js.sample | 4 ++-- js/app.js | 8 ++++---- js/loader.js | 6 +++--- js/main.js | 10 +++++----- js/node_helper.js | 4 ++-- js/socketclient.js | 4 ++-- modules/default/calendar/calendar.js | 2 +- modules/default/calendar/calendarfetcher.js | 4 ++-- modules/default/calendar/debug.js | 2 +- modules/default/newsfeed/newsfeed.js | 2 +- modules/default/updatenotification/node_helper.js | 2 +- tests/unit/functions/currentweather_spec.js | 1 + tests/unit/functions/weatherforecast_spec.js | 1 + 14 files changed, 27 insertions(+), 24 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index eee62330..e5aca766 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,6 +7,7 @@ "curly": "error", "camelcase": ["error", {"properties": "never"}], "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1 }], + "no-multi-spaces": "error", "no-trailing-spaces": ["error", {"ignoreComments": false }], "no-irregular-whitespace": ["error"] }, diff --git a/config/config.js.sample b/config/config.js.sample index 67656392..414054da 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -67,7 +67,7 @@ var config = { position: "top_right", config: { location: "New York", - locationID: "", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city + locationID: "", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city appid: "YOUR_OPENWEATHER_API_KEY" } }, @@ -77,7 +77,7 @@ var config = { header: "Weather Forecast", config: { location: "New York", - locationID: "5128581", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city + locationID: "5128581", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city appid: "YOUR_OPENWEATHER_API_KEY" } }, diff --git a/js/app.js b/js/app.js index ef66a44c..b7c55ffa 100644 --- a/js/app.js +++ b/js/app.js @@ -111,10 +111,10 @@ var App = function() { var elements = module.split("/"); var moduleName = elements[elements.length - 1]; - var moduleFolder = __dirname + "/../modules/" + module; + var moduleFolder = __dirname + "/../modules/" + module; if (defaultModules.indexOf(moduleName) !== -1) { - moduleFolder = __dirname + "/../modules/default/" + module; + moduleFolder = __dirname + "/../modules/default/" + module; } var helperPath = moduleFolder + "/node_helper.js"; @@ -262,7 +262,7 @@ var App = function() { */ process.on("SIGINT", () => { console.log("[SIGINT] Received. Shutting down server..."); - setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds + setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds this.stop(); process.exit(0); }); @@ -271,7 +271,7 @@ var App = function() { */ process.on("SIGTERM", () => { console.log("[SIGTERM] Received. Shutting down server..."); - setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds + setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds this.stop(); process.exit(0); }); diff --git a/js/loader.js b/js/loader.js index 3a4e05c3..6db46ad5 100644 --- a/js/loader.js +++ b/js/loader.js @@ -83,10 +83,10 @@ var Loader = (function() { var elements = module.split("/"); var moduleName = elements[elements.length - 1]; - var moduleFolder = config.paths.modules + "/" + module; + var moduleFolder = config.paths.modules + "/" + module; if (defaultModules.indexOf(moduleName) !== -1) { - moduleFolder = config.paths.modules + "/default/" + module; + moduleFolder = config.paths.modules + "/default/" + module; } if (moduleData.disabled === true) { @@ -172,7 +172,7 @@ var Loader = (function() { */ var loadFile = function(fileName, callback) { - var extension = fileName.slice((Math.max(0, fileName.lastIndexOf(".")) || Infinity) + 1); + var extension = fileName.slice((Math.max(0, fileName.lastIndexOf(".")) || Infinity) + 1); switch (extension.toLowerCase()) { case "js": diff --git a/js/main.js b/js/main.js index de44ccce..f7d1f773 100644 --- a/js/main.js +++ b/js/main.js @@ -377,7 +377,7 @@ var MM = (function() { * * return array - Filtered collection of modules. */ - var exceptWithClass = function(className) { + var exceptWithClass = function(className) { return modulesByClass(className, false); }; @@ -439,10 +439,10 @@ var MM = (function() { }); }; - if (typeof modules.withClass === "undefined") { Object.defineProperty(modules, "withClass", {value: withClass, enumerable: false}); } - if (typeof modules.exceptWithClass === "undefined") { Object.defineProperty(modules, "exceptWithClass", {value: exceptWithClass, enumerable: false}); } - if (typeof modules.exceptModule === "undefined") { Object.defineProperty(modules, "exceptModule", {value: exceptModule, enumerable: false}); } - if (typeof modules.enumerate === "undefined") { Object.defineProperty(modules, "enumerate", {value: enumerate, enumerable: false}); } + if (typeof modules.withClass === "undefined") { Object.defineProperty(modules, "withClass", {value: withClass, enumerable: false}); } + if (typeof modules.exceptWithClass === "undefined") { Object.defineProperty(modules, "exceptWithClass", {value: exceptWithClass, enumerable: false}); } + if (typeof modules.exceptModule === "undefined") { Object.defineProperty(modules, "exceptModule", {value: exceptModule, enumerable: false}); } + if (typeof modules.enumerate === "undefined") { Object.defineProperty(modules, "enumerate", {value: enumerate, enumerable: false}); } }; return { diff --git a/js/node_helper.js b/js/node_helper.js index a083d332..326a8cce 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -101,9 +101,9 @@ NodeHelper = Class.extend({ var onevent = socket.onevent; socket.onevent = function(packet) { var args = packet.data || []; - onevent.call(this, packet); // original call + onevent.call(this, packet); // original call packet.data = ["*"].concat(args); - onevent.call(this, packet); // additional call to catch-all + onevent.call(this, packet); // additional call to catch-all }; // register catch all. diff --git a/js/socketclient.js b/js/socketclient.js index baead68e..10c26ad3 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -14,9 +14,9 @@ var MMSocket = function(moduleName) { var onevent = self.socket.onevent; self.socket.onevent = function(packet) { var args = packet.data || []; - onevent.call(this, packet); // original call + onevent.call(this, packet); // original call packet.data = ["*"].concat(args); - onevent.call(this, packet); // additional call to catch-all + onevent.call(this, packet); // additional call to catch-all }; // register catch all. diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 9c91afe5..98ae5636 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -320,7 +320,7 @@ Module.register("calendar", { } if(this.config.showEnd){ timeWrapper.innerHTML += "-" ; - timeWrapper.innerHTML += this.capFirst(moment(event.endDate , "x").format(this.config.fullDayEventDateFormat)); + timeWrapper.innerHTML += this.capFirst(moment(event.endDate , "x").format(this.config.fullDayEventDateFormat)); } } else { if (event.startDate >= new Date()) { diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index a9bf37ee..c393d5d6 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -28,7 +28,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); var opts = { headers: { - "User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)" + "User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)" }, gzip: true }; @@ -249,7 +249,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri showRecurrence = false; } - endDate = moment(parseInt(startDate.format("x")) + duration, "x"); + endDate = moment(parseInt(startDate.format("x")) + duration, "x"); if (startDate.format("x") == endDate.format("x")) { endDate = endDate.endOf("day"); } diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index bf65a279..84fc2f86 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -8,7 +8,7 @@ var CalendarFetcher = require("./calendarfetcher.js"); -var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; // Standard test URL +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; diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index d358110c..53cb3065 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -213,7 +213,7 @@ Module.register("newsfeed",{ }, getActiveItemURL: function() { - return typeof this.newsItems[this.activeItem].url === "string" ? this.newsItems[this.activeItem].url : this.newsItems[this.activeItem].url.href; + return typeof this.newsItems[this.activeItem].url === "string" ? this.newsItems[this.activeItem].url : this.newsItems[this.activeItem].url.href; }, /* registerFeeds() diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 4386b146..2d41626c 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -27,7 +27,7 @@ module.exports = NodeHelper.create({ for (moduleName in modules) { if (!this.ignoreUpdateChecking(moduleName)) { // Default modules are included in the main MagicMirror repo - var moduleFolder = path.normalize(__dirname + "/../../" + moduleName); + var moduleFolder = path.normalize(__dirname + "/../../" + moduleName); try { //console.log("checking git for module="+moduleName) diff --git a/tests/unit/functions/currentweather_spec.js b/tests/unit/functions/currentweather_spec.js index 0afbbd7b..d630cb9f 100644 --- a/tests/unit/functions/currentweather_spec.js +++ b/tests/unit/functions/currentweather_spec.js @@ -1,3 +1,4 @@ +/* eslint no-multi-spaces: 0 */ var expect = require("chai").expect; describe("Functions module currentweather", function() { diff --git a/tests/unit/functions/weatherforecast_spec.js b/tests/unit/functions/weatherforecast_spec.js index 6c40531e..ea078bc7 100644 --- a/tests/unit/functions/weatherforecast_spec.js +++ b/tests/unit/functions/weatherforecast_spec.js @@ -1,3 +1,4 @@ +/* eslint no-multi-spaces: 0 */ var expect = require("chai").expect; describe("Functions module weatherforecast", function() { From a91f2de26a1d18c48cf48bf456f7c2345ca4c756 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 20:38:52 +0100 Subject: [PATCH 079/219] Remove jshint dependency, use eslint for config verification --- clientonly/index.js | 2 - js/electron.js | 2 - js/main.js | 1 - package-lock.json | 486 ++++++++++++++-------------------- package.json | 1 - tests/configs/check_config.js | 14 +- 6 files changed, 201 insertions(+), 305 deletions(-) diff --git a/clientonly/index.js b/clientonly/index.js index 895dacae..6430b270 100644 --- a/clientonly/index.js +++ b/clientonly/index.js @@ -1,5 +1,3 @@ -/* jshint esversion: 6 */ - "use strict"; // Use separate scope to prevent global scope pollution diff --git a/js/electron.js b/js/electron.js index c5e9c4cb..f7615b1c 100644 --- a/js/electron.js +++ b/js/electron.js @@ -1,5 +1,3 @@ -/* jshint esversion: 6 */ - "use strict"; const electron = require("electron"); diff --git a/js/main.js b/js/main.js index de44ccce..51bfd7d4 100644 --- a/js/main.js +++ b/js/main.js @@ -1,5 +1,4 @@ /* global Log, Loader, Module, config, defaults */ -/* jshint -W020, esversion: 6 */ /* Magic Mirror * Main System diff --git a/package-lock.json b/package-lock.json index 2509883d..5c3e882f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,18 +14,18 @@ } }, "@babel/core": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", - "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", + "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", - "@babel/helpers": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/generator": "^7.8.7", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.7", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -63,12 +63,12 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.8.7", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -112,13 +112,13 @@ } }, "@babel/helpers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", - "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", + "@babel/traverse": "^7.8.4", "@babel/types": "^7.8.3" } }, @@ -165,51 +165,51 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", "dev": true }, "@babel/runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", - "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true } } }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.6", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -233,9 +233,9 @@ } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -317,9 +317,9 @@ "dev": true }, "@types/node": { - "version": "13.1.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.8.tgz", - "integrity": "sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A==", + "version": "13.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", + "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==", "dev": true }, "@types/normalize-package-data": { @@ -688,9 +688,9 @@ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true }, "balanced-match": { @@ -836,14 +836,14 @@ "dev": true }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", + "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001030", + "electron-to-chromium": "^1.3.363", + "node-releases": "^1.1.50" } }, "btoa-lite": { @@ -937,9 +937,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001021", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", - "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==", + "version": "1.0.30001035", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", + "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==", "dev": true }, "caseless": { @@ -948,9 +948,9 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", "dev": true }, "chai": { @@ -989,27 +989,27 @@ } }, "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", "dev": true }, "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chardet": { @@ -1053,32 +1053,6 @@ "resolved": "https://registry.npmjs.org/clarinet/-/clarinet-0.12.4.tgz", "integrity": "sha512-Rx9Zw8KQkoPO3/O2yPRchCZm3cGubCQiRLmmFAlbkDKobUIPP3JYul+bKILR9DIv1gSVwPQSgF8JGGkXzX8Q0w==" }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -1159,9 +1133,9 @@ "dev": true }, "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "dev": true }, "color-convert": { @@ -1264,15 +1238,6 @@ } } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, "console-stamp": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-0.2.9.tgz", @@ -1428,6 +1393,12 @@ "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", "dev": true }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", @@ -1569,12 +1540,6 @@ } } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "date-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/date-time/-/date-time-1.1.0.tgz", @@ -1774,15 +1739,6 @@ "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1865,9 +1821,9 @@ } }, "electron-to-chromium": { - "version": "1.3.338", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz", - "integrity": "sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA==", + "version": "1.3.376", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", + "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==", "dev": true }, "emoji-regex": { @@ -2459,16 +2415,17 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.0", "merge2": "^1.3.0", - "micromatch": "^4.0.2" + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, "fast-json-stable-stringify": { @@ -2483,12 +2440,12 @@ "dev": true }, "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", + "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", "dev": true, "requires": { - "reusify": "^1.0.0" + "reusify": "^1.0.4" } }, "fd-slicer": { @@ -3109,9 +3066,9 @@ } }, "grunt-stylelint": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.13.0.tgz", - "integrity": "sha512-Ju9N03UBvPwcdoJYL77pDk0k0E8VD4oYtTfoRwvvPM1ON2MjOXWwPyaeIoYPnhUwcfN9D7TaXnTtuhNoWNsyrQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.14.0.tgz", + "integrity": "sha512-4gi/Yw9djHEdRlikKvFjy2wkHlD1YVzlJOePUPlYm1PIpGi3PMVJoc7Eon6RVSjdRcj3NcYHbeNA0EzplXzp7w==", "dev": true, "requires": { "chalk": "^2.4.2" @@ -3350,27 +3307,6 @@ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - } - } - }, "http-auth": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.2.4.tgz", @@ -3666,9 +3602,9 @@ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumeric": { @@ -3678,9 +3614,9 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", - "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -3720,9 +3656,9 @@ "dev": true }, "is-decimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", - "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-extendable": { @@ -3763,9 +3699,9 @@ } }, "is-hexadecimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", - "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-number": { @@ -3774,12 +3710,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -3833,15 +3763,15 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", "dev": true }, "isarray": { @@ -3938,30 +3868,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "jshint": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.3.tgz", - "integrity": "sha512-d8AoXcNNYzmm7cdmulQ3dQApbrPYArtVBO6n4xOICe4QsXGNHCAKDcFORzqP52LhK61KX0VhY39yYzCsNq+bxQ==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.11", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - } - } - }, "jsome": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.5.0.tgz", @@ -4111,9 +4017,9 @@ "dev": true }, "known-css-properties": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.17.0.tgz", - "integrity": "sha512-Vi3nxDGMm/z+lAaCjvAR1u+7fiv+sG6gU/iYDj5QOF8h76ytK9EW/EKfF0NeTyiGBi8Jy6Hklty/vxISrLox3w==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.18.0.tgz", + "integrity": "sha512-69AgJ1rQa7VvUsd2kpvVq+VeObDuo3zrj0CzM5Slmf6yduQFAI2kXPDQJR2IE/u6MSAUOJrwSzjg5vlz8qcMiw==", "dev": true }, "lazystream": { @@ -4351,9 +4257,9 @@ } }, "longest-streak": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", - "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, "loud-rejection": { @@ -4392,9 +4298,9 @@ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, "markdown-it": { @@ -4426,9 +4332,9 @@ } }, "mathml-tag-names": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", - "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "mdast-util-compact": { @@ -5016,9 +4922,9 @@ "dev": true }, "node-releases": { - "version": "1.1.46", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz", - "integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==", + "version": "1.1.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", + "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", "dev": true, "requires": { "semver": "^6.3.0" @@ -5517,9 +5423,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -5599,9 +5505,9 @@ } }, "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -5713,12 +5619,12 @@ "dev": true }, "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, "requires": { - "postcss": "^7.0.0" + "postcss": "^7.0.26" } }, "postcss-sass": { @@ -5741,12 +5647,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "cssesc": "^3.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -5758,9 +5664,9 @@ "dev": true }, "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", + "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", "dev": true }, "prelude-ls": { @@ -6373,12 +6279,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -7050,9 +6950,9 @@ } }, "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "dev": true }, "statuses": { @@ -7155,12 +7055,12 @@ "dev": true }, "stylelint": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.0.0.tgz", - "integrity": "sha512-6sjgOJbM3iLhnUtmRO0J1vvxie9VnhIZX/2fCehjylv9Gl9u0ytehGCTm9Lhw2p1F8yaNZn5UprvhCB8C3g/Tg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.2.1.tgz", + "integrity": "sha512-461ZV4KpUe7pEHHgMOsH4kkjF7qsjkCIMJYOf7QQC4cvgPUJ0z4Nj+ah5fvKl1rzqBqc5EZa6P0nna4CGoJX+A==", "dev": true, "requires": { - "autoprefixer": "^9.7.3", + "autoprefixer": "^9.7.4", "balanced-match": "^1.0.0", "chalk": "^3.0.0", "cosmiconfig": "^6.0.0", @@ -7175,17 +7075,17 @@ "ignore": "^5.1.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.17.0", + "known-css-properties": "^0.18.0", "leven": "^3.1.0", "lodash": "^4.17.15", "log-symbols": "^3.0.0", - "mathml-tag-names": "^2.1.1", - "meow": "^6.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^6.0.1", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.26", + "postcss": "^7.0.27", "postcss-html": "^0.36.0", - "postcss-jsx": "^0.36.3", + "postcss-jsx": "^0.36.4", "postcss-less": "^3.1.4", "postcss-markdown": "^0.36.0", "postcss-media-query-parser": "^0.2.3", @@ -7194,9 +7094,9 @@ "postcss-safe-parser": "^4.0.1", "postcss-sass": "^0.4.2", "postcss-scss": "^2.0.0", - "postcss-selector-parser": "^3.1.0", + "postcss-selector-parser": "^6.0.2", "postcss-syntax": "^0.36.2", - "postcss-value-parser": "^4.0.2", + "postcss-value-parser": "^4.0.3", "resolve-from": "^5.0.0", "slash": "^3.0.0", "specificity": "^0.4.1", @@ -7207,7 +7107,7 @@ "svg-tags": "^1.0.0", "table": "^5.4.6", "v8-compile-cache": "^2.1.0", - "write-file-atomic": "^3.0.1" + "write-file-atomic": "^3.0.3" }, "dependencies": { "ansi-regex": { @@ -7233,9 +7133,9 @@ "dev": true }, "camelcase-keys": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.1.1.tgz", - "integrity": "sha512-kEPCddRFChEzO0d6w61yh0WbBiSv9gBnfZWGfXRYPlGqIdIGef6HMR6pgqVSEWCYkrp8B0AtEpEXNY+Jx0xk1A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.1.tgz", + "integrity": "sha512-BPCNVH56RVIxQQIXskp5tLQXUNGQ6sXr7iCv1FHDt81xBOQ/1r6H8SPxf19InVP6DexWar4s87q9thfuk8X9HA==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -7333,9 +7233,9 @@ "dev": true }, "meow": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.0.tgz", - "integrity": "sha512-x4rYsjigPBDAxY+BGuK83YLhUIqui5wYyZoqb6QJCUOs+0fiYq+i/NV4Jt8OgIfObZFxG9iTyvLDu4UTohGTFw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.1.tgz", + "integrity": "sha512-kxGTFgT/b7/oSRSQsJ0qsT5IMU+bgZ1eAdSA3kIV7onkW0QWo/hL5RbGlMfvBjHJKPE1LaPX0kdecYFiqYWjUw==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -7503,9 +7403,9 @@ "dev": true }, "stylelint-config-standard": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-19.0.0.tgz", - "integrity": "sha512-VvcODsL1PryzpYteWZo2YaA5vU/pWfjqBpOvmeA8iB2MteZ/ZhI1O4hnrWMidsS4vmEJpKtjdhLdfGJmmZm6Cg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-20.0.0.tgz", + "integrity": "sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA==", "dev": true, "requires": { "stylelint-config-recommended": "^3.0.0" @@ -7783,15 +7683,15 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", "dev": true }, "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, "tslib": { @@ -7873,13 +7773,13 @@ } }, "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" + "inherits": "^2.0.0", + "xtend": "^4.0.0" }, "dependencies": { "xtend": { @@ -7937,9 +7837,9 @@ } }, "unist-util-stringify-position": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz", - "integrity": "sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { "@types/unist": "^2.0.2" @@ -8112,9 +8012,9 @@ "dev": true }, "vfile-message": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz", - "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", + "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -8268,9 +8168,9 @@ } }, "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -8321,12 +8221,12 @@ "dev": true }, "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", + "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", "dev": true, "requires": { - "@babel/runtime": "^7.6.3" + "@babel/runtime": "^7.8.7" } }, "yargs": { diff --git a/package.json b/package.json index 1b150ed4..e9cfbd12 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,6 @@ "grunt-yamllint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", - "jshint": "^2.10.2", "mocha": "^7.0.0", "mocha-each": "^1.1.0", "mocha-logger": "^1.0.6", diff --git a/tests/configs/check_config.js b/tests/configs/check_config.js index 03a275bf..917b6d32 100644 --- a/tests/configs/check_config.js +++ b/tests/configs/check_config.js @@ -9,7 +9,10 @@ * */ -var v = require("jshint"); +const Linter = require("eslint").Linter; +const linter = new Linter(); +const config = require(__dirname + "/../../.eslintrc.json"); + var path = require("path"); var fs = require("fs"); var Utils = require(__dirname + "/../../js/utils.js"); @@ -50,16 +53,15 @@ function checkConfigFile() { // I'm not sure if all ever is utf-8 fs.readFile(configFileName, "utf-8", function (err, data) { if (err) { throw err; } - v.JSHINT(data); // Parser by jshint - - if (v.JSHINT.errors.length === 0) { + const messages = linter.verify(data, config); + if (messages.length === 0) { console.log("Your configuration file doesn't contain syntax errors :)"); return true; } else { - errors = v.JSHINT.data().errors; + errors = messages; for (var idx in errors) { error = errors[idx]; - console.log("Line", error.line, "col", error.character, error.reason); + console.log("Line", error.line, "col", error.column, error.message); } } }); From e9461586cbae70f4e1aeaadd6eba52b3bc02b4e7 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 21:25:11 +0100 Subject: [PATCH 080/219] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0236e6de..39a04374 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Deleted - Remove installers. - Remove externalized scripts. +- Remove jshint dependency, instead eslint checks your config file now ### Added - Ukrainian translation. From 8aa7a55559a408a9bc4e1b7ca84f0c99caa14230 Mon Sep 17 00:00:00 2001 From: bugsounet Date: Thu, 19 Mar 2020 19:03:25 +0100 Subject: [PATCH 081/219] issue #1956 --- js/main.js | 4 +++- js/module.js | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/js/main.js b/js/main.js index de44ccce..29d8f71e 100644 --- a/js/main.js +++ b/js/main.js @@ -306,7 +306,9 @@ var MM = (function() { module.showHideTimer = setTimeout(function() { if (typeof callback === "function") { callback(); } }, speed); - + } else { + // invoke callback + if (typeof callback === "function") { callback(); } } }; diff --git a/js/module.js b/js/module.js index 62bf80ce..6339dd7d 100644 --- a/js/module.js +++ b/js/module.js @@ -417,8 +417,11 @@ var Module = Class.extend({ callback = callback || function () { }; options = options || {}; - this.resume(); - MM.showModule(this, speed, callback, options); + var self = this; + MM.showModule(this, speed, function () { + self.resume(); + callback; + }, options); } }); From c342f7bce6d8c96bc45ad0c9cb0e40a23e87a227 Mon Sep 17 00:00:00 2001 From: Federico Leoni Date: Mon, 23 Mar 2020 14:55:36 -0300 Subject: [PATCH 082/219] Update pt-br.json --- translations/pt-br.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/translations/pt-br.json b/translations/pt-br.json index 898e4f1f..e5726cc0 100644 --- a/translations/pt-br.json +++ b/translations/pt-br.json @@ -26,5 +26,8 @@ "UPDATE_NOTIFICATION": "Nova atualização para MagicMirror disponível.", "UPDATE_NOTIFICATION_MODULE": "Atualização para o módulo {MODULE_NAME} disponível.", "UPDATE_INFO_SINGLE": "Sua versão atual é a {COMMIT_COUNT} commit dentro do seguinte branch {BRANCH_NAME}.", - "UPDATE_INFO_MULTIPLE": "Sua versão atual é a {COMMIT_COUNT} commits dentro do seguinte branch {BRANCH_NAME}." + "UPDATE_INFO_MULTIPLE": "Sua versão atual é a {COMMIT_COUNT} commits dentro do seguinte branch {BRANCH_NAME}.", + + "FEELS": "Percebida", + "PRECIP": "PoP" } From 8f203852ca00012e3eeb13b3cd19f1ddbf175af8 Mon Sep 17 00:00:00 2001 From: Federico Leoni Date: Tue, 24 Mar 2020 10:06:12 -0300 Subject: [PATCH 083/219] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0236e6de..ae112aa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Remove externalized scripts. ### Added +- Brazilian translation for "FEELS". - Ukrainian translation. - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". - Added the ability to hide the temp label and weather icon in the `currentweather` module to allow showing only information such as wind and sunset/rise. From 82b50d3059c0e04db246fd0ae9c49841e4fec73e Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 8 Mar 2020 23:18:09 +0100 Subject: [PATCH 084/219] Add basic compliment on a specific day of the year --- modules/default/compliments/compliments.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 606da1df..c137a379 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -28,7 +28,10 @@ Module.register("compliments", { "Wow, you look hot!", "You look nice!", "Hi, sexy!" - ] + ], + date: [ + ["12-10", "Happy birthday, Ada Lovelace!"] + ], }, updateInterval: 30000, remoteFile: null, @@ -102,6 +105,8 @@ Module.register("compliments", { */ complimentArray: function() { var hour = moment().hour(); + var year = moment().year(); + var today = moment(new Date()); var compliments; if (hour >= this.config.morningStartTime && hour < this.config.morningEndTime && this.config.compliments.hasOwnProperty("morning")) { @@ -122,6 +127,12 @@ Module.register("compliments", { compliments.push.apply(compliments, this.config.compliments.anytime); + this.config.compliments.date.forEach(d => { + if (today.isSame(year + "-" + d[0], "month")) { + compliments.push(d[1]); + } + }); + return compliments; }, From cafa4211a657b454f631e2755aacabd1c92bab70 Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 9 Mar 2020 18:24:27 +0100 Subject: [PATCH 085/219] Update changelog and add another birtday --- CHANGELOG.md | 1 + modules/default/compliments/compliments.js | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b7f5572..6be1c1a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Run tests on long term support and latest stable version of nodejs - Added the ability to configure a list of modules that shouldn't be update checked. - Run linters on git commits +- Added date functionality to compliments: display birthday wishes or celebrate an anniversary ### Fixed - Force declaration of public ip address in config file (ISSUE #1852) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index c137a379..6a2fca2c 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -30,6 +30,7 @@ Module.register("compliments", { "Hi, sexy!" ], date: [ + ["03-14", "Happy birthday, Albert Einstein!"], ["12-10", "Happy birthday, Ada Lovelace!"] ], }, From 2a31ece0c691a3b6ae73fec60766e0ebccc36c85 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 10 Mar 2020 10:45:09 +0100 Subject: [PATCH 086/219] Refactor code --- modules/default/compliments/compliments.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 6a2fca2c..3ccf742e 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -29,10 +29,12 @@ Module.register("compliments", { "You look nice!", "Hi, sexy!" ], - date: [ - ["03-14", "Happy birthday, Albert Einstein!"], - ["12-10", "Happy birthday, Ada Lovelace!"] + 1403 : [ + "Happy birthday, Albert Einstein!" ], + 1012: [ + "Happy birthday, Ada Lovelace!" + ] }, updateInterval: 30000, remoteFile: null, @@ -106,8 +108,7 @@ Module.register("compliments", { */ complimentArray: function() { var hour = moment().hour(); - var year = moment().year(); - var today = moment(new Date()); + var date = moment().format("DDMM"); var compliments; if (hour >= this.config.morningStartTime && hour < this.config.morningEndTime && this.config.compliments.hasOwnProperty("morning")) { @@ -128,11 +129,9 @@ Module.register("compliments", { compliments.push.apply(compliments, this.config.compliments.anytime); - this.config.compliments.date.forEach(d => { - if (today.isSame(year + "-" + d[0], "month")) { - compliments.push(d[1]); - } - }); + if (date in this.config.compliments) { + compliments.push.apply(compliments, this.config.compliments[date]); + } return compliments; }, From b08f8823247328b51e44192a2f8ac9738c2c6cbf Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 14 Mar 2020 21:14:45 +0100 Subject: [PATCH 087/219] Add (failing) test for new date field --- .../modules/compliments/compliments_date.js | 40 +++++++++++++++++++ tests/e2e/modules/compliments_spec.js | 37 +++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 tests/configs/modules/compliments/compliments_date.js diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js new file mode 100644 index 00000000..04acdde4 --- /dev/null +++ b/tests/configs/modules/compliments/compliments_date.js @@ -0,0 +1,40 @@ +/* Magic Mirror Test config compliments with date type + * + * By Rejas + * + * MIT Licensed. + */ + +let 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: [], + afternoon: [], + evening: [], + 1012: [ + "Happy birthday, Ada Lovelace!" + ] + } + } + } + ] +}; + +/*************** 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 35529b19..68dcb7ff 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,5 +1,6 @@ const helpers = require("../global-setup"); const expect = require("chai").expect; +const moment = require("moment"); const describe = global.describe; const it = global.it; @@ -89,4 +90,40 @@ describe("Compliments module", function() { }); }); }); + + describe("Feature date in compliments module", function() { + describe("Set date and empty compliments for anytime, morning, evening and afternoon", function() { + let RealDate; + + before(function() { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; + + RealDate = Date; + let customTimeMs = moment("2015-10-12T06:00:00.000Z").valueOf(); + + function MockDate() { + return new RealDate(customTimeMs); + } + + MockDate.now = function () { + return new MockDate().valueOf(); + }; + + MockDate.prototype = RealDate.prototype; + + Date = MockDate; + }); + + 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(["Happy birthday, Ada Lovelace!"]); + }); + }); + + after(function() { + Date = RealDate; + }); + }); + }); }); From e2427fe29901cd24bcd11ffb7023439c4d468f7a Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 09:11:55 +0100 Subject: [PATCH 088/219] Try out a mockdate class --- tests/e2e/modules/compliments_spec.js | 24 ++------ tests/e2e/modules/mocks/date.js | 86 +++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 tests/e2e/modules/mocks/date.js diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 68dcb7ff..2ebd2e82 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,6 +1,6 @@ const helpers = require("../global-setup"); const expect = require("chai").expect; -const moment = require("moment"); +const MockDate = require("./mocks/date.js"); const describe = global.describe; const it = global.it; @@ -93,36 +93,20 @@ describe("Compliments module", function() { describe("Feature date in compliments module", function() { describe("Set date and empty compliments for anytime, morning, evening and afternoon", function() { - let RealDate; - before(function() { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; - - RealDate = Date; - let customTimeMs = moment("2015-10-12T06:00:00.000Z").valueOf(); - - function MockDate() { - return new RealDate(customTimeMs); - } - - MockDate.now = function () { - return new MockDate().valueOf(); - }; - - MockDate.prototype = RealDate.prototype; - - Date = MockDate; + MockDate.set("2000-12-10"); }); - it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function() { + it("Show happy birthday compliment on special date", function() { return app.client.waitUntilWindowLoaded().getText(".compliments").then(function(text) { expect(text).to.be.oneOf(["Happy birthday, Ada Lovelace!"]); }); }); after(function() { - Date = RealDate; + MockDate.reset(); }); }); }); diff --git a/tests/e2e/modules/mocks/date.js b/tests/e2e/modules/mocks/date.js new file mode 100644 index 00000000..ff33f2e6 --- /dev/null +++ b/tests/e2e/modules/mocks/date.js @@ -0,0 +1,86 @@ +(function(name, definition) { + if (typeof module !== 'undefined') module.exports = definition(); + else if (typeof define === 'function' && typeof define.amd === 'object') define(definition); + else this[name] = definition(); +}('MockDate', function() { + "use strict"; + + var _Date = Date + , _getTimezoneOffset = Date.prototype.getTimezoneOffset + , now = null + ; + + function MockDate(y, m, d, h, M, s, ms) { + var date; + + switch (arguments.length) { + + case 0: + if (now !== null) { + date = new _Date(now); + } else { + date = new _Date(); + } + break; + + case 1: + date = new _Date(y); + break; + + default: + d = typeof d === 'undefined' ? 1 : d; + h = h || 0; + M = M || 0; + s = s || 0; + ms = ms || 0; + date = new _Date(y, m, d, h, M, s, ms); + break; + } + + return date; + } + + MockDate.UTC = _Date.UTC; + + MockDate.now = function() { + return new MockDate().valueOf(); + }; + + MockDate.parse = function(dateString) { + return _Date.parse(dateString); + }; + + MockDate.toString = function() { + return _Date.toString(); + }; + + MockDate.prototype = _Date.prototype; + + function set(date, timezoneOffset) { + var dateObj = new Date(date) + if (isNaN(dateObj.getTime())) { + throw new TypeError('mockdate: The time set is an invalid date: ' + date) + } + + if (typeof timezoneOffset === 'number') { + MockDate.prototype.getTimezoneOffset = function() { + return timezoneOffset; + } + } + + Date = MockDate; + + now = dateObj.valueOf(); + } + + function reset() { + Date = _Date; + Date.prototype.getTimezoneOffset = _getTimezoneOffset + } + + return { + set: set, + reset: reset + }; + +})); From 65e1b60fb7bc773cb60041080e8966e8e6bd53ad Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 09:49:32 +0100 Subject: [PATCH 089/219] Fix error when no compliments are set --- modules/default/compliments/compliments.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 3ccf742e..7b2fa74a 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -162,19 +162,19 @@ Module.register("compliments", { // get the current time of day compliments list var compliments = this.complimentArray(); // variable for index to next message to display - let index=0; + let index = 0; // are we randomizing if(this.config.random){ // yes index = this.randomIndex(compliments); } else{ - // no, sequetial - // if doing sequential, don't fall off the end + // no, sequential + // if doing sequential, don't fall off the end index = (this.lastIndexUsed >= (compliments.length-1))?0: ++this.lastIndexUsed; } - return compliments[index]; + return compliments[index] || ""; }, // Override dom generator. @@ -184,9 +184,9 @@ Module.register("compliments", { // get the compliment text var complimentText = this.randomCompliment(); // split it into parts on newline text - var parts= complimentText.split("\n"); + var parts = complimentText.split("\n"); // create a span to hold it all - var compliment=document.createElement("span"); + var compliment = document.createElement("span"); // process all the parts of the compliment text for (part of parts){ // create a text element for each part From 3659b5b5c97efbf0298f6a7ed5e8b0fcf643bff6 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 10:20:20 +0100 Subject: [PATCH 090/219] Update mockdate info --- tests/e2e/modules/mocks/date.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/e2e/modules/mocks/date.js b/tests/e2e/modules/mocks/date.js index ff33f2e6..b254e1da 100644 --- a/tests/e2e/modules/mocks/date.js +++ b/tests/e2e/modules/mocks/date.js @@ -1,3 +1,10 @@ +/** + * MockDate + * + * By Bob Lauer (https://github.com/boblauer/MockDate + * MIT Licensed. +*/ + (function(name, definition) { if (typeof module !== 'undefined') module.exports = definition(); else if (typeof define === 'function' && typeof define.amd === 'object') define(definition); From 4e4d3418b365b1c639a344f7512e9eaea0a92ec6 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 25 Mar 2020 06:53:09 +0100 Subject: [PATCH 091/219] LInt mockdate helper --- tests/e2e/modules/mocks/date.js | 128 ++++++++++++++++---------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/tests/e2e/modules/mocks/date.js b/tests/e2e/modules/mocks/date.js index b254e1da..35113566 100644 --- a/tests/e2e/modules/mocks/date.js +++ b/tests/e2e/modules/mocks/date.js @@ -6,88 +6,88 @@ */ (function(name, definition) { - if (typeof module !== 'undefined') module.exports = definition(); - else if (typeof define === 'function' && typeof define.amd === 'object') define(definition); - else this[name] = definition(); -}('MockDate', function() { - "use strict"; + if (typeof module !== "undefined") {module.exports = definition();} + else if (typeof define === "function" && typeof define.amd === "object") {define(definition);} + else {this[name] = definition();} +}("MockDate", function() { + "use strict"; - var _Date = Date - , _getTimezoneOffset = Date.prototype.getTimezoneOffset - , now = null + var _Date = Date + , _getTimezoneOffset = Date.prototype.getTimezoneOffset + , now = null ; - function MockDate(y, m, d, h, M, s, ms) { - var date; + function MockDate(y, m, d, h, M, s, ms) { + var date; - switch (arguments.length) { + switch (arguments.length) { - case 0: - if (now !== null) { - date = new _Date(now); - } else { - date = new _Date(); - } - break; + case 0: + if (now !== null) { + date = new _Date(now); + } else { + date = new _Date(); + } + break; - case 1: - date = new _Date(y); - break; + case 1: + date = new _Date(y); + break; - default: - d = typeof d === 'undefined' ? 1 : d; - h = h || 0; - M = M || 0; - s = s || 0; - ms = ms || 0; - date = new _Date(y, m, d, h, M, s, ms); - break; - } + default: + d = typeof d === "undefined" ? 1 : d; + h = h || 0; + M = M || 0; + s = s || 0; + ms = ms || 0; + date = new _Date(y, m, d, h, M, s, ms); + break; + } - return date; - } + return date; + } - MockDate.UTC = _Date.UTC; + MockDate.UTC = _Date.UTC; - MockDate.now = function() { - return new MockDate().valueOf(); - }; + MockDate.now = function() { + return new MockDate().valueOf(); + }; - MockDate.parse = function(dateString) { - return _Date.parse(dateString); - }; + MockDate.parse = function(dateString) { + return _Date.parse(dateString); + }; - MockDate.toString = function() { - return _Date.toString(); - }; + MockDate.toString = function() { + return _Date.toString(); + }; - MockDate.prototype = _Date.prototype; + MockDate.prototype = _Date.prototype; - function set(date, timezoneOffset) { - var dateObj = new Date(date) - if (isNaN(dateObj.getTime())) { - throw new TypeError('mockdate: The time set is an invalid date: ' + date) - } + function set(date, timezoneOffset) { + var dateObj = new Date(date); + if (isNaN(dateObj.getTime())) { + throw new TypeError("mockdate: The time set is an invalid date: " + date); + } - if (typeof timezoneOffset === 'number') { - MockDate.prototype.getTimezoneOffset = function() { - return timezoneOffset; - } - } + if (typeof timezoneOffset === "number") { + MockDate.prototype.getTimezoneOffset = function() { + return timezoneOffset; + }; + } - Date = MockDate; + Date = MockDate; - now = dateObj.valueOf(); - } + now = dateObj.valueOf(); + } - function reset() { - Date = _Date; - Date.prototype.getTimezoneOffset = _getTimezoneOffset - } + function reset() { + Date = _Date; + Date.prototype.getTimezoneOffset = _getTimezoneOffset; + } - return { - set: set, - reset: reset - }; + return { + set: set, + reset: reset + }; })); From ff7dc95e93c46599949b3bae93e8ca0f6622c935 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 28 Mar 2020 09:24:30 +0100 Subject: [PATCH 092/219] Implement suggestions from Michael --- modules/default/compliments/compliments.js | 19 ++++++++++++------- .../modules/compliments/compliments_date.js | 4 ++-- tests/e2e/modules/compliments_spec.js | 6 +++--- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 7b2fa74a..14ad67dc 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -29,11 +29,14 @@ Module.register("compliments", { "You look nice!", "Hi, sexy!" ], - 1403 : [ - "Happy birthday, Albert Einstein!" + "....-01-01": [ + "Happy new year!" ], - 1012: [ - "Happy birthday, Ada Lovelace!" + "....-..-14": [ + "Have a great 14th day of the month!" + ], + "2020-12-10": [ + "Happy 205th Birthday, Ada Lovelace!" ] }, updateInterval: 30000, @@ -108,7 +111,7 @@ Module.register("compliments", { */ complimentArray: function() { var hour = moment().hour(); - var date = moment().format("DDMM"); + var date = moment().format("YYYY-MM-DD"); var compliments; if (hour >= this.config.morningStartTime && hour < this.config.morningEndTime && this.config.compliments.hasOwnProperty("morning")) { @@ -129,8 +132,10 @@ Module.register("compliments", { compliments.push.apply(compliments, this.config.compliments.anytime); - if (date in this.config.compliments) { - compliments.push.apply(compliments, this.config.compliments[date]); + for (entry in this.config.compliments) { + if (new RegExp(entry).test(date)) { + compliments.push.apply(compliments, this.config.compliments[entry]); + } } return compliments; diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 04acdde4..649d789b 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -27,8 +27,8 @@ let config = { morning: [], afternoon: [], evening: [], - 1012: [ - "Happy birthday, Ada Lovelace!" + "....-01-01": [ + "Happy new year!" ] } } diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 2ebd2e82..d7828268 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -96,12 +96,12 @@ describe("Compliments module", function() { before(function() { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; - MockDate.set("2000-12-10"); + MockDate.set("2000-01-01"); }); - it("Show happy birthday compliment on special date", function() { + it("Show happy new year compliment on new years day", function() { return app.client.waitUntilWindowLoaded().getText(".compliments").then(function(text) { - expect(text).to.be.oneOf(["Happy birthday, Ada Lovelace!"]); + expect(text).to.be.oneOf(["Happy new year!"]); }); }); From 351e0f3a0bbe1723c77e1c6696fe87d3b9b5120f Mon Sep 17 00:00:00 2001 From: Andre Date: Sat, 28 Mar 2020 12:37:50 +0100 Subject: [PATCH 093/219] add https support --- CHANGELOG.md | 1 + clientonly/index.js | 9 +++++++-- js/electron.js | 10 +++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b7f5572..41a3557d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Run tests on long term support and latest stable version of nodejs - Added the ability to configure a list of modules that shouldn't be update checked. - Run linters on git commits +- Add HTTPS support for clientonly-mode. ### Fixed - Force declaration of public ip address in config file (ISSUE #1852) diff --git a/clientonly/index.js b/clientonly/index.js index 6430b270..1c772f5d 100644 --- a/clientonly/index.js +++ b/clientonly/index.js @@ -18,6 +18,9 @@ ["address", "port"].forEach((key) => { config[key] = getCommandLineParameter(key, process.env[key.toUpperCase()]); }); + + // determine if "--use-tls"-flag was provided + config["tls"] = process.argv.indexOf(`--use-tls`) > 0; } function getServerConfig(url) { @@ -48,7 +51,7 @@ if (message !== undefined && typeof message === "string") { console.log(message); } else { - console.log("Usage: 'node clientonly --address 192.168.1.10 --port 8080'"); + console.log("Usage: 'node clientonly --address 192.168.1.10 --port 8080 [--use-tls]'"); } process.exit(code); } @@ -56,16 +59,18 @@ getServerAddress(); (config.address && config.port) || fail(); + var prefix = config.tls ? "https://" : "http://"; // Only start the client if a non-local server was provided if (["localhost", "127.0.0.1", "::1", "::ffff:127.0.0.1", undefined].indexOf(config.address) === -1) { - getServerConfig(`http://${config.address}:${config.port}/config/`) + getServerConfig(`${prefix}${config.address}:${config.port}/config/`) .then(function (configReturn) { // Pass along the server config via an environment variable var env = Object.create(process.env); var options = { env: env }; configReturn.address = config.address; configReturn.port = config.port; + configReturn.tls = config.tls; env.config = JSON.stringify(configReturn); // Spawn electron application diff --git a/js/electron.js b/js/electron.js index f7615b1c..cb839168 100644 --- a/js/electron.js +++ b/js/electron.js @@ -45,8 +45,16 @@ function createWindow() { // and load the index.html of the app. // If config.address is not defined or is an empty string (listening on all interfaces), connect to localhost + + var prefix; + if (config["tls"] !== null && config["tls"]) { + prefix = 'https://'; + } else { + prefix = 'http://'; + } + var address = (config.address === void 0) | (config.address === "") ? (config.address = "localhost") : config.address; - mainWindow.loadURL(`http://${address}:${config.port}`); + mainWindow.loadURL(`${prefix}${address}:${config.port}`); // Open the DevTools if run with "npm start dev" if (process.argv.includes("dev")) { From 2674bf22d8188ac0e1aec7d87e0470ed8bf2c777 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 1 Apr 2020 09:44:22 +0200 Subject: [PATCH 094/219] Let's use sensible defaults. :) --- modules/default/compliments/compliments.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 14ad67dc..ca275d27 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -31,12 +31,6 @@ Module.register("compliments", { ], "....-01-01": [ "Happy new year!" - ], - "....-..-14": [ - "Have a great 14th day of the month!" - ], - "2020-12-10": [ - "Happy 205th Birthday, Ada Lovelace!" ] }, updateInterval: 30000, From 2464d0189169faa4f3c645146d964b11e2b4c2fd Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 1 Apr 2020 10:57:50 +0200 Subject: [PATCH 095/219] Fix date test. --- modules/default/compliments/compliments.js | 5 +- .../modules/compliments/compliments_date.js | 1 + tests/e2e/modules/compliments_spec.js | 6 -- tests/e2e/modules/mocks/date.js | 93 ------------------- 4 files changed, 4 insertions(+), 101 deletions(-) delete mode 100644 tests/e2e/modules/mocks/date.js diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index ca275d27..bf7bca9f 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -40,7 +40,8 @@ Module.register("compliments", { morningEndTime: 12, afternoonStartTime: 12, afternoonEndTime: 17, - random: true + random: true, + mockDate: null }, lastIndexUsed:-1, // Set currentweather from module @@ -105,7 +106,7 @@ Module.register("compliments", { */ complimentArray: function() { var hour = moment().hour(); - var date = moment().format("YYYY-MM-DD"); + var date = this.config.mockDate ? this.config.mockDate : moment().format("YYYY-MM-DD"); var compliments; if (hour >= this.config.morningStartTime && hour < this.config.morningEndTime && this.config.compliments.hasOwnProperty("morning")) { diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 649d789b..7ea984b1 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -23,6 +23,7 @@ let config = { module: "compliments", position: "middle_center", config: { + mockDate: "2020-01-01", compliments: { morning: [], afternoon: [], diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index d7828268..97fd0ed9 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,6 +1,5 @@ const helpers = require("../global-setup"); const expect = require("chai").expect; -const MockDate = require("./mocks/date.js"); const describe = global.describe; const it = global.it; @@ -96,7 +95,6 @@ describe("Compliments module", function() { before(function() { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; - MockDate.set("2000-01-01"); }); it("Show happy new year compliment on new years day", function() { @@ -104,10 +102,6 @@ describe("Compliments module", function() { expect(text).to.be.oneOf(["Happy new year!"]); }); }); - - after(function() { - MockDate.reset(); - }); }); }); }); diff --git a/tests/e2e/modules/mocks/date.js b/tests/e2e/modules/mocks/date.js deleted file mode 100644 index 35113566..00000000 --- a/tests/e2e/modules/mocks/date.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * MockDate - * - * By Bob Lauer (https://github.com/boblauer/MockDate - * MIT Licensed. -*/ - -(function(name, definition) { - if (typeof module !== "undefined") {module.exports = definition();} - else if (typeof define === "function" && typeof define.amd === "object") {define(definition);} - else {this[name] = definition();} -}("MockDate", function() { - "use strict"; - - var _Date = Date - , _getTimezoneOffset = Date.prototype.getTimezoneOffset - , now = null - ; - - function MockDate(y, m, d, h, M, s, ms) { - var date; - - switch (arguments.length) { - - case 0: - if (now !== null) { - date = new _Date(now); - } else { - date = new _Date(); - } - break; - - case 1: - date = new _Date(y); - break; - - default: - d = typeof d === "undefined" ? 1 : d; - h = h || 0; - M = M || 0; - s = s || 0; - ms = ms || 0; - date = new _Date(y, m, d, h, M, s, ms); - break; - } - - return date; - } - - MockDate.UTC = _Date.UTC; - - MockDate.now = function() { - return new MockDate().valueOf(); - }; - - MockDate.parse = function(dateString) { - return _Date.parse(dateString); - }; - - MockDate.toString = function() { - return _Date.toString(); - }; - - MockDate.prototype = _Date.prototype; - - function set(date, timezoneOffset) { - var dateObj = new Date(date); - if (isNaN(dateObj.getTime())) { - throw new TypeError("mockdate: The time set is an invalid date: " + date); - } - - if (typeof timezoneOffset === "number") { - MockDate.prototype.getTimezoneOffset = function() { - return timezoneOffset; - }; - } - - Date = MockDate; - - now = dateObj.valueOf(); - } - - function reset() { - Date = _Date; - Date.prototype.getTimezoneOffset = _getTimezoneOffset; - } - - return { - set: set, - reset: reset - }; - -})); From 46df59d77aa4a0f5d4cdd82f2dcdb2f9cf963c0b Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 1 Apr 2020 11:52:39 +0200 Subject: [PATCH 096/219] Prepare release 2.11.0 --- CHANGELOG.md | 8 +- package-lock.json | 543 +++++++++++++++++++--------------------------- package.json | 2 +- 3 files changed, 230 insertions(+), 323 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a80d8883..0c952791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² -## [2.11.0] - Unreleased (Develop Branch) +## [2.11.0] - 2020-04-01 -*This release is scheduled to be released on 2020-04-01.* +🚨 READ THIS BEFORE UPDATING 🚨 + +In the past years the project has grown a lot. This came with a huge downside: poor maintainability. If I let the project continue the way it was, it would eventually crash and burn. More important: I would completely lose the drive and interest to continue the project. Because of this the decision was made to simplify the core by removing all side features like automatic installers and support for exotic platforms. This release (2.11.0) is the first real release that will reflect (parts) of these changes. As a result of this, some things might break. So before you continue make sure to backup your installation. Your config, your modules or better yet: your full MagicMirror folder. In other words: update at your own risk. + +For more information regarding this major change, please check issue [#1860](https://github.com/MichMich/MagicMirror/issues/1860). ### Deleted - Remove installers. diff --git a/package-lock.json b/package-lock.json index b7c363b5..319f0d90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.11.0-develop", + "version": "2.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,22 +14,23 @@ } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -46,14 +47,20 @@ } }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", + "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -63,12 +70,12 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -102,6 +109,70 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, "@babel/helper-split-export-declaration": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", @@ -111,15 +182,21 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", + "dev": true + }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { @@ -165,15 +242,15 @@ } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", "dev": true }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -199,17 +276,17 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -233,12 +310,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -317,9 +394,9 @@ "dev": true }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==", + "version": "13.9.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz", + "integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA==", "dev": true }, "@types/normalize-package-data": { @@ -598,18 +675,18 @@ "dev": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "dev": true, "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" }, "dependencies": { "ansi-styles": { @@ -836,14 +913,15 @@ "dev": true }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "btoa-lite": { @@ -937,9 +1015,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==", + "version": "1.0.30001038", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz", + "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==", "dev": true }, "caseless": { @@ -1048,12 +1126,6 @@ } } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, "clarinet": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/clarinet/-/clarinet-0.12.4.tgz", @@ -1178,12 +1250,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -1728,18 +1794,18 @@ } }, "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", @@ -1833,9 +1899,9 @@ } }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==", + "version": "1.3.392", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.392.tgz", + "integrity": "sha512-/hsgeVdReDsyTBE0aU9FRdh1wnNPrX3xlz3t61F+CJPOT+Umfi9DXHsCX85TEgWZQqlow0Rw44/4/jbU2Sqgkg==", "dev": true }, "emoji-regex": { @@ -2548,15 +2614,6 @@ "pinkie-promise": "^2.0.0" } }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, "findup-sync": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", @@ -2858,18 +2915,18 @@ } }, "gonzales-pe": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz", - "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "requires": { - "minimist": "1.1.x" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -2987,9 +3044,9 @@ } }, "grunt-jsonlint": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-2.1.1.tgz", - "integrity": "sha512-A3i+rKoYXvLaOSu75kkqQY8UXFXVIcPiuBKQJ7VVCx/8iA7c3IZnFEqkc6ZpU56zDyNLGYhZX2WT691PNSc70Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-2.1.2.tgz", + "integrity": "sha512-I80WQf6SaBA4Qpi+GYyah+sHIm3o34ETTawDKM9LDEE97vztZeKjGexuD4OG7wasFL5pLI0xTsc8Vm16/Z60QA==", "dev": true, "requires": { "@prantlf/jsonlint": "10.2.0" @@ -3328,6 +3385,48 @@ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "http-auth": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.2.4.tgz", @@ -3406,76 +3505,6 @@ "debug": "^3.1.0" } }, - "husky": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", - "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.5.1", - "cosmiconfig": "^6.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -5013,21 +5042,10 @@ "dev": true }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "dev": true }, "nopt": { "version": "3.0.6", @@ -5204,12 +5222,6 @@ "mimic-fn": "^2.1.0" } }, - "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", - "dev": true - }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -5507,75 +5519,26 @@ "integrity": "sha1-DPd1eml38b9/ajIge3CeN3OI6HQ=", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "requires": { - "find-up": "^4.0.0" + "find-up": "^2.1.0" }, "dependencies": { "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^2.0.0" } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true } } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, "plur": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", @@ -5648,48 +5611,6 @@ "dev": true, "requires": { "htmlparser2": "^3.10.0" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } } }, "postcss-jsx": { @@ -6366,18 +6287,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -7411,9 +7320,9 @@ "dev": true }, "meow": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.1.tgz", - "integrity": "sha512-kxGTFgT/b7/oSRSQsJ0qsT5IMU+bgZ1eAdSA3kIV7onkW0QWo/hL5RbGlMfvBjHJKPE1LaPX0kdecYFiqYWjUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.0.tgz", + "integrity": "sha512-iIAoeI01v6pmSfObAAWFoITAA4GgiT45m4SmJgoxtZfvI0fyZwhV4d0lTwiUXvAKIPlma05Feb2Xngl52Mj5Cg==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -7426,7 +7335,7 @@ "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.8.1", - "yargs-parser": "^16.1.0" + "yargs-parser": "^18.1.1" } }, "p-limit": { @@ -7563,9 +7472,9 @@ "dev": true }, "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", + "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -8190,9 +8099,9 @@ "dev": true }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -8290,12 +8199,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -8405,9 +8308,9 @@ "dev": true }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "dev": true, "requires": { "@babel/runtime": "^7.8.7" diff --git a/package.json b/package.json index 823624e5..317969ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.11.0-develop", + "version": "2.11.0", "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { From 501a314597fb61af2e37597af19ab3f1f7237608 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 1 Apr 2020 12:28:40 +0200 Subject: [PATCH 097/219] Start of 2.12.0-develop --- CHANGELOG.md | 11 +++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c952791..2dd8c2ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,17 @@ This project adheres to [Semantic Versioning](http://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² +## [2.12.0] - Unreleased (Develop Branch) + +*This release is scheduled to be released on 2020-04-01.* + +# Added + +# Updated + +# Deleted + + ## [2.11.0] - 2020-04-01 🚨 READ THIS BEFORE UPDATING 🚨 diff --git a/package-lock.json b/package-lock.json index 319f0d90..8584099c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.11.0", + "version": "2.12.0-develop", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 317969ee..b50d8f17 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.11.0", + "version": "2.12.0-develop", "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { From ca3275757b6c8002ab18cbf3df8ac9651d2858dd Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Wed, 1 Apr 2020 15:40:14 +0200 Subject: [PATCH 098/219] Fix release date. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dd8c2ef..a33fe958 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [2.12.0] - Unreleased (Develop Branch) -*This release is scheduled to be released on 2020-04-01.* +*This release is scheduled to be released on 2020-07-01.* # Added From 31b3f778fc52b95786aac46795509b399d9d3057 Mon Sep 17 00:00:00 2001 From: Andre Date: Fri, 3 Apr 2020 12:37:33 +0200 Subject: [PATCH 099/219] no single quotes --- js/electron.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/electron.js b/js/electron.js index cb839168..e5406de6 100644 --- a/js/electron.js +++ b/js/electron.js @@ -48,9 +48,9 @@ function createWindow() { var prefix; if (config["tls"] !== null && config["tls"]) { - prefix = 'https://'; + prefix = "https://"; } else { - prefix = 'http://'; + prefix = "http://"; } var address = (config.address === void 0) | (config.address === "") ? (config.address = "localhost") : config.address; From 54542f7f076e830267d7bba384d3693b9b032247 Mon Sep 17 00:00:00 2001 From: Leon Kiefer Date: Sun, 5 Apr 2020 23:00:38 +0200 Subject: [PATCH 100/219] added basename config use basename in socket.io path fix #1973 --- CHANGELOG.md | 2 ++ config/config.js.sample | 2 ++ js/defaults.js | 1 + js/socketclient.js | 2 +- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a33fe958..16ab8239 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). # Deleted +### Fixed +- The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) ## [2.11.0] - 2020-04-01 diff --git a/config/config.js.sample b/config/config.js.sample index 414054da..514a92f9 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -15,6 +15,8 @@ var config = { // - "0.0.0.0", "::" to listen on any interface // Default, when address config is left out or empty, is "localhost" port: 8080, + basename: "/", // The URL pathname where MagicMirror is hosted. If you are using a Reverse proxy + // you must set the sub path here. basename must end with a / ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses // or add a specific IPv4 of 192.168.1.5 : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], diff --git a/js/defaults.js b/js/defaults.js index 08c4d945..b005e70c 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -15,6 +15,7 @@ if (typeof(mmPort) !== "undefined") { var defaults = { address: address, port: port, + basename: "/", kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], diff --git a/js/socketclient.js b/js/socketclient.js index ee30f267..2eb2c6b8 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -9,7 +9,7 @@ var MMSocket = function(moduleName) { // Private Methods self.socket = io("/" + self.moduleName, { - path: window.location.pathname + "socket.io" + path: config.basename + "socket.io" }); var notificationCallback = function() {}; From eb37a495a2f34fd7566af52d420a7d2befa074f7 Mon Sep 17 00:00:00 2001 From: Leon Kiefer Date: Sun, 5 Apr 2020 23:18:00 +0200 Subject: [PATCH 101/219] changed headings in Changelog --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16ab8239..c3ccf583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). *This release is scheduled to be released on 2020-07-01.* -# Added +### Added -# Updated +### Updated -# Deleted +### Deleted ### Fixed - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) From e6c0011789bb5619c4ba00fc00b30730b184b886 Mon Sep 17 00:00:00 2001 From: Leon Kiefer Date: Mon, 6 Apr 2020 21:29:55 +0200 Subject: [PATCH 102/219] renamed basename to basePath --- config/config.js.sample | 4 ++-- js/defaults.js | 2 +- js/socketclient.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index 514a92f9..5d26b320 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -15,8 +15,8 @@ var config = { // - "0.0.0.0", "::" to listen on any interface // Default, when address config is left out or empty, is "localhost" port: 8080, - basename: "/", // The URL pathname where MagicMirror is hosted. If you are using a Reverse proxy - // you must set the sub path here. basename must end with a / + basePath: "/", // The URL path where MagicMirror is hosted. If you are using a Reverse proxy + // you must set the sub path here. basePath must end with a / ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses // or add a specific IPv4 of 192.168.1.5 : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], diff --git a/js/defaults.js b/js/defaults.js index b005e70c..dc246298 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -15,7 +15,7 @@ if (typeof(mmPort) !== "undefined") { var defaults = { address: address, port: port, - basename: "/", + basePath: "/", kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], diff --git a/js/socketclient.js b/js/socketclient.js index 2eb2c6b8..7be9ce7d 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -9,7 +9,7 @@ var MMSocket = function(moduleName) { // Private Methods self.socket = io("/" + self.moduleName, { - path: config.basename + "socket.io" + path: config.basePath + "socket.io" }); var notificationCallback = function() {}; From 37ee0e568f9b451281d9cbb819fba6f131a7a76b Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 7 Apr 2020 19:35:21 +0200 Subject: [PATCH 103/219] socketclient.js: add backward compatibility for old module code --- js/socketclient.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/js/socketclient.js b/js/socketclient.js index 7be9ce7d..5f24baf5 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -8,8 +8,12 @@ var MMSocket = function(moduleName) { self.moduleName = moduleName; // Private Methods + var base = "/"; + if (typeof config !== "undefined") { + base = config.basePath; + } self.socket = io("/" + self.moduleName, { - path: config.basePath + "socket.io" + path: base + "socket.io" }); var notificationCallback = function() {}; From 1fd36458a65be9e071f6e9f7ba323e5be1581e20 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 7 Apr 2020 19:42:16 +0200 Subject: [PATCH 104/219] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ccf583..18a89fe6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) +- Add backward compatibilty for old module code in socketclient.js [#1973](https://github.com/MichMich/MagicMirror/issues/1973) ## [2.11.0] - 2020-04-01 From 19145736342399effac1c5f4615518d5b6543d67 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 7 Apr 2020 20:26:09 +0200 Subject: [PATCH 105/219] fixed again ... --- js/socketclient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/socketclient.js b/js/socketclient.js index 5f24baf5..d10c0d60 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -9,7 +9,7 @@ var MMSocket = function(moduleName) { // Private Methods var base = "/"; - if (typeof config !== "undefined") { + if ((typeof config !== "undefined") && (typeof config.basePath !== "undefined")) { base = config.basePath; } self.socket = io("/" + self.moduleName, { From 18989d593aaeacc5a83db4f15e85f42c448f3e6d Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 18 Mar 2020 22:56:17 +0100 Subject: [PATCH 106/219] Replace grunt-yamllint with yaml-lint --- Gruntfile.js | 8 +------- package.json | 7 ++++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 36a90c5e..bd8b20ba 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -89,18 +89,12 @@ module.exports = function(grunt) { "!modules/default/calendar/vendor/ical.js/readme.md" ] } - }, - yamllint: { - all: [ - ".travis.yml" - ] } }); grunt.loadNpmTasks("grunt-eslint"); grunt.loadNpmTasks("grunt-stylelint"); grunt.loadNpmTasks("grunt-jsonlint"); - grunt.loadNpmTasks("grunt-yamllint"); grunt.loadNpmTasks("grunt-markdownlint"); - grunt.registerTask("default", ["eslint", "stylelint", "jsonlint", "markdownlint", "yamllint"]); + grunt.registerTask("default", ["eslint", "stylelint", "jsonlint", "markdownlint"]); }; diff --git a/package.json b/package.json index b50d8f17..8b162650 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", "test:lint": "grunt --env=test", "config:check": "node tests/configs/check_config.js", - "lint": "grunt --env=lint" + "lint": "grunt --env=lint", + "lint:yaml": "yamllint .travis.yml" }, "repository": { "type": "git", @@ -45,7 +46,6 @@ "grunt-jsonlint": "latest", "grunt-markdownlint": "latest", "grunt-stylelint": "latest", - "grunt-yamllint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", "mocha": "^7.0.0", @@ -54,7 +54,8 @@ "spectron": "^8.0.0", "stylelint": "latest", "stylelint-config-standard": "latest", - "time-grunt": "latest" + "time-grunt": "latest", + "yaml-lint": "^1.2.4" }, "optionalDependencies": { "electron": "^6.1.7" From 84e9c47a676656dacd4be4acb4481959db6b1a6d Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 19 Mar 2020 21:31:04 +0100 Subject: [PATCH 107/219] Replace grunt-stylelint with stylelint --- .stylelintrc.json | 3 ++- Gruntfile.js | 16 ---------------- package.json | 3 ++- 3 files changed, 4 insertions(+), 18 deletions(-) diff --git a/.stylelintrc.json b/.stylelintrc.json index db05c713..12500818 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,5 +1,6 @@ { "extends": "stylelint-config-standard", "font-family-name-quotes": "double-where-recommended", - "block-no-empty": false + "block-no-empty": false, + "ignoreFiles": ["./modules/default/alert/ns-default.css"] } diff --git a/Gruntfile.js b/Gruntfile.js index bd8b20ba..eb6fc7c2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -23,21 +23,6 @@ module.exports = function(grunt) { "vendor/vendor.js" ] }, - stylelint: { - simple: { - options: { - fix: fix, - configFile: ".stylelintrc.json" - }, - src: [ - "css/main.css", - "modules/default/calendar/calendar.css", - "modules/default/clock/clock_styles.css", - "modules/default/currentweather/currentweather.css", - "modules/default/weatherforcast/weatherforcast.css" - ] - } - }, jsonlint: { main: { src: [ @@ -92,7 +77,6 @@ module.exports = function(grunt) { } }); grunt.loadNpmTasks("grunt-eslint"); - grunt.loadNpmTasks("grunt-stylelint"); grunt.loadNpmTasks("grunt-jsonlint"); grunt.loadNpmTasks("grunt-markdownlint"); diff --git a/package.json b/package.json index 8b162650..f94f000d 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,10 @@ "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", "test:lint": "grunt --env=test", + "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", "config:check": "node tests/configs/check_config.js", "lint": "grunt --env=lint", + "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", "lint:yaml": "yamllint .travis.yml" }, "repository": { @@ -45,7 +47,6 @@ "grunt-eslint": "latest", "grunt-jsonlint": "latest", "grunt-markdownlint": "latest", - "grunt-stylelint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", "mocha": "^7.0.0", From 427d186c86251da6482eab4a850349763a4f6aa9 Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 19 Mar 2020 21:47:49 +0100 Subject: [PATCH 108/219] Replace grunt-markdownlint with markdownlint-cli --- .markdownlintrc.json | 23 +++++++++++++++++++++++ Gruntfile.js | 41 +---------------------------------------- package.json | 4 +++- 3 files changed, 27 insertions(+), 41 deletions(-) create mode 100644 .markdownlintrc.json diff --git a/.markdownlintrc.json b/.markdownlintrc.json new file mode 100644 index 00000000..6c4443d4 --- /dev/null +++ b/.markdownlintrc.json @@ -0,0 +1,23 @@ +{ + "default": true, + "line-length": false, + "blanks-around-headers": false, + "no-duplicate-header": false, + "no-inline-html": false, + "MD010": false, + "MD001": false, + "MD031": false, + "MD040": false, + "MD002": false, + "MD029": false, + "MD041": false, + "MD032": false, + "MD036": false, + "MD037": false, + "MD009": false, + "MD018": false, + "MD012": false, + "MD026": false, + "MD038": false, + "MD047": false +} diff --git a/Gruntfile.js b/Gruntfile.js index eb6fc7c2..557bfa62 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -37,48 +37,9 @@ module.exports = function(grunt) { reporter: "jshint" } } - }, - markdownlint: { - all: { - options: { - config: { - "default": true, - "line-length": false, - "blanks-around-headers": false, - "no-duplicate-header": false, - "no-inline-html": false, - "MD010": false, - "MD001": false, - "MD031": false, - "MD040": false, - "MD002": false, - "MD029": false, - "MD041": false, - "MD032": false, - "MD036": false, - "MD037": false, - "MD009": false, - "MD018": false, - "MD012": false, - "MD026": false, - "MD038": false, - "MD047": false - } - }, - src: [ - "README.md", - "CHANGELOG.md", - "LICENSE.md", - "modules/README.md", - "modules/default/**/*.md", - "!modules/default/calendar/vendor/ical.js/readme.md" - ] - } } }); grunt.loadNpmTasks("grunt-eslint"); grunt.loadNpmTasks("grunt-jsonlint"); - grunt.loadNpmTasks("grunt-markdownlint"); - - grunt.registerTask("default", ["eslint", "stylelint", "jsonlint", "markdownlint"]); + grunt.registerTask("default", ["eslint", "jsonlint"]); }; diff --git a/package.json b/package.json index f94f000d..89caa773 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", "config:check": "node tests/configs/check_config.js", "lint": "grunt --env=lint", + "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", "lint:yaml": "yamllint .travis.yml" }, @@ -46,9 +47,10 @@ "grunt": "latest", "grunt-eslint": "latest", "grunt-jsonlint": "latest", - "grunt-markdownlint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", + "markdownlint": "^0.19.0", + "markdownlint-cli": "^0.22.0", "mocha": "^7.0.0", "mocha-each": "^1.1.0", "mocha-logger": "^1.0.6", From 61462cf57e86d49b35ae0c324a2fd93871bdb992 Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 19 Mar 2020 22:02:28 +0100 Subject: [PATCH 109/219] Replace grunt-eslint with eslint --- .eslintignore | 8 +++----- Gruntfile.js | 26 ++------------------------ package.json | 5 +++-- 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/.eslintignore b/.eslintignore index 7862c971..675b6a8c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,3 @@ -vendor/* -!/vendor/vendor.js -!/modules/default/** -!/modules/node_helper -!/modules/node_helper/** +modules/default/alert/notificationFx.js +modules/default/alert/modernizr.custom.js +modules/default/alert/classie.js diff --git a/Gruntfile.js b/Gruntfile.js index 557bfa62..9953cf80 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,28 +1,7 @@ module.exports = function(grunt) { require("time-grunt")(grunt); - var fix = (grunt.option("env") || "lint") === "lint"; grunt.initConfig({ - eslint: { - options: { - fix: fix, - configFile: ".eslintrc.json" - }, - target: [ - "js/*.js", - "modules/default/*.js", - "modules/default/*/*.js", - "serveronly/*.js", - "clientonly/*.js", - "*.js", - "tests/**/*.js", - "!modules/default/alert/notificationFx.js", - "!modules/default/alert/modernizr.custom.js", - "!modules/default/alert/classie.js", - "config/*", - "translations/translations.js", - "vendor/vendor.js" - ] - }, + pkg: grunt.file.readJSON("package.json"), jsonlint: { main: { src: [ @@ -39,7 +18,6 @@ module.exports = function(grunt) { } } }); - grunt.loadNpmTasks("grunt-eslint"); grunt.loadNpmTasks("grunt-jsonlint"); - grunt.registerTask("default", ["eslint", "jsonlint"]); + grunt.registerTask("default", ["jsonlint"]); }; diff --git a/package.json b/package.json index 89caa773..baf6bed9 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,11 @@ "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", "test:lint": "grunt --env=test", + "text:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json", "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", "config:check": "node tests/configs/check_config.js", "lint": "grunt --env=lint", + "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", "lint:yaml": "yamllint .travis.yml" @@ -44,8 +46,7 @@ "chai-as-promised": "^7.1.1", "current-week-number": "^1.0.7", "danger": "^3.1.3", - "grunt": "latest", - "grunt-eslint": "latest", + "eslint": "^6.8.0", "grunt-jsonlint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", From f36df159e06b6f0c1205830077426860ef8773ee Mon Sep 17 00:00:00 2001 From: rejas Date: Fri, 10 Apr 2020 12:24:08 +0200 Subject: [PATCH 110/219] Replace grunt-jsonlint with jsonlint --- Gruntfile.js | 23 - package-lock.json | 1188 +++++++++++++++++++-------------------------- package.json | 3 +- 3 files changed, 501 insertions(+), 713 deletions(-) delete mode 100644 Gruntfile.js diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 9953cf80..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = function(grunt) { - require("time-grunt")(grunt); - grunt.initConfig({ - pkg: grunt.file.readJSON("package.json"), - jsonlint: { - main: { - src: [ - "package.json", - ".eslintrc.json", - ".stylelintrc.json", - "translations/*.json", - "modules/default/*/translations/*.json", - "vendor/package.json" - ], - options: { - reporter: "jshint" - } - } - } - }); - grunt.loadNpmTasks("grunt-jsonlint"); - grunt.registerTask("default", ["jsonlint"]); -}; diff --git a/package-lock.json b/package-lock.json index 8584099c..3ae173d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,9 +47,9 @@ } }, "json5": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", - "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -70,12 +70,12 @@ } }, "@babel/generator": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", - "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", + "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", "dev": true, "requires": { - "@babel/types": "^7.9.0", + "@babel/types": "^7.9.5", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -90,14 +90,14 @@ } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.8.3", "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/types": "^7.9.5" } }, "@babel/helper-get-function-arity": { @@ -183,9 +183,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", - "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", "dev": true }, "@babel/helpers": { @@ -276,17 +276,17 @@ } }, "@babel/traverse": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", - "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", + "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-function-name": "^7.8.3", + "@babel/generator": "^7.9.5", + "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.0", + "@babel/types": "^7.9.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -310,12 +310,12 @@ } }, "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.9.0", + "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -381,6 +381,25 @@ } } }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.0.tgz", + "integrity": "sha512-9svhg0rpUOo4xkvnllUzM0ZQF/Iwxhi6Bf1rzOA06fDa+fjnBUb2mvEV1c9nJb14g1XD/HMSmvklaVyCo96x6A==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", + "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "dev": true, + "requires": { + "remark": "^12.0.0", + "unist-util-find-all-after": "^3.0.1" + } + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", @@ -393,12 +412,6 @@ "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", "dev": true }, - "@types/node": { - "version": "13.9.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz", - "integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA==", - "dev": true - }, "@types/normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -417,38 +430,12 @@ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", "dev": true }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" - } - }, - "@types/vfile-message": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", - "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", - "dev": true, - "requires": { - "vfile-message": "*" - } - }, "abab": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -459,9 +446,9 @@ } }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true }, "acorn-globals": { @@ -483,9 +470,9 @@ } }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "acorn-walk": { @@ -526,12 +513,20 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, "ansi-regex": { @@ -675,13 +670,13 @@ "dev": true }, "autoprefixer": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", - "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", + "version": "9.7.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz", + "integrity": "sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ==", "dev": true, "requires": { - "browserslist": "^4.11.0", - "caniuse-lite": "^1.0.30001036", + "browserslist": "^4.11.1", + "caniuse-lite": "^1.0.30001039", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", @@ -1015,9 +1010,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001038", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz", - "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==", + "version": "1.0.30001040", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz", + "integrity": "sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ==", "dev": true }, "caseless": { @@ -1204,12 +1199,6 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", - "dev": true - }, "collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", @@ -1618,15 +1607,6 @@ } } }, - "date-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-1.1.0.tgz", - "integrity": "sha1-GIdtC9pMGf5w3Tv0sDTygbEqQLY=", - "dev": true, - "requires": { - "time-zone": "^0.1.0" - } - }, "dateformat": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", @@ -1899,9 +1879,9 @@ } }, "electron-to-chromium": { - "version": "1.3.392", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.392.tgz", - "integrity": "sha512-/hsgeVdReDsyTBE0aU9FRdh1wnNPrX3xlz3t61F+CJPOT+Umfi9DXHsCX85TEgWZQqlow0Rw44/4/jbU2Sqgkg==", + "version": "1.3.402", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.402.tgz", + "integrity": "sha512-gaCDfX7IUH0s3JmBiHCDPrvVcdnTTP1r4WLJc2dHkYYbLmXZ2XHiJCcGQ9Balf91aKTvuCKCyu2JjJYRykoI1w==", "dev": true }, "emoji-regex": { @@ -2199,9 +2179,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", "dev": true }, "supports-color": { @@ -2241,13 +2221,13 @@ "dev": true }, "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" } }, @@ -2258,12 +2238,20 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==", + "dev": true + } } }, "esrecurse": { @@ -2292,12 +2280,6 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, "eventyoshi": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/eventyoshi/-/eventyoshi-0.2.1.tgz", @@ -2327,12 +2309,6 @@ "clone-regexp": "^2.1.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -2518,9 +2494,9 @@ "dev": true }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -2550,9 +2526,9 @@ } }, "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -2614,30 +2590,6 @@ "pinkie-promise": "^2.0.0" } }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -2782,12 +2734,6 @@ "pump": "^3.0.0" } }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -2807,20 +2753,6 @@ "homedir-polyfill": "^1.0.0" } }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", @@ -2851,9 +2783,9 @@ } }, "globals": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", - "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { "type-fest": "^0.8.1" @@ -2936,6 +2868,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", @@ -2948,263 +2886,6 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "grunt": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", - "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", - "dev": true, - "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.13.0", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" - }, - "dependencies": { - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "grunt-eslint": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-22.0.0.tgz", - "integrity": "sha512-I7vIU4x/mb20fmA6TAmLx6Wzn7mfs8ZXeuk7LbP2ujKVFV7KZmJ3qXUyqe2wnD+v/74Rs5uYOZrLL8EoBmlG9Q==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "eslint": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "grunt-jsonlint": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-2.1.2.tgz", - "integrity": "sha512-I80WQf6SaBA4Qpi+GYyah+sHIm3o34ETTawDKM9LDEE97vztZeKjGexuD4OG7wasFL5pLI0xTsc8Vm16/Z60QA==", - "dev": true, - "requires": { - "@prantlf/jsonlint": "10.2.0" - } - }, - "grunt-known-options": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", - "dev": true - }, - "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", - "dev": true, - "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "grunt-legacy-util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", - "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", - "dev": true, - "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" - } - }, - "grunt-markdownlint": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/grunt-markdownlint/-/grunt-markdownlint-2.9.0.tgz", - "integrity": "sha512-jLzTzNVZN/u2iblV2j+2xfJGG+Mv8NMl5CAOWNQftV7SOHnstwR/tiZPac8ZTmJFqwAqCwafIvu9wP2naAS8Og==", - "dev": true, - "requires": { - "markdownlint": "^0.19.0" - } - }, - "grunt-stylelint": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.14.0.tgz", - "integrity": "sha512-4gi/Yw9djHEdRlikKvFjy2wkHlD1YVzlJOePUPlYm1PIpGi3PMVJoc7Eon6RVSjdRcj3NcYHbeNA0EzplXzp7w==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "grunt-yamllint": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/grunt-yamllint/-/grunt-yamllint-0.3.0.tgz", - "integrity": "sha1-EAP3n5uluSMVedOOr8M/awmNdPM=", - "dev": true, - "requires": { - "async": "^2.1.5", - "chalk": "^1.1.3", - "js-yaml": "^3.8.1" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -3339,12 +3020,6 @@ "parse-passwd": "^1.0.0" } }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", @@ -3598,23 +3273,23 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz", - "integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.15", "mute-stream": "0.0.8", - "run-async": "^2.2.0", + "run-async": "^2.4.0", "rxjs": "^6.5.3", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { @@ -3625,31 +3300,61 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -3659,43 +3364,24 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^5.0.0" } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } @@ -3831,9 +3517,9 @@ "dev": true }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-promise": { @@ -4066,6 +3752,12 @@ "minimist": "^1.2.0" } }, + "jsonc-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", + "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==", + "dev": true + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -4204,6 +3896,26 @@ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, + "leprechaun": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/leprechaun/-/leprechaun-0.0.2.tgz", + "integrity": "sha1-i5ZRSp5jTFP75ZqAlPM3jI+yCE0=", + "dev": true, + "requires": { + "log-symbols": "^1.0.2" + }, + "dependencies": { + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + } + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -4270,12 +3982,24 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.differencewith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz", + "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=", + "dev": true + }, "lodash.find": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", "dev": true }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -4324,12 +4048,24 @@ "integrity": "sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -4437,10 +4173,13 @@ } }, "markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } }, "markdownlint": { "version": "0.19.0", @@ -4451,6 +4190,76 @@ "markdown-it": "10.0.0" } }, + "markdownlint-cli": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.22.0.tgz", + "integrity": "sha512-qRg6tK5dXWqkaFvEstz9YSQal1ECMgofrSZgdBOaPWG8cD50pk8Hs0ZpBCJ6SCHPKF71pCdtuSL2u82sIx2XWA==", + "dev": true, + "requires": { + "commander": "~2.9.0", + "deep-extend": "~0.5.1", + "get-stdin": "~5.0.1", + "glob": "~7.1.2", + "ignore": "~5.1.4", + "js-yaml": "~3.13.1", + "jsonc-parser": "~2.2.0", + "lodash.differencewith": "~4.5.0", + "lodash.flatten": "~4.4.0", + "markdownlint": "~0.19.0", + "markdownlint-rule-helpers": "~0.7.0", + "minimatch": "~3.0.4", + "rc": "~1.2.7" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + } + } + }, + "markdownlint-rule-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.7.0.tgz", + "integrity": "sha512-xZByWJNBaCMHo7nYPv/5aO8Jt68YcMvyouFXhuXmJzbqCsQy8rfCj0kYcv22kdK5PwAgMdbHg0hyTdURbUZtJw==", + "dev": true + }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -4458,12 +4267,12 @@ "dev": true }, "mdast-util-compact": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", - "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", "dev": true, "requires": { - "unist-util-visit": "^1.1.0" + "unist-util-visit": "^2.0.0" } }, "mdurl": { @@ -4588,6 +4397,14 @@ "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, "mkdirp": { @@ -5003,6 +4820,70 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "nconf": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", + "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", + "dev": true, + "requires": { + "async": "^1.4.0", + "ini": "^1.3.0", + "secure-keys": "^1.0.0", + "yargs": "^3.19.0" + }, + "dependencies": { + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dev": true, + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -5047,15 +4928,6 @@ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", "dev": true }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5339,9 +5211,9 @@ "dev": true }, "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -5394,12 +5266,6 @@ } } }, - "parse-ms": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", - "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", - "dev": true - }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -5539,12 +5405,6 @@ } } }, - "plur": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", - "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", - "dev": true - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -5613,15 +5473,6 @@ "htmlparser2": "^3.10.0" } }, - "postcss-jsx": { - "version": "0.36.4", - "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz", - "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==", - "dev": true, - "requires": { - "@babel/core": ">=7.2.2" - } - }, "postcss-less": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", @@ -5631,16 +5482,6 @@ "postcss": "^7.0.14" } }, - "postcss-markdown": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", - "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", - "dev": true, - "requires": { - "remark": "^10.0.1", - "unist-util-find-all-after": "^1.0.2" - } - }, "postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", @@ -5715,12 +5556,12 @@ } }, "postcss-sass": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.2.tgz", - "integrity": "sha512-hcRgnd91OQ6Ot9R90PE/khUDCJHG8Uxxd3F7Y0+9VHjBiJgNv7sK5FxyHMCBtoLmmkzVbSj3M3OlqUfLJpq0CQ==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, "requires": { - "gonzales-pe": "^4.2.4", + "gonzales-pe": "^4.3.0", "postcss": "^7.0.21" } }, @@ -5771,17 +5612,6 @@ "meow": "^3.1.0" } }, - "pretty-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", - "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", - "dev": true, - "requires": { - "is-finite": "^1.0.1", - "parse-ms": "^1.0.0", - "plur": "^1.0.0" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5979,36 +5809,37 @@ "dev": true }, "remark": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", - "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.0.tgz", + "integrity": "sha512-oX4lMIS0csgk8AEbzY0h2jdR0ngiCHOpwwpxjmRa5TqAkeknY+tkhjRJGZqnCmvyuWh55/0SW5WY3R3nn3PH9A==", "dev": true, "requires": { - "remark-parse": "^6.0.0", - "remark-stringify": "^6.0.0", - "unified": "^7.0.0" + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" } }, "remark-parse": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", - "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.0.tgz", + "integrity": "sha512-Ck14G1Ns/GEPXhSw6m1Uv28kMtVk63e59NyL+QlhBBwBdIUXROM6MPfBehPhW6TW2d73batMdZsKwuxl5i3tEA==", "dev": true, "requires": { + "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0", "is-whitespace-character": "^1.0.0", "is-word-character": "^1.0.0", "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", + "parse-entities": "^2.0.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", "trim": "0.0.1", "trim-trailing-lines": "^1.0.0", "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", "xtend": "^4.0.1" }, "dependencies": { @@ -6021,9 +5852,9 @@ } }, "remark-stringify": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", - "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.0.0.tgz", + "integrity": "sha512-cABVYVloFH+2ZI5bdqzoOmemcz/ZuhQSH6W6ZNYnLojAUUn3xtX7u+6BpnYp35qHoGr2NFBsERV14t4vCIeW8w==", "dev": true, "requires": { "ccount": "^1.0.0", @@ -6032,12 +5863,12 @@ "is-whitespace-character": "^1.0.0", "longest-streak": "^2.0.1", "markdown-escapes": "^1.0.0", - "markdown-table": "^1.1.0", - "mdast-util-compact": "^1.0.0", - "parse-entities": "^1.0.2", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", + "stringify-entities": "^3.0.0", "unherit": "^1.0.4", "xtend": "^4.0.1" }, @@ -6259,9 +6090,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -6282,6 +6113,12 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "secure-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", + "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -7089,14 +6926,15 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.0.tgz", + "integrity": "sha512-h7NJJIssprqlyjHT2eQt2W1F+MCcNmwPGlKb0bWEdET/3N44QN3QbUF/ueKCgAssyKRZ3Br9rQ7FcXjHr0qLHw==", "dev": true, "requires": { "character-entities-html4": "^1.0.0", "character-entities-legacy": "^1.0.0", "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", "is-hexadecimal": "^1.0.0" } }, @@ -7142,14 +6980,16 @@ "dev": true }, "stylelint": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.2.1.tgz", - "integrity": "sha512-461ZV4KpUe7pEHHgMOsH4kkjF7qsjkCIMJYOf7QQC4cvgPUJ0z4Nj+ah5fvKl1rzqBqc5EZa6P0nna4CGoJX+A==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.1.tgz", + "integrity": "sha512-jeeGwU7y/0l2YTL042U2U0W04J9JIO6bRpTM4S8npSzaO5GzBz4VFlVlMucFzZXkSylxppEx9R6p+DiDLJcrWw==", "dev": true, "requires": { - "autoprefixer": "^9.7.4", + "@stylelint/postcss-css-in-js": "^0.37.0", + "@stylelint/postcss-markdown": "^0.36.1", + "autoprefixer": "^9.7.5", "balanced-match": "^1.0.0", - "chalk": "^3.0.0", + "chalk": "^4.0.0", "cosmiconfig": "^6.0.0", "debug": "^4.1.1", "execall": "^2.0.0", @@ -7167,19 +7007,17 @@ "lodash": "^4.17.15", "log-symbols": "^3.0.0", "mathml-tag-names": "^2.1.3", - "meow": "^6.0.1", + "meow": "^6.1.0", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", "postcss": "^7.0.27", "postcss-html": "^0.36.0", - "postcss-jsx": "^0.36.4", "postcss-less": "^3.1.4", - "postcss-markdown": "^0.36.0", "postcss-media-query-parser": "^0.2.3", "postcss-reporter": "^6.0.1", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.1", - "postcss-sass": "^0.4.2", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", "postcss-scss": "^2.0.0", "postcss-selector-parser": "^6.0.2", "postcss-syntax": "^0.36.2", @@ -7220,9 +7058,9 @@ "dev": true }, "camelcase-keys": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.1.tgz", - "integrity": "sha512-BPCNVH56RVIxQQIXskp5tLQXUNGQ6sXr7iCv1FHDt81xBOQ/1r6H8SPxf19InVP6DexWar4s87q9thfuk8X9HA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -7231,9 +7069,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7339,9 +7177,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -7660,39 +7498,6 @@ "xtend": "~2.1.1" } }, - "time-grunt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-grunt/-/time-grunt-2.0.0.tgz", - "integrity": "sha512-iQD2AeDYCAJrsPC/eUsfYZD9UT7TuBOmUIgFV5zeTQgRk6yLJKoc3aYR0gusJ0m+bG13B6qrDZ0SwPLe0/htHw==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "date-time": "^1.1.0", - "figures": "^1.0.0", - "hooker": "^0.2.3", - "number-is-nan": "^1.0.0", - "pretty-ms": "^2.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - } - } - }, - "time-zone": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-0.1.0.tgz", - "integrity": "sha1-Sncotqwo2w4Aj1FAQ/1VW9VXO0Y=", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -7849,16 +7654,6 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", - "dev": true, - "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - } - }, "unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -7878,19 +7673,17 @@ } }, "unified": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.0.0.tgz", + "integrity": "sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "@types/vfile": "^3.0.0", "bail": "^1.0.0", "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", "trough": "^1.0.0", - "vfile": "^3.0.0", - "x-is-string": "^0.1.0" + "vfile": "^4.0.0" } }, "uniq": { @@ -7900,27 +7693,27 @@ "dev": true }, "unist-util-find-all-after": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", - "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", + "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "unist-util-is": "^4.0.0" } }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", "dev": true }, "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dev": true, "requires": { - "unist-util-visit": "^1.1.0" + "unist-util-visit": "^2.0.0" } }, "unist-util-stringify-position": { @@ -7933,21 +7726,24 @@ } }, "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", + "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" } }, "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", + "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" } }, "universal-user-agent": { @@ -8064,38 +7860,22 @@ } }, "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", "dev": true, "requires": { + "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "dev": true, - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - } + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", "dev": true }, "vfile-message": { @@ -8208,6 +7988,12 @@ "string-width": "^1.0.2 || 2" } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, "windows-release": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", @@ -8271,12 +8057,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, "x-xss-protection": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", @@ -8316,6 +8096,36 @@ "@babel/runtime": "^7.8.7" } }, + "yaml-lint": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/yaml-lint/-/yaml-lint-1.2.4.tgz", + "integrity": "sha512-qpKE0szyKsE9TrlVPi+bxKxVAjl30QjNAOyOxy7noQdf/WCCYUlT4xiCRxMG48eyeBzMBtBN6PgGfaB0MJePNw==", + "dev": true, + "requires": { + "glob": "^7.1.2", + "js-yaml": "^3.10.0", + "leprechaun": "0.0.2", + "lodash.merge": "^4.6.1", + "lodash.snakecase": "^4.1.1", + "nconf": "^0.10.0" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "yargs": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", diff --git a/package.json b/package.json index baf6bed9..d2133132 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "config:check": "node tests/configs/check_config.js", "lint": "grunt --env=lint", "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", + "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/*/translations/*.json translations/*.json vendor/package.json", "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", "lint:yaml": "yamllint .travis.yml" @@ -42,12 +43,12 @@ }, "homepage": "https://magicmirror.builders", "devDependencies": { + "@prantlf/jsonlint": "^10.2.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "current-week-number": "^1.0.7", "danger": "^3.1.3", "eslint": "^6.8.0", - "grunt-jsonlint": "latest", "http-auth": "^3.2.3", "jsdom": "^11.6.2", "markdownlint": "^0.19.0", From ab3015df6b60309929baeff6a5f79e94d2aab955 Mon Sep 17 00:00:00 2001 From: rejas Date: Fri, 10 Apr 2020 14:43:58 +0200 Subject: [PATCH 111/219] Remove rest of grunt calls --- .travis.yml | 1 - package.json | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2f9f3690..d156ac1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,6 @@ before_install: - npm i -g npm before_script: - yarn danger ci - - npm install grunt-cli -g - "export DISPLAY=:99.0" - "export ELECTRON_DISABLE_SANDBOX=1" - "sh -e /etc/init.d/xvfb start" diff --git a/package.json b/package.json index d2133132..faa710f2 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,11 @@ "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", - "test:lint": "grunt --env=test", - "text:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json", + "test:lint": "npm run test:js && npm run test:style", + "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json", "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", "config:check": "node tests/configs/check_config.js", - "lint": "grunt --env=lint", + "lint": "npm run lint:js && npm run lint:json && npm run lint:markdown && npm run lint:style && npm run lint:yaml", "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/*/translations/*.json translations/*.json vendor/package.json", "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", @@ -57,9 +57,8 @@ "mocha-each": "^1.1.0", "mocha-logger": "^1.0.6", "spectron": "^8.0.0", - "stylelint": "latest", - "stylelint-config-standard": "latest", - "time-grunt": "latest", + "stylelint": "^13.3.1", + "stylelint-config-standard": "^20.0.0", "yaml-lint": "^1.2.4" }, "optionalDependencies": { From 194af0e9850a298fe95b236c89e3f3f3a2d475f8 Mon Sep 17 00:00:00 2001 From: rejas Date: Fri, 10 Apr 2020 14:59:00 +0200 Subject: [PATCH 112/219] Run linter and npm audit --- modules/default/weatherforecast/weatherforecast.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/weatherforecast/weatherforecast.css b/modules/default/weatherforecast/weatherforecast.css index 21be13b7..8c419cee 100644 --- a/modules/default/weatherforecast/weatherforecast.css +++ b/modules/default/weatherforecast/weatherforecast.css @@ -19,9 +19,9 @@ } .weatherforecast tr.colored .min-temp { - color: #BCDDFF; + color: #bcddff; } .weatherforecast tr.colored .max-temp { - color: #FF8E99; + color: #ff8e99; } From ed28ce1874399dfb060beb10f62ec98b926ebcea Mon Sep 17 00:00:00 2001 From: rejas Date: Fri, 10 Apr 2020 16:12:51 +0200 Subject: [PATCH 113/219] Update changelog and lock --- CHANGELOG.md | 3 +- package-lock.json | 81 +++++++++++++++++++++++++---------------------- 2 files changed, 46 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18a89fe6..558a3957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,12 +12,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Updated +Replaced grunt-based linters with their non-grunt equivalents ### Deleted ### Fixed - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) -- Add backward compatibilty for old module code in socketclient.js [#1973](https://github.com/MichMich/MagicMirror/issues/1973) +- Add backward compatibility for old module code in socketclient.js [#1973](https://github.com/MichMich/MagicMirror/issues/1973) ## [2.11.0] - 2020-04-01 diff --git a/package-lock.json b/package-lock.json index 3ae173d2..5b845208 100644 --- a/package-lock.json +++ b/package-lock.json @@ -462,9 +462,9 @@ }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true } } @@ -954,8 +954,7 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -1277,9 +1276,9 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2433,14 +2432,14 @@ } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { @@ -2503,9 +2502,9 @@ } }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "requires": { "pend": "~1.2.0" } @@ -4385,9 +4384,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.0.2", @@ -4408,18 +4407,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "mocha": { @@ -4574,6 +4566,21 @@ "chalk": "^2.0.1" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -4772,7 +4779,6 @@ "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", - "mkdirp": "0.5.1", "supports-color": "5.4.0" } }, @@ -8389,11 +8395,12 @@ } }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "yeast": { From b651dc845b617ca68f3b436ab54b9f5a9e07fb90 Mon Sep 17 00:00:00 2001 From: AndreKoepke Date: Tue, 14 Apr 2020 14:10:29 +0200 Subject: [PATCH 114/219] no single quotes --- clientonly/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clientonly/index.js b/clientonly/index.js index 1c772f5d..4b79751f 100644 --- a/clientonly/index.js +++ b/clientonly/index.js @@ -20,7 +20,7 @@ }); // determine if "--use-tls"-flag was provided - config["tls"] = process.argv.indexOf(`--use-tls`) > 0; + config["tls"] = process.argv.indexOf("--use-tls") > 0; } function getServerConfig(url) { From c7c6dc4e671cd372e09f65bde60832fa9177e369 Mon Sep 17 00:00:00 2001 From: Veeck Date: Wed, 1 Apr 2020 21:07:50 +0200 Subject: [PATCH 115/219] Move config check into js folder, cleanup var usage --- {tests/configs => js}/check_config.js | 27 ++++++++++++--------------- package.json | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) rename {tests/configs => js}/check_config.js (72%) diff --git a/tests/configs/check_config.js b/js/check_config.js similarity index 72% rename from tests/configs/check_config.js rename to js/check_config.js index 917b6d32..f73e4bf9 100644 --- a/tests/configs/check_config.js +++ b/js/check_config.js @@ -11,11 +11,13 @@ const Linter = require("eslint").Linter; const linter = new Linter(); -const config = require(__dirname + "/../../.eslintrc.json"); -var path = require("path"); -var fs = require("fs"); -var Utils = require(__dirname + "/../../js/utils.js"); +const path = require("path"); +const fs = require("fs"); + +const rootPath = path.resolve(__dirname + "/../"); +const config = require(rootPath + "/.eslintrc.json"); +const Utils = require(rootPath + "/js/utils.js"); /* getConfigFile() * Return string with path of configuration file @@ -23,8 +25,7 @@ var Utils = require(__dirname + "/../../js/utils.js"); */ function getConfigFile() { // FIXME: This function should be in core. Do you want refactor me ;) ?, be good! - rootPath = path.resolve(__dirname + "/../../"); - var configFileName = path.resolve(rootPath + "/config/config.js"); + let configFileName = path.resolve(rootPath + "/config/config.js"); if (process.env.MM_CONFIG_FILE) { configFileName = path.resolve(process.env.MM_CONFIG_FILE); } @@ -32,7 +33,7 @@ function getConfigFile() { } function checkConfigFile() { - var configFileName = getConfigFile(); + const configFileName = getConfigFile(); // Check if file is present if (fs.existsSync(configFileName) === false) { console.error(Utils.colors.error("File not found: "), configFileName); @@ -49,7 +50,7 @@ function checkConfigFile() { // Validate syntax of the configuration file. // In case the there errors show messages and // return - console.info(Utils.colors.info("Checking file... ", configFileName)); + console.info(Utils.colors.info("Checking file... "), configFileName); // I'm not sure if all ever is utf-8 fs.readFile(configFileName, "utf-8", function (err, data) { if (err) { throw err; } @@ -58,15 +59,11 @@ function checkConfigFile() { console.log("Your configuration file doesn't contain syntax errors :)"); return true; } else { - errors = messages; - for (var idx in errors) { - error = errors[idx]; + messages.forEach(error => { console.log("Line", error.line, "col", error.column, error.message); - } + }); } }); } -if (process.env.NODE_ENV !== "test") { - checkConfigFile(); -} +checkConfigFile(); diff --git a/package.json b/package.json index faa710f2..8a0592a6 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "test:lint": "npm run test:js && npm run test:style", "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json", "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", - "config:check": "node tests/configs/check_config.js", + "config:check": "node js/check_config.js", "lint": "npm run lint:js && npm run lint:json && npm run lint:markdown && npm run lint:style && npm run lint:yaml", "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/*/translations/*.json translations/*.json vendor/package.json", From e85b49c573b098a15ee23891d2f51f9c6864410d Mon Sep 17 00:00:00 2001 From: Veeck Date: Sun, 19 Apr 2020 08:22:48 +0200 Subject: [PATCH 116/219] Update changelog --- CHANGELOG.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 875d91df..70241f21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Updated -Replaced grunt-based linters with their non-grunt equivalents +- Cleaned up check_config code +- Replaced grunt-based linters with their non-grunt equivalents ### Deleted @@ -114,7 +115,7 @@ Special thanks to @sdetweil for all his great contributions! ### Updated - Updatenotification module: Display update notification for a limited (configurable) time. - Enabled e2e/vendor_spec.js tests. -- The css/custom.css will be rename after the next release. We've add into `run-start.sh` a instruction by GIT to ignore with `--skip-worktree` and `rm --cached`. [#1540](https://github.com/MichMich/MagicMirror/issues/1540) +- The css/custom.css will be renamed after the next release. We've added into `run-start.sh` an instruction by GIT to ignore with `--skip-worktree` and `rm --cached`. [#1540](https://github.com/MichMich/MagicMirror/issues/1540) - Disable sending of notification CLOCK_SECOND when displaySeconds is false. ### Fixed @@ -149,7 +150,7 @@ Special thanks to @sdetweil for all his great contributions! ### Updated - English translation for "Feels" to "Feels like" -- Fixed the example calender url in `config.js.sample` +- Fixed the example calendar url in `config.js.sample` - Update `ical.js` to solve various calendar issues. - Update weather city list url [#1676](https://github.com/MichMich/MagicMirror/issues/1676) - Only update clock once per minute when seconds aren't shown @@ -254,7 +255,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Documentation for the existing `scale` option in the Weather Forecast module. ### Fixed -- Allow to parse recurring calendar events where the start date is before 1900 +- Allow parsing recurring calendar events where the start date is before 1900 - Fixed Polish translation for Single Update Info - Ignore entries with unparseable details in the calendar module - Bug showing FullDayEvents one day too long in calendar fixed @@ -363,7 +364,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add system notification `MODULE_DOM_CREATED` for notifying each module when their Dom has been fully loaded. - Add types for module. - Implement Danger.js to notify contributors when CHANGELOG.md is missing in PR. -- Allow to scroll in full page article view of default newsfeed module with gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) +- Allow scrolling in full page article view of default newsfeed module with gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) - Changed 'compliments.js' - update DOM if remote compliments are loaded instead of waiting one updateInterval to show custom compliments - Automated unit tests utils, deprecated, translator, cloneObject(lockstrings) - Automated integration tests translations @@ -404,7 +405,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Changed -- Calender week is now handled with a variable translation in order to move number language specific. +- Calendar week is now handled with a variable translation in order to move number language specific. - Reverted the Electron dependency back to 1.4.15 since newer version don't seem to work on the Raspberry Pi very well. ### Added @@ -570,7 +571,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - 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. +- If units are 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) @@ -594,7 +595,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Module API: Method to overwrite the module's header. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules#getheader) for more information. - Module API: Option to define the minimum MagicMirror version to run a module. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules#requiresversion) for more information. - Calendar module now broadcasts the event list to all other modules using the notification system. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules/default/calendar) for more information. -- Possibility to use the the calendar feed as the source for the weather (currentweather & weatherforecast) location data. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules/default/weatherforecast) for more information. +- Possibility to use the calendar feed as the source for the weather (currentweather & weatherforecast) location data. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules/default/weatherforecast) for more information. - Added option to show rain amount in the weatherforecast default module - Add module `updatenotification` to get an update whenever a new version is available. [See documentation](https://github.com/MichMich/MagicMirror/tree/develop/modules/default/updatenotification) for more information. - Add the ability to set timezone on the date display in the Clock Module @@ -602,7 +603,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Possibility to use currentweather for the compliments - Added option `disabled` for modules. - Added option `address` to set bind address. -- Added option `onlyTemp` for currentweather module to show show only current temperature and weather icon. +- Added option `onlyTemp` for currentweather module to show only current temperature and weather icon. - Added option `remoteFile` to compliments module to load compliment array from filesystem. - Added option `zoom` to scale the whole mirror display with a given factor. - Added option `roundTemp` for currentweather and weatherforecast modules to display temperatures rounded to nearest integer. From 06e8308dc213c8c617c1990dc8de9942a862e1b0 Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 10:44:56 +0200 Subject: [PATCH 117/219] Replace old js files with modern code --- modules/default/alert/alert.js | 19 +++--- modules/default/alert/classie.js | 79 ----------------------- modules/default/alert/modernizr.custom.js | 3 - modules/default/alert/notificationFx.js | 78 +++++++--------------- 4 files changed, 31 insertions(+), 148 deletions(-) delete mode 100644 modules/default/alert/classie.js delete mode 100644 modules/default/alert/modernizr.custom.js diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index d316b3ea..6bf3af0f 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -21,7 +21,7 @@ Module.register("alert",{ welcome_message: false, }, getScripts: function() { - return ["classie.js", "modernizr.custom.js", "notificationFx.js"]; + return ["notificationFx.js"]; }, getStyles: function() { return ["ns-default.css", "font-awesome.css"]; @@ -36,7 +36,7 @@ Module.register("alert",{ }, show_notification: function(message) { if (this.config.effect === "slide") {this.config.effect = this.config.effect + "-" + this.config.position;} - msg = ""; + let msg = ""; if (message.title) { msg += "" + message.title + ""; } @@ -55,20 +55,19 @@ Module.register("alert",{ }).show(); }, show_alert: function(params, sender) { - var self = this; + let image = ""; //Set standard params if not provided by module if (typeof params.timer === "undefined") { params.timer = null; } if (typeof params.imageHeight === "undefined") { params.imageHeight = "80px"; } if (typeof params.imageUrl === "undefined" && typeof params.imageFA === "undefined") { params.imageUrl = null; - image = ""; } else if (typeof params.imageFA === "undefined"){ image = "
"; } else if (typeof params.imageUrl === "undefined"){ image = "
"; } //Create overlay - var overlay = document.createElement("div"); + const overlay = document.createElement("div"); overlay.id = "overlay"; overlay.innerHTML += "
"; document.body.insertBefore(overlay, document.body.firstChild); @@ -79,7 +78,7 @@ Module.register("alert",{ } //Display title and message only if they are provided in notification parameters - var message = ""; + let message = ""; if (params.title) { message += "" + params.title + ""; } @@ -102,8 +101,8 @@ Module.register("alert",{ this.alerts[sender.name].show(); //Add timer to dismiss alert and overlay if (params.timer) { - setTimeout(function() { - self.hide_alert(sender); + setTimeout(() => { + this.hide_alert(sender); }, params.timer); } @@ -114,13 +113,13 @@ Module.register("alert",{ this.alerts[sender.name].dismiss(); this.alerts[sender.name] = null; //Remove overlay - var overlay = document.getElementById("overlay"); + const overlay = document.getElementById("overlay"); overlay.parentNode.removeChild(overlay); } }, setPosition: function(pos) { //Add css to body depending on the set position for notifications - var sheet = document.createElement("style"); + const sheet = document.createElement("style"); if (pos === "center") {sheet.innerHTML = ".ns-box {margin-left: auto; margin-right: auto;text-align: center;}";} if (pos === "right") {sheet.innerHTML = ".ns-box {margin-left: auto;text-align: right;}";} if (pos === "left") {sheet.innerHTML = ".ns-box {margin-right: auto;text-align: left;}";} diff --git a/modules/default/alert/classie.js b/modules/default/alert/classie.js deleted file mode 100644 index 4a096f1e..00000000 --- a/modules/default/alert/classie.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * classie - class helper functions - * from bonzo https://github.com/ded/bonzo - * - * classie.has( elem, 'my-class' ) -> true/false - * classie.add( elem, 'my-new-class' ) - * classie.remove( elem, 'my-unwanted-class' ) - * classie.toggle( elem, 'my-class' ) - */ -// jscs:disable -/*jshint browser: true, strict: true, undef: true */ -/*global define: false */ - -(function(window) { - -"use strict"; - -// class helper functions from bonzo https://github.com/ded/bonzo - -function classReg(className) { - return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); -} - -// classList support for class management -// altho to be fair, the api sucks because it won't accept multiple classes at once -var hasClass, addClass, removeClass; - -if ("classList" in document.documentElement) { - hasClass = function(elem, c) { - return elem.classList.contains(c); - }; - addClass = function(elem, c) { - elem.classList.add(c); - }; - removeClass = function(elem, c) { - elem.classList.remove(c); - }; -} else { - hasClass = function(elem, c) { - return classReg(c).test(elem.className); - }; - addClass = function(elem, c) { - if (!hasClass(elem, c)) { - elem.className = elem.className + " " + c; - } - }; - removeClass = function(elem, c) { - elem.className = elem.className.replace(classReg(c), " "); - }; -} - -function toggleClass(elem, c) { - var fn = hasClass(elem, c) ? removeClass : addClass; - fn(elem, c); -} - -var classie = { - // full names - hasClass: hasClass, - addClass: addClass, - removeClass: removeClass, - toggleClass: toggleClass, - // short names - has: hasClass, - add: addClass, - remove: removeClass, - toggle: toggleClass -}; - -// transport -if (typeof define === "function" && define.amd) { - // AMD - define(classie); -} else { - // browser global - window.classie = classie; -} - -})(window); diff --git a/modules/default/alert/modernizr.custom.js b/modules/default/alert/modernizr.custom.js deleted file mode 100644 index 83c3d3f1..00000000 --- a/modules/default/alert/modernizr.custom.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! modernizr 3.7.0 (Custom Build) | MIT * - * https://modernizr.com/download/?-cssanimations-domprefixes-prefixed-setclasses-shiv-testallprops-testprop !*/ -!function(e,t,n){function r(e,t){return typeof e===t}function o(e,t){return!!~(""+e).indexOf(t)}function i(){return"function"!=typeof t.createElement?t.createElement(arguments[0]):E?t.createElementNS.call(t,"http://www.w3.org/2000/svg",arguments[0]):t.createElement.apply(t,arguments)}function a(){var e=t.body;return e||(e=i(E?"svg":"body"),e.fake=!0),e}function s(e,n,r,o){var s,l,c,u,f="modernizr",d=i("div"),p=a();if(parseInt(r,10))for(;r--;)c=i("div"),c.id=o?o[r]:f+(r+1),d.appendChild(c);return s=i("style"),s.type="text/css",s.id="s"+f,(p.fake?p:d).appendChild(s),p.appendChild(d),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(t.createTextNode(e)),d.id=f,p.fake&&(p.style.background="",p.style.overflow="hidden",u=S.style.overflow,S.style.overflow="hidden",S.appendChild(p)),l=n(d,e),p.fake?(p.parentNode.removeChild(p),S.style.overflow=u,S.offsetHeight):d.parentNode.removeChild(d),!!l}function l(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function c(t,n,r){var o;if("getComputedStyle"in e){o=getComputedStyle.call(e,t,n);var i=e.console;if(null!==o)r&&(o=o.getPropertyValue(r));else if(i){var a=i.error?"error":"log";i[a].call(i,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}}else o=!n&&t.currentStyle&&t.currentStyle[r];return o}function u(t,r){var o=t.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(l(t[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var i=[];o--;)i.push("("+l(t[o])+":"+r+")");return i=i.join(" or "),s("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"===c(e,null,"position")})}return n}function f(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function d(e,t,a,s){function l(){d&&(delete N.style,delete N.modElem)}if(s=!r(s,"undefined")&&s,!r(a,"undefined")){var c=u(e,a);if(!r(c,"undefined"))return c}for(var d,p,m,h,v,g=["modernizr","tspan","samp"];!N.style&&g.length;)d=!0,N.modElem=i(g.shift()),N.style=N.modElem.style;for(m=e.length,p=0;p",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function o(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function i(e){var t=g[e[h]];return t||(t={},v++,e[h]=v,g[v]=t),t}function a(e,n,r){if(n||(n=t),f)return n.createElement(e);r||(r=i(n));var o;return o=r.cache[e]?r.cache[e].cloneNode():m.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!o.canHaveChildren||p.test(e)||o.tagUrn?o:r.frag.appendChild(o)}function s(e,n){if(e||(e=t),f)return e.createDocumentFragment();n=n||i(e);for(var o=n.frag.cloneNode(),a=0,s=r(),l=s.length;a",u="hidden"in e,f=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return void 0===e.cloneNode||void 0===e.createDocumentFragment||void 0===e.createElement}()}catch(e){u=!0,f=!0}}();var y={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==d.shivCSS,supportsUnknownElements:f,shivMethods:!1!==d.shivMethods,type:"default",shivDocument:c,createElement:a,createDocumentFragment:s,addElements:o};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}(void 0!==e?e:this,t);var w=y._config.usePrefixes?x.split(" "):[];y._cssomPrefixes=w;var _={elem:i("modernizr")};Modernizr._q.push(function(){delete _.elem});var N={style:_.elem.style};Modernizr._q.unshift(function(){delete N.style}),y.testAllProps=h;var j=function(t){var r,o=prefixes.length,i=e.CSSRule;if(void 0===i)return n;if(!t)return!1;if(t=t.replace(/^@/,""),(r=t.replace(/-/g,"_").toUpperCase()+"_RULE")in i)return"@"+t;for(var a=0;a0&&(t+=" "+n+e.join(" "+n)),E?S.className.baseVal=t:S.className=t)}(C),delete y.addTest,delete y.addAsyncTest;for(var z=0;z"; + let strinner = "
"; strinner += this.options.message; strinner += "
"; this.ntf.innerHTML = strinner; @@ -91,13 +66,12 @@ this.options.wrapper.insertBefore(this.ntf, this.options.wrapper.nextSibling); // dismiss after [options.ttl]ms - var self = this; if (this.options.ttl) { - this.dismissttl = setTimeout(function() { - if (self.active) { - self.dismiss(); - } - }, this.options.ttl); + this.dismissttl = setTimeout(() => { + if (this.active) { + this.dismiss(); + } + }, this.options.ttl); } // init events @@ -108,9 +82,8 @@ * init events */ NotificationFx.prototype._initEvents = function() { - var self = this; // dismiss notification by tapping on it if someone has a touchscreen - this.ntf.querySelector(".ns-box-inner").addEventListener("click", function() { self.dismiss(); }); + this.ntf.querySelector(".ns-box-inner").addEventListener("click", () => { this.dismiss(); }); }; /** @@ -118,8 +91,8 @@ */ NotificationFx.prototype.show = function() { this.active = true; - classie.remove(this.ntf, "ns-hide"); - classie.add(this.ntf, "ns-show"); + this.ntf.classList.remove("ns-hide"); + this.ntf.classList.add("ns-show"); this.options.onOpen(); }; @@ -127,34 +100,27 @@ * dismiss the notification */ NotificationFx.prototype.dismiss = function() { - var self = this; this.active = false; clearTimeout(this.dismissttl); - classie.remove(this.ntf, "ns-show"); - setTimeout(function() { - classie.add(self.ntf, "ns-hide"); + this.ntf.classList.remove("ns-show"); + setTimeout(() => { + this.ntf.classList.add("ns-hide"); // callback - self.options.onClose(); + this.options.onClose(); }, 25); // after animation ends remove ntf from the DOM - var onEndAnimationFn = function(ev) { - if (support.animations) { - if (ev.target !== self.ntf) return false; - this.removeEventListener(animEndEventName, onEndAnimationFn); - } + const onEndAnimationFn = (ev) => { + if (ev.target !== this.ntf) return false; + this.ntf.removeEventListener("animationend", onEndAnimationFn); - if (this.parentNode === self.options.wrapper) { - self.options.wrapper.removeChild(this); + if (ev.target.parentNode === this.options.wrapper) { + this.options.wrapper.removeChild(this.ntf); } }; - if (support.animations) { - this.ntf.addEventListener(animEndEventName, onEndAnimationFn); - } else { - onEndAnimationFn(); - } + this.ntf.addEventListener("animationend", onEndAnimationFn); }; /** From b3dcc82c71aedb5ec5eda3271e080aa2f69c7d3a Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 10:52:53 +0200 Subject: [PATCH 118/219] Remove old webkit prefix styles --- modules/default/alert/ns-default.css | 970 --------------------------- 1 file changed, 970 deletions(-) diff --git a/modules/default/alert/ns-default.css b/modules/default/alert/ns-default.css index 73b8740d..28aea256 100644 --- a/modules/default/alert/ns-default.css +++ b/modules/default/alert/ns-default.css @@ -50,164 +50,87 @@ [class^="ns-effect-"].ns-growl.ns-hide, [class*=" ns-effect-"].ns-growl.ns-hide { - -webkit-animation-direction: reverse; animation-direction: reverse; } .ns-effect-flip { - -webkit-transform-origin: 50% 100%; transform-origin: 50% 100%; backface-visibility: hidden; } .ns-effect-flip.ns-show, .ns-effect-flip.ns-hide { - -webkit-animation-name: animFlipFront; animation-name: animFlipFront; - -webkit-animation-duration: 0.3s; animation-duration: 0.3s; } .ns-effect-flip.ns-hide { - -webkit-animation-name: animFlipBack; animation-name: animFlipBack; } -@-webkit-keyframes animFlipFront { - 0% { - -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, -90deg); - } - 100% { - -webkit-transform: perspective(1000px); - } -} - @keyframes animFlipFront { 0% { - -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, -90deg); transform: perspective(1000px) rotate3d(1, 0, 0, -90deg); } 100% { - -webkit-transform: perspective(1000px); transform: perspective(1000px); } } -@-webkit-keyframes animFlipBack { - 0% { - -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, 90deg); - } - 100% { - -webkit-transform: perspective(1000px); - } -} - @keyframes animFlipBack { 0% { - -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, 90deg); transform: perspective(1000px) rotate3d(1, 0, 0, 90deg); } 100% { - -webkit-transform: perspective(1000px); transform: perspective(1000px); } } .ns-effect-bouncyflip.ns-show, .ns-effect-bouncyflip.ns-hide { - -webkit-animation-name: flipInX; animation-name: flipInX; - -webkit-animation-duration: 0.8s; animation-duration: 0.8s; } -@-webkit-keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg); - -webkit-transition-timing-function: ease-in; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 20deg); - -webkit-transition-timing-function: ease-out; - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -10deg); - -webkit-transition-timing-function: ease-in; - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 5deg); - -webkit-transition-timing-function: ease-out; - } - 100% { - -webkit-transform: perspective(400px); - } -} - @keyframes flipInX { 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg); transform: perspective(400px) rotate3d(1, 0, 0, -90deg); - -webkit-transition-timing-function: ease-in; transition-timing-function: ease-in; } 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 20deg); transform: perspective(400px) rotate3d(1, 0, 0, 20deg); - -webkit-transition-timing-function: ease-out; transition-timing-function: ease-out; } 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -10deg); transform: perspective(400px) rotate3d(1, 0, 0, -10deg); - -webkit-transition-timing-function: ease-in; transition-timing-function: ease-in; opacity: 1; } 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 5deg); transform: perspective(400px) rotate3d(1, 0, 0, 5deg); - -webkit-transition-timing-function: ease-out; transition-timing-function: ease-out; } 100% { - -webkit-transform: perspective(400px); transform: perspective(400px); } } .ns-effect-bouncyflip.ns-hide { - -webkit-animation-name: flipInXSimple; animation-name: flipInXSimple; - -webkit-animation-duration: 0.3s; animation-duration: 0.3s; } -@-webkit-keyframes flipInXSimple { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg); - -webkit-transition-timing-function: ease-in; - } - 100% { - -webkit-transform: perspective(400px); - } -} - @keyframes flipInXSimple { 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg); transform: perspective(400px) rotate3d(1, 0, 0, -90deg); - -webkit-transition-timing-function: ease-in; transition-timing-function: ease-in; } 100% { - -webkit-transform: perspective(400px); transform: perspective(400px); } } .ns-effect-exploader { - -webkit-transform-origin: 0 0; transform-origin: 0 0; } @@ -216,98 +139,53 @@ } .ns-effect-exploader.ns-show { - -webkit-animation-name: animLoad; animation-name: animLoad; - -webkit-animation-duration: 1s; animation-duration: 1s; } -@-webkit-keyframes animLoad { - 0% { - opacity: 1; - -webkit-transform: scale3d(0, 0.3, 1); - } - 100% { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - } -} - @keyframes animLoad { 0% { opacity: 1; - -webkit-transform: scale3d(0, 0.3, 1); transform: scale3d(0, 0.3, 1); } 100% { opacity: 1; - -webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1); } } .ns-effect-exploader.ns-hide { - -webkit-animation-name: animFade; animation-name: animFade; - -webkit-animation-duration: 0.3s; animation-duration: 0.3s; } .ns-effect-exploader.ns-show .ns-box-inner, .ns-effect-exploader.ns-show .ns-close { - -webkit-animation-fill-mode: both; animation-fill-mode: both; - -webkit-animation-duration: 0.3s; animation-duration: 0.3s; - -webkit-animation-delay: 0.6s; animation-delay: 0.6s; } .ns-effect-exploader.ns-show .ns-close { - -webkit-animation-name: animFade; animation-name: animFade; } .ns-effect-exploader.ns-show .ns-box-inner { - -webkit-animation-name: animFadeMove; animation-name: animFadeMove; - -webkit-animation-timing-function: ease-out; animation-timing-function: ease-out; } -@-webkit-keyframes animFadeMove { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 10px, 0); - } - 100% { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - } -} - @keyframes animFadeMove { 0% { opacity: 0; - -webkit-transform: translate3d(0, 10px, 0); transform: translate3d(0, 10px, 0); } 100% { opacity: 1; - -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } -@-webkit-keyframes animFade { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} - @keyframes animFade { 0% { opacity: 0; @@ -319,1081 +197,402 @@ .ns-effect-scale.ns-show, .ns-effect-scale.ns-hide { - -webkit-animation-name: animScale; animation-name: animScale; - -webkit-animation-duration: 0.25s; animation-duration: 0.25s; } -@-webkit-keyframes animScale { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 40px, 0) scale3d(0.1, 0.6, 1); - } - 100% { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1); - } -} - @keyframes animScale { 0% { opacity: 0; - -webkit-transform: translate3d(0, 40px, 0) scale3d(0.1, 0.6, 1); transform: translate3d(0, 40px, 0) scale3d(0.1, 0.6, 1); } 100% { opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1); transform: translate3d(0, 0, 0) scale3d(1, 1, 1); } } .ns-effect-jelly.ns-show { - -webkit-animation-name: animJelly; animation-name: animJelly; - -webkit-animation-duration: 1s; animation-duration: 1s; - -webkit-animation-timing-function: linear; animation-timing-function: linear; } .ns-effect-jelly.ns-hide { - -webkit-animation-name: animFade; animation-name: animFade; - -webkit-animation-duration: 0.3s; animation-duration: 0.3s; } -@-webkit-keyframes animFade { - 0% { opacity: 0; } - 100% { opacity: 1; } -} - @keyframes animFade { 0% { opacity: 0; } 100% { opacity: 1; } } -@-webkit-keyframes animJelly { - 0% { - -webkit-transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 2.083333% { - -webkit-transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 4.166667% { - -webkit-transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 6.25% { - -webkit-transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 8.333333% { - -webkit-transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 10.416667% { - -webkit-transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 12.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 14.583333% { - -webkit-transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 16.666667% { - -webkit-transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 18.75% { - -webkit-transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 20.833333% { - -webkit-transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 22.916667% { - -webkit-transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 25% { - -webkit-transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 27.083333% { - -webkit-transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 29.166667% { - -webkit-transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 31.25% { - -webkit-transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 33.333333% { - -webkit-transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 35.416667% { - -webkit-transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 37.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 39.583333% { - -webkit-transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 41.666667% { - -webkit-transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 43.75% { - -webkit-transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 45.833333% { - -webkit-transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 47.916667% { - -webkit-transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 50% { - -webkit-transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 52.083333% { - -webkit-transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 54.166667% { - -webkit-transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 56.25% { - -webkit-transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 58.333333% { - -webkit-transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 60.416667% { - -webkit-transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 62.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 64.583333% { - -webkit-transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 66.666667% { - -webkit-transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 68.75% { - -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 70.833333% { - -webkit-transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 72.916667% { - -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 75% { - -webkit-transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 77.083333% { - -webkit-transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 79.166667% { - -webkit-transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 81.25% { - -webkit-transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 83.333333% { - -webkit-transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 85.416667% { - -webkit-transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 87.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 89.583333% { - -webkit-transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 91.666667% { - -webkit-transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 93.75% { - -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 95.833333% { - -webkit-transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 97.916667% { - -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } -} - @keyframes animJelly { 0% { - -webkit-transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 2.083333% { - -webkit-transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 4.166667% { - -webkit-transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 6.25% { - -webkit-transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 8.333333% { - -webkit-transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 10.416667% { - -webkit-transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 12.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 14.583333% { - -webkit-transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 16.666667% { - -webkit-transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 18.75% { - -webkit-transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 20.833333% { - -webkit-transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 22.916667% { - -webkit-transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 25% { - -webkit-transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 27.083333% { - -webkit-transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 29.166667% { - -webkit-transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 31.25% { - -webkit-transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 33.333333% { - -webkit-transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 35.416667% { - -webkit-transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 37.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 39.583333% { - -webkit-transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 41.666667% { - -webkit-transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 43.75% { - -webkit-transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 45.833333% { - -webkit-transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 47.916667% { - -webkit-transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 50% { - -webkit-transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 52.083333% { - -webkit-transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 54.166667% { - -webkit-transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 56.25% { - -webkit-transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 58.333333% { - -webkit-transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 60.416667% { - -webkit-transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 62.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 64.583333% { - -webkit-transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 66.666667% { - -webkit-transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 68.75% { - -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 70.833333% { - -webkit-transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 72.916667% { - -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 75% { - -webkit-transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 77.083333% { - -webkit-transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 79.166667% { - -webkit-transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 81.25% { - -webkit-transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 83.333333% { - -webkit-transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 85.416667% { - -webkit-transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 87.5% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 89.583333% { - -webkit-transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 91.666667% { - -webkit-transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 93.75% { - -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 95.833333% { - -webkit-transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 97.916667% { - -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } .ns-effect-slide-left.ns-show { - -webkit-animation-name: animSlideElasticLeft; animation-name: animSlideElasticLeft; - -webkit-animation-duration: 1s; animation-duration: 1s; - -webkit-animation-timing-function: linear; animation-timing-function: linear; } -@-webkit-keyframes animSlideElasticLeft { - 0% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); - } - 1.666667% { - -webkit-transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); - transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); - } - 3.333333% { - -webkit-transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); - transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); - } - 5% { - -webkit-transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); - transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); - } - 6.666667% { - -webkit-transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); - transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); - } - 8.333333% { - -webkit-transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); - transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); - } - 10% { - -webkit-transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); - transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); - } - 11.666667% { - -webkit-transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); - transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); - } - 13.333333% { - -webkit-transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); - transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); - } - 15% { - -webkit-transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); - transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); - } - 16.666667% { - -webkit-transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); - transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); - } - 18.333333% { - -webkit-transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); - transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); - } - 20% { - -webkit-transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); - transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); - } - 21.666667% { - -webkit-transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); - transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); - } - 23.333333% { - -webkit-transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); - transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); - } - 25% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); - } - 26.666667% { - -webkit-transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); - transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); - } - 28.333333% { - -webkit-transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); - transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); - } - 30% { - -webkit-transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); - transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); - } - 31.666667% { - -webkit-transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); - transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); - } - 33.333333% { - -webkit-transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); - transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); - } - 35% { - -webkit-transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); - transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); - } - 36.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); - } - 38.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); - } - 40% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); - } - 41.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); - } - 43.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); - } - 45% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); - } - 46.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); - } - 48.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); - } - 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); - } - 51.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); - } - 53.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); - } - 55% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); - } - 56.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); - } - 58.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); - } - 60% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); - } - 61.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); - } - 63.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); - } - 65% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); - } - 66.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); - } - 68.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); - } - 70% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); - } - 71.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); - } - 73.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); - } - 75% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); - } - 76.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); - } - 78.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); - } - 80% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); - } - 81.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); - } - 83.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); - } - 85% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); - } - 86.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); - } - 88.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); - } - 90% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); - } - 91.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); - } - 93.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); - } - 95% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); - } - 96.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); - } - 98.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); - } - 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } -} - @keyframes animSlideElasticLeft { 0% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); } 1.666667% { - -webkit-transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); } 3.333333% { - -webkit-transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); } 5% { - -webkit-transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); } 6.666667% { - -webkit-transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); } 8.333333% { - -webkit-transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); } 10% { - -webkit-transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); } 11.666667% { - -webkit-transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); } 13.333333% { - -webkit-transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); } 15% { - -webkit-transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); } 16.666667% { - -webkit-transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); } 18.333333% { - -webkit-transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); } 20% { - -webkit-transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); } 21.666667% { - -webkit-transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); } 23.333333% { - -webkit-transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); } 25% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); } 26.666667% { - -webkit-transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); } 28.333333% { - -webkit-transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); } 30% { - -webkit-transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); } 31.666667% { - -webkit-transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); } 33.333333% { - -webkit-transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); } 35% { - -webkit-transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); } 36.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); } 38.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); } 40% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); } 41.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); } 43.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); } 45% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); } 46.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); } 48.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); } 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); } 51.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); } 53.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); } 55% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); } 56.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); } 58.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); } 60% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); } 61.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); } 63.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); } 65% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); } 66.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); } 68.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); } 70% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); } 71.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); } 73.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); } 75% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); } 76.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); } 78.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); } 80% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); } 81.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); } 83.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); } 85% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); } 86.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); } 88.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); } 90% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); } 91.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); } 93.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); } 95% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); } 96.666667% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); } 98.333333% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); } 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } .ns-effect-slide-left.ns-hide { - -webkit-animation-name: animSlideLeft; animation-name: animSlideLeft; - -webkit-animation-duration: 0.25s; animation-duration: 0.25s; } -@-webkit-keyframes animSlideLeft { - 0% { - -webkit-transform: translate3d(-30px, 0, 0) translate3d(-100%, 0, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - } -} - @keyframes animSlideLeft { 0% { - -webkit-transform: translate3d(-30px, 0, 0) translate3d(-100%, 0, 0); transform: translate3d(-30px, 0, 0) translate3d(-100%, 0, 0); } 100% { - -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .ns-effect-slide-right.ns-show { - -webkit-animation: animSlideElasticRight 2000ms linear both; animation: animSlideElasticRight 2000ms linear both; } -@-webkit-keyframes animSlideElasticRight { - 0% { - -webkit-transform: matrix3d(2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1000, 0, 0, 1); - transform: matrix3d(2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1000, 0, 0, 1); - } - 2.15% { - -webkit-transform: matrix3d(1.486, 0, 0, 0, 0, 0.514, 0, 0, 0, 0, 1, 0, 664.594, 0, 0, 1); - transform: matrix3d(1.486, 0, 0, 0, 0, 0.514, 0, 0, 0, 0, 1, 0, 664.594, 0, 0, 1); - } - 4.1% { - -webkit-transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); - transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); - } - 4.3% { - -webkit-transform: matrix3d(1.121, 0, 0, 0, 0, 0.879, 0, 0, 0, 0, 1, 0, 398.136, 0, 0, 1); - transform: matrix3d(1.121, 0, 0, 0, 0, 0.879, 0, 0, 0, 0, 1, 0, 398.136, 0, 0, 1); - } - 6.46% { - -webkit-transform: matrix3d(0.948, 0, 0, 0, 0, 1.052, 0, 0, 0, 0, 1, 0, 206.714, 0, 0, 1); - transform: matrix3d(0.948, 0, 0, 0, 0, 1.052, 0, 0, 0, 0, 1, 0, 206.714, 0, 0, 1); - } - 8.11% { - -webkit-transform: matrix3d(0.908, 0, 0, 0, 0, 1.092, 0, 0, 0, 0, 1, 0, 105.491, 0, 0, 1); - transform: matrix3d(0.908, 0, 0, 0, 0, 1.092, 0, 0, 0, 0, 1, 0, 105.491, 0, 0, 1); - } - 8.61% { - -webkit-transform: matrix3d(0.907, 0, 0, 0, 0, 1.093, 0, 0, 0, 0, 1, 0, 81.572, 0, 0, 1); - transform: matrix3d(0.907, 0, 0, 0, 0, 1.093, 0, 0, 0, 0, 1, 0, 81.572, 0, 0, 1); - } - 12.11% { - -webkit-transform: matrix3d(0.95, 0, 0, 0, 0, 1.05, 0, 0, 0, 0, 1, 0, -18.434, 0, 0, 1); - transform: matrix3d(0.95, 0, 0, 0, 0, 1.05, 0, 0, 0, 0, 1, 0, -18.434, 0, 0, 1); - } - 14.16% { - -webkit-transform: matrix3d(0.979, 0, 0, 0, 0, 1.021, 0, 0, 0, 0, 1, 0, -38.734, 0, 0, 1); - transform: matrix3d(0.979, 0, 0, 0, 0, 1.021, 0, 0, 0, 0, 1, 0, -38.734, 0, 0, 1); - } - 16.12% { - -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 1.003, 0, 0, 0, 0, 1, 0, -43.356, 0, 0, 1); - transform: matrix3d(0.997, 0, 0, 0, 0, 1.003, 0, 0, 0, 0, 1, 0, -43.356, 0, 0, 1); - } - 19.72% { - -webkit-transform: matrix3d(1.006, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, -34.155, 0, 0, 1); - transform: matrix3d(1.006, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, -34.155, 0, 0, 1); - } - 27.23% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7.839, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7.839, 0, 0, 1); - } - 30.83% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.951, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.951, 0, 0, 1); - } - 38.34% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.037, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.037, 0, 0, 1); - } - 41.99% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.812, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.812, 0, 0, 1); - } - 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.159, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.159, 0, 0, 1); - } - 60.56% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.025, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.025, 0, 0, 1); - } - 82.78% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.001, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.001, 0, 0, 1); - } - 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } -} - @keyframes animSlideElasticRight { 0% { - -webkit-transform: matrix3d(2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1000, 0, 0, 1); transform: matrix3d(2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1000, 0, 0, 1); } 2.15% { - -webkit-transform: matrix3d(1.486, 0, 0, 0, 0, 0.514, 0, 0, 0, 0, 1, 0, 664.594, 0, 0, 1); transform: matrix3d(1.486, 0, 0, 0, 0, 0.514, 0, 0, 0, 0, 1, 0, 664.594, 0, 0, 1); } 4.1% { @@ -1401,342 +600,173 @@ transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); } 4.3% { - -webkit-transform: matrix3d(1.121, 0, 0, 0, 0, 0.879, 0, 0, 0, 0, 1, 0, 398.136, 0, 0, 1); transform: matrix3d(1.121, 0, 0, 0, 0, 0.879, 0, 0, 0, 0, 1, 0, 398.136, 0, 0, 1); } 6.46% { - -webkit-transform: matrix3d(0.948, 0, 0, 0, 0, 1.052, 0, 0, 0, 0, 1, 0, 206.714, 0, 0, 1); transform: matrix3d(0.948, 0, 0, 0, 0, 1.052, 0, 0, 0, 0, 1, 0, 206.714, 0, 0, 1); } 8.11% { - -webkit-transform: matrix3d(0.908, 0, 0, 0, 0, 1.092, 0, 0, 0, 0, 1, 0, 105.491, 0, 0, 1); transform: matrix3d(0.908, 0, 0, 0, 0, 1.092, 0, 0, 0, 0, 1, 0, 105.491, 0, 0, 1); } 8.61% { - -webkit-transform: matrix3d(0.907, 0, 0, 0, 0, 1.093, 0, 0, 0, 0, 1, 0, 81.572, 0, 0, 1); transform: matrix3d(0.907, 0, 0, 0, 0, 1.093, 0, 0, 0, 0, 1, 0, 81.572, 0, 0, 1); } 12.11% { - -webkit-transform: matrix3d(0.95, 0, 0, 0, 0, 1.05, 0, 0, 0, 0, 1, 0, -18.434, 0, 0, 1); transform: matrix3d(0.95, 0, 0, 0, 0, 1.05, 0, 0, 0, 0, 1, 0, -18.434, 0, 0, 1); } 14.16% { - -webkit-transform: matrix3d(0.979, 0, 0, 0, 0, 1.021, 0, 0, 0, 0, 1, 0, -38.734, 0, 0, 1); transform: matrix3d(0.979, 0, 0, 0, 0, 1.021, 0, 0, 0, 0, 1, 0, -38.734, 0, 0, 1); } 16.12% { - -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 1.003, 0, 0, 0, 0, 1, 0, -43.356, 0, 0, 1); transform: matrix3d(0.997, 0, 0, 0, 0, 1.003, 0, 0, 0, 0, 1, 0, -43.356, 0, 0, 1); } 19.72% { - -webkit-transform: matrix3d(1.006, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, -34.155, 0, 0, 1); transform: matrix3d(1.006, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, -34.155, 0, 0, 1); } 27.23% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7.839, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7.839, 0, 0, 1); } 30.83% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.951, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.951, 0, 0, 1); } 38.34% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.037, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.037, 0, 0, 1); } 41.99% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.812, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.812, 0, 0, 1); } 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.159, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.159, 0, 0, 1); } 60.56% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.025, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.025, 0, 0, 1); } 82.78% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.001, 0, 0, 1); } 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } .ns-effect-slide-right.ns-hide { - -webkit-animation-name: animSlideRight; animation-name: animSlideRight; - -webkit-animation-duration: 0.25s; animation-duration: 0.25s; } -@-webkit-keyframes animSlideRight { - 0% { - -webkit-transform: translate3d(30px, 0, 0) translate3d(100%, 0, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - } -} - @keyframes animSlideRight { 0% { - -webkit-transform: translate3d(30px, 0, 0) translate3d(100%, 0, 0); transform: translate3d(30px, 0, 0) translate3d(100%, 0, 0); } 100% { - -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .ns-effect-slide-center.ns-show { - -webkit-animation: animSlideElasticCenter 2000ms linear both; animation: animSlideElasticCenter 2000ms linear both; } -@-webkit-keyframes animSlideElasticCenter { - 0% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, -300, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, -300, 0, 1); - } - 2.15% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.971, 0, 0, 0, 0, 1, 0, 0, -199.378, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.971, 0, 0, 0, 0, 1, 0, 0, -199.378, 0, 1); - } - 4.1% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.294, 0, 0, 0, 0, 1, 0, 0, -125.912, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.294, 0, 0, 0, 0, 1, 0, 0, -125.912, 0, 1); - } - 4.3% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.243, 0, 0, 0, 0, 1, 0, 0, -119.441, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.243, 0, 0, 0, 0, 1, 0, 0, -119.441, 0, 1); - } - 6.46% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.895, 0, 0, 0, 0, 1, 0, 0, -62.014, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.895, 0, 0, 0, 0, 1, 0, 0, -62.014, 0, 1); - } - 8.11% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.817, 0, 0, 0, 0, 1, 0, 0, -31.647, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.817, 0, 0, 0, 0, 1, 0, 0, -31.647, 0, 1); - } - 8.61% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.813, 0, 0, 0, 0, 1, 0, 0, -24.472, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.813, 0, 0, 0, 0, 1, 0, 0, -24.472, 0, 1); - } - 12.11% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 1, 0, 0, 5.53, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 1, 0, 0, 5.53, 0, 1); - } - 14.16% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.959, 0, 0, 0, 0, 1, 0, 0, 11.62, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.959, 0, 0, 0, 0, 1, 0, 0, 11.62, 0, 1); - } - 16.12% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 13.007, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 13.007, 0, 1); - } - 19.72% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.012, 0, 0, 0, 0, 1, 0, 0, 10.247, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1.012, 0, 0, 0, 0, 1, 0, 0, 10.247, 0, 1); - } - 27.23% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.352, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.352, 0, 1); - } - 30.83% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0.585, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0.585, 0, 1); - } - 38.34% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.311, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.311, 0, 1); - } - 41.99% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.244, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.244, 0, 1); - } - 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.048, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.048, 0, 1); - } - 60.56% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.007, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.007, 0, 1); - } - 82.78% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } -} - @keyframes animSlideElasticCenter { 0% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, -300, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, -300, 0, 1); } 2.15% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.971, 0, 0, 0, 0, 1, 0, 0, -199.378, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.971, 0, 0, 0, 0, 1, 0, 0, -199.378, 0, 1); } 4.1% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.294, 0, 0, 0, 0, 1, 0, 0, -125.912, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.294, 0, 0, 0, 0, 1, 0, 0, -125.912, 0, 1); } 4.3% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.243, 0, 0, 0, 0, 1, 0, 0, -119.441, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.243, 0, 0, 0, 0, 1, 0, 0, -119.441, 0, 1); } 6.46% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.895, 0, 0, 0, 0, 1, 0, 0, -62.014, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.895, 0, 0, 0, 0, 1, 0, 0, -62.014, 0, 1); } 8.11% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.817, 0, 0, 0, 0, 1, 0, 0, -31.647, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.817, 0, 0, 0, 0, 1, 0, 0, -31.647, 0, 1); } 8.61% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.813, 0, 0, 0, 0, 1, 0, 0, -24.472, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.813, 0, 0, 0, 0, 1, 0, 0, -24.472, 0, 1); } 12.11% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 1, 0, 0, 5.53, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 1, 0, 0, 5.53, 0, 1); } 14.16% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.959, 0, 0, 0, 0, 1, 0, 0, 11.62, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.959, 0, 0, 0, 0, 1, 0, 0, 11.62, 0, 1); } 16.12% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 13.007, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 13.007, 0, 1); } 19.72% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.012, 0, 0, 0, 0, 1, 0, 0, 10.247, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1.012, 0, 0, 0, 0, 1, 0, 0, 10.247, 0, 1); } 27.23% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.352, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.352, 0, 1); } 30.83% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0.585, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0.585, 0, 1); } 38.34% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.311, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.311, 0, 1); } 41.99% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.244, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.244, 0, 1); } 50% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.048, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.048, 0, 1); } 60.56% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.007, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.007, 0, 1); } 82.78% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 100% { - -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } .ns-effect-slide-center.ns-hide { - -webkit-animation-name: animSlideCenter; animation-name: animSlideCenter; - -webkit-animation-duration: 0.25s; animation-duration: 0.25s; } -@-webkit-keyframes animSlideCenter { - 0% { -webkit-transform: translate3d(0, -30px, 0) translate3d(0, -100%, 0); } - 100% { -webkit-transform: translate3d(0, 0, 0); } -} - @keyframes animSlideCenter { 0% { - -webkit-transform: translate3d(0, -30px, 0) translate3d(0, -100%, 0); transform: translate3d(0, -30px, 0) translate3d(0, -100%, 0); } 100% { - -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .ns-effect-genie.ns-show, .ns-effect-genie.ns-hide { - -webkit-animation-name: animGenie; animation-name: animGenie; - -webkit-animation-duration: 0.4s; animation-duration: 0.4s; } -@-webkit-keyframes animGenie { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, calc(200% + 30px), 0) scale3d(0, 1, 1); - -webkit-animation-timing-function: ease-in; - } - - 40% { - opacity: 0.5; - -webkit-transform: translate3d(0, 0, 0) scale3d(0.02, 1.1, 1); - -webkit-animation-timing-function: ease-out; - } - - 70% { - opacity: 0.6; - -webkit-transform: translate3d(0, -40px, 0) scale3d(0.8, 1.1, 1); - } - - 100% { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1); - } -} - @keyframes animGenie { 0% { opacity: 0; - -webkit-transform: translate3d(0, calc(200% + 30px), 0) scale3d(0, 1, 1); - -webkit-animation-timing-function: ease-in; transform: translate3d(0, calc(200% + 30px), 0) scale3d(0, 1, 1); animation-timing-function: ease-in; } 40% { opacity: 0.5; - -webkit-transform: translate3d(0, 0, 0) scale3d(0.02, 1.1, 1); - -webkit-animation-timing-function: ease-out; transform: translate3d(0, 0, 0) scale3d(0.02, 1.1, 1); animation-timing-function: ease-out; } 70% { opacity: 0.6; - -webkit-transform: translate3d(0, -40px, 0) scale3d(0.8, 1.1, 1); transform: translate3d(0, -40px, 0) scale3d(0.8, 1.1, 1); } 100% { opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1); transform: translate3d(0, 0, 0) scale3d(1, 1, 1); } } From 5819ef346b137cd0a3702e77bee290ceaa98847d Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 10:58:27 +0200 Subject: [PATCH 119/219] Rename stylesheet for clarity that its about the notificationFX --- modules/default/alert/alert.js | 2 +- modules/default/alert/{ns-default.css => notificationFx.css} | 0 modules/default/alert/notificationFx.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename modules/default/alert/{ns-default.css => notificationFx.css} (100%) diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index 6bf3af0f..cbfa2dcd 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -24,7 +24,7 @@ Module.register("alert",{ return ["notificationFx.js"]; }, getStyles: function() { - return ["ns-default.css", "font-awesome.css"]; + return ["notificationFx.css", "font-awesome.css"]; }, // Define required translations. getTranslations: function() { diff --git a/modules/default/alert/ns-default.css b/modules/default/alert/notificationFx.css similarity index 100% rename from modules/default/alert/ns-default.css rename to modules/default/alert/notificationFx.css diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 4a15ba60..420f71cc 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -1,5 +1,5 @@ /** - * Code originally from + * Based on work by * * notificationFx.js v1.0.0 * http://www.codrops.com From b56a930f60cdf23786491137d7d80bde2bd397e7 Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 10:59:04 +0200 Subject: [PATCH 120/219] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70241f21..0a277b8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Updated +- Cleaned up alert module code - Cleaned up check_config code - Replaced grunt-based linters with their non-grunt equivalents From fb557b9130622256d3c5c81fc29dd054d02cb314 Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 11:15:11 +0200 Subject: [PATCH 121/219] Update ignored files for eslint --- .eslintignore | 4 +--- modules/default/weather/providers/darksky.js | 8 ++++---- .../weather/providers/openweathermap.js | 6 +++--- .../default/weather/providers/ukmetoffice.js | 19 ++++++++----------- .../default/weather/providers/weathergov.js | 6 +++--- 5 files changed, 19 insertions(+), 24 deletions(-) diff --git a/.eslintignore b/.eslintignore index 675b6a8c..fa766882 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1 @@ -modules/default/alert/notificationFx.js -modules/default/alert/modernizr.custom.js -modules/default/alert/classie.js +modules/default/calendar/vendor/* diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index b24c4794..ea529954 100755 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -16,8 +16,8 @@ WeatherProvider.register("darksky", { providerName: "Dark Sky", units: { - imperial: 'us', - metric: 'si' + imperial: "us", + metric: "si" }, fetchCurrentWeather() { @@ -33,7 +33,7 @@ WeatherProvider.register("darksky", { }).catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, fetchWeatherForecast() { @@ -49,7 +49,7 @@ WeatherProvider.register("darksky", { }).catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, // Create a URL from the config and base URL. diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index e99dc476..4f3569fd 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -34,7 +34,7 @@ WeatherProvider.register("openweathermap", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, // Overwrite the fetchCurrentWeather method. @@ -55,7 +55,7 @@ WeatherProvider.register("openweathermap", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, /** OpenWeatherMap Specific Methods - These are not part of the default provider methods */ @@ -223,7 +223,7 @@ WeatherProvider.register("openweathermap", { days.push(weather); } - return days; + return days; }, /* diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 47785b3b..884b5d98 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -9,7 +9,6 @@ * This class is a provider for UK Met Office Datapoint. */ - WeatherProvider.register("ukmetoffice", { // Set the name of the provider. @@ -41,7 +40,7 @@ WeatherProvider.register("ukmetoffice", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, // Overwrite the fetchCurrentWeather method. @@ -63,11 +62,9 @@ WeatherProvider.register("ukmetoffice", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, - - /** UK Met Office Specific Methods - These are not part of the default provider methods */ /* * Gets the complete url for the request @@ -83,13 +80,13 @@ WeatherProvider.register("ukmetoffice", { const currentWeather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // data times are always UTC - let nowUtc = moment.utc() - let midnightUtc = nowUtc.clone().startOf("day") + let nowUtc = moment.utc(); + let midnightUtc = nowUtc.clone().startOf("day"); let timeInMins = nowUtc.diff(midnightUtc, "minutes"); // loop round each of the (5) periods, look for today (the first period may be yesterday) for (i in currentWeatherData.SiteRep.DV.Location.Period) { - let periodDate = moment.utc(currentWeatherData.SiteRep.DV.Location.Period[i].value.substr(0,10), "YYYY-MM-DD") + let periodDate = moment.utc(currentWeatherData.SiteRep.DV.Location.Period[i].value.substr(0,10), "YYYY-MM-DD"); // ignore if period is before today if (periodDate.isSameOrAfter(moment.utc().startOf("day"))) { @@ -116,7 +113,7 @@ WeatherProvider.register("ukmetoffice", { } // determine the sunrise/sunset times - not supplied in UK Met Office data - let times = this.calcAstroData(currentWeatherData.SiteRep.DV.Location) + let times = this.calcAstroData(currentWeatherData.SiteRep.DV.Location); currentWeather.sunrise = times[0]; currentWeather.sunset = times[1]; @@ -136,8 +133,8 @@ WeatherProvider.register("ukmetoffice", { const weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // data times are always UTC - dateStr = forecasts.SiteRep.DV.Location.Period[j].value - let periodDate = moment.utc(dateStr.substr(0,10), "YYYY-MM-DD") + dateStr = forecasts.SiteRep.DV.Location.Period[j].value; + let periodDate = moment.utc(dateStr.substr(0,10), "YYYY-MM-DD"); // ignore if period is before today if (periodDate.isSameOrAfter(moment.utc().startOf("day"))) { diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 74d95522..1d030d32 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -35,7 +35,7 @@ WeatherProvider.register("weathergov", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, // Overwrite the fetchCurrentWeather method. @@ -54,7 +54,7 @@ WeatherProvider.register("weathergov", { .catch(function(request) { Log.error("Could not load data ... ", request); }) - .finally(() => this.updateAvailable()) + .finally(() => this.updateAvailable()); }, /** Weather.gov Specific Methods - These are not part of the default provider methods */ @@ -77,7 +77,7 @@ WeatherProvider.register("weathergov", { currentWeather.weatherType = this.convertWeatherType(currentWeatherData.shortForecast, currentWeatherData.isDaytime); // determine the sunrise/sunset times - not supplied in weather.gov data - let times = this.calcAstroData(this.config.lat, this.config.lon) + let times = this.calcAstroData(this.config.lat, this.config.lon); currentWeather.sunrise = times[0]; currentWeather.sunset = times[1]; From 7a976c0239c78382ba9d2c3e61429bdd6f86954b Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 11:24:03 +0200 Subject: [PATCH 122/219] Fix tests, use non-spread object extend version again --- modules/default/alert/notificationFx.css | 158 +++++++++++++++++++++++ modules/default/alert/notificationFx.js | 19 ++- package-lock.json | 16 +++ 3 files changed, 190 insertions(+), 3 deletions(-) diff --git a/modules/default/alert/notificationFx.css b/modules/default/alert/notificationFx.css index 28aea256..39cd2f70 100644 --- a/modules/default/alert/notificationFx.css +++ b/modules/default/alert/notificationFx.css @@ -72,6 +72,7 @@ 0% { transform: perspective(1000px) rotate3d(1, 0, 0, -90deg); } + 100% { transform: perspective(1000px); } @@ -81,6 +82,7 @@ 0% { transform: perspective(1000px) rotate3d(1, 0, 0, 90deg); } + 100% { transform: perspective(1000px); } @@ -97,19 +99,23 @@ transform: perspective(400px) rotate3d(1, 0, 0, -90deg); transition-timing-function: ease-in; } + 40% { transform: perspective(400px) rotate3d(1, 0, 0, 20deg); transition-timing-function: ease-out; } + 60% { transform: perspective(400px) rotate3d(1, 0, 0, -10deg); transition-timing-function: ease-in; opacity: 1; } + 80% { transform: perspective(400px) rotate3d(1, 0, 0, 5deg); transition-timing-function: ease-out; } + 100% { transform: perspective(400px); } @@ -125,6 +131,7 @@ transform: perspective(400px) rotate3d(1, 0, 0, -90deg); transition-timing-function: ease-in; } + 100% { transform: perspective(400px); } @@ -148,6 +155,7 @@ opacity: 1; transform: scale3d(0, 0.3, 1); } + 100% { opacity: 1; transform: scale3d(1, 1, 1); @@ -180,6 +188,7 @@ opacity: 0; transform: translate3d(0, 10px, 0); } + 100% { opacity: 1; transform: translate3d(0, 0, 0); @@ -190,6 +199,7 @@ 0% { opacity: 0; } + 100% { opacity: 1; } @@ -206,6 +216,7 @@ opacity: 0; transform: translate3d(0, 40px, 0) scale3d(0.1, 0.6, 1); } + 100% { opacity: 1; transform: translate3d(0, 0, 0) scale3d(1, 1, 1); @@ -232,147 +243,195 @@ 0% { transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 2.083333% { transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 4.166667% { transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 6.25% { transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 8.333333% { transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 10.416667% { transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 12.5% { transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 14.583333% { transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 16.666667% { transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 18.75% { transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 20.833333% { transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 22.916667% { transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 25% { transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 27.083333% { transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 29.166667% { transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 31.25% { transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 33.333333% { transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 35.416667% { transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 37.5% { transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 39.583333% { transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 41.666667% { transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 43.75% { transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 45.833333% { transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 47.916667% { transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 50% { transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 52.083333% { transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 54.166667% { transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 56.25% { transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 58.333333% { transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 60.416667% { transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 62.5% { transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 64.583333% { transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 66.666667% { transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 68.75% { transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 70.833333% { transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 72.916667% { transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 75% { transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 77.083333% { transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 79.166667% { transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 81.25% { transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 83.333333% { transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 85.416667% { transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 87.5% { transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 89.583333% { transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 91.666667% { transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 93.75% { transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 95.833333% { transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 97.916667% { transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } @@ -388,183 +447,243 @@ 0% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); } + 1.666667% { transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); } + 3.333333% { transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); } + 5% { transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); } + 6.666667% { transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); } + 8.333333% { transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); } + 10% { transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); } + 11.666667% { transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); } + 13.333333% { transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); } + 15% { transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); } + 16.666667% { transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); } + 18.333333% { transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); } + 20% { transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); } + 21.666667% { transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); } + 23.333333% { transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); } + 25% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); } + 26.666667% { transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); } + 28.333333% { transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); } + 30% { transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); } + 31.666667% { transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); } + 33.333333% { transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); } + 35% { transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); } + 36.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); } + 38.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); } + 40% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); } + 41.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); } + 43.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); } + 45% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); } + 46.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); } + 48.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); } + 50% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); } + 51.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); } + 53.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); } + 55% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); } + 56.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); } + 58.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); } + 60% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); } + 61.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); } + 63.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); } + 65% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); } + 66.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); } + 68.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); } + 70% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); } + 71.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); } + 73.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); } + 75% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); } + 76.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); } + 78.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); } + 80% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); } + 81.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); } + 83.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); } + 85% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); } + 86.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); } + 88.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); } + 90% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); } + 91.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); } + 93.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); } + 95% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); } + 96.666667% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); } + 98.333333% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); } + 100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } @@ -579,6 +698,7 @@ 0% { transform: translate3d(-30px, 0, 0) translate3d(-100%, 0, 0); } + 100% { transform: translate3d(0, 0, 0); } @@ -592,58 +712,76 @@ 0% { transform: matrix3d(2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1000, 0, 0, 1); } + 2.15% { transform: matrix3d(1.486, 0, 0, 0, 0, 0.514, 0, 0, 0, 0, 1, 0, 664.594, 0, 0, 1); } + 4.1% { -webkit-transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); } + 4.3% { transform: matrix3d(1.121, 0, 0, 0, 0, 0.879, 0, 0, 0, 0, 1, 0, 398.136, 0, 0, 1); } + 6.46% { transform: matrix3d(0.948, 0, 0, 0, 0, 1.052, 0, 0, 0, 0, 1, 0, 206.714, 0, 0, 1); } + 8.11% { transform: matrix3d(0.908, 0, 0, 0, 0, 1.092, 0, 0, 0, 0, 1, 0, 105.491, 0, 0, 1); } + 8.61% { transform: matrix3d(0.907, 0, 0, 0, 0, 1.093, 0, 0, 0, 0, 1, 0, 81.572, 0, 0, 1); } + 12.11% { transform: matrix3d(0.95, 0, 0, 0, 0, 1.05, 0, 0, 0, 0, 1, 0, -18.434, 0, 0, 1); } + 14.16% { transform: matrix3d(0.979, 0, 0, 0, 0, 1.021, 0, 0, 0, 0, 1, 0, -38.734, 0, 0, 1); } + 16.12% { transform: matrix3d(0.997, 0, 0, 0, 0, 1.003, 0, 0, 0, 0, 1, 0, -43.356, 0, 0, 1); } + 19.72% { transform: matrix3d(1.006, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, -34.155, 0, 0, 1); } + 27.23% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7.839, 0, 0, 1); } + 30.83% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.951, 0, 0, 1); } + 38.34% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.037, 0, 0, 1); } + 41.99% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.812, 0, 0, 1); } + 50% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.159, 0, 0, 1); } + 60.56% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.025, 0, 0, 1); } + 82.78% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.001, 0, 0, 1); } + 100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } @@ -658,6 +796,7 @@ 0% { transform: translate3d(30px, 0, 0) translate3d(100%, 0, 0); } + 100% { transform: translate3d(0, 0, 0); } @@ -671,57 +810,75 @@ 0% { transform: matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, -300, 0, 1); } + 2.15% { transform: matrix3d(1, 0, 0, 0, 0, 1.971, 0, 0, 0, 0, 1, 0, 0, -199.378, 0, 1); } + 4.1% { transform: matrix3d(1, 0, 0, 0, 0, 1.294, 0, 0, 0, 0, 1, 0, 0, -125.912, 0, 1); } + 4.3% { transform: matrix3d(1, 0, 0, 0, 0, 1.243, 0, 0, 0, 0, 1, 0, 0, -119.441, 0, 1); } + 6.46% { transform: matrix3d(1, 0, 0, 0, 0, 0.895, 0, 0, 0, 0, 1, 0, 0, -62.014, 0, 1); } + 8.11% { transform: matrix3d(1, 0, 0, 0, 0, 0.817, 0, 0, 0, 0, 1, 0, 0, -31.647, 0, 1); } + 8.61% { transform: matrix3d(1, 0, 0, 0, 0, 0.813, 0, 0, 0, 0, 1, 0, 0, -24.472, 0, 1); } + 12.11% { transform: matrix3d(1, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 1, 0, 0, 5.53, 0, 1); } + 14.16% { transform: matrix3d(1, 0, 0, 0, 0, 0.959, 0, 0, 0, 0, 1, 0, 0, 11.62, 0, 1); } + 16.12% { transform: matrix3d(1, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 13.007, 0, 1); } + 19.72% { transform: matrix3d(1, 0, 0, 0, 0, 1.012, 0, 0, 0, 0, 1, 0, 0, 10.247, 0, 1); } + 27.23% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.352, 0, 1); } + 30.83% { transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0.585, 0, 1); } + 38.34% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.311, 0, 1); } + 41.99% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.244, 0, 1); } + 50% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.048, 0, 1); } + 60.56% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.007, 0, 1); } + 82.78% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } + 100% { transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } @@ -736,6 +893,7 @@ 0% { transform: translate3d(0, -30px, 0) translate3d(0, -100%, 0); } + 100% { transform: translate3d(0, 0, 0); } diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 420f71cc..4f3d850d 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -12,11 +12,24 @@ */ ;(function(window) { + /** + * extend obj function + */ + function extend(a, b) { + for (let key in b) { + if (b.hasOwnProperty(key)) { + a[key] = b[key]; + } + } + return a; + } + /** * NotificationFx function */ function NotificationFx(options) { - this.options = { ...this.options, ...options }; + this.options = extend({}, this.options); + extend(this.options, options); this._init(); } @@ -56,7 +69,7 @@ NotificationFx.prototype._init = function() { // create HTML structure this.ntf = document.createElement("div"); - this.ntf.className = this.options.al_no + " ns-" + this.options.layout + " ns-effect-" + this.options.effect + " ns-type-" + this.options.type; + this.ntf.className = this.options.al_no + " ns-" + this.options.layout + " ns-effect-" + this.options.effect + " ns-type-" + this.options.type; let strinner = "
"; strinner += this.options.message; strinner += "
"; @@ -112,7 +125,7 @@ // after animation ends remove ntf from the DOM const onEndAnimationFn = (ev) => { - if (ev.target !== this.ntf) return false; + if (ev.target !== this.ntf) {return false;} this.ntf.removeEventListener("animationend", onEndAnimationFn); if (ev.target.parentNode === this.options.wrapper) { diff --git a/package-lock.json b/package-lock.json index 5b845208..a4d8179f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4764,6 +4764,21 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "mocha": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", @@ -4779,6 +4794,7 @@ "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", + "mkdirp": "0.5.1", "supports-color": "5.4.0" } }, From 8c0e98ed438ccf2cfb01d0311b191f5cbdb15dc8 Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 11:30:05 +0200 Subject: [PATCH 123/219] Ignore some other files when linting markdown too --- .markdownlintignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .markdownlintignore diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 00000000..fa766882 --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1 @@ +modules/default/calendar/vendor/* From 291a8f5c1f0f177e6e8314ee74585f316482f90b Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 11:34:16 +0200 Subject: [PATCH 124/219] Fix warnings for jsonlint --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8a0592a6..0b950b15 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "config:check": "node js/check_config.js", "lint": "npm run lint:js && npm run lint:json && npm run lint:markdown && npm run lint:style && npm run lint:yaml", "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", - "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/*/translations/*.json translations/*.json vendor/package.json", + "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/ translations/ vendor/package.json", "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", "lint:yaml": "yamllint .travis.yml" From cc5336900c7875e993c3a33e6bc90245c82eeb3d Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 11:34:24 +0200 Subject: [PATCH 125/219] Update dependencies --- package-lock.json | 77 ++++++++++++++++++++++------------------------- package.json | 4 +-- 2 files changed, 38 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4d8179f..91c72c98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,12 +55,6 @@ "minimist": "^1.2.5" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -382,9 +376,9 @@ } }, "@stylelint/postcss-css-in-js": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.0.tgz", - "integrity": "sha512-9svhg0rpUOo4xkvnllUzM0ZQF/Iwxhi6Bf1rzOA06fDa+fjnBUb2mvEV1c9nJb14g1XD/HMSmvklaVyCo96x6A==", + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.1.tgz", + "integrity": "sha512-UMf2Rni3JGKi3ZwYRGMYJ5ipOA5ENJSKMtYA/pE1ZLURwdh7B5+z2r73RmWvub+N0UuH1Lo+TGfCgYwPvqpXNw==", "dev": true, "requires": { "@babel/core": ">=7.9.0" @@ -1009,9 +1003,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001040", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz", - "integrity": "sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ==", + "version": "1.0.30001043", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001043.tgz", + "integrity": "sha512-MrBDRPJPDBYwACtSQvxg9+fkna5jPXhJlKmuxenl/ml9uf8LHKlDmLpElu+zTW/bEz7lC1m0wTDD7jiIB+hgFg==", "dev": true }, "caseless": { @@ -1878,9 +1872,9 @@ } }, "electron-to-chromium": { - "version": "1.3.402", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.402.tgz", - "integrity": "sha512-gaCDfX7IUH0s3JmBiHCDPrvVcdnTTP1r4WLJc2dHkYYbLmXZ2XHiJCcGQ9Balf91aKTvuCKCyu2JjJYRykoI1w==", + "version": "1.3.413", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", + "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==", "dev": true }, "emoji-regex": { @@ -2852,14 +2846,6 @@ "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "graceful-fs": { @@ -4181,9 +4167,9 @@ } }, "markdownlint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.19.0.tgz", - "integrity": "sha512-+MsWOnYVUH4klcKM7iRx5cno9FQMDAb6FC6mWlZkeXPwIaK6Z5Vd9VkXkykPidRqmLHU2wI+MNyfUMnUCBw3pQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.20.1.tgz", + "integrity": "sha512-jq1qt0QkzY6AiN6O3tq+8SmUlvKfhx9GRKBn/IWEuN6RM5xBZG47rfW9Fn0eRvuozf5Xc59dRaLUZEO0XiyGOg==", "dev": true, "requires": { "markdown-it": "10.0.0" @@ -4250,6 +4236,15 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true + }, + "markdownlint": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.19.0.tgz", + "integrity": "sha512-+MsWOnYVUH4klcKM7iRx5cno9FQMDAb6FC6mWlZkeXPwIaK6Z5Vd9VkXkykPidRqmLHU2wI+MNyfUMnUCBw3pQ==", + "dev": true, + "requires": { + "markdown-it": "10.0.0" + } } } }, @@ -5842,9 +5837,9 @@ } }, "remark-parse": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.0.tgz", - "integrity": "sha512-Ck14G1Ns/GEPXhSw6m1Uv28kMtVk63e59NyL+QlhBBwBdIUXROM6MPfBehPhW6TW2d73batMdZsKwuxl5i3tEA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.1.tgz", + "integrity": "sha512-Ye/5W57tdQZWsfkuVyRq9SUWRgECHnDsMuyUMzdSKpTbNPkZeGtoYfsrkeSi4+Xyl0mhcPPddHITXPcCPHrl3w==", "dev": true, "requires": { "ccount": "^1.0.0", @@ -7002,14 +6997,14 @@ "dev": true }, "stylelint": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.1.tgz", - "integrity": "sha512-jeeGwU7y/0l2YTL042U2U0W04J9JIO6bRpTM4S8npSzaO5GzBz4VFlVlMucFzZXkSylxppEx9R6p+DiDLJcrWw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.2.tgz", + "integrity": "sha512-kpO3/Gz2ZY40EWUwFYYkgpzhf8ZDUyKpcui5+pS0XKJBj/EMYmZpOJoL8IFAz2yApYeg91NVy5yAjE39hDzWvQ==", "dev": true, "requires": { - "@stylelint/postcss-css-in-js": "^0.37.0", + "@stylelint/postcss-css-in-js": "^0.37.1", "@stylelint/postcss-markdown": "^0.36.1", - "autoprefixer": "^9.7.5", + "autoprefixer": "^9.7.6", "balanced-match": "^1.0.0", "chalk": "^4.0.0", "cosmiconfig": "^6.0.0", @@ -7332,9 +7327,9 @@ "dev": true }, "yargs-parser": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", - "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -8110,12 +8105,12 @@ "dev": true }, "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "dev": true, "requires": { - "@babel/runtime": "^7.8.7" + "@babel/runtime": "^7.9.2" } }, "yaml-lint": { diff --git a/package.json b/package.json index 0b950b15..966af8a6 100644 --- a/package.json +++ b/package.json @@ -51,13 +51,13 @@ "eslint": "^6.8.0", "http-auth": "^3.2.3", "jsdom": "^11.6.2", - "markdownlint": "^0.19.0", + "markdownlint": "^0.20.1", "markdownlint-cli": "^0.22.0", "mocha": "^7.0.0", "mocha-each": "^1.1.0", "mocha-logger": "^1.0.6", "spectron": "^8.0.0", - "stylelint": "^13.3.1", + "stylelint": "^13.3.2", "stylelint-config-standard": "^20.0.0", "yaml-lint": "^1.2.4" }, From 4ddb8cec85016ef1c150c45cb60e42d49edb23d4 Mon Sep 17 00:00:00 2001 From: Veeck Date: Sun, 19 Apr 2020 09:29:06 +0200 Subject: [PATCH 126/219] Update roboto fonts, remove ttf entries --- fonts/package-lock.json | 6 +++--- fonts/package.json | 2 +- fonts/roboto.css | 24 ++++++++---------------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/fonts/package-lock.json b/fonts/package-lock.json index c05e7b0d..960e793a 100644 --- a/fonts/package-lock.json +++ b/fonts/package-lock.json @@ -4,9 +4,9 @@ "lockfileVersion": 1, "dependencies": { "roboto-fontface": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.8.0.tgz", - "integrity": "sha512-ZYzRkETgBrdEGzL5JSKimvjI2CX7ioyZCkX2BpcfyjqI+079W0wHAyj5W4rIZMcDSOHgLZtgz1IdDi/vU77KEQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" } } } diff --git a/fonts/package.json b/fonts/package.json index a4fb07de..604a492e 100644 --- a/fonts/package.json +++ b/fonts/package.json @@ -10,6 +10,6 @@ "url": "https://github.com/MichMich/MagicMirror/issues" }, "dependencies": { - "roboto-fontface": "^0.8.0" + "roboto-fontface": "^0.10.0" } } diff --git a/fonts/roboto.css b/fonts/roboto.css index 11d3f41d..853293b8 100644 --- a/fonts/roboto.css +++ b/fonts/roboto.css @@ -6,8 +6,7 @@ local("Roboto Thin"), local("Roboto-Thin"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff") format("woff"); } @font-face { @@ -18,8 +17,7 @@ local("Roboto Condensed Light"), local("RobotoCondensed-Light"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff") format("woff"); } @font-face { @@ -30,8 +28,7 @@ local("Roboto Condensed"), local("RobotoCondensed-Regular"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff") format("woff"); } @font-face { @@ -42,8 +39,7 @@ local("Roboto Condensed Bold"), local("RobotoCondensed-Bold"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff") format("woff"); } @font-face { @@ -54,8 +50,7 @@ local("Roboto"), local("Roboto-Regular"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff") format("woff"); } @font-face { @@ -66,8 +61,7 @@ local("Roboto Medium"), local("Roboto-Medium"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff") format("woff"); } @font-face { @@ -78,8 +72,7 @@ local("Roboto Bold"), local("Roboto-Bold"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff") format("woff"); } @font-face { @@ -90,6 +83,5 @@ local("Roboto Light"), local("Roboto-Light"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff") format("woff"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.ttf") format("truetype"); + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff") format("woff"); } From 81ab12c89c93cba4fa3188791a1538bb1074f6eb Mon Sep 17 00:00:00 2001 From: Veeck Date: Sun, 19 Apr 2020 09:30:54 +0200 Subject: [PATCH 127/219] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a277b8c..da647e27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Replaced grunt-based linters with their non-grunt equivalents ### Deleted +- Removed truetype (ttf) fonts ### Fixed - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) From 8650876e2b2c3927d3ec579151968ebece1a92dc Mon Sep 17 00:00:00 2001 From: Veeck Date: Sun, 19 Apr 2020 09:32:13 +0200 Subject: [PATCH 128/219] Remove yarn.locks --- fonts/yarn.lock | 7 - vendor/yarn.lock | 1185 ---------------------------------------------- 2 files changed, 1192 deletions(-) delete mode 100644 fonts/yarn.lock delete mode 100644 vendor/yarn.lock diff --git a/fonts/yarn.lock b/fonts/yarn.lock deleted file mode 100644 index ccb550f3..00000000 --- a/fonts/yarn.lock +++ /dev/null @@ -1,7 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -roboto-fontface@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/roboto-fontface/-/roboto-fontface-0.8.0.tgz#031a83c8f79932801a57d83bf743f37250163499" diff --git a/vendor/yarn.lock b/vendor/yarn.lock deleted file mode 100644 index a04f2b63..00000000 --- a/vendor/yarn.lock +++ /dev/null @@ -1,1185 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@fortawesome/fontawesome-free@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.3.1.tgz#5466b8f31c1f493a96754c1426c25796d0633dd9" - integrity sha512-jt6yi7iZVtkY9Jc6zFo+G2vqL4M81pb3IA3WmnnDt9ci7Asz+mPg4gbZL8pjx0nGFBsG0Bmd7BjU9IQkebqxFA== - -a-sync-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.0.tgz#38e8319d79379e24628845b53b96722b29e0e47c" - integrity sha1-OOgxnXk3niRiiEW1O5ZyKyng5Hw= - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -asap@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= - dependencies: - hoek "2.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -camelcase@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chokidar@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -cliui@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= - dependencies: - boom "2.x.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8= - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= - dependencies: - jsbn "~0.1.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM= - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -font-awesome@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM= - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - integrity sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q== - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob@^7.0.5: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -"mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -moment-timezone@^0.5.11: - version "0.5.14" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.14.tgz#4eb38ff9538b80108ba467a458f3ed4268ccfcb1" - integrity sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE= - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0", moment@^2.17.1: - version "2.22.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.0.tgz#7921ade01017dd45186e7fee5f424f0b8663a730" - integrity sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -nan@^2.3.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ== - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nunjucks@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.1.2.tgz#85945a66bb8239bb37ecef83dab4cc1f152aabb9" - integrity sha512-pJXncV07mmiuIDL9OqdNkcpvifuDMzMq9qBQT9SHasAS7AEwzNp/r/jHNl+9O0+zsldcdWG9ZtXo/nwu2cTqXA== - dependencies: - a-sync-waterfall "^1.0.0" - asap "^2.0.3" - postinstall-build "^5.0.1" - yargs "^3.32.0" - optionalDependencies: - chokidar "^1.6.0" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -once@^1.3.0, once@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= - -postinstall-build@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.1.tgz#b917a9079b26178d9a24af5a5cd8cb4a991d11b9" - integrity sha1-uRepB5smF42aJK9aXNjLSpkdEbk= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - integrity sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" - integrity sha1-6xiYnG1PTxYsOZ953dKfODVWgJI= - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" - integrity sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" - -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== - -semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= - dependencies: - hoek "2.x.x" - -sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - integrity sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s= - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg= - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg== - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== - dependencies: - punycode "^1.4.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -weathericons@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/weathericons/-/weathericons-2.1.0.tgz#7453a1a35e200245e389fb5077d527eff30b73b4" - integrity sha1-dFOho14gAkXjiftQd9Un7/MLc7Q= - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w== - dependencies: - string-width "^1.0.2" - -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -y18n@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -yargs@^3.32.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" From a1285b120bc9d7f378e480928b9f3f7ab19f591c Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 20 Apr 2020 12:13:13 +0200 Subject: [PATCH 129/219] Remove some other prefixed styles since we are at it --- css/main.css | 8 -------- modules/default/alert/notificationFx.css | 1 - modules/default/calendar/calendar.css | 2 -- modules/default/clock/clock_styles.css | 6 ------ modules/default/currentweather/currentweather.css | 2 -- modules/default/weather/weather.css | 2 -- 6 files changed, 21 deletions(-) diff --git a/css/main.css b/css/main.css index 84f8c4d2..bca48f9e 100644 --- a/css/main.css +++ b/css/main.css @@ -177,10 +177,6 @@ sup { .region.top.center, .region.bottom.center { left: 50%; - -moz-transform: translateX(-50%); - -o-transform: translateX(-50%); - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); transform: translateX(-50%); } @@ -213,10 +209,6 @@ sup { .region.middle.center { width: 100%; text-align: center; - -moz-transform: translateY(-50%); - -o-transform: translateY(-50%); - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); transform: translateY(-50%); } diff --git a/modules/default/alert/notificationFx.css b/modules/default/alert/notificationFx.css index 39cd2f70..9ab1ed49 100644 --- a/modules/default/alert/notificationFx.css +++ b/modules/default/alert/notificationFx.css @@ -718,7 +718,6 @@ } 4.1% { - -webkit-transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); transform: matrix3d(1.147, 0, 0, 0, 0, 0.853, 0, 0, 0, 0, 1, 0, 419.708, 0, 0, 1); } diff --git a/modules/default/calendar/calendar.css b/modules/default/calendar/calendar.css index 6bc5762d..65908a70 100644 --- a/modules/default/calendar/calendar.css +++ b/modules/default/calendar/calendar.css @@ -7,8 +7,6 @@ .calendar .symbol span { display: inline-block; - -ms-transform: translate(0, 2px); /* IE 9 */ - -webkit-transform: translate(0, 2px); /* Safari */ transform: translate(0, 2px); } diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index fa6c2d5d..a7a582c9 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -32,8 +32,6 @@ margin: -2px 0 -2px -25%; /* numbers much match negative length & thickness */ padding: 2px 0 2px 25%; /* indicator length & thickness */ background: white; - -webkit-transform-origin: 100% 50%; - -ms-transform-origin: 100% 50%; transform-origin: 100% 50%; border-radius: 3px 0 0 3px; } @@ -47,8 +45,6 @@ margin: -35% -2px 0; /* numbers must match negative length & thickness */ padding: 35% 2px 0; /* indicator length & thickness */ background: white; - -webkit-transform-origin: 50% 100%; - -ms-transform-origin: 50% 100%; transform-origin: 50% 100%; border-radius: 3px 0 0 3px; } @@ -62,8 +58,6 @@ margin: -38% -1px 0 0; /* numbers must match negative length & thickness */ padding: 38% 1px 0 0; /* indicator length & thickness */ background: #888; - -webkit-transform-origin: 50% 100%; - -ms-transform-origin: 50% 100%; transform-origin: 50% 100%; } diff --git a/modules/default/currentweather/currentweather.css b/modules/default/currentweather/currentweather.css index b7669bda..3930c885 100644 --- a/modules/default/currentweather/currentweather.css +++ b/modules/default/currentweather/currentweather.css @@ -3,8 +3,6 @@ font-size: 75%; line-height: 65px; display: inline-block; - -ms-transform: translate(0, -3px); /* IE 9 */ - -webkit-transform: translate(0, -3px); /* Safari */ transform: translate(0, -3px); } diff --git a/modules/default/weather/weather.css b/modules/default/weather/weather.css index 639ce7a9..2d7600ad 100644 --- a/modules/default/weather/weather.css +++ b/modules/default/weather/weather.css @@ -3,8 +3,6 @@ font-size: 75%; line-height: 65px; display: inline-block; - -ms-transform: translate(0, -3px); /* IE 9 */ - -webkit-transform: translate(0, -3px); /* Safari */ transform: translate(0, -3px); } From e668d488b47ae25d7c772448f8e2a540d67573fd Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 20 Apr 2020 22:04:11 +0200 Subject: [PATCH 130/219] Use eslint:recommend --- .eslintrc.json | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index e5aca766..ab9f631f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,20 +1,10 @@ { - "rules": { - "indent": ["error", "tab"], - "quotes": ["error", "double"], - "semi": ["error"], - "max-len": ["error", 250], - "curly": "error", - "camelcase": ["error", {"properties": "never"}], - "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1 }], - "no-multi-spaces": "error", - "no-trailing-spaces": ["error", {"ignoreComments": false }], - "no-irregular-whitespace": ["error"] - }, + "extends": "eslint:recommended", "env": { "browser": true, - "node": true, - "es6": true + "es6": true, + "mocha": true, + "node": true }, "parserOptions": { "sourceType": "module", From ef8d85773c1f52fcc5bfc2e8b4851c378f89047a Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 20 Apr 2020 22:09:49 +0200 Subject: [PATCH 131/219] Run automatic fix --- modules/default/alert/notificationFx.js | 2 +- modules/default/weatherforecast/weatherforecast.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 4f3d850d..47e3a4a1 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -10,7 +10,7 @@ * Copyright 2014, Codrops * http://www.codrops.com */ -;(function(window) { +(function(window) { /** * extend obj function diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index b8fab9e4..d5c2efa6 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -339,7 +339,7 @@ Module.register("weatherforecast",{ var day; var hour; - if(!!forecast.dt_txt) { + if(forecast.dt_txt) { day = moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss").format("ddd"); hour = moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss").format("H"); } else { @@ -450,9 +450,9 @@ Module.register("weatherforecast",{ } //Find all forecasts that is for the same day - var checkDateTime = (!!forecast.dt_txt) ? moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(forecast.dt, "X"); + var checkDateTime = (forecast.dt_txt) ? moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(forecast.dt, "X"); var daysForecasts = allForecasts.filter(function(item) { - var itemDateTime = (!!item.dt_txt) ? moment(item.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(item.dt, "X"); + var itemDateTime = (item.dt_txt) ? moment(item.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(item.dt, "X"); return itemDateTime.isSame(checkDateTime, "day") && item.rain instanceof Object; }); From 941d5d7cd9b3e94c57306aed0aab2a8d52dc2a55 Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 20 Apr 2020 22:16:23 +0200 Subject: [PATCH 132/219] Fix mixed tabs and whitespace errors --- config/config.js.sample | 33 ++++++++++++------------ js/app.js | 2 +- js/server.js | 2 +- modules/default/calendar/calendar.js | 8 +++--- modules/default/clock/clock.js | 2 +- modules/default/weather/weather.js | 6 ++--- modules/default/weather/weatherobject.js | 4 +-- 7 files changed, 28 insertions(+), 29 deletions(-) diff --git a/config/config.js.sample b/config/config.js.sample index 5d26b320..6c2cd437 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -9,19 +9,19 @@ */ var config = { - address: "localhost", // Address to listen on, can be: - // - "localhost", "127.0.0.1", "::1" to listen on loopback interface - // - another specific IPv4/6 to listen on a specific interface - // - "0.0.0.0", "::" to listen on any interface - // Default, when address config is left out or empty, is "localhost" + address: "localhost", // Address to listen on, can be: + // - "localhost", "127.0.0.1", "::1" to listen on loopback interface + // - another specific IPv4/6 to listen on a specific interface + // - "0.0.0.0", "::" to listen on any interface + // Default, when address config is left out or empty, is "localhost" port: 8080, - basePath: "/", // The URL path where MagicMirror is hosted. If you are using a Reverse proxy - // you must set the sub path here. basePath must end with a / - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses - // or add a specific IPv4 of 192.168.1.5 : - // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], - // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : - // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], + basePath: "/", // The URL path where MagicMirror is hosted. If you are using a Reverse proxy + // you must set the sub path here. basePath must end with a / + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses + // or add a specific IPv4 of 192.168.1.5 : + // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], + // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : + // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], useHttps: false, // Support HTTPS or not, default "false" will use HTTP httpsPrivateKey: "", // HTTPS private key path, only require when useHttps is true @@ -31,10 +31,10 @@ var config = { timeFormat: 24, units: "metric", // serverOnly: true/false/"local" , - // local for armv6l processors, default - // starts serveronly and then starts chrome browser - // false, default for all NON-armv6l devices - // true, force serveronly mode, because you want to.. no UI on this device + // local for armv6l processors, default + // starts serveronly and then starts chrome browser + // false, default for all NON-armv6l devices + // true, force serveronly mode, because you want to.. no UI on this device modules: [ { @@ -100,7 +100,6 @@ var config = { } }, ] - }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/js/app.js b/js/app.js index b7c55ffa..50223ecd 100644 --- a/js/app.js +++ b/js/app.js @@ -61,7 +61,7 @@ var App = function() { // 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") { - configFilename = path.resolve(global.configuration_file); + configFilename = path.resolve(global.configuration_file); } try { diff --git a/js/server.js b/js/server.js index 185790af..36bf9770 100644 --- a/js/server.js +++ b/js/server.js @@ -73,7 +73,7 @@ var Server = function(config, callback) { configFile = "config/config.js"; if (typeof(global.configuration_file) !== "undefined") { - configFile = global.configuration_file; + configFile = global.configuration_file; } html = html.replace("#CONFIG_FILE#", configFile); diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index d93f570c..d0986598 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -474,8 +474,8 @@ Module.register("calendar", { } 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; } } if(this.config.hideOngoing) { @@ -734,8 +734,8 @@ Module.register("calendar", { var regParts = needle.match(/^\/(.+)\/([gim]*)$/); if (regParts) { - // the parsed pattern is a regexp. - needle = new RegExp(regParts[1], regParts[2]); + // the parsed pattern is a regexp. + needle = new RegExp(regParts[1], regParts[2]); } title = title.replace(needle, replacement); diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 08dcced0..f1f49529 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -198,7 +198,7 @@ Module.register("clock",{ * Create wrappers for ANALOG clock, only if specified in config */ - if (this.config.displayType !== "digital") { + if (this.config.displayType !== "digital") { // If it isn't 'digital', then an 'analog' clock was also requested // Calculate the degree offset for each hand of the clock diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 868316d9..9b9c435d 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -210,11 +210,11 @@ Module.register("weather",{ if (isNaN(value) || value === 0 || value.toFixed(2) === "0.00") { value = ""; } else { - if (this.config.weatherProvider === "ukmetoffice") { + if (this.config.weatherProvider === "ukmetoffice") { value += "%"; - } else { + } else { value = `${value.toFixed(2)} ${this.config.units === "imperial" ? "in" : "mm"}`; - } + } } } else if (type === "humidity") { value += "%"; diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index ed455537..60311424 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -87,8 +87,8 @@ class WeatherObject { } feelsLike() { - if (this.feelsLikeTemp) { - return this.feelsLikeTemp; + if (this.feelsLikeTemp) { + return this.feelsLikeTemp; } const windInMph = (this.windUnits === "imperial") ? this.windSpeed : this.windSpeed * 2.23694; const tempInF = this.tempUnits === "imperial" ? this.temperature : this.temperature * 9 / 5 + 32; From d08bd4e866e54581dc3c3233b930597e134126af Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 21 Apr 2020 07:36:18 +0200 Subject: [PATCH 133/219] Fix lots of warnings --- .eslintrc.json | 6 +++++- js/class.js | 4 ++-- js/defaults.js | 2 +- js/logger.js | 1 - js/module.js | 1 - js/translator.js | 5 +++-- js/utils.js | 1 + modules/default/calendar/calendar.js | 18 +++++++----------- modules/default/clock/clock.js | 1 - .../default/currentweather/currentweather.js | 13 +++++-------- modules/default/newsfeed/newsfeed.js | 3 +-- modules/default/weather/weather.js | 1 - .../default/weatherforecast/weatherforecast.js | 2 +- 13 files changed, 26 insertions(+), 32 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index ab9f631f..cf4de832 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,5 +12,9 @@ "ecmaFeatures": { "globalReturn": true } - } + }, + "rules": { + "no-undef": "off", + "no-unused-vars": "off" + } } diff --git a/js/class.js b/js/class.js index 39cd2962..d2a1654f 100644 --- a/js/class.js +++ b/js/class.js @@ -22,8 +22,8 @@ initializing = false; // Make a copy of all prototype properties, to prevent reference issues. - for (var name in prototype) { - prototype[name] = cloneObject(prototype[name]); + for (var p in prototype) { + prototype[p] = cloneObject(prototype[p]); } // Copy the properties over onto the new prototype diff --git a/js/defaults.js b/js/defaults.js index dc246298..6e1d78ce 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -1,7 +1,7 @@ /* exported defaults */ /* Magic Mirror - * Config Defauls + * Config Defaults * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. diff --git a/js/logger.js b/js/logger.js index 1392a72b..2e023493 100644 --- a/js/logger.js +++ b/js/logger.js @@ -1,4 +1,3 @@ -/* global console */ /* exported Log */ /* Magic Mirror diff --git a/js/module.js b/js/module.js index e456e6a8..9336c9e9 100644 --- a/js/module.js +++ b/js/module.js @@ -1,4 +1,3 @@ -/* global Log, Class, Loader, Class , MM */ /* exported Module */ /* Magic Mirror diff --git a/js/translator.js b/js/translator.js index 08a80c14..5839cd53 100644 --- a/js/translator.js +++ b/js/translator.js @@ -1,4 +1,5 @@ /* exported Translator */ + /* Magic Mirror * Translator (l10n) * @@ -129,10 +130,10 @@ var Translator = (function() { if(Object.prototype.toString.call(template) !== "[object String]") { return template; } - if(variables.fallback && !template.match(new RegExp("\{.+\}"))) { + if(variables.fallback && !template.match(new RegExp("{.+}"))) { template = variables.fallback; } - return template.replace(new RegExp("\{([^\}]+)\}", "g"), function(_unused, varName){ + return template.replace(new RegExp("{([^}]+)}", "g"), function(_unused, varName){ return variables[varName] || "{"+varName+"}"; }); } diff --git a/js/utils.js b/js/utils.js index 3f623499..bdd81e57 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,4 +1,5 @@ /* exported Utils */ + /* Magic Mirror * Utils * diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index d0986598..06f6c2f3 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -254,6 +254,8 @@ Module.register("calendar", { titleWrapper.className = "title " + titleClass; } + var timeWrapper; + if(this.config.timeFormat === "dateheaders"){ if (event.fullDayEvent) { @@ -261,10 +263,8 @@ Module.register("calendar", { titleWrapper.align = "left"; } else { - - var timeClass = this.timeClassForUrl(event.url); - var timeWrapper = document.createElement("td"); - timeWrapper.className = "time light " + timeClass; + timeWrapper = document.createElement("td"); + timeWrapper.className = "time light " + this.timeClassForUrl(event.url); timeWrapper.align = "left"; timeWrapper.style.paddingLeft = "2px"; timeWrapper.innerHTML = moment(event.startDate, "x").format("LT"); @@ -274,7 +274,7 @@ Module.register("calendar", { eventWrapper.appendChild(titleWrapper); } else { - var timeWrapper = document.createElement("td"); + timeWrapper = document.createElement("td"); eventWrapper.appendChild(titleWrapper); //console.log(event.today); @@ -370,8 +370,7 @@ Module.register("calendar", { } //timeWrapper.innerHTML += ' - '+ moment(event.startDate,'x').format('lll'); //console.log(event); - var timeClass = this.timeClassForUrl(event.url); - timeWrapper.className = "time light " + timeClass; + timeWrapper.className = "time light " + this.timeClassForUrl(event.url); eventWrapper.appendChild(timeWrapper); } @@ -424,15 +423,12 @@ Module.register("calendar", { switch (timeFormat) { case 12: { return { longDateFormat: {LT: "h:mm A"} }; - break; } case 24: { return { longDateFormat: {LT: "HH:mm"} }; - break; } default: { return { longDateFormat: {LT: moment.localeData().longDateFormat("LT")} }; - break; } } }, @@ -735,7 +731,7 @@ Module.register("calendar", { var regParts = needle.match(/^\/(.+)\/([gim]*)$/); if (regParts) { // the parsed pattern is a regexp. - needle = new RegExp(regParts[1], regParts[2]); + needle = new RegExp(regParts[1], regParts[2]); } title = title.replace(needle, replacement); diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index f1f49529..4db7febb 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -202,7 +202,6 @@ Module.register("clock",{ // If it isn't 'digital', then an 'analog' clock was also requested // Calculate the degree offset for each hand of the clock - var now = moment(); if (this.config.timezone) { now.tz(this.config.timezone); } diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 7f7c805d..ff14b47b 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -23,7 +23,6 @@ Module.register("currentweather",{ showWindDirection: true, showWindDirectionAsArrow: false, useBeaufort: true, - appendLocationNameToHeader: false, useKMPHwind: false, lang: config.language, decimalSymbol: ".", @@ -150,15 +149,15 @@ Module.register("currentweather",{ var humidity = document.createElement("span"); humidity.innerHTML = this.humidity; - var spacer = document.createElement("sup"); - spacer.innerHTML = " "; + var supspacer = document.createElement("sup"); + supspacer.innerHTML = " "; var humidityIcon = document.createElement("sup"); humidityIcon.className = "wi wi-humidity humidityIcon"; humidityIcon.innerHTML = " "; small.appendChild(humidity); - small.appendChild(spacer); + small.appendChild(supspacer); small.appendChild(humidityIcon); } @@ -414,8 +413,7 @@ Module.register("currentweather",{ case "imperial": tempInF = this.temperature; break; case "default": - var tc = this.temperature - 273.15; - tempInF = 1.8 * tc + 32; + tempInF = 1.8 * (this.temperature - 273.15) + 32; break; } @@ -431,8 +429,7 @@ Module.register("currentweather",{ case "imperial": this.feelsLike = windChillInF.toFixed(0); break; case "default": - var tc = windChillInC + 273.15; - this.feelsLike = tc.toFixed(0); + this.feelsLike = (windChillInC + 273.15).toFixed(0); break; } diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index cb0e8ece..31dbec4b 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -367,8 +367,8 @@ Module.register("newsfeed",{ }, notificationReceived: function(notification, payload, sender) { + var before = this.activeItem; if(notification === "ARTICLE_NEXT"){ - var before = this.activeItem; this.activeItem++; if (this.activeItem >= this.newsItems.length) { this.activeItem = 0; @@ -377,7 +377,6 @@ Module.register("newsfeed",{ 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; diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 9b9c435d..8f5568b4 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -10,7 +10,6 @@ Module.register("weather",{ // Default module config. defaults: { - updateInterval: 10 * 60 * 1000, weatherProvider: "openweathermap", roundTemp: false, type: "current", //current, forecast diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index d5c2efa6..e6f54b14 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -348,7 +348,7 @@ Module.register("weatherforecast",{ } if (day !== lastDay) { - var forecastData = { + forecastData = { day: day, icon: this.config.iconTable[forecast.weather[0].icon], maxTemp: this.roundValue(forecast.temp.max), From 9ec329b7ae4d05ea3471c43d0100e337e8685f26 Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 21 Apr 2020 10:37:24 +0200 Subject: [PATCH 134/219] Final fixes for eslint:recommended --- .eslintrc.json | 1 + js/main.js | 5 +++-- modules/default/calendar/calendarfetcher.js | 3 +-- modules/default/weather/providers/ukmetoffice.js | 6 ++---- tests/configs/modules/positions.js | 2 +- tests/e2e/dev_console.js | 5 +++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index cf4de832..65b99e6e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,6 +14,7 @@ } }, "rules": { + "no-prototype-builtins": "off", "no-undef": "off", "no-unused-vars": "off" } diff --git a/js/main.js b/js/main.js index 465f1d45..7801ae3c 100644 --- a/js/main.js +++ b/js/main.js @@ -344,13 +344,14 @@ var MM = (function() { * Loads the core config and combines it with de system defaults. */ var loadConfig = function() { + let config = window.config; if (typeof config === "undefined") { - config = defaults; + window.config = defaults; Log.error("Config file is missing! Please create a config file."); return; } - config = Object.assign({}, defaults, config); + window.config = Object.assign({}, defaults, config); }; /* setSelectionMethodsForModules() diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index c393d5d6..1e629a28 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -81,8 +81,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri past = moment().startOf("day").subtract(maximumNumberOfDays, "days").toDate(); } - // FIXME: - // Ugly fix to solve the facebook birthday issue. + // FIXME: Ugly fix to solve the facebook birthday issue. // Otherwise, the recurring events only show the birthday for next year. var isFacebookBirthday = false; if (typeof event.uid !== "undefined") { diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 884b5d98..dc617dd0 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -25,8 +25,7 @@ WeatherProvider.register("ukmetoffice", { fetchCurrentWeather() { this.fetchData(this.getUrl("3hourly")) .then(data => { - if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || - !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length == 0) { + if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? return; @@ -47,8 +46,7 @@ WeatherProvider.register("ukmetoffice", { fetchWeatherForecast() { this.fetchData(this.getUrl("daily")) .then(data => { - if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || - !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length == 0) { + if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? return; diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index d56fab91..d2bf5ee9 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -9,7 +9,6 @@ var config = { port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - ipWhitelist: [], language: "en", timeFormat: 24, @@ -19,6 +18,7 @@ var config = { nodeIntegration: true, }, }, + modules: // Using exotic content. This is why dont accept go to JSON configuration file (function() { diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 42f8ac99..8cddee1d 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -5,11 +5,11 @@ const describe = global.describe; const it = global.it; describe("Development console tests", function() { - // This tests fail and crash another tests + // FIXME: This tests fail and crash another tests // Suspect problem with window focus - // FIXME return false; + /* eslint-disable */ helpers.setupTimeout(this); var app = null; @@ -58,4 +58,5 @@ describe("Development console tests", function() { return expect(app.browserWindow.isDevToolsOpened()).to.eventually.equal(true); }); }); + /* eslint-enable */ }); From ec187fe1093ba4d6e5307323f02ff719a1cb022c Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 21 Apr 2020 10:41:21 +0200 Subject: [PATCH 135/219] Update changelog and commen tags --- CHANGELOG.md | 1 + js/loader.js | 2 +- js/main.js | 3 +-- modules/default/alert/alert.js | 1 - modules/default/calendar/calendar.js | 1 - modules/default/clock/clock.js | 1 + modules/default/currentweather/currentweather.js | 1 - modules/default/helloworld/helloworld.js | 1 - modules/default/newsfeed/newsfeed.js | 1 - modules/default/weather/providers/openweathermap.js | 1 - modules/default/weather/providers/ukmetoffice.js | 1 - modules/default/weather/providers/weathergov.js | 1 - modules/default/weather/weather.js | 1 - modules/default/weather/weatherobject.js | 7 +++---- modules/default/weather/weatherprovider.js | 4 ---- modules/default/weatherforecast/weatherforecast.js | 1 - 16 files changed, 7 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da647e27..2ae6ef2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Cleaned up alert module code - Cleaned up check_config code - Replaced grunt-based linters with their non-grunt equivalents +- Switch to most of the eslint:recommended rules and fix warnings ### Deleted - Removed truetype (ttf) fonts diff --git a/js/loader.js b/js/loader.js index 6db46ad5..e29ad3a0 100644 --- a/js/loader.js +++ b/js/loader.js @@ -1,11 +1,11 @@ /* global config, vendor, MM, Log, Module */ + /* Magic Mirror * Module and File loaders. * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - var Loader = (function() { /* Create helper variables */ diff --git a/js/main.js b/js/main.js index 7801ae3c..41976568 100644 --- a/js/main.js +++ b/js/main.js @@ -1,4 +1,4 @@ -/* global Log, Loader, Module, config, defaults */ +/* global Log, Loader, Module, config, defaults */ /* Magic Mirror * Main System @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - var MM = (function() { var modules = []; diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index cbfa2dcd..7fce85cd 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -6,7 +6,6 @@ * By Paul-Vincent Roll http://paulvincentroll.com * MIT Licensed. */ - Module.register("alert",{ defaults: { // scale|slide|genie|jelly|flip|bouncyflip|exploader diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 06f6c2f3..1d30a78a 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("calendar", { // Define module defaults diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 4db7febb..faed4950 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -1,4 +1,5 @@ /* global Log, Module, moment, config */ + /* Magic Mirror * Module: Clock * diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index ff14b47b..bc04ebcd 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("currentweather",{ // Default module config. diff --git a/modules/default/helloworld/helloworld.js b/modules/default/helloworld/helloworld.js index cf6cebfa..63640f70 100644 --- a/modules/default/helloworld/helloworld.js +++ b/modules/default/helloworld/helloworld.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("helloworld",{ // Default module config. diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 31dbec4b..ca219c7f 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("newsfeed",{ // Default module config. diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index 4f3569fd..849e1dd1 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -8,7 +8,6 @@ * * This class is the blueprint for a weather provider. */ - WeatherProvider.register("openweathermap", { // Set the name of the provider. diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index dc617dd0..54ebed16 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -8,7 +8,6 @@ * * This class is a provider for UK Met Office Datapoint. */ - WeatherProvider.register("ukmetoffice", { // Set the name of the provider. diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 1d030d32..568e2f47 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -11,7 +11,6 @@ * Note that this is only for US locations (lat and lon) and does not require an API key * Since it is free, there are some items missing - like sunrise, sunset, humidity, etc. */ - WeatherProvider.register("weathergov", { // Set the name of the provider. diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 8f5568b4..0a1b941e 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("weather",{ // Default module config. defaults: { diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 60311424..e0b11695 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -7,11 +7,10 @@ * MIT Licensed. * * This class is the blueprint for a day which includes weather information. + * + * Currently this is focused on the information which is necessary for the current weather. + * As soon as we start implementing the forecast, mode properties will be added. */ - -// Currently this is focused on the information which is necessary for the current weather. -// As soon as we start implementing the forecast, mode properties will be added. - class WeatherObject { constructor(units, tempUnits, windUnits) { diff --git a/modules/default/weather/weatherprovider.js b/modules/default/weather/weatherprovider.js index 1789b95c..8fa73d3b 100644 --- a/modules/default/weather/weatherprovider.js +++ b/modules/default/weather/weatherprovider.js @@ -8,10 +8,6 @@ * * This class is the blueprint for a weather provider. */ - -/** - * Base BluePrint for the WeatherProvider - */ var WeatherProvider = Class.extend({ // Weather Provider Properties providerName: null, diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index e6f54b14..e496771a 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -6,7 +6,6 @@ * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ - Module.register("weatherforecast",{ // Default module config. From b1fb177e4b5e492af7f415479cb3d558271030ae Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 21 Apr 2020 12:38:29 +0200 Subject: [PATCH 136/219] Undo "fix" in main.js that broke the tests --- js/main.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/js/main.js b/js/main.js index 41976568..ea138512 100644 --- a/js/main.js +++ b/js/main.js @@ -343,14 +343,16 @@ var MM = (function() { * Loads the core config and combines it with de system defaults. */ var loadConfig = function() { - let config = window.config; + // FIXME: Think about how to pass config around without breaking tests + /* eslint-disable */ if (typeof config === "undefined") { - window.config = defaults; + config = defaults; Log.error("Config file is missing! Please create a config file."); return; } - window.config = Object.assign({}, defaults, config); + config = Object.assign({}, defaults, config); + /* eslint-enable */ }; /* setSelectionMethodsForModules() From be6f1f9c4a91915c927f157ad1d4455f5c22ec18 Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 21 Apr 2020 14:41:34 +0200 Subject: [PATCH 137/219] Move eslint to dependencies, update some devdependcies --- package-lock.json | 477 ++++++++++++++++------------------------------ package.json | 10 +- 2 files changed, 170 insertions(+), 317 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91c72c98..7543b030 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, "requires": { "@babel/highlight": "^7.8.3" } @@ -197,7 +196,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -208,7 +206,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -217,7 +214,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -228,7 +224,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -397,8 +392,7 @@ "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "@types/minimist": { "version": "1.2.0", @@ -442,8 +436,7 @@ "acorn": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" }, "acorn-globals": { "version": "4.3.4", @@ -466,8 +459,7 @@ "acorn-jsx": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" }, "acorn-walk": { "version": "6.2.0", @@ -510,7 +502,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, "requires": { "type-fest": "^0.11.0" }, @@ -518,8 +509,7 @@ "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" } } }, @@ -541,14 +531,6 @@ "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } } }, "apache-crypt": { @@ -570,7 +552,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" }, @@ -578,8 +559,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" } } }, @@ -638,8 +618,7 @@ "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { "version": "1.5.2", @@ -762,8 +741,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-arraybuffer": { "version": "0.1.5", @@ -874,7 +852,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -902,13 +879,13 @@ "dev": true }, "browserslist": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", - "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001038", - "electron-to-chromium": "^1.3.390", + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", "node-releases": "^1.1.53", "pkg-up": "^2.0.0" } @@ -980,8 +957,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "2.1.1", @@ -1003,9 +979,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001043", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001043.tgz", - "integrity": "sha512-MrBDRPJPDBYwACtSQvxg9+fkna5jPXhJlKmuxenl/ml9uf8LHKlDmLpElu+zTW/bEz7lC1m0wTDD7jiIB+hgFg==", + "version": "1.0.30001045", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001045.tgz", + "integrity": "sha512-Y8o2Iz1KPcD6FjySbk1sPpvJqchgxk/iow0DABpGyzA1UeQAuxh63Xh0Enj5/BrsYbXtCN32JmR4ZxQTCQ6E6A==", "dev": true }, "caseless": { @@ -1081,8 +1057,7 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "check-error": { "version": "1.0.2", @@ -1104,14 +1079,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.2.0" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } } }, "clarinet": { @@ -1123,7 +1090,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -1131,8 +1097,7 @@ "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "cliui": { "version": "4.1.0", @@ -1202,7 +1167,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -1210,8 +1174,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.4.0", @@ -1250,8 +1213,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -1417,7 +1379,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -1655,8 +1616,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "define-properties": { "version": "1.1.3", @@ -1728,7 +1688,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -1872,16 +1831,15 @@ } }, "electron-to-chromium": { - "version": "1.3.413", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", - "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==", + "version": "1.3.414", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.414.tgz", + "integrity": "sha512-UfxhIvED++qLwWrAq9uYVcqF8FdeV9sU2S7qhiHYFODxzXRrd1GZRl/PjITHsTEejgibcWDraD8TQqoHb1aCBQ==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -1993,9 +1951,9 @@ } }, "es-abstract": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.3.tgz", - "integrity": "sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -2080,7 +2038,6 @@ "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -2124,14 +2081,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -2140,7 +2095,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2151,7 +2105,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -2159,14 +2112,12 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -2174,14 +2125,12 @@ "strip-json-comments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -2192,7 +2141,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -2202,7 +2150,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -2210,14 +2157,12 @@ "eslint-visitor-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", @@ -2227,14 +2172,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", - "dev": true, "requires": { "estraverse": "^5.0.0" }, @@ -2242,8 +2185,7 @@ "estraverse": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", - "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==", - "dev": true + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" } } }, @@ -2251,7 +2193,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, "requires": { "estraverse": "^4.1.0" } @@ -2259,14 +2200,12 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -2407,7 +2346,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -2418,7 +2356,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -2483,8 +2420,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fastq": { "version": "1.7.0", @@ -2522,7 +2458,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -2531,7 +2466,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, "requires": { "flat-cache": "^2.0.1" } @@ -2596,7 +2530,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -2606,8 +2539,7 @@ "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "dev": true + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" }, "forever-agent": { "version": "0.6.1", @@ -2664,8 +2596,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.1.2", @@ -2683,8 +2614,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gaze": { "version": "1.1.3", @@ -2746,11 +2676,24 @@ "homedir-polyfill": "^1.0.0" } }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -2779,7 +2722,6 @@ "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, "requires": { "type-fest": "^0.8.1" } @@ -2931,8 +2873,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.1", @@ -3193,14 +3134,12 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3215,8 +3154,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "2.1.0", @@ -3241,7 +3179,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3261,7 +3198,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", @@ -3281,14 +3217,12 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" @@ -3298,7 +3232,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3308,7 +3241,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -3316,26 +3248,22 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "run-async": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -3344,7 +3272,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3355,7 +3282,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -3364,7 +3290,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -3461,8 +3386,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", @@ -3484,7 +3408,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -3510,8 +3433,7 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.5", @@ -3573,8 +3495,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isstream": { "version": "0.1.2", @@ -3584,14 +3505,12 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3720,8 +3639,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -3911,7 +3829,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -4360,8 +4277,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "min-indent": { "version": "1.0.0", @@ -4373,7 +4289,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4410,9 +4325,9 @@ } }, "mocha": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz", - "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", + "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -4426,9 +4341,9 @@ "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", + "mkdirp": "0.5.3", "ms": "2.1.1", "node-environment-flags": "1.0.6", "object.assign": "4.1.0", @@ -4436,8 +4351,8 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.3.0", - "yargs-parser": "13.1.1", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", "yargs-unparser": "1.6.0" }, "dependencies": { @@ -4462,28 +4377,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -4516,20 +4409,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4552,28 +4431,13 @@ "path-exists": "^3.0.0" } }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -4583,9 +4447,9 @@ "dev": true }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -4665,9 +4529,9 @@ "dev": true }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", @@ -4679,13 +4543,13 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -4695,9 +4559,9 @@ } }, "mocha-each": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mocha-each/-/mocha-each-1.2.0.tgz", - "integrity": "sha512-WVNx7Rovf7ebZq5XSlhXqenuyN3xS1InqKYvdR544/mQkMoSfTLhT5iehXyK0xCvxx90QIltU6KojKh3Ptz7mA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mocha-each/-/mocha-each-2.0.1.tgz", + "integrity": "sha512-0ZgWY5ajbnROXkfyaDb+0RAYzDBH3QVow/1zJiyl7lYMRnj1Nid8RDP2+/2TTajB5n4vr21v35MjB72GjFFj2g==", "dev": true, "requires": { "sprintf-js": "^1.0.3" @@ -4828,14 +4692,12 @@ "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "nconf": { "version": "0.10.0", @@ -4909,8 +4771,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "nocache": { "version": "2.1.0", @@ -4956,6 +4817,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -5097,7 +4964,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -5106,7 +4972,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -5133,7 +4998,6 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -5167,8 +5031,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-defer": { "version": "1.0.0", @@ -5216,7 +5079,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -5327,14 +5189,12 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -5373,9 +5233,9 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, "pify": { @@ -5617,8 +5477,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "pretty-bytes": { "version": "1.0.4", @@ -5637,8 +5496,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "progress-stream": { "version": "1.2.0", @@ -5822,8 +5680,7 @@ "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "remark": { "version": "12.0.0", @@ -6000,8 +5857,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve-url": { "version": "0.2.1", @@ -6013,7 +5869,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -6041,7 +5896,6 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "requires": { "glob": "^7.1.3" }, @@ -6050,7 +5904,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6110,7 +5963,6 @@ "version": "6.5.5", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, "requires": { "tslib": "^1.9.0" } @@ -6209,7 +6061,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -6217,8 +6068,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", @@ -6261,7 +6111,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -6272,7 +6121,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -6280,8 +6128,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" } } }, @@ -6917,24 +6764,46 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -6997,9 +6866,9 @@ "dev": true }, "stylelint": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.2.tgz", - "integrity": "sha512-kpO3/Gz2ZY40EWUwFYYkgpzhf8ZDUyKpcui5+pS0XKJBj/EMYmZpOJoL8IFAz2yApYeg91NVy5yAjE39hDzWvQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.3.tgz", + "integrity": "sha512-j8Oio2T1YNiJc6iXDaPYd74Jg4zOa1bByNm/g9/Nvnq4tDPsIjMi46jhRZyPPktGPwjJ5FwcmCqIRlH6PVP8mA==", "dev": true, "requires": { "@stylelint/postcss-css-in-js": "^0.37.1", @@ -7441,7 +7310,6 @@ "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -7452,26 +7320,22 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -7482,7 +7346,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -7492,8 +7355,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "throttleit": { "version": "0.0.2", @@ -7503,8 +7365,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "0.2.3", @@ -7519,7 +7380,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -7625,7 +7485,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -7639,8 +7498,7 @@ "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "type-is": { "version": "1.6.18", @@ -7844,8 +7702,7 @@ "v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" }, "valid-url": { "version": "1.0.9", @@ -7985,7 +7842,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -8023,8 +7879,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "0.0.3", @@ -8045,14 +7900,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, "requires": { "mkdirp": "^0.5.1" } @@ -8303,9 +8156,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -8376,9 +8229,9 @@ "dev": true }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", @@ -8390,13 +8243,13 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 966af8a6..3561c0f6 100644 --- a/package.json +++ b/package.json @@ -44,20 +44,19 @@ "homepage": "https://magicmirror.builders", "devDependencies": { "@prantlf/jsonlint": "^10.2.0", - "chai": "^4.1.2", + "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "current-week-number": "^1.0.7", "danger": "^3.1.3", - "eslint": "^6.8.0", "http-auth": "^3.2.3", "jsdom": "^11.6.2", "markdownlint": "^0.20.1", "markdownlint-cli": "^0.22.0", - "mocha": "^7.0.0", - "mocha-each": "^1.1.0", + "mocha": "^7.1.1", + "mocha-each": "^2.0.1", "mocha-logger": "^1.0.6", "spectron": "^8.0.0", - "stylelint": "^13.3.2", + "stylelint": "^13.3.3", "stylelint-config-standard": "^20.0.0", "yaml-lint": "^1.2.4" }, @@ -67,6 +66,7 @@ "dependencies": { "colors": "^1.1.2", "console-stamp": "^0.2.9", + "eslint": "^6.8.0", "express": "^4.16.2", "express-ipfilter": "^1.0.1", "feedme": "latest", From e510d279a287d288f85adc1a9ec70b9449913397 Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 21 Apr 2020 14:58:17 +0200 Subject: [PATCH 138/219] Cleanup some more header comments --- modules/default/updatenotification/updatenotification.js | 8 ++++++++ modules/default/weather/providers/darksky.js | 2 +- modules/default/weather/weatherobject.js | 2 -- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index 35a018bf..c0757b5a 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -1,3 +1,11 @@ +/* global Module */ + +/* Magic Mirror + * Module: UpdateNotification + * + * By Michael Teeuw http://michaelteeuw.nl + * MIT Licensed. + */ Module.register("updatenotification", { defaults: { diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index ea529954..9dbe49b4 100755 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherDay */ +/* global WeatherProvider */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index e0b11695..ec7ab506 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -1,5 +1,3 @@ -/* global Class */ - /* Magic Mirror * Module: Weather * From 0c60d54c3f5d02eed8ddc30df87f4199a97a26b1 Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 21 Apr 2020 15:13:06 +0200 Subject: [PATCH 139/219] Add eqeqeq rule to not confuse == with === --- .eslintrc.json | 1 + modules/default/calendar/calendarfetcher.js | 10 +++++----- .../default/updatenotification/updatenotification.js | 12 ++++++------ modules/default/weatherforecast/weatherforecast.js | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 65b99e6e..c49c0cd6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,6 +14,7 @@ } }, "rules": { + "eqeqeq": "error", "no-prototype-builtins": "off", "no-undef": "off", "no-unused-vars": "off" diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 1e629a28..95263182 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -199,7 +199,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri // because the logic below will filter out any recurrences that don"t actually belong within // our display range. // Would be great if there was a better way to handle this. - if (event.recurrences != undefined) + if (event.recurrences !== undefined) { var pastMoment = moment(past); var futureMoment = moment(future); @@ -208,7 +208,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri { // Only add dates that weren't already in the range we added from the rrule so that // we don"t double-add those events. - if (moment(new Date(r)).isBetween(pastMoment, futureMoment) != true) + if (moment(new Date(r)).isBetween(pastMoment, futureMoment) !== true) { dates.push(new Date(r)); } @@ -234,7 +234,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri startDate = moment(date); // For each date that we"re checking, it"s possible that there is a recurrence override for that one day. - if ((curEvent.recurrences != undefined) && (curEvent.recurrences[dateKey] != undefined)) + if ((curEvent.recurrences !== undefined) && (curEvent.recurrences[dateKey] !== undefined)) { // We found an override, so for this recurrence, use a potentially different title, start date, and duration. curEvent = curEvent.recurrences[dateKey]; @@ -242,14 +242,14 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri duration = parseInt(moment(curEvent.end).format("x")) - parseInt(startDate.format("x")); } // If there"s no recurrence override, check for an exception date. Exception dates represent exceptions to the rule. - else if ((curEvent.exdate != undefined) && (curEvent.exdate[dateKey] != undefined)) + else if ((curEvent.exdate !== undefined) && (curEvent.exdate[dateKey] !== undefined)) { // This date is an exception date, which means we should skip it in the recurrence pattern. showRecurrence = false; } endDate = moment(parseInt(startDate.format("x")) + duration, "x"); - if (startDate.format("x") == endDate.format("x")) { + if (startDate.format("x") === endDate.format("x")) { endDate = endDate.endOf("day"); } diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index c0757b5a..28c5f4e4 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -41,16 +41,16 @@ Module.register("updatenotification", { var self = this; if (payload && payload.behind > 0) { // if we haven't seen info for this module - if(this.moduleList[payload.module] == undefined){ + if(this.moduleList[payload.module] === undefined){ // save it this.moduleList[payload.module]=payload; self.updateDom(2); } //self.show(1000, { lockString: self.identifier }); - } else if (payload && payload.behind == 0){ + } else if (payload && payload.behind === 0){ // if the module WAS in the list, but shouldn't be - if(this.moduleList[payload.module] != undefined){ + if(this.moduleList[payload.module] !== undefined){ // remove it delete this.moduleList[payload.module]; self.updateDom(2); @@ -72,7 +72,7 @@ Module.register("updatenotification", { // Override dom generator. getDom: function () { var wrapper = document.createElement("div"); - if(this.suspended==false){ + if(this.suspended === false){ // process the hash of module info found for(key of Object.keys(this.moduleList)){ let m= this.moduleList[key]; @@ -85,7 +85,7 @@ Module.register("updatenotification", { icon.innerHTML = " "; message.appendChild(icon); - var updateInfoKeyName = m.behind == 1 ? "UPDATE_INFO_SINGLE" : "UPDATE_INFO_MULTIPLE"; + var updateInfoKeyName = m.behind === 1 ? "UPDATE_INFO_SINGLE" : "UPDATE_INFO_MULTIPLE"; var subtextHtml = this.translate(updateInfoKeyName, { COMMIT_COUNT: m.behind, @@ -93,7 +93,7 @@ Module.register("updatenotification", { }); var text = document.createElement("span"); - if (m.module == "default") { + if (m.module === "default") { text.innerHTML = this.translate("UPDATE_NOTIFICATION"); subtextHtml = this.diffLink(m,subtextHtml); } else { diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index e496771a..4265de02 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -456,7 +456,7 @@ Module.register("weatherforecast",{ }); //If no rain this day return undefined so it wont be displayed for this day - if (daysForecasts.length == 0) { + if (daysForecasts.length === 0) { return undefined; } From 14aa4036e03c5a83a5a9c7ad14836b6534836b24 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 22 Apr 2020 22:07:03 +0200 Subject: [PATCH 140/219] Some spelling and doc fixes --- js/socket.js | 2 -- modules/default/weather/README.md | 2 +- modules/default/weather/providers/README.md | 4 ++-- modules/default/weatherforecast/weatherforecast.js | 4 ++-- tests/configs/modules/calendar/old-basic-auth.js | 2 +- tests/configs/modules/clock/es/clock_showWeek.js | 5 +---- tests/configs/modules/helloworld/helloworld_default.js | 4 +--- 7 files changed, 8 insertions(+), 15 deletions(-) diff --git a/js/socket.js b/js/socket.js index c62c24da..6729385a 100644 --- a/js/socket.js +++ b/js/socket.js @@ -1,5 +1,3 @@ -/* exported Log */ - /* Magic Mirror * Socket Connection * diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index ebc301f4..93f1595d 100755 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -1,5 +1,5 @@ # Weather Module -This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. +This module aims to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/weather.html). diff --git a/modules/default/weather/providers/README.md b/modules/default/weather/providers/README.md index dad9ed49..a1bb24df 100755 --- a/modules/default/weather/providers/README.md +++ b/modules/default/weather/providers/README.md @@ -13,7 +13,7 @@ Table of Contents: ## The weather provider file: yourprovider.js -This is the script in which the weather provider will be defined. In it's most simple form, the weather provider must implement the following: +This is the script in which the weather provider will be defined. In its most simple form, the weather provider must implement the following: ````javascript WeatherProvider.register("yourprovider", { @@ -36,7 +36,7 @@ It will then automatically refresh the module DOM with the new data. #### `fetchWeatherForecast()` -This method is called when the weather module tries to fetch the weather weather of your provider. The implementation of this method is required. +This method is called when the weather module tries to fetch the weather of your provider. The implementation of this method is required. The implementation can make use of the already implemented function `this.fetchData(url, method, data);`, which is returning a promise. After the response is processed, the weather forecast information (as an array of [WeatherObject](#weatherobject)s) needs to be set with `this.setCurrentWeather(forecast);`. It will then automatically refresh the module DOM with the new data. diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 4265de02..37e01df6 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -61,7 +61,7 @@ Module.register("weatherforecast",{ }, }, - // create a variable for the first upcoming calendaar event. Used if no location is specified. + // create a variable for the first upcoming calendar event. Used if no location is specified. firstEvent: false, // create a variable to hold the location name based on the API result. @@ -309,7 +309,7 @@ Module.register("weatherforecast",{ * parserDataWeather(data) * * Use the parse to keep the same struct between daily and forecast Endpoint - * from Openweather + * from openweather.org * */ parserDataWeather: function(data) { diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 76e2df3a..971a2d2a 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -1,5 +1,5 @@ /* Magic Mirror Test config default calendar - * with authenticacion old config + * with authentication old config * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index 29550f04..120ef4ef 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -1,7 +1,4 @@ - -/* Magic Mirror - * - * Test config for default clock module +/* Magic Mirror Test config for default clock module * Language es for showWeek feature * * By Rodrigo Ramírez Norambuena diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 710000f0..8207175f 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -1,6 +1,4 @@ -/* Magic Mirror - * - * Test config sample module hello world default config +/* Magic Mirror Test config sample module hello world default config * * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. From ebfbf0e1f87ea425c8afbdf115d25e37fbac39c6 Mon Sep 17 00:00:00 2001 From: andrezibaia Date: Thu, 23 Apr 2020 04:41:05 +0200 Subject: [PATCH 141/219] Literal translation (not used in Portuguese) --- translations/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/pt.json b/translations/pt.json index 2199f024..be73a964 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -2,7 +2,7 @@ "LOADING": "A carregar …", "TODAY": "Hoje", "TOMORROW": "Amanhã", - "DAYAFTERTOMORROW": "O dia depois de amanhã", + "DAYAFTERTOMORROW": "Depois de amanhã", "RUNNING": "Termina em", "EMPTY": "Sem eventos programados.", From e7fc4ef1e72618b2d9c9db232649e33a125d4fe5 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 28 Apr 2020 23:05:28 +0200 Subject: [PATCH 142/219] Replace unsecure links with https ones --- .github/CONTRIBUTING.md | 4 +- CHANGELOG.md | 4 +- README.md | 6 +-- config/config.js.sample | 4 +- js/app.js | 2 +- js/class.js | 2 +- js/defaults.js | 2 +- js/deprecated.js | 2 +- js/loader.js | 2 +- js/logger.js | 2 +- js/main.js | 2 +- js/module.js | 2 +- js/node_helper.js | 2 +- js/server.js | 2 +- js/socket.js | 2 +- js/translator.js | 2 +- modules/default/alert/alert.js | 2 +- modules/default/alert/notificationFx.css | 2 +- modules/default/alert/notificationFx.js | 6 +-- modules/default/calendar/calendar.js | 6 +-- modules/default/calendar/calendarfetcher.js | 2 +- modules/default/calendar/debug.js | 2 +- modules/default/calendar/node_helper.js | 2 +- modules/default/clock/clock.js | 2 +- modules/default/clock/faces/face-001.svg | 2 +- modules/default/clock/faces/face-002.svg | 2 +- modules/default/clock/faces/face-003.svg | 2 +- modules/default/clock/faces/face-004.svg | 2 +- modules/default/clock/faces/face-005.svg | 2 +- modules/default/clock/faces/face-006.svg | 2 +- modules/default/clock/faces/face-007.svg | 2 +- modules/default/clock/faces/face-008.svg | 2 +- modules/default/clock/faces/face-009.svg | 2 +- modules/default/clock/faces/face-010.svg | 2 +- modules/default/clock/faces/face-011.svg | 2 +- modules/default/clock/faces/face-012.svg | 2 +- modules/default/compliments/compliments.js | 2 +- .../default/currentweather/currentweather.js | 4 +- modules/default/defaultmodules.js | 2 +- modules/default/helloworld/helloworld.js | 2 +- modules/default/newsfeed/fetcher.js | 2 +- modules/default/newsfeed/newsfeed.js | 4 +- modules/default/newsfeed/node_helper.js | 2 +- .../updatenotification/updatenotification.js | 2 +- .../weather/providers/openweathermap.js | 2 +- modules/default/weather/weather.js | 4 +- modules/default/weather/weatherobject.js | 2 +- modules/default/weather/weatherprovider.js | 2 +- .../weatherforecast/weatherforecast.js | 4 +- .../configs/data/feed_test_rodrigoramirez.xml | 38 +++++++++---------- translations/translations.js | 2 +- vendor/vendor.js | 2 +- 52 files changed, 83 insertions(+), 83 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 25445886..ecd4b427 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,7 +9,7 @@ If you wish to run both linters, use `grunt` without any arguments. ### JavaScript: Run ESLint -We use [ESLint](http://eslint.org) on our JavaScript files. +We use [ESLint](https://eslint.org) on our JavaScript files. Our ESLint configuration is in our .eslintrc.json and .eslintignore files. @@ -17,7 +17,7 @@ To run ESLint, use `grunt eslint`. ### CSS: Run StyleLint -We use [StyleLint](http://stylelint.io) to lint our CSS. Our configuration is in our .stylelintrc file. +We use [StyleLint](https://stylelint.io) to lint our CSS. Our configuration is in our .stylelintrc file. To run StyleLint, use `grunt stylelint`. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ae6ef2e..f374887c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # MagicMirror² Change Log All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). +This project adheres to [Semantic Versioning](https://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² @@ -721,4 +721,4 @@ It includes (but is not limited to) the following features: ## [1.0.0] - 2014-02-16 ### Initial release of MagicMirror. -This was part of the blogpost: [http://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the](http://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the) +This was part of the blogpost: [https://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the](https://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the) diff --git a/README.md b/README.md index 01f78886..942f98bf 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ Dependency Status devDependency Status - License + License Travis Known Vulnerabilities

-**MagicMirror²** is an open source modular smart mirror platform. With a growing list of installable modules, the **MagicMirror²** allows you to convert your hallway or bathroom mirror into your personal assistant. **MagicMirror²** is built by the creator of [the original MagicMirror](http://michaelteeuw.nl/tagged/magicmirror) with the incredible help of a [growing community of contributors](https://github.com/MichMich/MagicMirror/graphs/contributors). +**MagicMirror²** is an open source modular smart mirror platform. With a growing list of installable modules, the **MagicMirror²** allows you to convert your hallway or bathroom mirror into your personal assistant. **MagicMirror²** is built by the creator of [the original MagicMirror](https://michaelteeuw.nl/tagged/magicmirror) with the incredible help of a [growing community of contributors](https://github.com/MichMich/MagicMirror/graphs/contributors). -MagicMirror² focuses on a modular plugin system and uses [Electron](http://electron.atom.io/) as an application wrapper. So no more web server or browser installs necessary! +MagicMirror² focuses on a modular plugin system and uses [Electron](https://www.electronjs.org/) as an application wrapper. So no more web server or browser installs necessary! ## Documentation For the full documentation including **[installation instructions](https://docs.magicmirror.builders/getting-started/installation.html)**, please visit our dedicated documentation website: [https://docs.magicmirror.builders](https://docs.magicmirror.builders). diff --git a/config/config.js.sample b/config/config.js.sample index 6c2cd437..40737039 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -1,6 +1,6 @@ /* Magic Mirror Config Sample * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. * * For more information on how you can configure this file @@ -90,7 +90,7 @@ var config = { feeds: [ { title: "New York Times", - url: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml" + url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml" } ], showSourceTitle: true, diff --git a/js/app.js b/js/app.js index 50223ecd..852e0d13 100644 --- a/js/app.js +++ b/js/app.js @@ -1,7 +1,7 @@ /* Magic Mirror * The Core App (Server) * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ var fs = require("fs"); diff --git a/js/class.js b/js/class.js index d2a1654f..053207aa 100644 --- a/js/class.js +++ b/js/class.js @@ -1,5 +1,5 @@ /* Simple JavaScript Inheritance - * By John Resig http://ejohn.org/ + * By John Resig https://johnresig.com/ * MIT Licensed. */ diff --git a/js/defaults.js b/js/defaults.js index 6e1d78ce..6ab78198 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -3,7 +3,7 @@ /* Magic Mirror * Config Defaults * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/deprecated.js b/js/deprecated.js index 96f081cd..1f832e81 100644 --- a/js/deprecated.js +++ b/js/deprecated.js @@ -1,6 +1,6 @@ /* Magic Mirror Deprecated Config Options List * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. * * Olex S. original idea this deprecated option diff --git a/js/loader.js b/js/loader.js index e29ad3a0..32368d77 100644 --- a/js/loader.js +++ b/js/loader.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module and File loaders. * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ var Loader = (function() { diff --git a/js/logger.js b/js/logger.js index 2e023493..876826e8 100644 --- a/js/logger.js +++ b/js/logger.js @@ -3,7 +3,7 @@ /* Magic Mirror * Logger * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/main.js b/js/main.js index ea138512..e914e2f4 100644 --- a/js/main.js +++ b/js/main.js @@ -3,7 +3,7 @@ /* Magic Mirror * Main System * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ var MM = (function() { diff --git a/js/module.js b/js/module.js index 9336c9e9..c9d9d7f8 100644 --- a/js/module.js +++ b/js/module.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module Blueprint. * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/node_helper.js b/js/node_helper.js index 326a8cce..824de6e2 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -1,7 +1,7 @@ /* Magic Mirror * Node Helper Superclass * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/server.js b/js/server.js index 36bf9770..44ef44f0 100644 --- a/js/server.js +++ b/js/server.js @@ -1,7 +1,7 @@ /* Magic Mirror * Server * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/socket.js b/js/socket.js index 6729385a..bbd09586 100644 --- a/js/socket.js +++ b/js/socket.js @@ -1,7 +1,7 @@ /* Magic Mirror * Socket Connection * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/js/translator.js b/js/translator.js index 5839cd53..36034b47 100644 --- a/js/translator.js +++ b/js/translator.js @@ -3,7 +3,7 @@ /* Magic Mirror * Translator (l10n) * - * By Christopher Fenner http://github.com/CFenner + * By Christopher Fenner https://github.com/CFenner * MIT Licensed. */ var Translator = (function() { diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index 7fce85cd..f2d4f852 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: alert * - * By Paul-Vincent Roll http://paulvincentroll.com + * By Paul-Vincent Roll https://paulvincentroll.com/ * MIT Licensed. */ Module.register("alert",{ diff --git a/modules/default/alert/notificationFx.css b/modules/default/alert/notificationFx.css index 9ab1ed49..96491233 100644 --- a/modules/default/alert/notificationFx.css +++ b/modules/default/alert/notificationFx.css @@ -1,4 +1,4 @@ -/* Based on work by http://tympanus.net/codrops/licensing/ */ +/* Based on work by https://tympanus.net/codrops/licensing/ */ .ns-box { background-color: rgba(0, 0, 0, 0.93); diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 47e3a4a1..9d548949 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -2,13 +2,13 @@ * Based on work by * * notificationFx.js v1.0.0 - * http://www.codrops.com + * https://tympanus.net/codrops/ * * Licensed under the MIT license. - * http://www.opensource.org/licenses/mit-license.php + * https://opensource.org/licenses/mit-license.php * * Copyright 2014, Codrops - * http://www.codrops.com + * https://tympanus.net/codrops/ */ (function(window) { diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 1d30a78a..a245e543 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Calendar * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("calendar", { @@ -13,7 +13,7 @@ Module.register("calendar", { maximumEntries: 10, // Total Maximum Entries maximumNumberOfDays: 365, displaySymbol: true, - defaultSymbol: "calendar", // Fontawesome Symbol see http://fontawesome.io/cheatsheet/ + defaultSymbol: "calendar", // Fontawesome Symbol see https://fontawesome.com/cheatsheet?from=io showLocation: false, displayRepeatingCountTitle: false, defaultRepeatingCountTitle: "", @@ -39,7 +39,7 @@ Module.register("calendar", { calendars: [ { symbol: "calendar", - url: "http://www.calendarlabs.com/templates/ical/US-Holidays.ics", + url: "https://www.calendarlabs.com/templates/ical/US-Holidays.ics", }, ], titleReplace: { diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 95263182..9b6fc04e 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -1,7 +1,7 @@ /* Magic Mirror * Node Helper: Calendar - CalendarFetcher * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index 84fc2f86..ac7c9a8f 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -2,7 +2,7 @@ * use this script with `node debug.js` to test the fetcher without the need * of starting the MagicMirror core. Adjust the values below to your desire. * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 00cb9499..2d923cf3 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -1,7 +1,7 @@ /* Magic Mirror * Node Helper: Calendar * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index faed4950..8ef842c2 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Clock * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("clock",{ diff --git a/modules/default/clock/faces/face-001.svg b/modules/default/clock/faces/face-001.svg index 6d1c17f3..13436c76 100644 --- a/modules/default/clock/faces/face-001.svg +++ b/modules/default/clock/faces/face-001.svg @@ -1 +1 @@ -face-001 \ No newline at end of file +face-001 diff --git a/modules/default/clock/faces/face-002.svg b/modules/default/clock/faces/face-002.svg index a56210c0..a3ee3682 100644 --- a/modules/default/clock/faces/face-002.svg +++ b/modules/default/clock/faces/face-002.svg @@ -1 +1 @@ -face-002 \ No newline at end of file +face-002 diff --git a/modules/default/clock/faces/face-003.svg b/modules/default/clock/faces/face-003.svg index 38191df6..d3fc32de 100644 --- a/modules/default/clock/faces/face-003.svg +++ b/modules/default/clock/faces/face-003.svg @@ -1 +1 @@ -face-003 \ No newline at end of file +face-003 diff --git a/modules/default/clock/faces/face-004.svg b/modules/default/clock/faces/face-004.svg index f69781aa..140955d7 100644 --- a/modules/default/clock/faces/face-004.svg +++ b/modules/default/clock/faces/face-004.svg @@ -1 +1 @@ -face-004 \ No newline at end of file +face-004 diff --git a/modules/default/clock/faces/face-005.svg b/modules/default/clock/faces/face-005.svg index 577c4f53..fb52a435 100644 --- a/modules/default/clock/faces/face-005.svg +++ b/modules/default/clock/faces/face-005.svg @@ -1 +1 @@ -faces \ No newline at end of file +faces diff --git a/modules/default/clock/faces/face-006.svg b/modules/default/clock/faces/face-006.svg index 665e9ccd..a9eff826 100644 --- a/modules/default/clock/faces/face-006.svg +++ b/modules/default/clock/faces/face-006.svg @@ -1 +1 @@ -face-006 \ No newline at end of file +face-006 diff --git a/modules/default/clock/faces/face-007.svg b/modules/default/clock/faces/face-007.svg index 2dc41971..b0dde834 100644 --- a/modules/default/clock/faces/face-007.svg +++ b/modules/default/clock/faces/face-007.svg @@ -1 +1 @@ -face-007 \ No newline at end of file +face-007 diff --git a/modules/default/clock/faces/face-008.svg b/modules/default/clock/faces/face-008.svg index b5ea16ed..551ea7df 100644 --- a/modules/default/clock/faces/face-008.svg +++ b/modules/default/clock/faces/face-008.svg @@ -1 +1 @@ -face-008 \ No newline at end of file +face-008 diff --git a/modules/default/clock/faces/face-009.svg b/modules/default/clock/faces/face-009.svg index a498d853..cd3720f2 100644 --- a/modules/default/clock/faces/face-009.svg +++ b/modules/default/clock/faces/face-009.svg @@ -1 +1 @@ -face-009 \ No newline at end of file +face-009 diff --git a/modules/default/clock/faces/face-010.svg b/modules/default/clock/faces/face-010.svg index 23679598..d0af3acb 100644 --- a/modules/default/clock/faces/face-010.svg +++ b/modules/default/clock/faces/face-010.svg @@ -1 +1 @@ -face-010 \ No newline at end of file +face-010 diff --git a/modules/default/clock/faces/face-011.svg b/modules/default/clock/faces/face-011.svg index 493c75c2..2d5f27ba 100644 --- a/modules/default/clock/faces/face-011.svg +++ b/modules/default/clock/faces/face-011.svg @@ -1 +1 @@ -face-011 \ No newline at end of file +face-011 diff --git a/modules/default/clock/faces/face-012.svg b/modules/default/clock/faces/face-012.svg index a1a0fdd8..8096d492 100644 --- a/modules/default/clock/faces/face-012.svg +++ b/modules/default/clock/faces/face-012.svg @@ -1 +1 @@ -face-012 \ No newline at end of file +face-012 diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index bf7bca9f..2a3ee919 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Compliments * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("compliments", { diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index bc04ebcd..b49b8e8b 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: CurrentWeather * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("currentweather",{ @@ -514,7 +514,7 @@ Module.register("currentweather",{ * Converts m2 to beaufort (windspeed). * * see: - * http://www.spc.noaa.gov/faq/tornado/beaufort.html + * https://www.spc.noaa.gov/faq/tornado/beaufort.html * https://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale * * argument ms number - Windspeed in m/s. diff --git a/modules/default/defaultmodules.js b/modules/default/defaultmodules.js index 656ba6b8..d792ae09 100644 --- a/modules/default/defaultmodules.js +++ b/modules/default/defaultmodules.js @@ -1,7 +1,7 @@ /* Magic Mirror * Default Modules List * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/helloworld/helloworld.js b/modules/default/helloworld/helloworld.js index 63640f70..3d1c17e7 100644 --- a/modules/default/helloworld/helloworld.js +++ b/modules/default/helloworld/helloworld.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: HelloWorld * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("helloworld",{ diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index 4e3bcca7..997ddc9a 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -1,7 +1,7 @@ /* Magic Mirror * Fetcher * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index ca219c7f..5afe9ed8 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: NewsFeed * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("newsfeed",{ @@ -13,7 +13,7 @@ Module.register("newsfeed",{ feeds: [ { title: "New York Times", - url: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml", + url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml", encoding: "UTF-8" //ISO-8859-1 } ], diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 79c4d2fa..ef547bd2 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -1,7 +1,7 @@ /* Magic Mirror * Node Helper: Newsfeed * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index 28c5f4e4..1015fc8f 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: UpdateNotification * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("updatenotification", { diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index 849e1dd1..1a134f47 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Weather * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. * * This class is the blueprint for a weather provider. diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 0a1b941e..a28b7ab5 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Weather * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("weather",{ @@ -43,7 +43,7 @@ Module.register("weather",{ retryDelay: 2500, apiVersion: "2.5", - apiBase: "http://api.openweathermap.org/data/", + apiBase: "https://api.openweathermap.org/data/", weatherEndpoint: "/weather", appendLocationNameToHeader: true, diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index ec7ab506..0ecab34d 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -1,7 +1,7 @@ /* Magic Mirror * Module: Weather * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. * * This class is the blueprint for a day which includes weather information. diff --git a/modules/default/weather/weatherprovider.js b/modules/default/weather/weatherprovider.js index 8fa73d3b..bea363f0 100644 --- a/modules/default/weather/weatherprovider.js +++ b/modules/default/weather/weatherprovider.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: Weather * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. * * This class is the blueprint for a weather provider. diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 37e01df6..7624e671 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -3,7 +3,7 @@ /* Magic Mirror * Module: WeatherForecast * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ Module.register("weatherforecast",{ @@ -404,7 +404,7 @@ Module.register("weatherforecast",{ * Converts m2 to beaufort (windspeed). * * see: - * http://www.spc.noaa.gov/faq/tornado/beaufort.html + * https://www.spc.noaa.gov/faq/tornado/beaufort.html * https://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale * * argument ms number - Windspeed in m/s. diff --git a/tests/configs/data/feed_test_rodrigoramirez.xml b/tests/configs/data/feed_test_rodrigoramirez.xml index e4d3730f..dbce18e9 100644 --- a/tests/configs/data/feed_test_rodrigoramirez.xml +++ b/tests/configs/data/feed_test_rodrigoramirez.xml @@ -79,19 +79,19 @@

Starting virtual machine ... VirtualBox

Ninguna, pero ninguna maquina arrancó, se quedaban en ese mensaje. Fue de esos instantes en que sudas helado … 😉

Con un poco de investigación fue a parar al archivo ~/.VirtualBox/VBoxSVC.log que indicaba

-
$ tail -f ~/.VirtualBox/VBoxSVC.log
- 00:08:32.932717 nspr-7 Failed to open "/dev/vboxdrvu", errno=13, rc=VERR_VM_DRIVER_NOT_ACCESSIBLE
+
$ tail -f ~/.VirtualBox/VBoxSVC.log
+ 00:08:32.932717 nspr-7 Failed to open "/dev/vboxdrvu", errno=13, rc=VERR_VM_DRIVER_NOT_ACCESSIBLE
  00:08:33.555836 nspr-6 Failed to open "/dev/vboxdrvu", errno=13, rc=VERR_VM_DRIVER_NOT_ACCESSIBLE

 

Fui… algo de donde agarrarse. Mirando un poco mas se trataba de problemas con los permisos al vboxdrvu, mirando indicaba que tenía 0600.

 

-
$ ls -lh /dev/vboxdrvu 
+
$ ls -lh /dev/vboxdrvu 
  crw------- 1 root root 10, 56 Sep 10 12:47 /dev/vboxdrvu

 

El tema es que deben estar en 0666,  le cambias los permisos y eso soluciona el problema 🙂

-
-$ sudo chmod 0666 /dev/vboxdrvu
-$ ls -lh /dev/vboxdrvu
+
+$ sudo chmod 0666 /dev/vboxdrvu
+$ ls -lh /dev/vboxdrvu
  crw-rw-rw- 1 root root 10, 56 Sep 10 12:47 /dev/vboxdrvu

La entrada Problema VirtualBox “starting virtual machine” … aparece primero en Rodrigo Ramírez Norambuena.

]]> @@ -236,17 +236,17 @@ $ ls -lh /dev/vboxdrvu

El problema para mi es que algunos sistemas de maquinas virtuales no asignan por defecto un espacio para la Swap, lo que te lleva a que el sistema pueda tener crash durante la ejecución.

Para comprobar la asignación de memoria, al ejecutar el comando free nos debería mostrar como algo similar a lo siguiente

 

-
$  free -m
-             total       used       free     shared    buffers     cached
-Mem:           494        488          6          1         54         75
--/+ buffers/cache:        357        136
+
$  free -m
+             total       used       free     shared    buffers     cached
+Mem:           494        488          6          1         54         75
+-/+ buffers/cache:        357        136
 Swap:            0          0          0

En la zona de swap indica que no asignada, valor 0.

Para asignar swap al sistema se debe  un archivo en disco para que sea utilizado como espacio de intercambio, en este caso lo vamos  crear uno  de 3GB en la raíz del sistema

fallocate -l 3G /swapfile

Comprobamos que ha sido creado

-
$ ls -lh /swapfile
--rw-r--r-- 1 root root 3.0G Jul 11 13:10 /swapfile
+
$ ls -lh /swapfile
+-rw-r--r-- 1 root root 3.0G Jul 11 13:10 /swapfile
 

Habilitación del archivo Swap

Ahora nos toca habilitar el archivo creado. Para eso le asignaremos los permisos

@@ -256,10 +256,10 @@ Swap:            0          0          0

Para habilitar y asignarla eso como memoria swap al sistema usamos

swapon /swapfile

Ya con esto podrémos ver en nuestro sistema la memoria asignada para swap

-
$ free -m
-             total       used       free     shared    buffers     cached
-Mem:           494        486          7          1         51         77
--/+ buffers/cache:        358        136
+
$ free -m
+             total       used       free     shared    buffers     cached
+Mem:           494        486          7          1         51         77
+-/+ buffers/cache:        358        136
 Swap:         3071          0       3071

 

Para que al reiniciar el sistema esto se mantenga, debemos agregar la siguiente línea al archivo /etc/fstab

@@ -323,7 +323,7 @@ Swap:         3071          0       3071
Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes. Habían muchas cosas interesantes tanto en las presentaciones, co-working y workshop que se hubieron. Si te […]

La entrada Nerdearla 2016, WebRTC Glue aparece primero en Rodrigo Ramírez Norambuena.

]]>
- Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes.

+ Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes.

Habían muchas cosas interesantes tanto en las presentaciones, co-working y workshop que se hubieron. Si te lo perdiste te recomiendo que estés pendiente para el proximo año.

 

Te podias encontrar con una nuestra como estaKaypro II

@@ -357,7 +357,7 @@ Swap:         3071          0       3071
- http://rodrigoramirez.com/?p=1206 + https://rodrigoramirez.com/?p=1206 El Panel monitor callcenter para colas de Asterisk ya cuenta con una nueva versión, la 0.9.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.9.0 Esta versión versión nos preocupamos de realizar mejoras y refactorizaciones en el codigo para dar un mejor rendimiento, como también de la compatibilidad con la versión 11 de […]

La entrada QPanel 0.9.0 aparece primero en Rodrigo Ramírez Norambuena.

]]>
@@ -394,7 +394,7 @@ Swap:         3071          0       3071
- http://rodrigoramirez.com/?p=1172 + https://rodrigoramirez.com/?p=1172 Dejo esto por acá ya que es algo que siempre me olvido como es. El tema es enviar un email mediante el comando mail en un servidor con Linux. Si usas mail a secas te va pidiendo los datos para crear el correo, principalmente el body del correo. Para automatizar esto a través de un […]

La entrada Mandar un email desde la shell aparece primero en Rodrigo Ramírez Norambuena.

]]>
diff --git a/translations/translations.js b/translations/translations.js index 4cc6420d..88c11d81 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -1,7 +1,7 @@ /* Magic Mirror * Translation Definition * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ diff --git a/vendor/vendor.js b/vendor/vendor.js index 8a04453d..fa2abd6f 100755 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -3,7 +3,7 @@ /* Magic Mirror * Vendor File Definition * - * By Michael Teeuw http://michaelteeuw.nl + * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ From 1eecf4b2c74a8402db01d15464d25a1e72f882c0 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 28 Apr 2020 23:05:47 +0200 Subject: [PATCH 143/219] Fix docs, grunt is removed --- .github/CONTRIBUTING.md | 6 +++--- .gitignore | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ecd4b427..04cc305d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ Thanks for contributing to MagicMirror²! We hold our code to standard, and these standards are documented below. -If you wish to run both linters, use `grunt` without any arguments. +If you wish to run our linters, use `npm run lint` without any arguments. ### JavaScript: Run ESLint @@ -13,13 +13,13 @@ We use [ESLint](https://eslint.org) on our JavaScript files. Our ESLint configuration is in our .eslintrc.json and .eslintignore files. -To run ESLint, use `grunt eslint`. +To run ESLint, use `npm run lint:js`. ### CSS: Run StyleLint We use [StyleLint](https://stylelint.io) to lint our CSS. Our configuration is in our .stylelintrc file. -To run StyleLint, use `grunt stylelint`. +To run StyleLint, use `npm run lint:style`. ### Submitting Issues diff --git a/.gitignore b/.gitignore index 96c1ab5d..c3cf9bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ pids *.seed lib-cov coverage -.grunt .lock-wscript build/Release /node_modules/**/* @@ -78,4 +77,4 @@ Temporary Items *.rej *.bak -!/tests/node_modules/**/* \ No newline at end of file +!/tests/node_modules/**/* From 93deebe923ce367f232c77252c0cc9a48f244c49 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 28 Apr 2020 23:09:29 +0200 Subject: [PATCH 144/219] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f374887c..65b66771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). - Cleaned up alert module code - Cleaned up check_config code - Replaced grunt-based linters with their non-grunt equivalents -- Switch to most of the eslint:recommended rules and fix warnings +- Switch to most of the eslint:recommended rules and fix warnings +- Replaced insecure links with https ones ### Deleted - Removed truetype (ttf) fonts From 63a2d83d26671517cb937b8ad1e92e77cd100f20 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 2 May 2020 10:32:53 +0200 Subject: [PATCH 145/219] Start checking for undef --- .eslintrc.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index c49c0cd6..09a58214 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,6 @@ "rules": { "eqeqeq": "error", "no-prototype-builtins": "off", - "no-undef": "off", "no-unused-vars": "off" } } From d8f093b226c0091aa0003d0cec5f41dcf2d2b3d9 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 2 May 2020 10:33:24 +0200 Subject: [PATCH 146/219] Cleanup some globals --- .eslintrc.json | 5 +++++ js/loader.js | 2 +- js/main.js | 2 +- modules/default/alert/alert.js | 2 +- modules/default/clock/clock.js | 2 +- modules/default/compliments/compliments.js | 2 +- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 09a58214..2633267e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,6 +6,11 @@ "mocha": true, "node": true }, + "globals": { + "config": true, + "Log": true, + "moment": true + }, "parserOptions": { "sourceType": "module", "ecmaVersion": 2017, diff --git a/js/loader.js b/js/loader.js index 32368d77..c46f6db5 100644 --- a/js/loader.js +++ b/js/loader.js @@ -1,4 +1,4 @@ -/* global config, vendor, MM, Log, Module */ +/* global vendor, MM, Module */ /* Magic Mirror * Module and File loaders. diff --git a/js/main.js b/js/main.js index e914e2f4..d3c33663 100644 --- a/js/main.js +++ b/js/main.js @@ -1,4 +1,4 @@ -/* global Log, Loader, Module, config, defaults */ +/* global Loader, Module, defaults */ /* Magic Mirror * Main System diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index f2d4f852..3ec8c8f7 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -1,4 +1,4 @@ -/* global Module */ +/* global Module, NotificationFx */ /* Magic Mirror * Module: alert diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 8ef842c2..caaa003e 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -1,4 +1,4 @@ -/* global Log, Module, moment, config */ +/* global Module */ /* Magic Mirror * Module: Clock diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 2a3ee919..8e6456d6 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -1,4 +1,4 @@ -/* global Log, Module, moment */ +/* global Module */ /* Magic Mirror * Module: Compliments From b9d19cfcb4445f3a3c829dce16709f692fc96aa5 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 2 May 2020 10:39:09 +0200 Subject: [PATCH 147/219] First round of undef fixes --- .eslintrc.json | 1 + js/class.js | 1 + js/defaults.js | 3 +-- js/loader.js | 2 +- js/main.js | 2 +- js/module.js | 9 ++++----- js/node_helper.js | 12 +++++------- js/server.js | 2 +- js/socket.js | 3 ++- js/socketclient.js | 8 ++++++++ modules/default/calendar/calendarfetcher.js | 10 +++++----- modules/default/calendar/debug.js | 4 +--- modules/default/clock/clock.js | 7 ++++--- modules/default/compliments/compliments.js | 4 ++-- modules/default/newsfeed/fetcher.js | 4 ++-- modules/default/newsfeed/newsfeed.js | 17 ++++++++--------- .../default/updatenotification/node_helper.js | 2 +- .../updatenotification/updatenotification.js | 4 ++-- tests/e2e/fonts.js | 1 + tests/e2e/modules_position_spec.js | 2 +- tests/e2e/vendor_spec.js | 5 ++--- tests/servers/basic-auth.js | 3 ++- 22 files changed, 56 insertions(+), 50 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 2633267e..a63980e7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,6 +9,7 @@ "globals": { "config": true, "Log": true, + "MM": true, "moment": true }, "parserOptions": { diff --git a/js/class.js b/js/class.js index 053207aa..835e48f2 100644 --- a/js/class.js +++ b/js/class.js @@ -3,6 +3,7 @@ * MIT Licensed. */ + // Inspired by base2 and Prototype (function () { var initializing = false; diff --git a/js/defaults.js b/js/defaults.js index 6ab78198..d01082ee 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -6,9 +6,8 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ - -var port = 8080; var address = "localhost"; +var port = 8080; if (typeof(mmPort) !== "undefined") { port = mmPort; } diff --git a/js/loader.js b/js/loader.js index c46f6db5..3f618742 100644 --- a/js/loader.js +++ b/js/loader.js @@ -1,4 +1,4 @@ -/* global vendor, MM, Module */ +/* global Module, vendor */ /* Magic Mirror * Module and File loaders. diff --git a/js/main.js b/js/main.js index d3c33663..271a3be7 100644 --- a/js/main.js +++ b/js/main.js @@ -1,4 +1,4 @@ -/* global Loader, Module, defaults */ +/* global Loader, Module, defaults, Translator */ /* Magic Mirror * Main System diff --git a/js/module.js b/js/module.js index c9d9d7f8..8619742b 100644 --- a/js/module.js +++ b/js/module.js @@ -1,4 +1,4 @@ -/* exported Module */ +/* global Class, Loader, MMSocket, nunjucks, Translator */ /* Magic Mirror * Module Blueprint. @@ -6,7 +6,6 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ - var Module = Class.extend({ /********************************************************* @@ -237,7 +236,7 @@ var Module = Class.extend({ */ socket: function () { if (typeof this._socket === "undefined") { - this._socket = this._socket = new MMSocket(this.name); + this._socket = new MMSocket(this.name); } var self = this; @@ -467,8 +466,8 @@ function cmpVersions(a, b) { Module.register = function (name, moduleDefinition) { if (moduleDefinition.requiresVersion) { - Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + version); - if (cmpVersions(version, moduleDefinition.requiresVersion) >= 0) { + Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + global.version); + if (cmpVersions(global.version, moduleDefinition.requiresVersion) >= 0) { Log.log("Version is ok!"); } else { Log.log("Version is incorrect. Skip module: '" + name + "'"); diff --git a/js/node_helper.js b/js/node_helper.js index 824de6e2..89c6e23e 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -4,12 +4,10 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ +const Class = require("./class.js"); +const express = require("express"); -var Class = require("./class.js"); -var express = require("express"); -var path = require("path"); - -NodeHelper = Class.extend({ +var NodeHelper = Class.extend({ init: function() { console.log("Initializing new module helper ..."); }, @@ -114,7 +112,6 @@ NodeHelper = Class.extend({ } }); }); - } }); @@ -122,4 +119,5 @@ NodeHelper.create = function(moduleDefinition) { return NodeHelper.extend(moduleDefinition); }; -module.exports = NodeHelper; +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = NodeHelper;} diff --git a/js/server.js b/js/server.js index 44ef44f0..4d08fc14 100644 --- a/js/server.js +++ b/js/server.js @@ -71,7 +71,7 @@ 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"; + var configFile = "config/config.js"; if (typeof(global.configuration_file) !== "undefined") { configFile = global.configuration_file; } diff --git a/js/socket.js b/js/socket.js index bbd09586..4cd71d94 100644 --- a/js/socket.js +++ b/js/socket.js @@ -1,10 +1,11 @@ +/* global io */ + /* Magic Mirror * Socket Connection * * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ - var MMSocket = function(moduleName) { var self = this; diff --git a/js/socketclient.js b/js/socketclient.js index d10c0d60..2274c20e 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -1,3 +1,11 @@ +/* global io */ + +/* Magic Mirror + * TODO add description + * + * By Michael Teeuw https://michaelteeuw.nl + * MIT Licensed. + */ var MMSocket = function(moduleName) { var self = this; diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 9b6fc04e..177fd9ac 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -5,8 +5,8 @@ * MIT Licensed. */ -var ical = require("./vendor/ical.js"); -var moment = require("moment"); +const ical = require("./vendor/ical.js"); +const moment = require("moment"); var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, includePastEvents) { var self = this; @@ -25,7 +25,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri clearTimeout(reloadTimer); reloadTimer = null; - nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); + var nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); var opts = { headers: { "User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)" @@ -61,7 +61,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri } // console.log(data); - newEvents = []; + var newEvents = []; // limitFunction doesn't do much limiting, see comment re: the dates array in rrule section below as to why we need to do the filtering ourselves var limitFunction = function(date, i) {return true;}; @@ -97,7 +97,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri if (typeof event.end !== "undefined") { endDate = eventDate(event, "end"); } else if(typeof event.duration !== "undefined") { - dur=moment.duration(event.duration); + var dur=moment.duration(event.duration); endDate = startDate.clone().add(dur); } else { if (!isFacebookBirthday) { diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index ac7c9a8f..51e6f20c 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -15,8 +15,6 @@ var maximumEntries = 10; var maximumNumberOfDays = 365; var user = "magicmirror"; var pass = "MyStrongPass"; -var broadcastPastEvents = false; - var auth = { user: user, pass: pass @@ -24,7 +22,7 @@ var auth = { console.log("Create fetcher ..."); -fetcher = new CalendarFetcher(url, fetchInterval, [], maximumEntries, maximumNumberOfDays, auth); +var fetcher = new CalendarFetcher(url, fetchInterval, [], maximumEntries, maximumNumberOfDays, auth); fetcher.onReceive(function(fetcher) { console.log(fetcher.events()); diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index caaa003e..6c4e2ff6 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -1,4 +1,4 @@ -/* global Module */ +/* global Module, SunCalc */ /* Magic Mirror * Module: Clock @@ -289,11 +289,12 @@ Module.register("clock",{ // Both clocks have been configured, check position var placement = this.config.analogPlacement; - analogWrapper = document.createElement("div"); + var analogWrapper = document.createElement("div"); analogWrapper.id = "analog"; analogWrapper.style.cssFloat = "none"; analogWrapper.appendChild(clockCircle); - digitalWrapper = document.createElement("div"); + + var digitalWrapper = document.createElement("div"); digitalWrapper.id = "digital"; digitalWrapper.style.cssFloat = "none"; digitalWrapper.appendChild(dateWrapper); diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 8e6456d6..5b79c09a 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -127,7 +127,7 @@ Module.register("compliments", { compliments.push.apply(compliments, this.config.compliments.anytime); - for (entry in this.config.compliments) { + for (var entry in this.config.compliments) { if (new RegExp(entry).test(date)) { compliments.push.apply(compliments, this.config.compliments[entry]); } @@ -188,7 +188,7 @@ Module.register("compliments", { // create a span to hold it all var compliment = document.createElement("span"); // process all the parts of the compliment text - for (part of parts){ + for (var part of parts){ // create a text element for each part compliment.appendChild(document.createTextNode(part)); // add a break ` diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index 997ddc9a..e74ac114 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -81,8 +81,8 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { scheduleTimer(); }); - 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/)", + var nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); + var headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)", "Cache-Control": "max-age=0, no-cache, no-store, must-revalidate", "Pragma": "no-cache"}; diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 5afe9ed8..5926c712 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -126,7 +126,7 @@ Module.register("newsfeed",{ if (this.config.removeStartTags === "title" || this.config.removeStartTags === "both") { - for (f=0; f { it(`should return 200 HTTP code for vendor "${vendor}"`, function () { - urlVendor = "http://localhost:8080/vendor/" + vendors[vendor]; + var urlVendor = "http://localhost:8080/vendor/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { expect(res.statusCode).to.equal(200); }); @@ -39,7 +38,7 @@ describe("Vendors", function () { Object.keys(vendors).forEach(vendor => { it(`should return 404 HTTP code for vendor https://localhost/"${vendor}"`, function() { - urlVendor = "http://localhost:8080/" + vendors[vendor]; + var urlVendor = "http://localhost:8080/" + vendors[vendor]; request.get(urlVendor, function (err, res, body) { expect(res.statusCode).to.equal(404); }); diff --git a/tests/servers/basic-auth.js b/tests/servers/basic-auth.js index 067a000b..4028997a 100644 --- a/tests/servers/basic-auth.js +++ b/tests/servers/basic-auth.js @@ -19,7 +19,8 @@ app.use(auth.connect(basic)); // Set available directories var directories = ["/tests/configs"]; var directory; -rootPath = path.resolve(__dirname + "/../../"); +var rootPath = path.resolve(__dirname + "/../../"); + for (var i in directories) { directory = directories[i]; app.use(directory, express.static(path.resolve(rootPath + directory))); From c04fa496bf4e140b36d65e3991e42f6b068a993c Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 3 May 2020 18:59:26 +0200 Subject: [PATCH 148/219] Second round of undef fixes --- js/class.js | 8 +++++--- js/defaults.js | 2 +- js/loader.js | 2 +- js/logger.js | 10 +++------- js/module.js | 2 +- js/translator.js | 2 +- js/utils.js | 3 --- modules/default/calendar/calendar.js | 2 +- vendor/vendor.js | 3 --- 9 files changed, 13 insertions(+), 21 deletions(-) diff --git a/js/class.js b/js/class.js index 835e48f2..aab1799e 100644 --- a/js/class.js +++ b/js/class.js @@ -1,10 +1,12 @@ +/* global Class, xyz */ + /* Simple JavaScript Inheritance * By John Resig https://johnresig.com/ + * + * Inspired by base2 and Prototype + * * MIT Licensed. */ - - -// Inspired by base2 and Prototype (function () { var initializing = false; var fnTest = /xyz/.test(function () { xyz; }) ? /\b_super\b/ : /.*/; diff --git a/js/defaults.js b/js/defaults.js index d01082ee..36275e6c 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -1,4 +1,4 @@ -/* exported defaults */ +/* global mmPort */ /* Magic Mirror * Config Defaults diff --git a/js/loader.js b/js/loader.js index 3f618742..7199fe88 100644 --- a/js/loader.js +++ b/js/loader.js @@ -1,4 +1,4 @@ -/* global Module, vendor */ +/* global defaultModules, Module, vendor */ /* Magic Mirror * Module and File loaders. diff --git a/js/logger.js b/js/logger.js index 876826e8..60d91b2f 100644 --- a/js/logger.js +++ b/js/logger.js @@ -1,16 +1,12 @@ -/* exported Log */ - /* Magic Mirror * Logger + * This logger is very simple, but needs to be extended. + * This system can eventually be used to push the log messages to an external target. * * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ - -// This logger is very simple, but needs to be extended. -// This system can eventually be used to push the log messages to an external target. - -var Log = (function() { +const Log = (function() { return { info: Function.prototype.bind.call(console.info, console), log: Function.prototype.bind.call(console.log, console), diff --git a/js/module.js b/js/module.js index 8619742b..6ac218bf 100644 --- a/js/module.js +++ b/js/module.js @@ -1,4 +1,4 @@ -/* global Class, Loader, MMSocket, nunjucks, Translator */ +/* global Class, cloneObject, Loader, MMSocket, nunjucks, Translator */ /* Magic Mirror * Module Blueprint. diff --git a/js/translator.js b/js/translator.js index 36034b47..1ebf9fbf 100644 --- a/js/translator.js +++ b/js/translator.js @@ -1,4 +1,4 @@ -/* exported Translator */ +/* global translations */ /* Magic Mirror * Translator (l10n) diff --git a/js/utils.js b/js/utils.js index bdd81e57..df11d0b2 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,12 +1,9 @@ -/* exported Utils */ - /* Magic Mirror * Utils * * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ - var colors = require("colors/safe"); var Utils = { diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index a245e543..0f042051 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -1,4 +1,4 @@ -/* global Module */ +/* global cloneObject, Module */ /* Magic Mirror * Module: Calendar diff --git a/vendor/vendor.js b/vendor/vendor.js index fa2abd6f..7cc7d130 100755 --- a/vendor/vendor.js +++ b/vendor/vendor.js @@ -1,12 +1,9 @@ -/* exported vendor */ - /* Magic Mirror * Vendor File Definition * * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ - var vendor = { "moment.js" : "node_modules/moment/min/moment-with-locales.js", "moment-timezone.js" : "node_modules/moment-timezone/builds/moment-timezone-with-data.js", From 703335c2f1e2351412de98cef4b2036236874318 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 3 May 2020 20:50:52 +0200 Subject: [PATCH 149/219] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65b66771..50ddd64b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). - Replaced grunt-based linters with their non-grunt equivalents - Switch to most of the eslint:recommended rules and fix warnings - Replaced insecure links with https ones +- Cleaned up all "no-undef" warnings from eslint ### Deleted - Removed truetype (ttf) fonts From bd6bbf864a277adcd892776742a75eb1396a3839 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 3 May 2020 20:52:58 +0200 Subject: [PATCH 150/219] Update dependencies --- package-lock.json | 29 ++++++++++------------------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7543b030..6487057e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2599,9 +2599,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, @@ -4084,9 +4084,9 @@ } }, "markdownlint": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.20.1.tgz", - "integrity": "sha512-jq1qt0QkzY6AiN6O3tq+8SmUlvKfhx9GRKBn/IWEuN6RM5xBZG47rfW9Fn0eRvuozf5Xc59dRaLUZEO0XiyGOg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.20.2.tgz", + "integrity": "sha512-TU/SgsylEzp9oAj9dGGZ6009yJq48GpEAeYIsREje5NuvadzO12qvl4wV21vHIerdPy/aSEyM2e9c+CzWq6Reg==", "dev": true, "requires": { "markdown-it": "10.0.0" @@ -4325,9 +4325,9 @@ } }, "mocha": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", - "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -4343,7 +4343,7 @@ "js-yaml": "3.13.1", "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.3", + "mkdirp": "0.5.5", "ms": "2.1.1", "node-environment-flags": "1.0.6", "object.assign": "4.1.0", @@ -4431,15 +4431,6 @@ "path-exists": "^3.0.0" } }, - "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", diff --git a/package.json b/package.json index 3561c0f6..dbcca2e8 100644 --- a/package.json +++ b/package.json @@ -50,9 +50,9 @@ "danger": "^3.1.3", "http-auth": "^3.2.3", "jsdom": "^11.6.2", - "markdownlint": "^0.20.1", + "markdownlint": "^0.20.2", "markdownlint-cli": "^0.22.0", - "mocha": "^7.1.1", + "mocha": "^7.1.2", "mocha-each": "^2.0.1", "mocha-logger": "^1.0.6", "spectron": "^8.0.0", From 55c6a5aa27db9f8f6a55584f59f3aae83a825a32 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Tue, 5 May 2020 14:17:46 +0200 Subject: [PATCH 151/219] remove unused file --- js/socket.js | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 js/socket.js diff --git a/js/socket.js b/js/socket.js deleted file mode 100644 index c62c24da..00000000 --- a/js/socket.js +++ /dev/null @@ -1,35 +0,0 @@ -/* exported Log */ - -/* Magic Mirror - * Socket Connection - * - * By Michael Teeuw http://michaelteeuw.nl - * MIT Licensed. - */ - -var MMSocket = function(moduleName) { - - var self = this; - - if (typeof moduleName !== "string") { - throw new Error("Please set the module name for the MMSocket."); - } - - self.moduleName = moduleName; - - self.socket = io("http://localhost:8080"); - self.socket.on("notification", function(data) { - MM.sendNotification(data.notification, data.payload, Socket); - }); - - return { - sendMessage: function(notification, payload, sender) { - Log.log("Send socket message: " + notification); - self.socket.emit("notification", { - notification: notification, - sender: sender, - payload: payload - }); - } - }; -}; From c8a0f1d0dea7f5635638a55f6916d632890cf437 Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 5 May 2020 14:54:49 +0200 Subject: [PATCH 152/219] Fix some more undefs that popped up out of nowhere --- modules/default/weather/providers/ukmetoffice.js | 8 ++++---- tests/configs/modules/positions.js | 2 +- tests/unit/functions/calendar_spec.js | 4 ++-- tests/unit/functions/newsfeed_spec.js | 2 +- tests/unit/global_vars/root_path_spec.js | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 54ebed16..d7aa9886 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -82,7 +82,7 @@ WeatherProvider.register("ukmetoffice", { let timeInMins = nowUtc.diff(midnightUtc, "minutes"); // loop round each of the (5) periods, look for today (the first period may be yesterday) - for (i in currentWeatherData.SiteRep.DV.Location.Period) { + for (var i in currentWeatherData.SiteRep.DV.Location.Period) { let periodDate = moment.utc(currentWeatherData.SiteRep.DV.Location.Period[i].value.substr(0,10), "YYYY-MM-DD"); // ignore if period is before today @@ -92,7 +92,7 @@ WeatherProvider.register("ukmetoffice", { if (moment().diff(periodDate, "minutes") > 0) { // loop round the reports looking for the one we are in // $ value specifies the time in minutes-of-the-day: 0, 180, 360,...1260 - for (j in currentWeatherData.SiteRep.DV.Location.Period[i].Rep){ + for (var j in currentWeatherData.SiteRep.DV.Location.Period[i].Rep){ let p = currentWeatherData.SiteRep.DV.Location.Period[i].Rep[j].$; if (timeInMins >= p && timeInMins-180 < p) { // finally got the one we want, so populate weather object @@ -126,11 +126,11 @@ WeatherProvider.register("ukmetoffice", { // loop round the (5) periods getting the data // for each period array, Day is [0], Night is [1] - for (j in forecasts.SiteRep.DV.Location.Period) { + for (var j in forecasts.SiteRep.DV.Location.Period) { const weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // data times are always UTC - dateStr = forecasts.SiteRep.DV.Location.Period[j].value; + const dateStr = forecasts.SiteRep.DV.Location.Period[j].value; let periodDate = moment.utc(dateStr.substr(0,10), "YYYY-MM-DD"); // ignore if period is before today diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index d2bf5ee9..1d36a0c0 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -26,7 +26,7 @@ var config = { "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"]; var modules = Array(); - for (idx in positions) { + for (var idx in positions) { modules.push({ module: "helloworld", position: positions[idx], diff --git a/tests/unit/functions/calendar_spec.js b/tests/unit/functions/calendar_spec.js index 6e4fe988..8c8df684 100644 --- a/tests/unit/functions/calendar_spec.js +++ b/tests/unit/functions/calendar_spec.js @@ -17,7 +17,7 @@ describe("Functions into modules/default/calendar/calendar.js", function() { }); describe("capFirst", function() { - words = { + const words = { "rodrigo": "Rodrigo", "123m": "123m", "magic mirror": "Magic mirror", @@ -89,7 +89,7 @@ describe("Functions into modules/default/calendar/calendar.js", function() { }); describe("shorten", function() { - strings = { + const strings = { " String with whitespace at the beginning that needs trimming" : { length: 16, return: "String with whit…" }, "long string that needs shortening": { length: 16, return: "long string that…" }, "short string": { length: 16, return: "short string" }, diff --git a/tests/unit/functions/newsfeed_spec.js b/tests/unit/functions/newsfeed_spec.js index c6bb34f2..937f57ee 100644 --- a/tests/unit/functions/newsfeed_spec.js +++ b/tests/unit/functions/newsfeed_spec.js @@ -12,7 +12,7 @@ describe("Functions into modules/default/newsfeed/newsfeed.js", function() { require("../../../modules/default/newsfeed/newsfeed.js"); describe("capitalizeFirstLetter", function() { - words = { + const words = { "rodrigo": "Rodrigo", "123m": "123m", "magic mirror": "Magic mirror", diff --git a/tests/unit/global_vars/root_path_spec.js b/tests/unit/global_vars/root_path_spec.js index f5469e80..3f162dfe 100644 --- a/tests/unit/global_vars/root_path_spec.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -62,7 +62,7 @@ describe("'global.root_path' set in js/app.js", function() { }); it("should expect the global.version equals package.json file", function() { - versionPackage = JSON.parse(fs.readFileSync("package.json", "utf8")).version; + const versionPackage = JSON.parse(fs.readFileSync("package.json", "utf8")).version; expect(this.sandbox.global.version).to.equal(versionPackage); }); }); From 7fc7d626bcd48bfa33619a6b5510ec81b6eefd9e Mon Sep 17 00:00:00 2001 From: Veeck Date: Tue, 5 May 2020 14:55:15 +0200 Subject: [PATCH 153/219] Add Module to globals, cleanup comments --- .eslintrc.json | 1 + js/loader.js | 2 +- js/main.js | 2 +- modules/default/alert/alert.js | 2 +- modules/default/calendar/calendar.js | 2 +- modules/default/clock/clock.js | 2 +- modules/default/compliments/compliments.js | 2 -- modules/default/currentweather/currentweather.js | 2 -- modules/default/helloworld/helloworld.js | 2 -- modules/default/newsfeed/newsfeed.js | 2 -- modules/default/updatenotification/updatenotification.js | 2 -- modules/default/weather/providers/darksky.js | 2 +- modules/default/weather/providers/ukmetoffice.js | 2 +- modules/default/weather/providers/weathergov.js | 2 +- modules/default/weather/weather.js | 2 +- modules/default/weatherforecast/weatherforecast.js | 2 -- 16 files changed, 10 insertions(+), 21 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index a63980e7..00fae289 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,6 +10,7 @@ "config": true, "Log": true, "MM": true, + "Module": true, "moment": true }, "parserOptions": { diff --git a/js/loader.js b/js/loader.js index 7199fe88..c69f92ae 100644 --- a/js/loader.js +++ b/js/loader.js @@ -1,4 +1,4 @@ -/* global defaultModules, Module, vendor */ +/* global defaultModules, vendor */ /* Magic Mirror * Module and File loaders. diff --git a/js/main.js b/js/main.js index 271a3be7..117aed10 100644 --- a/js/main.js +++ b/js/main.js @@ -1,4 +1,4 @@ -/* global Loader, Module, defaults, Translator */ +/* global Loader, defaults, Translator */ /* Magic Mirror * Main System diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index 3ec8c8f7..66b88601 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -1,4 +1,4 @@ -/* global Module, NotificationFx */ +/* global NotificationFx */ /* Magic Mirror * Module: alert diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 0f042051..24a2c45d 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -1,4 +1,4 @@ -/* global cloneObject, Module */ +/* global cloneObject */ /* Magic Mirror * Module: Calendar diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 6c4e2ff6..1b9a2a12 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -1,4 +1,4 @@ -/* global Module, SunCalc */ +/* global SunCalc */ /* Magic Mirror * Module: Clock diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index 5b79c09a..ff245eef 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: Compliments * diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index b49b8e8b..d24a92b4 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: CurrentWeather * diff --git a/modules/default/helloworld/helloworld.js b/modules/default/helloworld/helloworld.js index 3d1c17e7..72474577 100644 --- a/modules/default/helloworld/helloworld.js +++ b/modules/default/helloworld/helloworld.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: HelloWorld * diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 5926c712..edbac68d 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: NewsFeed * diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index c720ae3d..0c4e2ad9 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: UpdateNotification * diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index 9dbe49b4..ea36da28 100755 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -1,4 +1,4 @@ -/* global WeatherProvider */ +/* global WeatherProvider, WeatherObject */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index d7aa9886..17cc463e 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject */ +/* global WeatherProvider, WeatherObject, SunCalc */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 568e2f47..68211b56 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject */ +/* global WeatherProvider, WeatherObject, SunCalc */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index a28b7ab5..6e277447 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -1,4 +1,4 @@ -/* global Module, WeatherProvider */ +/* global WeatherProvider */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 7624e671..8df266a0 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -1,5 +1,3 @@ -/* global Module */ - /* Magic Mirror * Module: WeatherForecast * From 18820c383da8e3bcf52f7a158f44be472e3c1e08 Mon Sep 17 00:00:00 2001 From: Veeck Date: Wed, 6 May 2020 22:19:07 +0200 Subject: [PATCH 154/219] Use correct object in browser context --- js/module.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/module.js b/js/module.js index 6ac218bf..1a38c54f 100644 --- a/js/module.js +++ b/js/module.js @@ -466,8 +466,8 @@ function cmpVersions(a, b) { Module.register = function (name, moduleDefinition) { if (moduleDefinition.requiresVersion) { - Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + global.version); - if (cmpVersions(global.version, moduleDefinition.requiresVersion) >= 0) { + Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + window.version); + if (cmpVersions(window.version, moduleDefinition.requiresVersion) >= 0) { Log.log("Version is ok!"); } else { Log.log("Version is incorrect. Skip module: '" + name + "'"); From c202c0d705b78b27177afe3aebf9b2b3f4da746b Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 28 Mar 2020 06:56:30 +0100 Subject: [PATCH 155/219] Add prettier, configs and editorconfig --- .editorconfig | 15 ++ .eslintrc.json | 6 +- .markdownlintignore | 1 - .markdownlintrc.json | 23 --- .prettierignore | 5 + .prettierrc.json | 3 + .stylelintrc.json | 9 +- .travis.yml | 4 +- CHANGELOG.md | 2 + package-lock.json | 370 +++++++++---------------------------------- package.json | 21 ++- 11 files changed, 118 insertions(+), 341 deletions(-) create mode 100644 .editorconfig delete mode 100644 .markdownlintignore delete mode 100644 .markdownlintrc.json create mode 100644 .prettierignore create mode 100644 .prettierrc.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..db01ad9e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +max_line_length = 250 +trim_trailing_whitespace = true + +[*.{js,json}] +indent_size = 4 +indent_style = tab diff --git a/.eslintrc.json b/.eslintrc.json index 00fae289..6d6839d6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,6 @@ { - "extends": "eslint:recommended", + "extends": ["eslint:recommended", "plugin:prettier/recommended"], + "plugins": ["prettier"], "env": { "browser": true, "es6": true, @@ -19,8 +20,9 @@ "ecmaFeatures": { "globalReturn": true } - }, + }, "rules": { + "prettier/prettier": "error", "eqeqeq": "error", "no-prototype-builtins": "off", "no-unused-vars": "off" diff --git a/.markdownlintignore b/.markdownlintignore deleted file mode 100644 index fa766882..00000000 --- a/.markdownlintignore +++ /dev/null @@ -1 +0,0 @@ -modules/default/calendar/vendor/* diff --git a/.markdownlintrc.json b/.markdownlintrc.json deleted file mode 100644 index 6c4443d4..00000000 --- a/.markdownlintrc.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "default": true, - "line-length": false, - "blanks-around-headers": false, - "no-duplicate-header": false, - "no-inline-html": false, - "MD010": false, - "MD001": false, - "MD031": false, - "MD040": false, - "MD002": false, - "MD029": false, - "MD041": false, - "MD032": false, - "MD036": false, - "MD037": false, - "MD009": false, - "MD018": false, - "MD012": false, - "MD026": false, - "MD038": false, - "MD047": false -} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..e4a77657 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +package-lock.json +/config/**/* +/modules/default/calendar/vendor/ical.js/**/* +/vendor/**/* +!/vendor/vendor.js diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..1518304d --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "trailingComma": "none" +} diff --git a/.stylelintrc.json b/.stylelintrc.json index 12500818..d450c732 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,6 +1,7 @@ { - "extends": "stylelint-config-standard", - "font-family-name-quotes": "double-where-recommended", - "block-no-empty": false, - "ignoreFiles": ["./modules/default/alert/ns-default.css"] + "extends": ["stylelint-prettier/recommended"], + "plugins": ["stylelint-prettier"], + "rules": { + "prettier/prettier": true + } } diff --git a/.travis.yml b/.travis.yml index d156ac1b..b2c4ae0f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,9 @@ before_script: - "sh -e /etc/init.d/xvfb start" - sleep 5 script: - - npm run test:lint + - npm run test:prettier + - npm run test:js + - npm run test:css - npm run test:e2e - npm run test:unit after_script: diff --git a/CHANGELOG.md b/CHANGELOG.md index 50ddd64b..87a0fb89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). ### Added +- Added prettier for an even cleaner codebase + ### Updated - Cleaned up alert module code - Cleaned up check_config code diff --git a/package-lock.json b/package-lock.json index 6487057e..45598992 100644 --- a/package-lock.json +++ b/package-lock.json @@ -620,12 +620,6 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -1707,6 +1701,12 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true } } }, @@ -1932,9 +1932,9 @@ } }, "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "env-paths": { @@ -2137,6 +2137,32 @@ } } }, + "eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", + "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-scope": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", @@ -2398,6 +2424,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-glob": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", @@ -2795,12 +2827,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", @@ -3000,12 +3026,6 @@ "readable-stream": "^3.1.1" }, "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3655,12 +3675,6 @@ "minimist": "^1.2.0" } }, - "jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==", - "dev": true - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -3799,26 +3813,6 @@ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, - "leprechaun": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/leprechaun/-/leprechaun-0.0.2.tgz", - "integrity": "sha1-i5ZRSp5jTFP75ZqAlPM3jI+yCE0=", - "dev": true, - "requires": { - "log-symbols": "^1.0.2" - }, - "dependencies": { - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - } - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -3840,15 +3834,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -3884,24 +3869,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "lodash.differencewith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz", - "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=", - "dev": true - }, "lodash.find": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", "dev": true }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -3950,24 +3923,12 @@ "integrity": "sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=", "dev": true }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", - "dev": true - }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -4061,19 +4022,6 @@ "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, "markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -4083,94 +4031,6 @@ "repeat-string": "^1.0.0" } }, - "markdownlint": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.20.2.tgz", - "integrity": "sha512-TU/SgsylEzp9oAj9dGGZ6009yJq48GpEAeYIsREje5NuvadzO12qvl4wV21vHIerdPy/aSEyM2e9c+CzWq6Reg==", - "dev": true, - "requires": { - "markdown-it": "10.0.0" - } - }, - "markdownlint-cli": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.22.0.tgz", - "integrity": "sha512-qRg6tK5dXWqkaFvEstz9YSQal1ECMgofrSZgdBOaPWG8cD50pk8Hs0ZpBCJ6SCHPKF71pCdtuSL2u82sIx2XWA==", - "dev": true, - "requires": { - "commander": "~2.9.0", - "deep-extend": "~0.5.1", - "get-stdin": "~5.0.1", - "glob": "~7.1.2", - "ignore": "~5.1.4", - "js-yaml": "~3.13.1", - "jsonc-parser": "~2.2.0", - "lodash.differencewith": "~4.5.0", - "lodash.flatten": "~4.4.0", - "markdownlint": "~0.19.0", - "markdownlint-rule-helpers": "~0.7.0", - "minimatch": "~3.0.4", - "rc": "~1.2.7" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "dev": true - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "markdownlint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.19.0.tgz", - "integrity": "sha512-+MsWOnYVUH4klcKM7iRx5cno9FQMDAb6FC6mWlZkeXPwIaK6Z5Vd9VkXkykPidRqmLHU2wI+MNyfUMnUCBw3pQ==", - "dev": true, - "requires": { - "markdown-it": "10.0.0" - } - } - } - }, - "markdownlint-rule-helpers": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.7.0.tgz", - "integrity": "sha512-xZByWJNBaCMHo7nYPv/5aO8Jt68YcMvyouFXhuXmJzbqCsQy8rfCj0kYcv22kdK5PwAgMdbHg0hyTdURbUZtJw==", - "dev": true - }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -4186,12 +4046,6 @@ "unist-util-visit": "^2.0.0" } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4690,70 +4544,6 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, - "nconf": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", - "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", - "dev": true, - "requires": { - "async": "^1.4.0", - "ini": "^1.3.0", - "secure-keys": "^1.0.0", - "yargs": "^3.19.0" - }, - "dependencies": { - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -5470,6 +5260,21 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-bytes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", @@ -5973,12 +5778,6 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "secure-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", - "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=", - "dev": true - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -7198,6 +6997,12 @@ } } }, + "stylelint-config-prettier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-8.0.1.tgz", + "integrity": "sha512-RcjNW7MUaNVqONhJH4+rtlAE3ow/9SsAM0YWV0Lgu3dbTKdWTa/pQXRdFWgoHWpzUKn+9oBKR5x8JdH+20wmgw==", + "dev": true + }, "stylelint-config-recommended": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", @@ -7213,6 +7018,15 @@ "stylelint-config-recommended": "^3.0.0" } }, + "stylelint-prettier": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-1.1.2.tgz", + "integrity": "sha512-8QZ+EtBpMCXYB6cY0hNE3aCDKMySIx4Q8/malLaqgU/KXXa6Cj2KK8ulG1AJvUMD5XSSP8rOotqaCzR/BW6qAA==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "sugarss": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", @@ -7514,12 +7328,6 @@ "is-typedarray": "^1.0.0" } }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, "unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -7852,12 +7660,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, "windows-release": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", @@ -7957,36 +7759,6 @@ "@babel/runtime": "^7.9.2" } }, - "yaml-lint": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/yaml-lint/-/yaml-lint-1.2.4.tgz", - "integrity": "sha512-qpKE0szyKsE9TrlVPi+bxKxVAjl30QjNAOyOxy7noQdf/WCCYUlT4xiCRxMG48eyeBzMBtBN6PgGfaB0MJePNw==", - "dev": true, - "requires": { - "glob": "^7.1.2", - "js-yaml": "^3.10.0", - "leprechaun": "0.0.2", - "lodash.merge": "^4.6.1", - "lodash.snakecase": "^4.1.1", - "nconf": "^0.10.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "yargs": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", diff --git a/package.json b/package.json index dbcca2e8..dbbd9be3 100644 --- a/package.json +++ b/package.json @@ -12,16 +12,13 @@ "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", - "test:lint": "npm run test:js && npm run test:style", - "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json", - "test:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", + "test:prettier": "prettier --check **/*.{js,css,json,md,yml}", + "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --quiet", + "test:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", "config:check": "node js/check_config.js", - "lint": "npm run lint:js && npm run lint:json && npm run lint:markdown && npm run lint:style && npm run lint:yaml", + "lint:prettier": "prettier --write **/*.{js,css,json,md,yml}", "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", - "lint:json": "jsonlint -q package.json .eslintrc.json .markdownlintrc.json .stylelintrc.json modules/default/ translations/ vendor/package.json", - "lint:markdown": "markdownlint *.md modules/README.md modules/default/**/*.md --config .markdownlintrc.json", - "lint:style": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", - "lint:yaml": "yamllint .travis.yml" + "lint:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix" }, "repository": { "type": "git", @@ -48,17 +45,19 @@ "chai-as-promised": "^7.1.1", "current-week-number": "^1.0.7", "danger": "^3.1.3", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-prettier": "^3.1.3", "http-auth": "^3.2.3", "jsdom": "^11.6.2", - "markdownlint": "^0.20.2", - "markdownlint-cli": "^0.22.0", "mocha": "^7.1.2", "mocha-each": "^2.0.1", "mocha-logger": "^1.0.6", + "prettier": "^2.0.5", "spectron": "^8.0.0", "stylelint": "^13.3.3", + "stylelint-config-prettier": "^8.0.1", "stylelint-config-standard": "^20.0.0", - "yaml-lint": "^1.2.4" + "stylelint-prettier": "^1.1.2" }, "optionalDependencies": { "electron": "^6.1.7" From 3a5a29efc0e9b378114ad21be094d667afa8d636 Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 11 May 2020 21:59:45 +0200 Subject: [PATCH 156/219] Add pretty-quick --- package-lock.json | 423 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 177 +++++++++---------- 2 files changed, 515 insertions(+), 85 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45598992..428fd1fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -394,6 +394,12 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, "@types/minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", @@ -563,6 +569,12 @@ } } }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -1075,6 +1087,12 @@ "readdirp": "~3.2.0" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "clarinet": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/clarinet/-/clarinet-0.12.4.tgz", @@ -1189,6 +1207,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -2549,6 +2573,15 @@ "pinkie-promise": "^2.0.0" } }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -3126,6 +3159,76 @@ "debug": "^3.1.0" } }, + "husky": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -4089,6 +4192,12 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", @@ -4529,11 +4638,38 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, + "mri": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", + "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -4757,6 +4893,12 @@ "mimic-fn": "^2.1.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -5043,6 +5185,66 @@ "integrity": "sha1-DPd1eml38b9/ajIge3CeN3OI6HQ=", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, "pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", @@ -5063,6 +5265,15 @@ } } }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -5284,6 +5495,194 @@ "meow": "^3.1.0" } }, + "pretty-quick": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-2.0.1.tgz", + "integrity": "sha512-y7bJt77XadjUr+P1uKqZxFWLddvj3SKY6EU4BuQtMxmmEFSMpbN132pUWdSG1g1mtUfO0noBvn7wBf0BVeomHg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", + "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5783,6 +6182,18 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -6636,6 +7047,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -7651,6 +8068,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index dbbd9be3..f568d73c 100644 --- a/package.json +++ b/package.json @@ -1,87 +1,94 @@ { - "name": "magicmirror", - "version": "2.12.0-develop", - "description": "The open source modular smart mirror platform.", - "main": "js/electron.js", - "scripts": { - "start": "DISPLAY=\"${DISPLAY:=:0}\" ./node_modules/.bin/electron js/electron.js", - "server": "node ./serveronly", - "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", - "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", - "postinstall": "npm run install-fonts && echo \"MagicMirror installation finished successfully! \n\"", - "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", - "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", - "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", - "test:prettier": "prettier --check **/*.{js,css,json,md,yml}", - "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --quiet", - "test:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", - "config:check": "node js/check_config.js", - "lint:prettier": "prettier --write **/*.{js,css,json,md,yml}", - "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", - "lint:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/MichMich/MagicMirror.git" - }, - "keywords": [ - "magic mirror", - "smart mirror", - "mirror UI", - "modular" - ], - "author": "Michael Teeuw", - "contributors": [ - "https://github.com/MichMich/MagicMirror/graphs/contributors" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/MichMich/MagicMirror/issues" - }, - "homepage": "https://magicmirror.builders", - "devDependencies": { - "@prantlf/jsonlint": "^10.2.0", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "current-week-number": "^1.0.7", - "danger": "^3.1.3", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-prettier": "^3.1.3", - "http-auth": "^3.2.3", - "jsdom": "^11.6.2", - "mocha": "^7.1.2", - "mocha-each": "^2.0.1", - "mocha-logger": "^1.0.6", - "prettier": "^2.0.5", - "spectron": "^8.0.0", - "stylelint": "^13.3.3", - "stylelint-config-prettier": "^8.0.1", - "stylelint-config-standard": "^20.0.0", - "stylelint-prettier": "^1.1.2" - }, - "optionalDependencies": { - "electron": "^6.1.7" - }, - "dependencies": { - "colors": "^1.1.2", - "console-stamp": "^0.2.9", - "eslint": "^6.8.0", - "express": "^4.16.2", - "express-ipfilter": "^1.0.1", - "feedme": "latest", - "helmet": "^3.21.2", - "iconv-lite": "latest", - "lodash": "^4.17.15", - "module-alias": "^2.2.2", - "moment": "latest", - "request": "^2.88.0", - "rrule": "^2.6.2", - "rrule-alt": "^2.2.8", - "simple-git": "^1.85.0", - "socket.io": "^2.1.1", - "valid-url": "latest" - }, - "_moduleAliases": { - "node_helper": "js/node_helper.js" - } + "name": "magicmirror", + "version": "2.12.0-develop", + "description": "The open source modular smart mirror platform.", + "main": "js/electron.js", + "scripts": { + "start": "DISPLAY=\"${DISPLAY:=:0}\" ./node_modules/.bin/electron js/electron.js", + "server": "node ./serveronly", + "install": "echo \"Installing vendor files ...\n\" && cd vendor && npm install --loglevel=error", + "install-fonts": "echo \"Installing fonts ...\n\" && cd fonts && npm install --loglevel=error", + "postinstall": "npm run install-fonts && echo \"MagicMirror installation finished successfully! \n\"", + "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", + "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", + "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", + "test:prettier": "prettier --check **/*.{js,css,json,md,yml}", + "test:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --quiet", + "test:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", + "config:check": "node js/check_config.js", + "lint:prettier": "prettier --write **/*.{js,css,json,md,yml}", + "lint:js": "eslint *.js js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", + "lint:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/MichMich/MagicMirror.git" + }, + "keywords": [ + "magic mirror", + "smart mirror", + "mirror UI", + "modular" + ], + "author": "Michael Teeuw", + "contributors": [ + "https://github.com/MichMich/MagicMirror/graphs/contributors" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/MichMich/MagicMirror/issues" + }, + "homepage": "https://magicmirror.builders", + "devDependencies": { + "@prantlf/jsonlint": "^10.2.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "current-week-number": "^1.0.7", + "danger": "^3.1.3", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-prettier": "^3.1.3", + "http-auth": "^3.2.3", + "husky": "^4.2.5", + "jsdom": "^11.6.2", + "mocha": "^7.1.2", + "mocha-each": "^2.0.1", + "mocha-logger": "^1.0.6", + "prettier": "^2.0.5", + "pretty-quick": "^2.0.1", + "spectron": "^8.0.0", + "stylelint": "^13.3.3", + "stylelint-config-prettier": "^8.0.1", + "stylelint-config-standard": "^20.0.0", + "stylelint-prettier": "^1.1.2" + }, + "optionalDependencies": { + "electron": "^6.1.7" + }, + "dependencies": { + "colors": "^1.1.2", + "console-stamp": "^0.2.9", + "eslint": "^6.8.0", + "express": "^4.16.2", + "express-ipfilter": "^1.0.1", + "feedme": "latest", + "helmet": "^3.21.2", + "iconv-lite": "latest", + "lodash": "^4.17.15", + "module-alias": "^2.2.2", + "moment": "latest", + "request": "^2.88.0", + "rrule": "^2.6.2", + "rrule-alt": "^2.2.8", + "simple-git": "^1.85.0", + "socket.io": "^2.1.1", + "valid-url": "latest" + }, + "_moduleAliases": { + "node_helper": "js/node_helper.js" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } + } } From abb5dc57395b0c8e05efbb44b5752fd17251ae3f Mon Sep 17 00:00:00 2001 From: Veeck Date: Mon, 11 May 2020 22:22:32 +0200 Subject: [PATCH 157/219] Run prettier over ALL files once No other changes done in this commit --- .github/CONTRIBUTING.md | 5 +- .github/ISSUE_TEMPLATE.md | 11 +- .github/PULL_REQUEST_TEMPLATE.md | 9 +- CHANGELOG.md | 84 ++++++- LICENSE.md | 3 +- README.md | 3 +- clientonly/index.js | 9 +- fonts/package.json | 26 +- fonts/roboto.css | 45 +--- js/app.js | 44 ++-- js/check_config.js | 6 +- js/class.js | 38 +-- js/defaults.js | 10 +- js/deprecated.js | 6 +- js/electron.js | 22 +- js/loader.js | 114 ++++----- js/logger.js | 4 +- js/main.js | 139 ++++++----- js/module.js | 67 +++--- js/node_helper.js | 32 +-- js/server.js | 21 +- js/socketclient.js | 14 +- js/translator.js | 37 +-- js/utils.js | 4 +- jsconfig.json | 5 +- modules/default/alert/README.md | 1 + modules/default/alert/alert.js | 81 ++++--- modules/default/alert/notificationFx.css | 8 +- modules/default/alert/notificationFx.js | 30 ++- modules/default/alert/translations/bg.json | 4 +- modules/default/alert/translations/da.json | 4 +- modules/default/alert/translations/de.json | 4 +- modules/default/alert/translations/en.json | 4 +- modules/default/alert/translations/es.json | 4 +- modules/default/alert/translations/fr.json | 4 +- modules/default/alert/translations/hu.json | 4 +- modules/default/alert/translations/nl.json | 4 +- modules/default/alert/translations/ru.json | 4 +- modules/default/calendar/README.md | 1 + modules/default/calendar/calendar.js | 143 ++++++----- modules/default/calendar/calendarfetcher.js | 98 ++++---- modules/default/calendar/debug.js | 4 +- modules/default/calendar/node_helper.js | 13 +- modules/default/clock/README.md | 1 + modules/default/clock/clock.js | 65 +++-- modules/default/clock/clock_styles.css | 144 ++++++------ modules/default/compliments/README.md | 1 + modules/default/compliments/compliments.js | 69 ++---- modules/default/currentweather/README.md | 1 + .../default/currentweather/currentweather.js | 176 +++++++------- modules/default/defaultmodules.js | 17 +- modules/default/helloworld/README.md | 1 + modules/default/helloworld/helloworld.js | 3 +- modules/default/newsfeed/README.md | 5 +- modules/default/newsfeed/fetcher.js | 51 ++-- modules/default/newsfeed/newsfeed.js | 129 +++++----- modules/default/newsfeed/node_helper.js | 12 +- modules/default/newsfeed/translations/de.json | 4 +- modules/default/newsfeed/translations/en.json | 4 +- modules/default/newsfeed/translations/es.json | 4 +- modules/default/newsfeed/translations/fr.json | 4 +- modules/default/updatenotification/README.md | 1 + .../default/updatenotification/node_helper.js | 28 +-- .../updatenotification/updatenotification.js | 38 ++- modules/default/weather/providers/README.md | 46 ++-- modules/default/weather/providers/darksky.js | 26 +- .../weather/providers/openweathermap.js | 18 +- .../default/weather/providers/ukmetoffice.js | 55 ++--- .../default/weather/providers/weathergov.js | 43 ++-- modules/default/weather/weather.js | 166 +++++++------ modules/default/weather/weatherobject.js | 28 ++- modules/default/weather/weatherprovider.js | 34 +-- modules/default/weatherforecast/README.md | 1 + .../weatherforecast/weatherforecast.js | 103 ++++---- serveronly/index.js | 2 +- tests/configs/data/StripComments.json | 20 +- tests/configs/data/TranslationTest.json | 54 ++--- tests/configs/data/en.json | 54 ++--- tests/configs/empty_ipWhiteList.js | 11 +- tests/configs/env.js | 11 +- .../configs/modules/calendar/auth-default.js | 8 +- tests/configs/modules/calendar/basic-auth.js | 8 +- tests/configs/modules/calendar/default.js | 8 +- .../modules/calendar/fail-basic-auth.js | 8 +- .../modules/calendar/old-basic-auth.js | 8 +- tests/configs/modules/clock/clock_12hr.js | 8 +- tests/configs/modules/clock/clock_24hr.js | 8 +- .../clock/clock_displaySeconds_false.js | 8 +- .../modules/clock/clock_showPeriodUpper.js | 8 +- tests/configs/modules/clock/clock_showWeek.js | 8 +- tests/configs/modules/clock/es/clock_12hr.js | 8 +- tests/configs/modules/clock/es/clock_24hr.js | 8 +- .../modules/clock/es/clock_showPeriodUpper.js | 8 +- .../modules/clock/es/clock_showWeek.js | 8 +- .../compliments/compliments_anytime.js | 9 +- .../modules/compliments/compliments_date.js | 12 +- .../compliments/compliments_only_anytime.js | 9 +- .../compliments/compliments_parts_day.js | 20 +- .../configs/modules/helloworld/helloworld.js | 8 +- .../modules/helloworld/helloworld_default.js | 8 +- tests/configs/modules/newsfeed/default.js | 11 +- tests/configs/modules/positions.js | 16 +- .../modules/weather/currentweather_default.js | 8 +- .../modules/weather/currentweather_options.js | 8 +- .../modules/weather/currentweather_units.js | 8 +- .../weather/forecastweather_default.js | 8 +- .../weather/forecastweather_options.js | 8 +- tests/configs/noIpWhiteList.js | 11 +- tests/configs/port_8090.js | 11 +- tests/configs/without_modules.js | 9 +- tests/e2e/dev_console.js | 24 +- tests/e2e/env_spec.js | 56 ++--- tests/e2e/fonts.js | 10 +- tests/e2e/global-setup.js | 16 +- tests/e2e/ipWhistlist_spec.js | 11 +- tests/e2e/modules/calendar_spec.js | 46 ++-- tests/e2e/modules/clock_es_spec.js | 39 ++- tests/e2e/modules/clock_spec.js | 44 ++-- tests/e2e/modules/compliments_spec.js | 94 +++++--- tests/e2e/modules/helloworld_spec.js | 18 +- tests/e2e/modules/mocks/index.js | 2 +- tests/e2e/modules/mocks/weather_current.js | 98 ++++---- tests/e2e/modules/mocks/weather_forecast.js | 196 +++++++++------- tests/e2e/modules/newsfeed_spec.js | 14 +- tests/e2e/modules/weather_spec.js | 135 ++++++----- tests/e2e/modules_position_spec.js | 21 +- tests/e2e/port_config.js | 10 +- tests/e2e/translations_spec.js | 78 +++--- tests/e2e/vendor_spec.js | 18 +- tests/e2e/without_modules.js | 17 +- tests/servers/basic-auth.js | 4 +- tests/unit/classes/class_spec.js | 49 ++-- tests/unit/classes/deprecated_spec.js | 6 +- tests/unit/classes/translator_spec.js | 222 +++++++++--------- tests/unit/classes/utils_spec.js | 14 +- tests/unit/functions/calendar_spec.js | 78 +++--- tests/unit/functions/cmp_versions_spec.js | 24 +- tests/unit/functions/currentweather_spec.js | 55 ++--- tests/unit/functions/newsfeed_spec.js | 14 +- tests/unit/functions/weatherforecast_spec.js | 55 ++--- .../unit/global_vars/defaults_modules_spec.js | 37 ++- tests/unit/global_vars/root_path_spec.js | 36 ++- translations/da.json | 1 - translations/de.json | 2 +- translations/en.json | 2 +- translations/es.json | 2 +- translations/fi.json | 4 +- translations/gr.json | 32 +-- translations/hr.json | 2 +- translations/id.json | 4 +- translations/nb.json | 2 +- translations/nl.json | 2 +- translations/nn.json | 2 +- translations/pt-br.json | 2 +- translations/ro.json | 2 +- translations/tlh.json | 2 +- translations/tr.json | 7 +- translations/translations.js | 81 +++---- translations/uk.json | 2 +- vendor/vendor.js | 8 +- 160 files changed, 2369 insertions(+), 2210 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 04cc305d..92423b0b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,5 +1,4 @@ -Contribution Policy for MagicMirror² -==================================== +# Contribution Policy for MagicMirror² Thanks for contributing to MagicMirror²! @@ -30,7 +29,7 @@ Problems installing or configuring your MagicMirror? Check out: [https://forum.m When submitting a new issue, please supply the following information: -**Platform**: Place your platform here... give us your web browser/Electron version *and* your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). +**Platform**: Place your platform here... give us your web browser/Electron version _and_ your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). **Node Version**: Make sure it's version 0.12.13 or later. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 43d92597..e3ececd6 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,28 +1,33 @@ ## I'm not sure if this is a bug + If you're not sure if it's a real bug or if it's just you, please open a topic on the forum: [https://forum.magicmirror.builders/category/15/bug-hunt](https://forum.magicmirror.builders/category/15/bug-hunt) ## I'm having troubles installing or configuring MagicMirror + Problems installing or configuring your MagicMirror? Check out: [https://forum.magicmirror.builders/category/10/troubleshooting](https://forum.magicmirror.builders/category/10/troubleshooting) ## I found a bug in the MagicMirror installer + If you are facing an issue or found a bug while trying to install MagicMirror via the installer please report it in the respective GitHub repository: [https://github.com/sdetweil/MagicMirror_scripts](https://github.com/sdetweil/MagicMirror_scripts) ## I found a bug in the MagicMirror Docker image + If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the GitHub repository of the MagicMirror Docker image: [https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) --- ## I found a bug in MagicMirror -Please make sure to only submit reproducible issues. You can safely remove everything above the dividing line. + +Please make sure to only submit reproducible issues. You can safely remove everything above the dividing line. When submitting a new issue, please supply the following information: -**Platform**: Place your platform here... give us your web browser/Electron version *and* your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). +**Platform**: Place your platform here... give us your web browser/Electron version _and_ your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX). **Node Version**: Make sure it's version 8 or later. -**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.log` file. +**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.log` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1462d111..28b71616 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,8 +7,7 @@ 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. -* If it includes major visual changes please add screenshots. +- 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. +- If it includes major visual changes please add screenshots. diff --git a/CHANGELOG.md b/CHANGELOG.md index 87a0fb89..6630f8a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,24 +7,27 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## [2.12.0] - Unreleased (Develop Branch) -*This release is scheduled to be released on 2020-07-01.* +_This release is scheduled to be released on 2020-07-01._ ### Added - Added prettier for an even cleaner codebase ### Updated + - Cleaned up alert module code - Cleaned up check_config code - Replaced grunt-based linters with their non-grunt equivalents - Switch to most of the eslint:recommended rules and fix warnings -- Replaced insecure links with https ones +- Replaced insecure links with https ones - Cleaned up all "no-undef" warnings from eslint ### Deleted + - Removed truetype (ttf) fonts ### Fixed + - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) - Add backward compatibility for old module code in socketclient.js [#1973](https://github.com/MichMich/MagicMirror/issues/1973) @@ -37,11 +40,13 @@ In the past years the project has grown a lot. This came with a huge downside: p For more information regarding this major change, please check issue [#1860](https://github.com/MichMich/MagicMirror/issues/1860). ### Deleted + - Remove installers. - Remove externalized scripts. - Remove jshint dependency, instead eslint checks your config file now ### Added + - Brazilian translation for "FEELS". - Ukrainian translation. - Finnish translation for "PRECIP", "UPDATE_INFO_MULTIPLE" and "UPDATE_INFO_SINGLE". @@ -56,6 +61,7 @@ For more information regarding this major change, please check issue [#1860](htt - Add HTTPS support for clientonly-mode. ### Fixed + - Force declaration of public ip address in config file (ISSUE #1852) - Fixes `run-start.sh`: If running in docker-container, don't check the environment, just start electron (ISSUE #1859) - Fix calendar time offset for recurring events crossing Daylight Savings Time (ISSUE #1798) @@ -66,6 +72,7 @@ For more information regarding this major change, please check issue [#1860](htt - Fix update checking skipping 3rd party modules the first time ### Changed + - Remove documentation from core repository and link to new dedicated docs site: [docs.magicmirror.builders](https://docs.magicmirror.builders). - Updated config.js.sample: Corrected some grammar on `config.js.sample` comment section. - Removed `run-start.sh` script and update start commands: @@ -79,6 +86,7 @@ For more information regarding this major change, please check issue [#1860](htt ## [2.10.1] - 2020-01-10 ### Changed + - Updated README.md: Added links to the official documentation website and remove links to broken installer. ## [2.10.0] - 2020-01-01 @@ -88,12 +96,14 @@ Special thanks to @sdetweil for all his great contributions! ℹ️ **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`. ### Added + - Timestamps in log output. - Padding in dateheader mode of the calendar module. - New upgrade script to help users consume regular updates installers/upgrade-script.sh. - New script to help setup pm2, without install installers/fixuppm2.sh. ### Updated + - Updated lower bound of `lodash` and `helmet` dependencies for security patches. - Updated compliments.js to handle newline in text, as textfields to not interpolate contents. - Updated raspberry.sh installer script to handle new platform issues, split node/npm, pm2, and screen saver changes. @@ -102,6 +112,7 @@ Special thanks to @sdetweil for all his great contributions! - Only check for xwindows running if not on macOS. ### Fixed + - Fixed issue in weatherforecast module where predicted amount of rain was not using the decimal symbol specified in config.js. - Module header now updates correctly, if a module need to dynamically show/hide its header based on a condition. - Fix handling of config.js for serverOnly mode commented out. @@ -114,18 +125,21 @@ Special thanks to @sdetweil for all his great contributions! ℹ️ **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`. If you are having issues running Electron, make sure your [Raspbian is up to date](https://www.raspberrypi.org/documentation/raspbian/updating.md). ### Added + - Spanish translation for "PRECIP". - Adding a Malay (Malaysian) translation for MagicMirror². - Add test check URLs of vendors 200 and 404 HTTP CODE. - Add tests for new weather module and helper to stub ajax requests. ### Updated + - Updatenotification module: Display update notification for a limited (configurable) time. - Enabled e2e/vendor_spec.js tests. - The css/custom.css will be renamed after the next release. We've added into `run-start.sh` an instruction by GIT to ignore with `--skip-worktree` and `rm --cached`. [#1540](https://github.com/MichMich/MagicMirror/issues/1540) - Disable sending of notification CLOCK_SECOND when displaySeconds is false. ### Fixed + - Updatenotification module: Properly handle race conditions, prevent crash. - Send `NEWS_FEED` notification also for the first news messages which are shown. - Fixed issue where weather module would not refresh data after a network or API outage. [#1722](https://github.com/MichMich/MagicMirror/issues/1722) @@ -137,6 +151,7 @@ Special thanks to @sdetweil for all his great contributions! ℹ️ **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`. If you are having issues running Electron, make sure your [Raspbian is up to date](https://www.raspberrypi.org/documentation/raspbian/updating.md). ### Added + - Option to show event location in calendar - Finnish translation for "Feels" and "Weeks" - Russian translation for “Feels” @@ -156,6 +171,7 @@ Special thanks to @sdetweil for all his great contributions! - Added to `newsfeed.js`: in order to design the news article better with css, three more class-names were introduced: newsfeed-desc, newsfeed-desc, newsfeed-desc ### Updated + - English translation for "Feels" to "Feels like" - Fixed the example calendar url in `config.js.sample` - Update `ical.js` to solve various calendar issues. @@ -163,6 +179,7 @@ Special thanks to @sdetweil for all his great contributions! - Only update clock once per minute when seconds aren't shown ### Fixed + - Fixed uncaught exception, race condition on module update - Fixed issue [#1696](https://github.com/MichMich/MagicMirror/issues/1696), some ical files start date to not parse to date type - Allowance HTML5 autoplay-policy (policy is changed from Chrome 66 updates) @@ -174,6 +191,7 @@ Special thanks to @sdetweil for all his great contributions! - Updated the fetchedLocationName variable in currentweather.js so that city shows up in the header ### Updated installer + - give non-pi2+ users (pi0, odroid, jetson nano, mac, windows, ...) option to continue install - use current username vs hardcoded 'pi' to support non-pi install - check for npm installed. node install doesn't do npm anymore @@ -190,6 +208,7 @@ Fixed `package.json` version number. ℹ️ **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`. If you are having issues running Electron, make sure your [Raspbian is up to date](https://www.raspberrypi.org/documentation/raspbian/updating.md). ### Added + - Italian translation for "Feels" - Basic Klingon (tlhIngan Hol) translations - Disabled the screensaver on raspbian with installation script @@ -203,12 +222,14 @@ Fixed `package.json` version number. - Add `name` config option for calendars to be sent along with event broadcasts ### Updated + - Bumped the Electron dependency to v3.0.13 to support the most recent Raspbian. [#1500](https://github.com/MichMich/MagicMirror/issues/1500) - Updated modernizr code in alert module, fixed a small typo there too - More verbose error message on console if the config is malformed - Updated installer script to install Node.js version 10.x ### Fixed + - Fixed temperature displays in currentweather and weatherforecast modules [#1503](https://github.com/MichMich/MagicMirror/issues/1503), [#1511](https://github.com/MichMich/MagicMirror/issues/1511). - Fixed unhandled error on bad git data in updatenotification module [#1285](https://github.com/MichMich/MagicMirror/issues/1285). - Weather forecast now works with openweathermap in new weather module. Daily data are displayed, see issue [#1504](https://github.com/MichMich/MagicMirror/issues/1504). @@ -217,7 +238,7 @@ Fixed `package.json` version number. - Installation script problems with raspbian - Calendar: only show repeating count if the event is actually repeating [#1534](https://github.com/MichMich/MagicMirror/pull/1534) - Calendar: Fix exdate handling when multiple values are specified (comma separated) -- Calendar: Fix relative date handling for fulldate events, calculate difference always from start of day [#1572](https://github.com/MichMich/MagicMirror/issues/1572) +- Calendar: Fix relative date handling for fulldate events, calculate difference always from start of day [#1572](https://github.com/MichMich/MagicMirror/issues/1572) - Fix null dereference in moduleNeedsUpdate when the module isn't visible - Calendar: Fixed event end times by setting default calendarEndTime to "LT" (Local time format). [#1479] - Calendar: Fixed missing calendar fetchers after server process restarts [#1589](https://github.com/MichMich/MagicMirror/issues/1589) @@ -226,6 +247,7 @@ Fixed `package.json` version number. - Fix documentation of `useKMPHwind` option in currentweather ### New weather module + - Fixed weather forecast table display [#1499](https://github.com/MichMich/MagicMirror/issues/1499). - Dimmed loading indicator for weather forecast. - Implemented config option `decimalSymbol` [#1499](https://github.com/MichMich/MagicMirror/issues/1499). @@ -243,11 +265,13 @@ Fixed `package.json` version number. ℹ️ **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`. If you are having issues updating, make sure you are running the latest version of Node. ### ✨ Experimental ✨ + - New default [module weather](modules/default/weather). This module will eventually replace the current `currentweather` and `weatherforecast` modules. The new module is still pretty experimental, but it's included so you can give it a try and help us improve this module. Please give us you feedback using [this forum post](https://forum.magicmirror.builders/topic/9335/default-weather-module-refactoring). A huge, huge, huge thanks to user @fewieden for all his hard work on the new `weather` module! ### Added + - Possibility to add classes to the cell of symbol, title and time of the events of calendar. - Font-awesome 5, still has 4 for backwards compatibility. - Missing `showEnd` in calendar documentation @@ -262,6 +286,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Documentation for the existing `scale` option in the Weather Forecast module. ### Fixed + - Allow parsing recurring calendar events where the start date is before 1900 - Fixed Polish translation for Single Update Info - Ignore entries with unparseable details in the calendar module @@ -269,15 +294,17 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Bug in newsfeed when `removeStartTags` is used on the description [#1478](https://github.com/MichMich/MagicMirror/issues/1478) ### Updated + - The default calendar setting `showEnd` is changed to `false`. ### Changed -- The Weather Forecast module by default displays the ° symbol after every numeric value to be consistent with the Current Weather module. +- The Weather Forecast module by default displays the ° symbol after every numeric value to be consistent with the Current Weather module. ## [2.5.0] - 2018-10-01 ### Added + - Romanian translation for "Feels" - Support multi-line compliments - Simplified Chinese translation for "Feels" @@ -292,6 +319,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Support for showing end of events through config parameters showEnd and dateEndFormat ### Fixed + - Fixed gzip encoded calendar loading issue #1400. - Mixup between german and spanish translation for newsfeed. - Fixed close dates to be absolute, if no configured in the config.js - module Calendar @@ -337,11 +365,13 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add update translations for Português Brasileiro ### Changed + - Upgrade to Electron 2.0.0. - Remove yarn-or-npm which breaks production builds. - Invoke module suspend even if no dom content. [#1308](https://github.com/MichMich/MagicMirror/issues/1308) ### Fixed + - Fixed issue where wind chill could not be displayed in Fahrenheit. [#1247](https://github.com/MichMich/MagicMirror/issues/1247) - Fixed issues where a module crashes when it tries to dismiss a non existing alert. [#1240](https://github.com/MichMich/MagicMirror/issues/1240) - In default module currentWeather/currentWeather.js line 296, 300, self.config.animationSpeed can not be found because the notificationReceived function does not have "self" variable. @@ -354,6 +384,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Fixed issue where heat index and wind chill were reporting incorrect values in Kelvin. [#1263](https://github.com/MichMich/MagicMirror/issues/1263) ### Updated + - Updated Italian translation - Updated German translation - Updated Dutch translation @@ -361,6 +392,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we ## [2.3.1] - 2018-04-01 ### Fixed + - Downgrade electron to 1.4.15 to solve the black screen issue.[#1243](https://github.com/MichMich/MagicMirror/issues/1243) ## [2.3.0] - 2018-04-01 @@ -381,6 +413,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add dc:date to parsing in newsfeed module, which allows parsing of more rss feeds. ### Changed + - Add link to GitHub repository which contains the respective Dockerfile. - Optimized automated unit tests cloneObject, cmpVersions - Update notifications use now translation templates instead of normal strings. @@ -388,6 +421,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Changed Electron dependency to v1.7.13. ### Fixed + - News article in fullscreen (iframe) is now shown in front of modules. - Forecast respects maxNumberOfDays regardless of endpoint. - Fix exception on translation of objects. @@ -405,6 +439,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we ## [2.2.1] - 2018-01-01 ### Fixed + - Fixed linting errors. ## [2.2.0] - 2018-01-01 @@ -412,10 +447,12 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Changed + - Calendar week is now handled with a variable translation in order to move number language specific. - Reverted the Electron dependency back to 1.4.15 since newer version don't seem to work on the Raspberry Pi very well. ### Added + - Add option to use [Nunjucks](https://mozilla.github.io/nunjucks/) templates in modules. (See `helloworld` module as an example.) - Add Bulgarian translations for MagicMirror² and Alert module. - Add graceful shutdown of modules by calling `stop` function of each `node_helper` on SIGINT before exiting. @@ -429,6 +466,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add option for decimal symbols other than the decimal point for temperature values in both default weather modules: WeatherForecast and CurrentWeather. ### Fixed + - Fixed issue with calendar module showing more than `maximumEntries` allows - WeatherForecast and CurrentWeather are now using HTTPS instead of HTTP - Correcting translation for Indonesian language @@ -439,9 +477,11 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Changed + - Remove Roboto fonts files inside `fonts` and these are installed by npm install command. ### Added + - Add `clientonly` script to start only the electron client for a remote server. - Add symbol and color properties of event when `CALENDAR_EVENTS` notification is broadcasted from `default/calendar` module. - Add `.vscode/` folder to `.gitignore` to keep custom Visual Studio Code config out of git. @@ -458,6 +498,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add Slack badge to Readme. ### Updated + - Changed 'default.js' - listen on all attached interfaces by default. - Add execution of `npm list` after the test are ran in Travis CI. - Change hooks for the vendors e2e tests. @@ -466,6 +507,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Set version of the `express-ipfilter` on 0.3.1. ### Fixed + - Fixed issue with incorrect alignment of analog clock when displayed in the center column of the MM. - Fixed ipWhitelist behaviour to make empty whitelist ([]) allow any and all hosts access to the MM. - Fixed issue with calendar module where 'excludedEvents' count towards 'maximumEntries'. @@ -476,11 +518,13 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we ## [2.1.2] - 2017-07-01 ### Changed + - Revert Docker related changes in favor of [docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror). All Docker images are outsourced. ([#856](https://github.com/MichMich/MagicMirror/pull/856)) - Change Docker base image (Debian + Node) to an arm based distro (AlpineARM + Node) ([#846](https://github.com/MichMich/MagicMirror/pull/846)) - Fix the dockerfile to have it running from the first time. ### Added + - Add in option to wrap long calendar events to multiple lines using `wrapEvents` configuration option. - Add test e2e `show title newsfeed` for newsfeed module. - Add task to check configuration file. @@ -499,11 +543,13 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Added Romanian translation. ### Updated + - Added missing keys to Polish translation. - Added missing key to German translation. - Added better translation with flexible word order to Finnish translation. ### Fixed + - Fix instruction in README for using automatically installer script. - Bug of duplicated compliments as described in [here](https://forum.magicmirror.builders/topic/2381/compliments-module-stops-cycling-compliments). - Fix double message about port when server is starting @@ -517,6 +563,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### 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. @@ -532,8 +579,9 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Restructured Test Suite. ### Added + - Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673)). -- Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays`. +- 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. @@ -574,6 +622,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Added a configurable Week section to the clock module. ### Fixed + - Update .gitignore to not ignore default modules folder. - Remove white flash on boot up. - Added `update` in Raspberry Pi installation script. @@ -590,6 +639,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` ### Added + - Finnish translation. - Danish translation. - Turkish translation. @@ -620,6 +670,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add root_path for global vars ### Updated + - Modified translations for Frysk. - Modified core English translations. - Updated package.json as a result of Snyk security update. @@ -630,6 +681,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Modules are now secure, and Helmet is now used to prevent abuse of the Mirror's API. ### Fixed + - Solve an issue where module margins would appear when the first module of a section was hidden. - Solved visual display errors on chrome, if all modules in one of the right sections are hidden. - Global and Module default config values are no longer modified when setting config values. @@ -640,6 +692,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we ## [2.0.5] - 2016-09-20 ### Added + - Added ability to remove tags from the beginning or end of newsfeed items in 'newsfeed.js'. - Added ability to define "the day after tomorrow" for calendar events (Definition for German and Dutch already included). - Added CII Badge (we are compliant with the CII Best Practices) @@ -647,11 +700,13 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Add the ability to turn off and on the date display in the Clock Module ### Fixed + - Fix typo in installer. - Add message to unsupported Pi error to mention that Pi Zeros must use server only mode, as ARMv6 is unsupported. Closes #374. - Fix API url for weather API. ### Updated + - Force fullscreen when kioskmode is active. - Update the .github templates and information with more modern information. - Update the Gruntfile with a more functional StyleLint implementation. @@ -659,6 +714,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we ## [2.0.4] - 2016-08-07 ### Added + - Brazilian Portuguese Translation. - Option to enable Kiosk mode. - Added ability to start the app with Dev Tools. @@ -666,6 +722,7 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Greek Translation ### Fixed + - Prevent `getModules()` selectors from returning duplicate entries. - Append endpoints of weather modules with `/` to retrieve the correct data. (Issue [#337](https://github.com/MichMich/MagicMirror/issues/337)) - Corrected grammar in `module.js` from 'suspend' to 'suspended'. @@ -674,55 +731,72 @@ A huge, huge, huge thanks to user @fewieden for all his hard work on the new `we - Fix issue where translation loading prevented the UI start-up when the language was set to 'en'. (Issue [#388](https://github.com/MichMich/MagicMirror/issues/388)) ### Updated + - Updated package.json to fix possible vulnerabilities. (Using Snyk) - Updated weathericons - Updated default weatherforecast to work with the new icons. - More detailed error message in case config file couldn't be loaded. ## [2.0.3] - 2016-07-12 + ### Added + - Add max newsitems parameter to the newsfeed module. - Translations for Simplified Chinese, Traditional Chinese and Japanese. - Polish Translation - Add an analog clock in addition to the digital one. ### Fixed + - Edit Alert Module to display title & message if they are provided in the notification (Issue [#300](https://github.com/MichMich/MagicMirror/issues/300)) - Removed 'null' reference from updateModuleContent(). This fixes recent Edge and Internet Explorer browser displays (Issue [#319](https://github.com/MichMich/MagicMirror/issues/319)) ### Changed + - Added default string to calendar titleReplace. ## [2.0.2] - 2016-06-05 + ### Added + - Norwegian Translations (nb and nn) - Portuguese Translation - Swedish Translation ### Fixed + - Added reference to Italian Translation. - 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 + - Add option to use locationID in weather modules. ## [2.0.1] - 2016-05-18 + ### Added + - Changelog - Italian Translation ### Changed + - Improve the installer by fetching the latest Node.js without any 3rd party interferences. ## [2.0.0] - 2016-05-03 + ### Initial release of MagicMirror² + It includes (but is not limited to) the following features: + - Modular system allowing 3rd party plugins. - An Node/Electron based application taking away the need for external servers or browsers. - A complete development API documentation. - Small cute fairies that kiss you while you sleep. ## [1.0.0] - 2014-02-16 + ### Initial release of MagicMirror. + This was part of the blogpost: [https://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the](https://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the) diff --git a/LICENSE.md b/LICENSE.md index 07c1fb07..ec13937f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,5 +1,4 @@ -The MIT License (MIT) -===================== +# The MIT License (MIT) Copyright © 2016-2019 Michael Teeuw diff --git a/README.md b/README.md index 942f98bf..e09e2e34 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,11 @@ MagicMirror² focuses on a modular plugin system and uses [Electron](https://www.electronjs.org/) as an application wrapper. So no more web server or browser installs necessary! ## Documentation + For the full documentation including **[installation instructions](https://docs.magicmirror.builders/getting-started/installation.html)**, please visit our dedicated documentation website: [https://docs.magicmirror.builders](https://docs.magicmirror.builders). ## Links + - Website: [https://magicmirror.builders](https://magicmirror.builders) - Documentation: [https://docs.magicmirror.builders](https://docs.magicmirror.builders) - Forum: [https://forum.magicmirror.builders](https://forum.magicmirror.builders) @@ -28,7 +30,6 @@ For the full documentation including **[installation instructions](https://docs. Contributions of all kinds are welcome, not only in the form of code but also with regards bug reports and documentation. For the full contribution guidelines, check out: [https://docs.magicmirror.builders/getting-started/contributing.html](https://docs.magicmirror.builders/getting-started/contributing.html) - ## Enjoying MagicMirror? Consider a donation! MagicMirror² is opensource and free. That doesn't mean we don't need any money. diff --git a/clientonly/index.js b/clientonly/index.js index 4b79751f..7d1c4fe3 100644 --- a/clientonly/index.js +++ b/clientonly/index.js @@ -32,16 +32,16 @@ var configData = ""; // Gather incoming data - response.on("data", function(chunk) { + response.on("data", function (chunk) { configData += chunk; }); // Resolve promise at the end of the HTTP/HTTPS stream - response.on("end", function() { + response.on("end", function () { resolve(JSON.parse(configData)); }); }); - request.on("error", function(error) { + request.on("error", function (error) { reject(new Error(`Unable to read config from server (${url} (${error.message}`)); }); }); @@ -96,7 +96,6 @@ console.log(`There something wrong. The clientonly is not running code ${code}`); } }); - }) .catch(function (reason) { fail(`Unable to connect to server: (${reason})`); @@ -104,4 +103,4 @@ } else { fail(); } -}()); +})(); diff --git a/fonts/package.json b/fonts/package.json index 604a492e..7cea509b 100644 --- a/fonts/package.json +++ b/fonts/package.json @@ -1,15 +1,15 @@ { - "name": "magicmirror-fonts", - "description": "Package for fonts 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": { - "roboto-fontface": "^0.10.0" - } + "name": "magicmirror-fonts", + "description": "Package for fonts 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": { + "roboto-fontface": "^0.10.0" + } } diff --git a/fonts/roboto.css b/fonts/roboto.css index 853293b8..9bf4fbc9 100644 --- a/fonts/roboto.css +++ b/fonts/roboto.css @@ -2,21 +2,14 @@ font-family: Roboto; font-style: normal; font-weight: 100; - src: - local("Roboto Thin"), - local("Roboto-Thin"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff") format("woff"); + src: local("Roboto Thin"), local("Roboto-Thin"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff") format("woff"); } @font-face { font-family: "Roboto Condensed"; font-style: normal; font-weight: 300; - src: - local("Roboto Condensed Light"), - local("RobotoCondensed-Light"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff2") format("woff2"), + src: local("Roboto Condensed Light"), local("RobotoCondensed-Light"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff") format("woff"); } @@ -24,10 +17,7 @@ font-family: "Roboto Condensed"; font-style: normal; font-weight: 400; - src: - local("Roboto Condensed"), - local("RobotoCondensed-Regular"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff2") format("woff2"), + src: local("Roboto Condensed"), local("RobotoCondensed-Regular"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff") format("woff"); } @@ -35,10 +25,7 @@ font-family: "Roboto Condensed"; font-style: normal; font-weight: 700; - src: - local("Roboto Condensed Bold"), - local("RobotoCondensed-Bold"), - url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff2") format("woff2"), + src: local("Roboto Condensed Bold"), local("RobotoCondensed-Bold"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff") format("woff"); } @@ -46,42 +33,26 @@ font-family: Roboto; font-style: normal; font-weight: 400; - src: - local("Roboto"), - local("Roboto-Regular"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff") format("woff"); + src: local("Roboto"), local("Roboto-Regular"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff") format("woff"); } @font-face { font-family: Roboto; font-style: normal; font-weight: 500; - src: - local("Roboto Medium"), - local("Roboto-Medium"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff") format("woff"); + src: local("Roboto Medium"), local("Roboto-Medium"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff") format("woff"); } @font-face { font-family: Roboto; font-style: normal; font-weight: 700; - src: - local("Roboto Bold"), - local("Roboto-Bold"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff") format("woff"); + src: local("Roboto Bold"), local("Roboto-Bold"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff") format("woff"); } @font-face { font-family: Roboto; font-style: normal; font-weight: 300; - src: - local("Roboto Light"), - local("Roboto-Light"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2") format("woff2"), - url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff") format("woff"); + src: local("Roboto Light"), local("Roboto-Light"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2") format("woff2"), url("node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff") format("woff"); } diff --git a/js/app.js b/js/app.js index 852e0d13..fe811a95 100644 --- a/js/app.js +++ b/js/app.js @@ -44,7 +44,7 @@ process.on("uncaughtException", function (err) { /* App - The core app. */ -var App = function() { +var App = function () { var nodeHelpers = []; /* loadConfig(callback) @@ -53,14 +53,14 @@ var App = function() { * * argument callback function - The callback function. */ - var loadConfig = function(callback) { + var loadConfig = function (callback) { console.log("Loading config ..."); var defaults = require(__dirname + "/defaults.js"); // 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); } @@ -82,23 +82,19 @@ var App = function() { } }; - var checkDeprecatedOptions = function(userConfig) { + var checkDeprecatedOptions = function (userConfig) { var deprecated = require(global.root_path + "/js/deprecated.js"); var deprecatedOptions = deprecated.configs; var usedDeprecated = []; - deprecatedOptions.forEach(function(option) { + deprecatedOptions.forEach(function (option) { if (userConfig.hasOwnProperty(option)) { usedDeprecated.push(option); } }); if (usedDeprecated.length > 0) { - 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.") - ); + 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.")); } }; @@ -107,8 +103,7 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModule = function(module, callback) { - + var loadModule = function (module, callback) { var elements = module.split("/"); var moduleName = elements[elements.length - 1]; var moduleFolder = __dirname + "/../modules/" + module; @@ -156,13 +151,13 @@ var App = function() { * * argument module string - The name of the module (including subpath). */ - var loadModules = function(modules, callback) { + var loadModules = function (modules, callback) { console.log("Loading module helpers ..."); - var loadNextModule = function() { + var loadNextModule = function () { if (modules.length > 0) { var nextModule = modules[0]; - loadModule(nextModule, function() { + loadModule(nextModule, function () { modules = modules.slice(1); loadNextModule(); }); @@ -205,9 +200,8 @@ var App = function() { * * argument callback function - The callback function. */ - this.start = function(callback) { - - loadConfig(function(c) { + this.start = function (callback) { + loadConfig(function (c) { config = c; var modules = []; @@ -219,8 +213,8 @@ var App = function() { } } - loadModules(modules, function() { - var server = new Server(config, function(app, io) { + loadModules(modules, function () { + var server = new Server(config, function (app, io) { console.log("Server started ..."); for (var h in nodeHelpers) { @@ -245,7 +239,7 @@ var App = function() { * This calls each node_helper's STOP() function, if it exists. * Added to fix #1056 */ - this.stop = function() { + this.stop = function () { for (var h in nodeHelpers) { var nodeHelper = nodeHelpers[h]; if (typeof nodeHelper.stop === "function") { @@ -262,7 +256,9 @@ var App = function() { */ process.on("SIGINT", () => { console.log("[SIGINT] Received. Shutting down server..."); - setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds + setTimeout(() => { + process.exit(0); + }, 3000); // Force quit after 3 seconds this.stop(); process.exit(0); }); @@ -271,7 +267,9 @@ var App = function() { */ process.on("SIGTERM", () => { console.log("[SIGTERM] Received. Shutting down server..."); - setTimeout(() => { process.exit(0); }, 3000); // Force quit after 3 seconds + setTimeout(() => { + process.exit(0); + }, 3000); // Force quit after 3 seconds this.stop(); process.exit(0); }); diff --git a/js/check_config.js b/js/check_config.js index f73e4bf9..f713657b 100644 --- a/js/check_config.js +++ b/js/check_config.js @@ -53,13 +53,15 @@ function checkConfigFile() { console.info(Utils.colors.info("Checking file... "), configFileName); // I'm not sure if all ever is utf-8 fs.readFile(configFileName, "utf-8", function (err, data) { - if (err) { throw err; } + if (err) { + throw err; + } const messages = linter.verify(data, config); if (messages.length === 0) { console.log("Your configuration file doesn't contain syntax errors :)"); return true; } else { - messages.forEach(error => { + messages.forEach((error) => { console.log("Line", error.line, "col", error.column, error.message); }); } diff --git a/js/class.js b/js/class.js index aab1799e..f52ac405 100644 --- a/js/class.js +++ b/js/class.js @@ -9,10 +9,14 @@ */ (function () { var initializing = false; - var fnTest = /xyz/.test(function () { xyz; }) ? /\b_super\b/ : /.*/; + var fnTest = /xyz/.test(function () { + xyz; + }) + ? /\b_super\b/ + : /.*/; // The base Class implementation (does nothing) - this.Class = function () { }; + this.Class = function () {}; // Create a new Class that inherits from this class Class.extend = function (prop) { @@ -32,23 +36,25 @@ // Copy the properties over onto the new prototype for (var name in prop) { // Check if we're overwriting an existing function - prototype[name] = typeof prop[name] === "function" && - typeof _super[name] === "function" && fnTest.test(prop[name]) ? (function (name, fn) { - return function () { - var tmp = this._super; + prototype[name] = + typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) + ? (function (name, fn) { + return function () { + var tmp = this._super; - // Add a new ._super() method that is the same method - // but on the super-class - this._super = _super[name]; + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; - // The method only need to be bound temporarily, so we - // remove it when we're done executing - var ret = fn.apply(this, arguments); - this._super = tmp; + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; - return ret; - }; - })(name, prop[name]) : prop[name]; + return ret; + }; + })(name, prop[name]) + : prop[name]; } // The dummy class constructor diff --git a/js/defaults.js b/js/defaults.js index 36275e6c..c1a53396 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -8,7 +8,7 @@ */ var address = "localhost"; var port = 8080; -if (typeof(mmPort) !== "undefined") { +if (typeof mmPort !== "undefined") { port = mmPort; } var defaults = { @@ -68,14 +68,16 @@ var defaults = { config: { text: "www.michaelteeuw.nl" } - }, + } ], paths: { modules: "modules", vendor: "vendor" - }, + } }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = defaults;} +if (typeof module !== "undefined") { + module.exports = defaults; +} diff --git a/js/deprecated.js b/js/deprecated.js index 1f832e81..4f56b41d 100644 --- a/js/deprecated.js +++ b/js/deprecated.js @@ -7,8 +7,10 @@ */ var deprecated = { - configs: ["kioskmode"], + configs: ["kioskmode"] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = deprecated;} +if (typeof module !== "undefined") { + module.exports = deprecated; +} diff --git a/js/electron.js b/js/electron.js index e5406de6..71eed9b8 100644 --- a/js/electron.js +++ b/js/electron.js @@ -62,21 +62,21 @@ function createWindow() { } // Set responders for window events. - mainWindow.on("closed", function() { + mainWindow.on("closed", function () { mainWindow = null; }); if (config.kioskmode) { - mainWindow.on("blur", function() { + mainWindow.on("blur", function () { mainWindow.focus(); }); - mainWindow.on("leave-full-screen", function() { + mainWindow.on("leave-full-screen", function () { mainWindow.setFullScreen(true); }); - mainWindow.on("resize", function() { - setTimeout(function() { + mainWindow.on("resize", function () { + setTimeout(function () { mainWindow.reload(); }, 1000); }); @@ -85,17 +85,17 @@ function createWindow() { // This method will be called when Electron has finished // initialization and is ready to create browser windows. -app.on("ready", function() { +app.on("ready", function () { console.log("Launching application."); createWindow(); }); // Quit when all windows are closed. -app.on("window-all-closed", function() { +app.on("window-all-closed", function () { createWindow(); }); -app.on("activate", function() { +app.on("activate", function () { // On OS X it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (mainWindow === null) { @@ -112,7 +112,9 @@ app.on("activate", function() { app.on("before-quit", (event) => { console.log("Shutting down server..."); event.preventDefault(); - setTimeout(() => { process.exit(0); }, 3000); // Force-quit after 3 seconds. + setTimeout(() => { + process.exit(0); + }, 3000); // Force-quit after 3 seconds. core.stop(); process.exit(0); }); @@ -120,7 +122,7 @@ app.on("before-quit", (event) => { // Start the core application if server is run on localhost // This starts all node helpers and starts the webserver. if (["localhost", "127.0.0.1", "::1", "::ffff:127.0.0.1", undefined].indexOf(config.address) > -1) { - core.start(function(c) { + core.start(function (c) { config = c; }); } diff --git a/js/loader.js b/js/loader.js index c69f92ae..50e7176d 100644 --- a/js/loader.js +++ b/js/loader.js @@ -6,8 +6,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -var Loader = (function() { - +var Loader = (function () { /* Create helper variables */ var loadedModuleFiles = []; @@ -19,14 +18,13 @@ var Loader = (function() { /* loadModules() * Loops thru all modules and requests load for every module. */ - var loadModules = function() { - + var loadModules = function () { var moduleData = getModuleData(); - var loadNextModule = function() { + var loadNextModule = function () { if (moduleData.length > 0) { var nextModule = moduleData[0]; - loadModule(nextModule, function() { + loadModule(nextModule, function () { moduleData = moduleData.slice(1); loadNextModule(); }); @@ -35,11 +33,10 @@ var Loader = (function() { // This is done after all the modules so we can // overwrite all the defined styles. - loadFile(config.customCss, function() { + loadFile(config.customCss, function () { // custom.css loaded. Start all modules. startModules(); }); - } }; @@ -49,7 +46,7 @@ var Loader = (function() { /* startModules() * Loops thru all modules and requests start for every module. */ - var startModules = function() { + var startModules = function () { for (var m in moduleObjects) { var module = moduleObjects[m]; module.start(); @@ -64,7 +61,7 @@ var Loader = (function() { * * return array - module data as configured in config */ - var getAllModules = function() { + var getAllModules = function () { return config.modules; }; @@ -73,7 +70,7 @@ var Loader = (function() { * * return array - Module information. */ - var getModuleData = function() { + var getModuleData = function () { var modules = getAllModules(); var moduleFiles = []; @@ -97,12 +94,12 @@ var Loader = (function() { index: m, identifier: "module_" + m + "_" + module, name: moduleName, - path: moduleFolder + "/" , + path: moduleFolder + "/", file: moduleName + ".js", position: moduleData.position, header: moduleData.header, config: moduleData.config, - classes: (typeof moduleData.classes !== "undefined") ? moduleData.classes + " " + module : module + classes: typeof moduleData.classes !== "undefined" ? moduleData.classes + " " + module : module }); } @@ -115,13 +112,13 @@ var Loader = (function() { * argument callback function - Function called when done. * argument module object - Information about the module we want to load. */ - var loadModule = function(module, callback) { + var loadModule = function (module, callback) { var url = module.path + "/" + module.file; - var afterLoad = function() { + var afterLoad = function () { var moduleObject = Module.create(module.name); if (moduleObject) { - bootstrapModule(module, moduleObject, function() { + bootstrapModule(module, moduleObject, function () { callback(); }); } else { @@ -132,7 +129,7 @@ var Loader = (function() { if (loadedModuleFiles.indexOf(url) !== -1) { afterLoad(); } else { - loadFile(url, function() { + loadFile(url, function () { loadedModuleFiles.push(url); afterLoad(); }); @@ -146,16 +143,16 @@ var Loader = (function() { * argument mObj object - Modules instance. * argument callback function - Function called when done. */ - var bootstrapModule = function(module, mObj, callback) { + var bootstrapModule = function (module, mObj, callback) { Log.info("Bootstrapping module: " + module.name); mObj.setData(module); - mObj.loadScripts(function() { + mObj.loadScripts(function () { Log.log("Scripts loaded for: " + module.name); - mObj.loadStyles(function() { + mObj.loadStyles(function () { Log.log("Styles loaded for: " + module.name); - mObj.loadTranslations(function() { + mObj.loadTranslations(function () { Log.log("Translations loaded for: " + module.name); moduleObjects.push(mObj); callback(); @@ -170,52 +167,58 @@ var Loader = (function() { * argument fileName string - Path of the file we want to load. * argument callback function - Function called when done. */ - var loadFile = function(fileName, callback) { - + var loadFile = function (fileName, callback) { var extension = fileName.slice((Math.max(0, fileName.lastIndexOf(".")) || Infinity) + 1); switch (extension.toLowerCase()) { - case "js": - Log.log("Load script: " + fileName); - var script = document.createElement("script"); - script.type = "text/javascript"; - script.src = fileName; - script.onload = function() { - if (typeof callback === "function") {callback();} - }; - script.onerror = function() { - console.error("Error on loading script:", fileName); - if (typeof callback === "function") {callback();} - }; + case "js": + Log.log("Load script: " + fileName); + var script = document.createElement("script"); + script.type = "text/javascript"; + script.src = fileName; + 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": - Log.log("Load stylesheet: " + fileName); - var stylesheet = document.createElement("link"); - stylesheet.rel = "stylesheet"; - stylesheet.type = "text/css"; - stylesheet.href = fileName; - 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("body")[0].appendChild(script); + break; + case "css": + Log.log("Load stylesheet: " + fileName); + var stylesheet = document.createElement("link"); + stylesheet.rel = "stylesheet"; + stylesheet.type = "text/css"; + stylesheet.href = fileName; + 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; + document.getElementsByTagName("head")[0].appendChild(stylesheet); + break; } }; /* Public Methods */ return { - /* loadModules() * Load all modules as defined in the config. */ - loadModules: function() { + loadModules: function () { loadModules(); }, @@ -227,8 +230,7 @@ var Loader = (function() { * argument module Module Object - the module that calls the loadFile function. * argument callback function - Function called when done. */ - loadFile: function(fileName, module, callback) { - + loadFile: function (fileName, module, callback) { if (loadedFiles.indexOf(fileName.toLowerCase()) !== -1) { Log.log("File already loaded: " + fileName); callback(); diff --git a/js/logger.js b/js/logger.js index 60d91b2f..632cf117 100644 --- a/js/logger.js +++ b/js/logger.js @@ -6,10 +6,10 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -const Log = (function() { +const Log = (function () { return { info: Function.prototype.bind.call(console.info, console), - log: Function.prototype.bind.call(console.log, console), + log: Function.prototype.bind.call(console.log, console), error: Function.prototype.bind.call(console.error, console), warn: Function.prototype.bind.call(console.warn, console), group: Function.prototype.bind.call(console.group, console), diff --git a/js/main.js b/js/main.js index 117aed10..07459f0f 100644 --- a/js/main.js +++ b/js/main.js @@ -6,8 +6,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -var MM = (function() { - +var MM = (function () { var modules = []; /* Private Methods */ @@ -16,10 +15,10 @@ var MM = (function() { * Create dom objects for all modules that * are configured for a specific position. */ - var createDomObjects = function() { + var createDomObjects = function () { var domCreationPromises = []; - modules.forEach(function(module) { + modules.forEach(function (module) { if (typeof module.data.position !== "string") { return; } @@ -52,14 +51,16 @@ var MM = (function() { var domCreationPromise = updateDom(module, 0); domCreationPromises.push(domCreationPromise); - domCreationPromise.then(function() { - sendNotification("MODULE_DOM_CREATED", null, null, module); - }).catch(Log.error); + domCreationPromise + .then(function () { + sendNotification("MODULE_DOM_CREATED", null, null, module); + }) + .catch(Log.error); }); updateWrapperStates(); - Promise.all(domCreationPromises).then(function() { + Promise.all(domCreationPromises).then(function () { sendNotification("DOM_OBJECTS_CREATED"); }); }; @@ -69,8 +70,8 @@ var MM = (function() { * * argument position string - The name of the position. */ - var selectWrapper = function(position) { - var classes = position.replace("_"," "); + var selectWrapper = function (position) { + var classes = position.replace("_", " "); var parentWrapper = document.getElementsByClassName(classes); if (parentWrapper.length > 0) { var wrapper = parentWrapper[0].getElementsByClassName("container"); @@ -88,7 +89,7 @@ var MM = (function() { * argument sender Module - The module that sent the notification. * argument sendTo Module - The module to send the notification to. (optional) */ - var sendNotification = function(notification, payload, sender, sendTo) { + var sendNotification = function (notification, payload, sender, sendTo) { for (var m in modules) { var module = modules[m]; if (module !== sender && (!sendTo || module === sendTo)) { @@ -105,8 +106,8 @@ var MM = (function() { * * return Promise - Resolved when the dom is fully updated. */ - var updateDom = function(module, speed) { - return new Promise(function(resolve) { + var updateDom = function (module, speed) { + return new Promise(function (resolve) { var newContentPromise = module.getDom(); var newHeader = module.getHeader(); @@ -115,11 +116,13 @@ var MM = (function() { newContentPromise = Promise.resolve(newContentPromise); } - newContentPromise.then(function(newContent) { - var updatePromise = updateDomWithContent(module, speed, newHeader, newContent); + newContentPromise + .then(function (newContent) { + var updatePromise = updateDomWithContent(module, speed, newHeader, newContent); - updatePromise.then(resolve).catch(Log.error); - }).catch(Log.error); + updatePromise.then(resolve).catch(Log.error); + }) + .catch(Log.error); }); }; @@ -133,8 +136,8 @@ var MM = (function() { * * return Promise - Resolved when the module dom has been updated. */ - var updateDomWithContent = function(module, speed, newHeader, newContent) { - return new Promise(function(resolve) { + var updateDomWithContent = function (module, speed, newHeader, newContent) { + return new Promise(function (resolve) { if (module.hidden || !speed) { updateModuleContent(module, newHeader, newContent); resolve(); @@ -152,7 +155,7 @@ var MM = (function() { return; } - hideModule(module, speed / 2, function() { + hideModule(module, speed / 2, function () { updateModuleContent(module, newHeader, newContent); if (!module.hidden) { showModule(module, speed / 2); @@ -171,7 +174,7 @@ var MM = (function() { * * return bool - Does the module need an update? */ - var moduleNeedsUpdate = function(module, newHeader, newContent) { + var moduleNeedsUpdate = function (module, newHeader, newContent) { var moduleWrapper = document.getElementById(module.identifier); if (moduleWrapper === null) { return false; @@ -201,9 +204,11 @@ var MM = (function() { * argument newHeader String - The new header that is generated. * argument newContent Domobject - The new content that is generated. */ - var updateModuleContent = function(module, newHeader, newContent) { + var updateModuleContent = function (module, newHeader, newContent) { var moduleWrapper = document.getElementById(module.identifier); - if (moduleWrapper === null) {return;} + if (moduleWrapper === null) { + return; + } var headerWrapper = moduleWrapper.getElementsByClassName("module-header"); var contentWrapper = moduleWrapper.getElementsByClassName("module-content"); @@ -221,7 +226,7 @@ var MM = (function() { * argument speed Number - The speed of the hide animation. * argument callback function - Called when the animation is done. */ - var hideModule = function(module, speed, callback, options) { + var hideModule = function (module, speed, callback, options) { options = options || {}; // set lockString if set in options. @@ -238,7 +243,7 @@ var MM = (function() { moduleWrapper.style.opacity = 0; clearTimeout(module.showHideTimer); - module.showHideTimer = setTimeout(function() { + module.showHideTimer = setTimeout(function () { // To not take up any space, we just make the position absolute. // since it's fade out anyway, we can see it lay above or // below other modules. This works way better than adjusting @@ -247,11 +252,15 @@ var MM = (function() { updateWrapperStates(); - if (typeof callback === "function") { callback(); } + if (typeof callback === "function") { + callback(); + } }, speed); } else { // invoke callback even if no content, issue 1308 - if (typeof callback === "function") { callback(); } + if (typeof callback === "function") { + callback(); + } } }; @@ -262,13 +271,13 @@ var MM = (function() { * argument speed Number - The speed of the show animation. * argument callback function - Called when the animation is done. */ - var showModule = function(module, speed, callback, options) { + var showModule = function (module, speed, callback, options) { options = options || {}; // remove lockString if set in options. if (options.lockString) { var index = module.lockStrings.indexOf(options.lockString); - if ( index !== -1) { + if (index !== -1) { module.lockStrings.splice(index, 1); } } @@ -301,12 +310,16 @@ var MM = (function() { moduleWrapper.style.opacity = 1; clearTimeout(module.showHideTimer); - module.showHideTimer = setTimeout(function() { - if (typeof callback === "function") { callback(); } + module.showHideTimer = setTimeout(function () { + if (typeof callback === "function") { + callback(); + } }, speed); } else { // invoke callback - if (typeof callback === "function") { callback(); } + if (typeof callback === "function") { + callback(); + } } }; @@ -321,15 +334,15 @@ var MM = (function() { * an ugly top margin. By using this function, the top bar will be hidden if the * update notification is not visible. */ - var updateWrapperStates = function() { + var updateWrapperStates = 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"]; - positions.forEach(function(position) { + positions.forEach(function (position) { var wrapper = selectWrapper(position); var moduleWrappers = wrapper.getElementsByClassName("module"); var showWrapper = false; - Array.prototype.forEach.call(moduleWrappers, function(moduleWrapper) { + Array.prototype.forEach.call(moduleWrappers, function (moduleWrapper) { if (moduleWrapper.style.position === "" || moduleWrapper.style.position === "static") { showWrapper = true; } @@ -342,7 +355,7 @@ var MM = (function() { /* loadConfig() * Loads the core config and combines it with de system defaults. */ - var loadConfig = function() { + var loadConfig = function () { // FIXME: Think about how to pass config around without breaking tests /* eslint-disable */ if (typeof config === "undefined") { @@ -360,8 +373,7 @@ var MM = (function() { * * argument modules array - Array of modules. */ - var setSelectionMethodsForModules = function(modules) { - + var setSelectionMethodsForModules = function (modules) { /* withClass(className) * calls modulesByClass to filter modules with the specified classes. * @@ -369,7 +381,7 @@ var MM = (function() { * * return array - Filtered collection of modules. */ - var withClass = function(className) { + var withClass = function (className) { return modulesByClass(className, true); }; @@ -380,7 +392,7 @@ var MM = (function() { * * return array - Filtered collection of modules. */ - var exceptWithClass = function(className) { + var exceptWithClass = function (className) { return modulesByClass(className, false); }; @@ -392,13 +404,13 @@ var MM = (function() { * * return array - Filtered collection of modules. */ - var modulesByClass = function(className, include) { + var modulesByClass = function (className, include) { var searchClasses = className; if (typeof className === "string") { searchClasses = className.split(" "); } - var newModules = modules.filter(function(module) { + var newModules = modules.filter(function (module) { var classes = module.data.classes.toLowerCase().split(" "); for (var c in searchClasses) { @@ -422,8 +434,8 @@ var MM = (function() { * * return array - Filtered collection of modules. */ - var exceptModule = function(module) { - var newModules = modules.filter(function(mod) { + var exceptModule = function (module) { + var newModules = modules.filter(function (mod) { return mod.identifier !== module.identifier; }); @@ -436,16 +448,24 @@ var MM = (function() { * * argument callback function - The function to execute with the module as an argument. */ - var enumerate = function(callback) { - modules.map(function(module) { + var enumerate = function (callback) { + modules.map(function (module) { callback(module); }); }; - if (typeof modules.withClass === "undefined") { Object.defineProperty(modules, "withClass", {value: withClass, enumerable: false}); } - if (typeof modules.exceptWithClass === "undefined") { Object.defineProperty(modules, "exceptWithClass", {value: exceptWithClass, enumerable: false}); } - if (typeof modules.exceptModule === "undefined") { Object.defineProperty(modules, "exceptModule", {value: exceptModule, enumerable: false}); } - if (typeof modules.enumerate === "undefined") { Object.defineProperty(modules, "enumerate", {value: enumerate, enumerable: false}); } + if (typeof modules.withClass === "undefined") { + Object.defineProperty(modules, "withClass", { value: withClass, enumerable: false }); + } + if (typeof modules.exceptWithClass === "undefined") { + Object.defineProperty(modules, "exceptWithClass", { value: exceptWithClass, enumerable: false }); + } + if (typeof modules.exceptModule === "undefined") { + Object.defineProperty(modules, "exceptModule", { value: exceptModule, enumerable: false }); + } + if (typeof modules.enumerate === "undefined") { + Object.defineProperty(modules, "enumerate", { value: enumerate, enumerable: false }); + } }; return { @@ -454,7 +474,7 @@ var MM = (function() { /* init() * Main init method. */ - init: function() { + init: function () { Log.info("Initializing MagicMirror."); loadConfig(); Translator.loadCoreTranslations(config.language); @@ -466,7 +486,7 @@ var MM = (function() { * * argument moduleObjects array - All module instances. */ - modulesStarted: function(moduleObjects) { + modulesStarted: function (moduleObjects) { modules = []; for (var m in moduleObjects) { var module = moduleObjects[m]; @@ -486,7 +506,7 @@ var MM = (function() { * argument payload mixed - The payload of the notification. * argument sender Module - The module that sent the notification. */ - sendNotification: function(notification, payload, sender) { + sendNotification: function (notification, payload, sender) { if (arguments.length < 3) { Log.error("sendNotification: Missing arguments."); return; @@ -512,7 +532,7 @@ var MM = (function() { * argument module Module - The module that needs an update. * argument speed Number - The number of microseconds for the animation. (optional) */ - updateDom: function(module, speed) { + updateDom: function (module, speed) { if (!(module instanceof Module)) { Log.error("updateDom: Sender should be a module."); return; @@ -527,7 +547,7 @@ var MM = (function() { * * return array - A collection of all modules currently active. */ - getModules: function() { + getModules: function () { setSelectionMethodsForModules(modules); return modules; }, @@ -540,7 +560,7 @@ var MM = (function() { * argument callback function - Called when the animation is done. * argument options object - Optional settings for the hide method. */ - hideModule: function(module, speed, callback, options) { + hideModule: function (module, speed, callback, options) { module.hidden = true; hideModule(module, speed, callback, options); }, @@ -553,18 +573,17 @@ var MM = (function() { * argument callback function - Called when the animation is done. * argument options object - Optional settings for the hide method. */ - showModule: function(module, speed, callback, options) { + showModule: function (module, speed, callback, options) { // do not change module.hidden yet, only if we really show it later showModule(module, speed, callback, options); } }; - })(); // Add polyfill for Object.assign. if (typeof Object.assign !== "function") { - (function() { - Object.assign = function(target) { + (function () { + Object.assign = function (target) { "use strict"; if (target === undefined || target === null) { throw new TypeError("Cannot convert undefined or null to object"); diff --git a/js/module.js b/js/module.js index 1a38c54f..4aa26a80 100644 --- a/js/module.js +++ b/js/module.js @@ -7,7 +7,6 @@ * MIT Licensed. */ var Module = Class.extend({ - /********************************************************* * All methods (and properties) below can be subclassed. * *********************************************************/ @@ -80,7 +79,7 @@ var Module = Class.extend({ */ getDom: function () { var self = this; - return new Promise(function(resolve) { + return new Promise(function (resolve) { var div = document.createElement("div"); var template = self.getTemplate(); var templateData = self.getTemplateData(); @@ -126,7 +125,7 @@ var Module = Class.extend({ * return string - The template string of filename. */ getTemplate: function () { - return "
" + this.name + "
" + this.identifier + "
"; + return '
' + this.name + '
' + this.identifier + "
"; }, /* getTemplateData() @@ -161,18 +160,18 @@ var Module = Class.extend({ * @returns Nunjucks Environment */ - nunjucksEnvironment: function() { + nunjucksEnvironment: function () { if (this._nunjucksEnvironment !== null) { return this._nunjucksEnvironment; } var self = this; - this._nunjucksEnvironment = new nunjucks.Environment(new nunjucks.WebLoader(this.file(""), {async: true}), { + this._nunjucksEnvironment = new nunjucks.Environment(new nunjucks.WebLoader(this.file(""), { async: true }), { trimBlocks: true, lstripBlocks: true }); - this._nunjucksEnvironment.addFilter("translate", function(str) { + this._nunjucksEnvironment.addFilter("translate", function (str) { return self.translate(str); }); @@ -313,7 +312,9 @@ var Module = Class.extend({ // The variable `first` will contain the first // defined translation after the following line. - for (var first in translations) { break; } + for (var first in translations) { + break; + } if (translations) { var translationFile = translations[lang] || undefined; @@ -337,11 +338,11 @@ var Module = Class.extend({ * Request the translation for a given key with optional variables and default value. * * argument key string - The key of the string to translate - * argument defaultValueOrVariables string/object - The default value or variables for translating. (Optional) - * argument defaultValue string - The default value with variables. (Optional) + * argument defaultValueOrVariables string/object - The default value or variables for translating. (Optional) + * argument defaultValue string - The default value with variables. (Optional) */ translate: function (key, defaultValueOrVariables, defaultValue) { - if(typeof defaultValueOrVariables === "object") { + if (typeof defaultValueOrVariables === "object") { return Translator.translate(this, key, defaultValueOrVariables) || defaultValue || ""; } return Translator.translate(this, key) || defaultValueOrVariables || ""; @@ -386,17 +387,22 @@ var Module = Class.extend({ hide: function (speed, callback, options) { if (typeof callback === "object") { options = callback; - callback = function () { }; + callback = function () {}; } - callback = callback || function () { }; + callback = callback || function () {}; options = options || {}; var self = this; - MM.hideModule(self, speed, function () { - self.suspend(); - callback(); - }, options); + MM.hideModule( + self, + speed, + function () { + self.suspend(); + callback(); + }, + options + ); }, /* showModule(module, speed, callback) @@ -409,24 +415,28 @@ var Module = Class.extend({ show: function (speed, callback, options) { if (typeof callback === "object") { options = callback; - callback = function () { }; + callback = function () {}; } - callback = callback || function () { }; + callback = callback || function () {}; options = options || {}; var self = this; - MM.showModule(this, speed, function () { - self.resume(); - callback; - }, options); + MM.showModule( + this, + speed, + function () { + self.resume(); + callback; + }, + options + ); } }); Module.definitions = {}; Module.create = function (name) { - // Make sure module definition is available. if (!Module.definitions[name]) { return; @@ -442,11 +452,11 @@ Module.create = function (name) { }; /* cmpVersions(a,b) -* Compare two semantic version numbers and return the difference. -* -* argument a string - Version number a. -* argument a string - Version number b. -*/ + * Compare two semantic version numbers and return the difference. + * + * argument a string - Version number a. + * argument a string - Version number b. + */ function cmpVersions(a, b) { var i, diff; var regExStrip0 = /(\.0+)+$/; @@ -464,7 +474,6 @@ function cmpVersions(a, b) { } Module.register = function (name, moduleDefinition) { - if (moduleDefinition.requiresVersion) { Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + window.version); if (cmpVersions(window.version, moduleDefinition.requiresVersion) >= 0) { diff --git a/js/node_helper.js b/js/node_helper.js index 89c6e23e..866d34c9 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -8,16 +8,16 @@ const Class = require("./class.js"); const express = require("express"); var NodeHelper = Class.extend({ - init: function() { + init: function () { console.log("Initializing new module helper ..."); }, - loaded: function(callback) { + loaded: function (callback) { console.log("Module helper loaded: " + this.name); callback(); }, - start: function() { + start: function () { console.log("Starting module helper: " + this.name); }, @@ -27,7 +27,7 @@ var NodeHelper = Class.extend({ * gracefully exit the module. * */ - stop: function() { + stop: function () { console.log("Stopping module helper: " + this.name); }, @@ -37,7 +37,7 @@ var NodeHelper = Class.extend({ * argument notification string - The identifier of the notification. * argument payload mixed - The payload of the notification. */ - socketNotificationReceived: function(notification, payload) { + socketNotificationReceived: function (notification, payload) { console.log(this.name + " received a socket notification: " + notification + " - Payload: " + payload); }, @@ -46,7 +46,7 @@ var NodeHelper = Class.extend({ * * argument name string - Module name. */ - setName: function(name) { + setName: function (name) { this.name = name; }, @@ -55,7 +55,7 @@ var NodeHelper = Class.extend({ * * argument path string - Module path. */ - setPath: function(path) { + setPath: function (path) { this.path = path; }, @@ -65,7 +65,7 @@ var NodeHelper = Class.extend({ * argument notification string - The identifier of the notification. * argument payload mixed - The payload of the notification. */ - sendSocketNotification: function(notification, payload) { + sendSocketNotification: function (notification, payload) { this.io.of(this.name).emit(notification, payload); }, @@ -75,7 +75,7 @@ var NodeHelper = Class.extend({ * * argument app Express app - The Express app object. */ - setExpressApp: function(app) { + setExpressApp: function (app) { this.expressApp = app; var publicPath = this.path + "/public"; @@ -88,16 +88,16 @@ var NodeHelper = Class.extend({ * * argument io Socket.io - The Socket io object. */ - setSocketIO: function(io) { + setSocketIO: function (io) { var self = this; self.io = io; console.log("Connecting socket for: " + this.name); var namespace = this.name; - io.of(namespace).on("connection", function(socket) { + io.of(namespace).on("connection", function (socket) { // add a catch all event. var onevent = socket.onevent; - socket.onevent = function(packet) { + socket.onevent = function (packet) { var args = packet.data || []; onevent.call(this, packet); // original call packet.data = ["*"].concat(args); @@ -105,7 +105,7 @@ var NodeHelper = Class.extend({ }; // register catch all. - socket.on("*", function(notification, payload) { + socket.on("*", function (notification, payload) { if (notification !== "*") { //console.log('received message in namespace: ' + namespace); self.socketNotificationReceived(notification, payload); @@ -115,9 +115,11 @@ var NodeHelper = Class.extend({ } }); -NodeHelper.create = function(moduleDefinition) { +NodeHelper.create = function (moduleDefinition) { return NodeHelper.extend(moduleDefinition); }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = NodeHelper;} +if (typeof module !== "undefined") { + module.exports = NodeHelper; +} diff --git a/js/server.js b/js/server.js index 4d08fc14..7f0c36d0 100644 --- a/js/server.js +++ b/js/server.js @@ -13,21 +13,20 @@ var fs = require("fs"); var helmet = require("helmet"); var Utils = require(__dirname + "/utils.js"); -var Server = function(config, callback) { - +var Server = function (config, callback) { var port = config.port; if (process.env.MM_PORT) { port = process.env.MM_PORT; } var server = null; - if(config.useHttps){ + if (config.useHttps) { var options = { key: fs.readFileSync(config.httpsPrivateKey), cert: fs.readFileSync(config.httpsCertificate) }; server = require("https").Server(options, app); - }else{ + } else { server = require("http").Server(app); } var io = require("socket.io")(server); @@ -40,8 +39,8 @@ var Server = function(config, callback) { console.info(Utils.colors.warn("You're using a full whitelist configuration to allow for all IPs")); } - app.use(function(req, res, next) { - var result = ipfilter(config.ipWhitelist, {mode: config.ipWhitelist.length === 0 ? "deny" : "allow", log: false})(req, res, function(err) { + app.use(function (req, res, next) { + var result = ipfilter(config.ipWhitelist, { mode: config.ipWhitelist.length === 0 ? "deny" : "allow", log: false })(req, res, function (err) { if (err === undefined) { return next(); } @@ -59,20 +58,20 @@ var Server = function(config, callback) { app.use(directory, express.static(path.resolve(global.root_path + directory))); } - app.get("/version", function(req,res) { + app.get("/version", function (req, res) { res.send(global.version); }); - app.get("/config", function(req,res) { + app.get("/config", function (req, res) { res.send(config); }); - app.get("/", function(req, res) { - var html = fs.readFileSync(path.resolve(global.root_path + "/index.html"), {encoding: "utf8"}); + app.get("/", function (req, res) { + var html = fs.readFileSync(path.resolve(global.root_path + "/index.html"), { encoding: "utf8" }); html = html.replace("#VERSION#", global.version); var configFile = "config/config.js"; - if (typeof(global.configuration_file) !== "undefined") { + if (typeof global.configuration_file !== "undefined") { configFile = global.configuration_file; } html = html.replace("#CONFIG_FILE#", configFile); diff --git a/js/socketclient.js b/js/socketclient.js index 2274c20e..2a50083f 100644 --- a/js/socketclient.js +++ b/js/socketclient.js @@ -6,7 +6,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -var MMSocket = function(moduleName) { +var MMSocket = function (moduleName) { var self = this; if (typeof moduleName !== "string") { @@ -17,16 +17,16 @@ var MMSocket = function(moduleName) { // Private Methods var base = "/"; - if ((typeof config !== "undefined") && (typeof config.basePath !== "undefined")) { + if (typeof config !== "undefined" && typeof config.basePath !== "undefined") { base = config.basePath; } self.socket = io("/" + self.moduleName, { path: base + "socket.io" }); - var notificationCallback = function() {}; + var notificationCallback = function () {}; var onevent = self.socket.onevent; - self.socket.onevent = function(packet) { + self.socket.onevent = function (packet) { var args = packet.data || []; onevent.call(this, packet); // original call packet.data = ["*"].concat(args); @@ -34,18 +34,18 @@ var MMSocket = function(moduleName) { }; // register catch all. - self.socket.on("*", function(notification, payload) { + self.socket.on("*", function (notification, payload) { if (notification !== "*") { notificationCallback(notification, payload); } }); // Public Methods - this.setNotificationCallback = function(callback) { + this.setNotificationCallback = function (callback) { notificationCallback = callback; }; - this.sendNotification = function(notification, payload) { + this.sendNotification = function (notification, payload) { if (typeof payload === "undefined") { payload = {}; } diff --git a/js/translator.js b/js/translator.js index 1ebf9fbf..3a09fe0b 100644 --- a/js/translator.js +++ b/js/translator.js @@ -6,8 +6,7 @@ * By Christopher Fenner https://github.com/CFenner * MIT Licensed. */ -var Translator = (function() { - +var Translator = (function () { /* loadJSON(file, callback) * Load a JSON file via XHR. * @@ -62,7 +61,7 @@ var Translator = (function() { currentChar = str[i]; nextChar = str[i + 1]; - if (!insideComment && currentChar === "\"") { + if (!insideComment && currentChar === '"') { var escaped = str[i - 1] === "\\" && str[i - 2] !== "\\"; if (!escaped) { insideString = !insideString; @@ -119,7 +118,7 @@ var Translator = (function() { * argument key string - The key of the text to translate. * argument variables - The variables to use within the translation template (optional) */ - translate: function(module, key, variables) { + translate: function (module, key, variables) { variables = variables || {}; //Empty object by default // Combines template and variables like: @@ -127,18 +126,18 @@ var Translator = (function() { // variables: {timeToWait: "2 hours", work: "painting"} // to: "Please wait for 2 hours before continuing with painting." function createStringFromTemplate(template, variables) { - if(Object.prototype.toString.call(template) !== "[object String]") { + if (Object.prototype.toString.call(template) !== "[object String]") { return template; } - if(variables.fallback && !template.match(new RegExp("{.+}"))) { + if (variables.fallback && !template.match(new RegExp("{.+}"))) { template = variables.fallback; } - return template.replace(new RegExp("{([^}]+)}", "g"), function(_unused, varName){ - return variables[varName] || "{"+varName+"}"; + return template.replace(new RegExp("{([^}]+)}", "g"), function (_unused, varName) { + return variables[varName] || "{" + varName + "}"; }); } - if(this.translations[module.name] && key in this.translations[module.name]) { + if (this.translations[module.name] && key in this.translations[module.name]) { // Log.log("Got translation for " + key + " from module translation: "); return createStringFromTemplate(this.translations[module.name][key], variables); } @@ -169,7 +168,7 @@ var Translator = (function() { * argument isFallback boolean - Flag to indicate fallback translations. * argument callback function - Function called when done. */ - load: function(module, file, isFallback, callback) { + load: function (module, file, isFallback, callback) { if (!isFallback) { Log.log(module.name + " - Load translation: " + file); } else { @@ -177,8 +176,8 @@ var Translator = (function() { } var self = this; - if(!this.translationsFallback[module.name]) { - loadJSON(module.file(file), function(json) { + if (!this.translationsFallback[module.name]) { + loadJSON(module.file(file), function (json) { if (!isFallback) { self.translations[module.name] = json; } else { @@ -196,12 +195,12 @@ var Translator = (function() { * * argument lang String - The language identifier of the core language. */ - loadCoreTranslations: function(lang) { + loadCoreTranslations: function (lang) { var self = this; if (lang in translations) { Log.log("Loading core translation file: " + translations[lang]); - loadJSON(translations[lang], function(translations) { + loadJSON(translations[lang], function (translations) { self.coreTranslations = translations; }); } else { @@ -215,19 +214,21 @@ var Translator = (function() { * Load the core translations fallback. * The first language defined in translations.js will be used. */ - loadCoreTranslationsFallback: function() { + loadCoreTranslationsFallback: function () { var self = this; // The variable `first` will contain the first // defined translation after the following line. - for (var first in translations) {break;} + for (var first in translations) { + break; + } if (first) { Log.log("Loading core translation fallback file: " + translations[first]); - loadJSON(translations[first], function(translations) { + loadJSON(translations[first], function (translations) { self.coreTranslationsFallback = translations; }); } - }, + } }; })(); diff --git a/js/utils.js b/js/utils.js index df11d0b2..74553f06 100644 --- a/js/utils.js +++ b/js/utils.js @@ -14,4 +14,6 @@ var Utils = { } }; -if (typeof module !== "undefined") {module.exports = Utils;} +if (typeof module !== "undefined") { + module.exports = Utils; +} diff --git a/jsconfig.json b/jsconfig.json index 2b354edc..6ae848fc 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -6,8 +6,5 @@ "module": "commonjs", "allowSyntheticDefaultImports": true }, - "exclude": [ - "modules", - "node_modules" - ] + "exclude": ["modules", "node_modules"] } diff --git a/modules/default/alert/README.md b/modules/default/alert/README.md index 4d3c6a65..2e7973a3 100644 --- a/modules/default/alert/README.md +++ b/modules/default/alert/README.md @@ -1,4 +1,5 @@ # Module: Alert + The alert module is one of the default modules of the MagicMirror. This module displays notifications from other modules. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/alert.html). diff --git a/modules/default/alert/alert.js b/modules/default/alert/alert.js index 66b88601..b2eb2eb2 100644 --- a/modules/default/alert/alert.js +++ b/modules/default/alert/alert.js @@ -6,7 +6,7 @@ * By Paul-Vincent Roll https://paulvincentroll.com/ * MIT Licensed. */ -Module.register("alert",{ +Module.register("alert", { defaults: { // scale|slide|genie|jelly|flip|bouncyflip|exploader effect: "slide", @@ -17,31 +17,33 @@ Module.register("alert",{ //Position position: "center", //shown at startup - welcome_message: false, + welcome_message: false }, - getScripts: function() { + getScripts: function () { return ["notificationFx.js"]; }, - getStyles: function() { + getStyles: function () { return ["notificationFx.css", "font-awesome.css"]; }, // Define required translations. - getTranslations: function() { + getTranslations: function () { return { en: "translations/en.json", de: "translations/de.json", - nl: "translations/nl.json", + nl: "translations/nl.json" }; }, - show_notification: function(message) { - if (this.config.effect === "slide") {this.config.effect = this.config.effect + "-" + this.config.position;} + show_notification: function (message) { + if (this.config.effect === "slide") { + this.config.effect = this.config.effect + "-" + this.config.position; + } let msg = ""; if (message.title) { msg += "" + message.title + ""; } - if (message.message){ - if (msg !== ""){ - msg+= "
"; + if (message.message) { + if (msg !== "") { + msg += "
"; } msg += "" + message.message + ""; } @@ -53,22 +55,26 @@ Module.register("alert",{ ttl: message.timer !== undefined ? message.timer : this.config.display_time }).show(); }, - show_alert: function(params, sender) { + show_alert: function (params, sender) { let image = ""; //Set standard params if not provided by module - if (typeof params.timer === "undefined") { params.timer = null; } - if (typeof params.imageHeight === "undefined") { params.imageHeight = "80px"; } + if (typeof params.timer === "undefined") { + params.timer = null; + } + if (typeof params.imageHeight === "undefined") { + params.imageHeight = "80px"; + } if (typeof params.imageUrl === "undefined" && typeof params.imageFA === "undefined") { params.imageUrl = null; - } else if (typeof params.imageFA === "undefined"){ - image = "
"; - } else if (typeof params.imageUrl === "undefined"){ - image = "
"; + } else if (typeof params.imageFA === "undefined") { + image = "
"; + } else if (typeof params.imageUrl === "undefined") { + image = "
"; } //Create overlay const overlay = document.createElement("div"); overlay.id = "overlay"; - overlay.innerHTML += "
"; + overlay.innerHTML += '
'; document.body.insertBefore(overlay, document.body.firstChild); //If module already has an open alert close it @@ -82,7 +88,7 @@ Module.register("alert",{ message += "" + params.title + ""; } if (params.message) { - if (message !== ""){ + if (message !== "") { message += "
"; } @@ -104,9 +110,8 @@ Module.register("alert",{ this.hide_alert(sender); }, params.timer); } - }, - hide_alert: function(sender) { + hide_alert: function (sender) { //Dismiss alert and remove from this.alerts if (this.alerts[sender.name]) { this.alerts[sender.name].dismiss(); @@ -116,18 +121,25 @@ Module.register("alert",{ overlay.parentNode.removeChild(overlay); } }, - setPosition: function(pos) { + setPosition: function (pos) { //Add css to body depending on the set position for notifications const sheet = document.createElement("style"); - if (pos === "center") {sheet.innerHTML = ".ns-box {margin-left: auto; margin-right: auto;text-align: center;}";} - if (pos === "right") {sheet.innerHTML = ".ns-box {margin-left: auto;text-align: right;}";} - if (pos === "left") {sheet.innerHTML = ".ns-box {margin-right: auto;text-align: left;}";} + if (pos === "center") { + sheet.innerHTML = ".ns-box {margin-left: auto; margin-right: auto;text-align: center;}"; + } + if (pos === "right") { + sheet.innerHTML = ".ns-box {margin-left: auto;text-align: right;}"; + } + if (pos === "left") { + sheet.innerHTML = ".ns-box {margin-right: auto;text-align: left;}"; + } document.body.appendChild(sheet); - }, - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { if (notification === "SHOW_ALERT") { - if (typeof payload.type === "undefined") { payload.type = "alert"; } + if (typeof payload.type === "undefined") { + payload.type = "alert"; + } if (payload.type === "alert") { this.show_alert(payload, sender); } else if (payload.type === "notification") { @@ -137,15 +149,14 @@ Module.register("alert",{ this.hide_alert(sender); } }, - start: function() { + start: function () { this.alerts = {}; this.setPosition(this.config.position); if (this.config.welcome_message) { - if (this.config.welcome_message === true){ - this.show_notification({title: this.translate("sysTitle"), message: this.translate("welcome")}); - } - else{ - this.show_notification({title: this.translate("sysTitle"), message: this.config.welcome_message}); + if (this.config.welcome_message === true) { + this.show_notification({ title: this.translate("sysTitle"), message: this.translate("welcome") }); + } else { + this.show_notification({ title: this.translate("sysTitle"), message: this.config.welcome_message }); } } Log.info("Starting module: " + this.name); diff --git a/modules/default/alert/notificationFx.css b/modules/default/alert/notificationFx.css index 96491233..0782d464 100644 --- a/modules/default/alert/notificationFx.css +++ b/modules/default/alert/notificationFx.css @@ -235,8 +235,12 @@ } @keyframes animFade { - 0% { opacity: 0; } - 100% { opacity: 1; } + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } } @keyframes animJelly { diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 9d548949..61ba59d7 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -10,8 +10,7 @@ * Copyright 2014, Codrops * https://tympanus.net/codrops/ */ -(function(window) { - +(function (window) { /** * extend obj function */ @@ -58,19 +57,23 @@ ttl: 6000, al_no: "ns-box", // callbacks - onClose: function() { return false; }, - onOpen: function() { return false; } + onClose: function () { + return false; + }, + onOpen: function () { + return false; + } }; /** * init function * initialize and cache some vars */ - NotificationFx.prototype._init = function() { + NotificationFx.prototype._init = function () { // create HTML structure this.ntf = document.createElement("div"); this.ntf.className = this.options.al_no + " ns-" + this.options.layout + " ns-effect-" + this.options.effect + " ns-type-" + this.options.type; - let strinner = "
"; + let strinner = '
'; strinner += this.options.message; strinner += "
"; this.ntf.innerHTML = strinner; @@ -94,15 +97,17 @@ /** * init events */ - NotificationFx.prototype._initEvents = function() { + NotificationFx.prototype._initEvents = function () { // dismiss notification by tapping on it if someone has a touchscreen - this.ntf.querySelector(".ns-box-inner").addEventListener("click", () => { this.dismiss(); }); + this.ntf.querySelector(".ns-box-inner").addEventListener("click", () => { + this.dismiss(); + }); }; /** * show the notification */ - NotificationFx.prototype.show = function() { + NotificationFx.prototype.show = function () { this.active = true; this.ntf.classList.remove("ns-hide"); this.ntf.classList.add("ns-show"); @@ -112,7 +117,7 @@ /** * dismiss the notification */ - NotificationFx.prototype.dismiss = function() { + NotificationFx.prototype.dismiss = function () { this.active = false; clearTimeout(this.dismissttl); this.ntf.classList.remove("ns-show"); @@ -125,7 +130,9 @@ // after animation ends remove ntf from the DOM const onEndAnimationFn = (ev) => { - if (ev.target !== this.ntf) {return false;} + if (ev.target !== this.ntf) { + return false; + } this.ntf.removeEventListener("animationend", onEndAnimationFn); if (ev.target.parentNode === this.options.wrapper) { @@ -140,5 +147,4 @@ * add to global namespace */ window.NotificationFx = NotificationFx; - })(window); diff --git a/modules/default/alert/translations/bg.json b/modules/default/alert/translations/bg.json index abf0c96f..e97844c8 100644 --- a/modules/default/alert/translations/bg.json +++ b/modules/default/alert/translations/bg.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror нотификация", - "welcome": "Добре дошли, стартирането беше успешно" + "sysTitle": "MagicMirror нотификация", + "welcome": "Добре дошли, стартирането беше успешно" } diff --git a/modules/default/alert/translations/da.json b/modules/default/alert/translations/da.json index 234f22b1..f79a5011 100644 --- a/modules/default/alert/translations/da.json +++ b/modules/default/alert/translations/da.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Notifikation", - "welcome": "Velkommen, modulet er succesfuldt startet!" + "sysTitle": "MagicMirror Notifikation", + "welcome": "Velkommen, modulet er succesfuldt startet!" } diff --git a/modules/default/alert/translations/de.json b/modules/default/alert/translations/de.json index 4ab7edbb..6a0340f2 100644 --- a/modules/default/alert/translations/de.json +++ b/modules/default/alert/translations/de.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Benachrichtigung", - "welcome": "Willkommen, Start war erfolgreich!" + "sysTitle": "MagicMirror Benachrichtigung", + "welcome": "Willkommen, Start war erfolgreich!" } diff --git a/modules/default/alert/translations/en.json b/modules/default/alert/translations/en.json index a8589a67..9854d518 100644 --- a/modules/default/alert/translations/en.json +++ b/modules/default/alert/translations/en.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Notification", - "welcome": "Welcome, start was successful!" + "sysTitle": "MagicMirror Notification", + "welcome": "Welcome, start was successful!" } diff --git a/modules/default/alert/translations/es.json b/modules/default/alert/translations/es.json index 39478251..84339233 100644 --- a/modules/default/alert/translations/es.json +++ b/modules/default/alert/translations/es.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Notificaciones", - "welcome": "Bienvenido, ¡se iniciado correctamente!" + "sysTitle": "MagicMirror Notificaciones", + "welcome": "Bienvenido, ¡se iniciado correctamente!" } diff --git a/modules/default/alert/translations/fr.json b/modules/default/alert/translations/fr.json index c89417f2..6ed40c62 100644 --- a/modules/default/alert/translations/fr.json +++ b/modules/default/alert/translations/fr.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Notification", - "welcome": "Bienvenue, le démarrage a été un succès!" + "sysTitle": "MagicMirror Notification", + "welcome": "Bienvenue, le démarrage a été un succès!" } diff --git a/modules/default/alert/translations/hu.json b/modules/default/alert/translations/hu.json index be618365..332458b5 100644 --- a/modules/default/alert/translations/hu.json +++ b/modules/default/alert/translations/hu.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror értesítés", - "welcome": "Üdvözöljük, indulás sikeres!" + "sysTitle": "MagicMirror értesítés", + "welcome": "Üdvözöljük, indulás sikeres!" } diff --git a/modules/default/alert/translations/nl.json b/modules/default/alert/translations/nl.json index 9cda9089..39978191 100644 --- a/modules/default/alert/translations/nl.json +++ b/modules/default/alert/translations/nl.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Notificatie", - "welcome": "Welkom, Succesvol gestart!" + "sysTitle": "MagicMirror Notificatie", + "welcome": "Welkom, Succesvol gestart!" } diff --git a/modules/default/alert/translations/ru.json b/modules/default/alert/translations/ru.json index 60ddf3d8..fe535c2d 100644 --- a/modules/default/alert/translations/ru.json +++ b/modules/default/alert/translations/ru.json @@ -1,4 +1,4 @@ { - "sysTitle": "MagicMirror Уведомление", - "welcome": "Добро пожаловать, старт был успешным!" + "sysTitle": "MagicMirror Уведомление", + "welcome": "Добро пожаловать, старт был успешным!" } diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 5c8f187b..3583aa18 100755 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -1,4 +1,5 @@ # Module: Calendar + The `calendar` module is one of the default modules of the MagicMirror. This module displays events from a public .ical calendar. It can combine multiple calendars. diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 24a2c45d..f8099269 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -7,7 +7,6 @@ * MIT Licensed. */ Module.register("calendar", { - // Define module defaults defaults: { maximumEntries: 10, // Total Maximum Entries @@ -39,8 +38,8 @@ Module.register("calendar", { calendars: [ { symbol: "calendar", - url: "https://www.calendarlabs.com/templates/ical/US-Holidays.ics", - }, + url: "https://www.calendarlabs.com/templates/ical/US-Holidays.ics" + } ], titleReplace: { "De verjaardag van ": "", @@ -85,7 +84,7 @@ Module.register("calendar", { var calendarConfig = { maximumEntries: calendar.maximumEntries, maximumNumberOfDays: calendar.maximumNumberOfDays, - broadcastPastEvents: calendar.broadcastPastEvents, + broadcastPastEvents: calendar.broadcastPastEvents }; if (calendar.symbolClass === "undefined" || calendar.symbolClass === null) { calendarConfig.symbolClass = ""; @@ -98,7 +97,7 @@ Module.register("calendar", { } // we check user and password here for backwards compatibility with old configs - if(calendar.user && calendar.pass) { + if (calendar.user && calendar.pass) { Log.warn("Deprecation warning: Please update your calendar authentication configuration."); Log.warn("https://github.com/MichMich/MagicMirror/tree/v2.1.2/modules/default/calendar#calendar-authentication-options"); calendar.auth = { @@ -112,7 +111,7 @@ Module.register("calendar", { // Trigger ADD_CALENDAR every fetchInterval to make sure there is always a calendar // fetcher running on the server side. var self = this; - setInterval(function() { + setInterval(function () { self.addCalendar(calendar.url, calendar.auth, calendarConfig); }, self.config.fetchInterval); } @@ -144,13 +143,12 @@ Module.register("calendar", { // Override dom generator. getDom: function () { - var events = this.createEventList(); var wrapper = document.createElement("table"); wrapper.className = this.config.tableClass; if (events.length === 0) { - wrapper.innerHTML = (this.loaded) ? this.translate("EMPTY") : this.translate("LOADING"); + wrapper.innerHTML = this.loaded ? this.translate("EMPTY") : this.translate("LOADING"); wrapper.className = this.config.tableClass + " dimmed"; return wrapper; } @@ -169,8 +167,8 @@ Module.register("calendar", { for (var e in events) { var event = events[e]; var dateAsString = moment(event.startDate, "x").format(this.config.dateFormat); - if(this.config.timeFormat === "dateheaders"){ - if(lastSeenDate !== dateAsString){ + if (this.config.timeFormat === "dateheaders") { + if (lastSeenDate !== dateAsString) { var dateRow = document.createElement("tr"); dateRow.className = "normal"; var dateCell = document.createElement("td"); @@ -181,9 +179,10 @@ Module.register("calendar", { dateRow.appendChild(dateCell); wrapper.appendChild(dateRow); - if (e >= startFade) { //fading + if (e >= startFade) { + //fading currentFadeStep = e - startFade; - dateRow.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); + dateRow.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; } lastSeenDate = dateAsString; @@ -209,20 +208,20 @@ Module.register("calendar", { symbolWrapper.className = "symbol align-right " + symbolClass; var symbols = this.symbolsForUrl(event.url); - if(typeof symbols === "string") { + if (typeof symbols === "string") { symbols = [symbols]; } - for(var i = 0; i < symbols.length; i++) { + for (var i = 0; i < symbols.length; i++) { var symbol = document.createElement("span"); symbol.className = "fa fa-fw fa-" + symbols[i]; - if(i > 0){ + if (i > 0) { symbol.style.paddingLeft = "5px"; } symbolWrapper.appendChild(symbol); } eventWrapper.appendChild(symbolWrapper); - } else if(this.config.timeFormat === "dateheaders"){ + } else if (this.config.timeFormat === "dateheaders") { var blankCell = document.createElement("td"); blankCell.innerHTML = "   "; eventWrapper.appendChild(blankCell); @@ -232,7 +231,6 @@ Module.register("calendar", { repeatingCountTitle = ""; if (this.config.displayRepeatingCountTitle && event.firstYear !== undefined) { - repeatingCountTitle = this.countTitleForUrl(event.url); if (repeatingCountTitle !== "") { @@ -255,12 +253,10 @@ Module.register("calendar", { var timeWrapper; - if(this.config.timeFormat === "dateheaders"){ - + if (this.config.timeFormat === "dateheaders") { if (event.fullDayEvent) { titleWrapper.colSpan = "2"; titleWrapper.align = "left"; - } else { timeWrapper = document.createElement("td"); timeWrapper.className = "time light " + this.timeClassForUrl(event.url); @@ -298,14 +294,14 @@ Module.register("calendar", { } } else { /* Check to see if the user displays absolute or relative dates with their events - * Also check to see if an event is happening within an 'urgency' time frameElement - * For example, if the user set an .urgency of 7 days, those events that fall within that - * time frame will be displayed with 'in xxx' time format or moment.fromNow() - * - * Note: this needs to be put in its own function, as the whole thing repeats again verbatim - */ + * Also check to see if an event is happening within an 'urgency' time frameElement + * For example, if the user set an .urgency of 7 days, those events that fall within that + * time frame will be displayed with 'in xxx' time format or moment.fromNow() + * + * Note: this needs to be put in its own function, as the whole thing repeats again verbatim + */ if (this.config.timeFormat === "absolute") { - if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * oneDay))) { + if (this.config.urgency > 1 && event.startDate - now < this.config.urgency * oneDay) { // This event falls within the config.urgency period that the user has set timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").from(moment().format("YYYYMMDD"))); } else { @@ -315,9 +311,9 @@ Module.register("calendar", { timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").from(moment().format("YYYYMMDD"))); } } - if(this.config.showEnd){ - timeWrapper.innerHTML += "-" ; - timeWrapper.innerHTML += this.capFirst(moment(event.endDate , "x").format(this.config.fullDayEventDateFormat)); + if (this.config.showEnd) { + timeWrapper.innerHTML += "-"; + timeWrapper.innerHTML += this.capFirst(moment(event.endDate, "x").format(this.config.fullDayEventDateFormat)); } } else { if (event.startDate >= new Date()) { @@ -327,7 +323,7 @@ Module.register("calendar", { // If event is within 6 hour, display 'in xxx' time format or moment.fromNow() timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").fromNow()); } else { - if(this.config.timeFormat === "absolute" && !this.config.nextDaysRelative) { + if (this.config.timeFormat === "absolute" && !this.config.nextDaysRelative) { timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").format(this.config.dateFormat)); } else { // Otherwise just say 'Today/Tomorrow at such-n-such time' @@ -336,14 +332,14 @@ Module.register("calendar", { } } else { /* Check to see if the user displays absolute or relative dates with their events - * Also check to see if an event is happening within an 'urgency' time frameElement - * For example, if the user set an .urgency of 7 days, those events that fall within that - * time frame will be displayed with 'in xxx' time format or moment.fromNow() - * - * Note: this needs to be put in its own function, as the whole thing repeats again verbatim - */ + * Also check to see if an event is happening within an 'urgency' time frameElement + * For example, if the user set an .urgency of 7 days, those events that fall within that + * time frame will be displayed with 'in xxx' time format or moment.fromNow() + * + * Note: this needs to be put in its own function, as the whole thing repeats again verbatim + */ if (this.config.timeFormat === "absolute") { - if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * oneDay))) { + if (this.config.urgency > 1 && event.startDate - now < this.config.urgency * oneDay) { // This event falls within the config.urgency period that the user has set timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").fromNow()); } else { @@ -364,7 +360,6 @@ Module.register("calendar", { if (this.config.showEnd) { timeWrapper.innerHTML += "-"; timeWrapper.innerHTML += this.capFirst(moment(event.endDate, "x").format(this.config.dateEndFormat)); - } } //timeWrapper.innerHTML += ' - '+ moment(event.startDate,'x').format('lll'); @@ -378,7 +373,7 @@ Module.register("calendar", { // Create fade effect. if (e >= startFade) { currentFadeStep = e - startFade; - eventWrapper.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); + eventWrapper.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; } if (this.config.showLocation) { @@ -401,7 +396,7 @@ Module.register("calendar", { if (e >= startFade) { currentFadeStep = e - startFade; - locationRow.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); + locationRow.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; } } } @@ -418,17 +413,17 @@ Module.register("calendar", { * @param {number} timeFormat Specifies either 12 or 24 hour time format * @returns {moment.LocaleSpecification} */ - getLocaleSpecification: function(timeFormat) { + getLocaleSpecification: function (timeFormat) { switch (timeFormat) { - case 12: { - return { longDateFormat: {LT: "h:mm A"} }; - } - case 24: { - return { longDateFormat: {LT: "HH:mm"} }; - } - default: { - return { longDateFormat: {LT: moment.localeData().longDateFormat("LT")} }; - } + case 12: { + return { longDateFormat: { LT: "h:mm A" } }; + } + case 24: { + return { longDateFormat: { LT: "HH:mm" } }; + } + default: { + return { longDateFormat: { LT: moment.localeData().longDateFormat("LT") } }; + } } }, @@ -464,37 +459,37 @@ Module.register("calendar", { var calendar = this.calendarData[c]; for (var e in calendar) { var event = JSON.parse(JSON.stringify(calendar[e])); // clone object - if(event.endDate < now) { + if (event.endDate < now) { continue; } - if(this.config.hidePrivate) { - if(event.class === "PRIVATE") { + if (this.config.hidePrivate) { + if (event.class === "PRIVATE") { // do not add the current event, skip it continue; } } - if(this.config.hideOngoing) { - if(event.startDate < now) { + if (this.config.hideOngoing) { + if (event.startDate < now) { continue; } } - if(this.listContainsEvent(events,event)){ + if (this.listContainsEvent(events, event)) { continue; } event.url = c; - event.today = event.startDate >= today && event.startDate < (today + 24 * 60 * 60 * 1000); + event.today = event.startDate >= today && event.startDate < today + 24 * 60 * 60 * 1000; /* if sliceMultiDayEvents is set to true, multiday events (events exceeding at least one midnight) are sliced into days, - * otherwise, esp. in dateheaders mode it is not clear how long these events are. - */ - var maxCount = Math.ceil(((event.endDate - 1) - moment(event.startDate, "x").endOf("day").format("x"))/(1000*60*60*24)) + 1; + * otherwise, esp. in dateheaders mode it is not clear how long these events are. + */ + var maxCount = Math.ceil((event.endDate - 1 - moment(event.startDate, "x").endOf("day").format("x")) / (1000 * 60 * 60 * 24)) + 1; if (this.config.sliceMultiDayEvents && maxCount > 1) { var splitEvents = []; var midnight = moment(event.startDate, "x").clone().startOf("day").add(1, "day").format("x"); var count = 1; while (event.endDate > midnight) { var thisEvent = JSON.parse(JSON.stringify(event)); // clone object - thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < (today + 24 * 60 * 60 * 1000); + thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < today + 24 * 60 * 60 * 1000; thisEvent.endDate = midnight; thisEvent.title += " (" + count + "/" + maxCount + ")"; splitEvents.push(thisEvent); @@ -504,11 +499,11 @@ Module.register("calendar", { midnight = moment(midnight, "x").add(1, "day").format("x"); // next day } // Last day - event.title += " ("+count+"/"+maxCount+")"; + event.title += " (" + count + "/" + maxCount + ")"; splitEvents.push(event); for (event of splitEvents) { - if ((event.endDate > now) && (event.endDate <= future)) { + if (event.endDate > now && event.endDate <= future) { events.push(event); } } @@ -524,9 +519,9 @@ Module.register("calendar", { return events.slice(0, this.config.maximumEntries); }, - listContainsEvent: function(eventList, event){ - for(var evt of eventList){ - if(evt.title === event.title && parseInt(evt.startDate) === parseInt(event.startDate)){ + listContainsEvent: function (eventList, event) { + for (var evt of eventList) { + if (evt.title === event.title && parseInt(evt.startDate) === parseInt(event.startDate)) { return true; } } @@ -549,7 +544,7 @@ Module.register("calendar", { titleClass: calendarConfig.titleClass, timeClass: calendarConfig.timeClass, auth: auth, - broadcastPastEvents: calendarConfig.broadcastPastEvents || this.config.broadcastPastEvents, + broadcastPastEvents: calendarConfig.broadcastPastEvents || this.config.broadcastPastEvents }); }, @@ -676,8 +671,9 @@ Module.register("calendar", { for (var i = 0; i < words.length; i++) { var word = words[i]; - if (currentLine.length + word.length < (typeof maxLength === "number" ? maxLength : 25) - 1) { // max - 1 to account for a space - currentLine += (word + " "); + if (currentLine.length + word.length < (typeof maxLength === "number" ? maxLength : 25) - 1) { + // max - 1 to account for a space + currentLine += word + " "; } else { line++; if (line > maxTitleLines - 1) { @@ -688,9 +684,9 @@ Module.register("calendar", { } if (currentLine.length > 0) { - temp += (currentLine + "
" + word + " "); + temp += currentLine + "
" + word + " "; } else { - temp += (word + "
"); + temp += word + "
"; } currentLine = ""; } @@ -758,11 +754,10 @@ Module.register("calendar", { } } - eventList.sort(function(a,b) { + eventList.sort(function (a, b) { return a.startDate - b.startDate; }); this.sendNotification("CALENDAR_EVENTS", eventList); - } }); diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 177fd9ac..3ab44e47 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -8,44 +8,42 @@ const ical = require("./vendor/ical.js"); const moment = require("moment"); -var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, includePastEvents) { +var CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, includePastEvents) { var self = this; var reloadTimer = null; var events = []; - var fetchFailedCallback = function() {}; - var eventsReceivedCallback = function() {}; + var fetchFailedCallback = function () {}; + var eventsReceivedCallback = function () {}; /* fetchCalendar() * Initiates calendar fetch. */ - var fetchCalendar = function() { - + var fetchCalendar = function () { clearTimeout(reloadTimer); reloadTimer = null; var nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); var opts = { headers: { - "User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)" + "User-Agent": "Mozilla/5.0 (Node.js " + nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)" }, gzip: true }; if (auth) { - if(auth.method === "bearer"){ + if (auth.method === "bearer") { opts.auth = { bearer: auth.pass }; - } else { opts.auth = { user: auth.user, pass: auth.pass }; - if(auth.method === "digest"){ + if (auth.method === "digest") { opts.auth.sendImmediately = false; } else { opts.auth.sendImmediately = true; @@ -53,7 +51,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri } } - ical.fromURL(url, opts, function(err, data) { + ical.fromURL(url, opts, function (err, data) { if (err) { fetchFailedCallback(self, err); scheduleTimer(); @@ -64,17 +62,19 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri var newEvents = []; // limitFunction doesn't do much limiting, see comment re: the dates array in rrule section below as to why we need to do the filtering ourselves - var limitFunction = function(date, i) {return true;}; + var limitFunction = function (date, i) { + return true; + }; - var eventDate = function(event, time) { - return (event[time].length === 8) ? moment(event[time], "YYYYMMDD") : moment(new Date(event[time])); + 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(); var today = moment().startOf("day").toDate(); - var future = moment().startOf("day").add(maximumNumberOfDays, "days").subtract(1,"seconds").toDate(); // Subtract 1 second so that events that start on the middle of the night will not repeat. + var future = moment().startOf("day").add(maximumNumberOfDays, "days").subtract(1, "seconds").toDate(); // Subtract 1 second so that events that start on the middle of the night will not repeat. var past = today; if (includePastEvents) { @@ -91,13 +91,12 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri } if (event.type === "VEVENT") { - var startDate = eventDate(event, "start"); var endDate; if (typeof event.end !== "undefined") { endDate = eventDate(event, "end"); - } else if(typeof event.duration !== "undefined") { - var dur=moment.duration(event.duration); + } else if (typeof event.duration !== "undefined") { + var dur = moment.duration(event.duration); endDate = startDate.clone().add(dur); } else { if (!isFacebookBirthday) { @@ -175,8 +174,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri var addedEvents = 0; // can cause problems with e.g. birthdays before 1900 - if(rule.options && rule.origOptions && rule.origOptions.dtstart && rule.origOptions.dtstart.getFullYear() < 1900 || - rule.options && rule.options.dtstart && rule.options.dtstart.getFullYear() < 1900){ + if ((rule.options && rule.origOptions && rule.origOptions.dtstart && rule.origOptions.dtstart.getFullYear() < 1900) || (rule.options && rule.options.dtstart && rule.options.dtstart.getFullYear() < 1900)) { rule.origOptions.dtstart.setYear(1900); rule.options.dtstart.setYear(1900); } @@ -187,7 +185,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri var pastLocal = moment(past).subtract(past.getTimezoneOffset(), "minutes").toDate(); var futureLocal = moment(future).subtract(future.getTimezoneOffset(), "minutes").toDate(); var datesLocal = rule.between(pastLocal, futureLocal, true, limitFunction); - var dates = datesLocal.map(function(dateLocal) { + var dates = datesLocal.map(function (dateLocal) { var date = moment(dateLocal).add(dateLocal.getTimezoneOffset(), "minutes").toDate(); return date; }); @@ -199,17 +197,14 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri // because the logic below will filter out any recurrences that don"t actually belong within // our display range. // Would be great if there was a better way to handle this. - if (event.recurrences !== undefined) - { + if (event.recurrences !== undefined) { var pastMoment = moment(past); var futureMoment = moment(future); - for (var r in event.recurrences) - { + for (var r in event.recurrences) { // Only add dates that weren't already in the range we added from the rrule so that // we don"t double-add those events. - if (moment(new Date(r)).isBetween(pastMoment, futureMoment) !== true) - { + if (moment(new Date(r)).isBetween(pastMoment, futureMoment) !== true) { dates.push(new Date(r)); } } @@ -221,7 +216,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri // ical.js started returning recurrences and exdates as ISOStrings without time information. // .toISOString().substring(0,10) is the method they use to calculate keys, so we'll do the same // (see https://github.com/peterbraden/ical.js/pull/84 ) - var dateKey = date.toISOString().substring(0,10); + var dateKey = date.toISOString().substring(0, 10); var curEvent = event; var showRecurrence = true; @@ -234,16 +229,14 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri startDate = moment(date); // For each date that we"re checking, it"s possible that there is a recurrence override for that one day. - if ((curEvent.recurrences !== undefined) && (curEvent.recurrences[dateKey] !== undefined)) - { + if (curEvent.recurrences !== undefined && curEvent.recurrences[dateKey] !== undefined) { // We found an override, so for this recurrence, use a potentially different title, start date, and duration. curEvent = curEvent.recurrences[dateKey]; startDate = moment(curEvent.start); duration = parseInt(moment(curEvent.end).format("x")) - parseInt(startDate.format("x")); } // If there"s no recurrence override, check for an exception date. Exception dates represent exceptions to the rule. - else if ((curEvent.exdate !== undefined) && (curEvent.exdate[dateKey] !== undefined)) - { + else if (curEvent.exdate !== undefined && curEvent.exdate[dateKey] !== undefined) { // This date is an exception date, which means we should skip it in the recurrence pattern. showRecurrence = false; } @@ -265,7 +258,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri showRecurrence = false; } - if ((showRecurrence === true) && (addedEvents < maximumEntries)) { + if (showRecurrence === true && addedEvents < maximumEntries) { addedEvents++; newEvents.push({ title: recurrenceTitle, @@ -284,7 +277,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri } else { // console.log("Single event ..."); // Single event. - var fullDayEvent = (isFacebookBirthday) ? true : isFullDayEvent(event); + var fullDayEvent = isFacebookBirthday ? true : isFullDayEvent(event); if (includePastEvents) { if (endDate < past) { @@ -329,12 +322,11 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri geo: geo, description: description }); - } } } - newEvents.sort(function(a, b) { + newEvents.sort(function (a, b) { return a.startDate - b.startDate; }); @@ -350,10 +342,10 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri /* scheduleTimer() * Schedule the timer for the next update. */ - var scheduleTimer = function() { + var scheduleTimer = function () { //console.log('Schedule update timer.'); clearTimeout(reloadTimer); - reloadTimer = setTimeout(function() { + reloadTimer = setTimeout(function () { fetchCalendar(); }, reloadInterval); }; @@ -365,7 +357,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * return bool - The event is a fullday event. */ - var isFullDayEvent = function(event) { + var isFullDayEvent = function (event) { if (event.start.length === 8 || event.start.dateOnly) { return true; } @@ -373,7 +365,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri var start = event.start || 0; var startDate = new Date(start); var end = event.end || 0; - if (((end - start) % (24 * 60 * 60 * 1000)) === 0 && startDate.getHours() === 0 && startDate.getMinutes() === 0) { + if ((end - start) % (24 * 60 * 60 * 1000) === 0 && startDate.getHours() === 0 && startDate.getMinutes() === 0) { // Is 24 hours, and starts on the middle of the night. return true; } @@ -390,7 +382,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * return bool - The event should be filtered out */ - var timeFilterApplies = function(now, endDate, filter) { + var timeFilterApplies = function (now, endDate, filter) { if (filter) { var until = filter.split(" "), value = parseInt(until[0]), @@ -404,16 +396,16 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri }; /* getTitleFromEvent(event) - * Gets the title from the event. - * - * argument event object - The event object to check. - * - * return string - The title of the event, or "Event" if no title is found. - */ + * Gets the title from the event. + * + * argument event object - The event object to check. + * + * return string - The title of the event, or "Event" if no title is found. + */ var getTitleFromEvent = function (event) { var title = "Event"; if (event.summary) { - title = (typeof event.summary.val !== "undefined") ? event.summary.val : event.summary; + title = typeof event.summary.val !== "undefined" ? event.summary.val : event.summary; } else if (event.description) { title = event.description; } @@ -442,14 +434,14 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri /* startFetch() * Initiate fetchCalendar(); */ - this.startFetch = function() { + this.startFetch = function () { fetchCalendar(); }; /* broadcastItems() * Broadcast the existing events. */ - this.broadcastEvents = function() { + this.broadcastEvents = function () { //console.log('Broadcasting ' + events.length + ' events.'); eventsReceivedCallback(self); }; @@ -459,7 +451,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * argument callback function - The on success callback. */ - this.onReceive = function(callback) { + this.onReceive = function (callback) { eventsReceivedCallback = callback; }; @@ -468,7 +460,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * argument callback function - The on error callback. */ - this.onError = function(callback) { + this.onError = function (callback) { fetchFailedCallback = callback; }; @@ -477,7 +469,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * return string - The url of this fetcher. */ - this.url = function() { + this.url = function () { return url; }; @@ -486,7 +478,7 @@ var CalendarFetcher = function(url, reloadInterval, excludedEvents, maximumEntri * * return array - The current available events for this fetcher. */ - this.events = function() { + this.events = function () { return events; }; }; diff --git a/modules/default/calendar/debug.js b/modules/default/calendar/debug.js index 51e6f20c..cdcbb024 100644 --- a/modules/default/calendar/debug.js +++ b/modules/default/calendar/debug.js @@ -24,12 +24,12 @@ console.log("Create fetcher ..."); var fetcher = new CalendarFetcher(url, fetchInterval, [], maximumEntries, maximumNumberOfDays, auth); -fetcher.onReceive(function(fetcher) { +fetcher.onReceive(function (fetcher) { console.log(fetcher.events()); console.log("------------------------------------------------------------"); }); -fetcher.onError(function(fetcher, error) { +fetcher.onError(function (fetcher, error) { console.log("Fetcher error:"); console.log(error); }); diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 2d923cf3..95bb7dca 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -11,17 +11,16 @@ var CalendarFetcher = require("./calendarfetcher.js"); module.exports = NodeHelper.create({ // Override start method. - start: function() { + start: function () { var events = []; this.fetchers = []; console.log("Starting node helper for: " + this.name); - }, // Override socketNotificationReceived method. - socketNotificationReceived: function(notification, payload) { + socketNotificationReceived: function (notification, payload) { if (notification === "ADD_CALENDAR") { //console.log('ADD_CALENDAR: '); this.createFetcher(payload.url, payload.fetchInterval, payload.excludedEvents, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth, payload.broadcastPastEvents); @@ -36,11 +35,11 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents) { + createFetcher: function (url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents) { var self = this; if (!validUrl.isUri(url)) { - self.sendSocketNotification("INCORRECT_URL", {url: url}); + self.sendSocketNotification("INCORRECT_URL", { url: url }); return; } @@ -49,7 +48,7 @@ module.exports = NodeHelper.create({ console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); fetcher = new CalendarFetcher(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents); - fetcher.onReceive(function(fetcher) { + fetcher.onReceive(function (fetcher) { //console.log('Broadcast events.'); //console.log(fetcher.events()); @@ -59,7 +58,7 @@ module.exports = NodeHelper.create({ }); }); - fetcher.onError(function(fetcher, error) { + fetcher.onError(function (fetcher, error) { console.error("Calendar Error. Could not fetch calendar: ", fetcher.url(), error); self.sendSocketNotification("FETCH_ERROR", { url: fetcher.url(), diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md index 34a1448d..30019e00 100644 --- a/modules/default/clock/README.md +++ b/modules/default/clock/README.md @@ -1,4 +1,5 @@ # Module: Clock + The `clock` module is one of the default modules of the MagicMirror. This module displays the current date and time. The information will be updated realtime. diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 1b9a2a12..4b60c11b 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -6,7 +6,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("clock",{ +Module.register("clock", { // Module config defaults. defaults: { displayType: "digital", // options: digital, analog, both @@ -31,18 +31,18 @@ Module.register("clock",{ showSunTimes: false, showMoonTimes: false, lat: 47.630539, - lon: -122.344147, + lon: -122.344147 }, // Define required scripts. - getScripts: function() { + getScripts: function () { return ["moment.js", "moment-timezone.js", "suncalc.js"]; }, // Define styles. - getStyles: function() { + getStyles: function () { return ["clock_styles.css"]; }, // Define start sequence. - start: function() { + start: function () { Log.info("Starting module: " + this.name); // Schedule update interval. @@ -51,16 +51,16 @@ Module.register("clock",{ self.minute = moment().minute(); //Calculate how many ms should pass until next update depending on if seconds is displayed or not - var delayCalculator = function(reducedSeconds) { + var delayCalculator = function (reducedSeconds) { if (self.config.displaySeconds) { return 1000 - moment().milliseconds(); } else { - return ((60 - reducedSeconds) * 1000) - moment().milliseconds(); + return (60 - reducedSeconds) * 1000 - moment().milliseconds(); } }; //A recursive timeout function instead of interval to avoid drifting - var notificationTimer = function() { + var notificationTimer = function () { self.updateDom(); //If seconds is displayed CLOCK_SECOND-notification should be sent (but not when CLOCK_MINUTE-notification is sent) @@ -84,11 +84,9 @@ Module.register("clock",{ // Set locale. moment.locale(config.language); - }, // Override dom generator. - getDom: function() { - + getDom: function () { var wrapper = document.createElement("div"); /************************************ @@ -127,12 +125,12 @@ Module.register("clock",{ } if (this.config.clockBold === true) { - timeString = now.format(hourSymbol + "[]mm[]"); + timeString = now.format(hourSymbol + '[]mm[]'); } else { timeString = now.format(hourSymbol + ":mm"); } - if(this.config.showDate){ + if (this.config.showDate) { dateWrapper.innerHTML = now.format(this.config.dateFormat); } if (this.config.showWeek) { @@ -173,9 +171,18 @@ Module.register("clock",{ } const untilNextEvent = moment.duration(moment(nextEvent).diff(now)); const untilNextEventString = untilNextEvent.hours() + "h " + untilNextEvent.minutes() + "m"; - sunWrapper.innerHTML = " " + untilNextEventString + "" + - "" + formatTime(this.config, sunTimes.sunrise) + "" + - "" + formatTime(this.config, sunTimes.sunset) + ""; + sunWrapper.innerHTML = + ' ' + + untilNextEventString + + "" + + '' + + formatTime(this.config, sunTimes.sunrise) + + "" + + '' + + formatTime(this.config, sunTimes.sunset) + + ""; } if (this.config.showMoonTimes) { const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); @@ -190,9 +197,18 @@ Module.register("clock",{ } const isVisible = now.isBetween(moonRise, moonSet) || moonTimes.alwaysUp === true; const illuminatedFractionString = Math.round(moonIllumination.fraction * 100) + "%"; - moonWrapper.innerHTML = " " + illuminatedFractionString + "" + - " " + (moonRise ? formatTime(this.config, moonRise) : "...") + ""+ - " " + (moonSet ? formatTime(this.config, moonSet) : "...") + ""; + moonWrapper.innerHTML = + ' ' + + illuminatedFractionString + + "" + + ' ' + + (moonRise ? formatTime(this.config, moonRise) : "...") + + "" + + ' ' + + (moonSet ? formatTime(this.config, moonSet) : "...") + + ""; } /**************************************************************** @@ -206,7 +222,7 @@ Module.register("clock",{ if (this.config.timezone) { now.tz(this.config.timezone); } - var second = now.seconds() * 6, + var second = now.seconds() * 6, minute = now.minute() * 6 + second / 60, hour = ((now.hours() % 12) / 12) * 360 + 90 + minute / 12; @@ -217,13 +233,12 @@ Module.register("clock",{ clockCircle.style.height = this.config.analogSize; 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.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"; clockCircle.style.border = "rgba(0, 0, 0, 0.1)"; //Updated fix for Issue 611 where non-black backgrounds are used - } else if (this.config.analogFace !== "none") { clockCircle.style.border = "2px solid white"; } @@ -303,9 +318,9 @@ Module.register("clock",{ digitalWrapper.appendChild(moonWrapper); digitalWrapper.appendChild(weekWrapper); - var appendClocks = function(condition, pos1, pos2) { - var padding = [0,0,0,0]; - padding[(placement === condition) ? pos1 : pos2] = "20px"; + 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); diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index a7a582c9..839336be 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -1,72 +1,72 @@ -.clockCircle { - margin: 0 auto; - position: relative; - border-radius: 50%; - background-size: 100%; -} - -.clockFace { - width: 100%; - height: 100%; -} - -.clockFace::after { - position: absolute; - top: 50%; - left: 50%; - width: 6px; - height: 6px; - margin: -3px 0 0 -3px; - background: white; - border-radius: 3px; - content: ""; - display: block; -} - -.clockHour { - width: 0; - height: 0; - position: absolute; - top: 50%; - left: 50%; - margin: -2px 0 -2px -25%; /* numbers much match negative length & thickness */ - padding: 2px 0 2px 25%; /* indicator length & thickness */ - background: white; - transform-origin: 100% 50%; - border-radius: 3px 0 0 3px; -} - -.clockMinute { - width: 0; - height: 0; - position: absolute; - top: 50%; - left: 50%; - margin: -35% -2px 0; /* numbers must match negative length & thickness */ - padding: 35% 2px 0; /* indicator length & thickness */ - background: white; - transform-origin: 50% 100%; - border-radius: 3px 0 0 3px; -} - -.clockSecond { - width: 0; - height: 0; - position: absolute; - top: 50%; - left: 50%; - margin: -38% -1px 0 0; /* numbers must match negative length & thickness */ - padding: 38% 1px 0 0; /* indicator length & thickness */ - background: #888; - transform-origin: 50% 100%; -} - -.module.clock .sun, -.module.clock .moon { - display: flex; -} - -.module.clock .sun > *, -.module.clock .moon > * { - flex: 1; -} +.clockCircle { + margin: 0 auto; + position: relative; + border-radius: 50%; + background-size: 100%; +} + +.clockFace { + width: 100%; + height: 100%; +} + +.clockFace::after { + position: absolute; + top: 50%; + left: 50%; + width: 6px; + height: 6px; + margin: -3px 0 0 -3px; + background: white; + border-radius: 3px; + content: ""; + display: block; +} + +.clockHour { + width: 0; + height: 0; + position: absolute; + top: 50%; + left: 50%; + margin: -2px 0 -2px -25%; /* numbers much match negative length & thickness */ + padding: 2px 0 2px 25%; /* indicator length & thickness */ + background: white; + transform-origin: 100% 50%; + border-radius: 3px 0 0 3px; +} + +.clockMinute { + width: 0; + height: 0; + position: absolute; + top: 50%; + left: 50%; + margin: -35% -2px 0; /* numbers must match negative length & thickness */ + padding: 35% 2px 0; /* indicator length & thickness */ + background: white; + transform-origin: 50% 100%; + border-radius: 3px 0 0 3px; +} + +.clockSecond { + width: 0; + height: 0; + position: absolute; + top: 50%; + left: 50%; + margin: -38% -1px 0 0; /* numbers must match negative length & thickness */ + padding: 38% 1px 0 0; /* indicator length & thickness */ + background: #888; + transform-origin: 50% 100%; +} + +.module.clock .sun, +.module.clock .moon { + display: flex; +} + +.module.clock .sun > *, +.module.clock .moon > * { + flex: 1; +} diff --git a/modules/default/compliments/README.md b/modules/default/compliments/README.md index c746f318..e1360f2e 100644 --- a/modules/default/compliments/README.md +++ b/modules/default/compliments/README.md @@ -1,4 +1,5 @@ # Module: Compliments + The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index ff245eef..412fe170 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -5,31 +5,14 @@ * MIT Licensed. */ Module.register("compliments", { - // Module config defaults. defaults: { compliments: { - anytime: [ - "Hey there sexy!" - ], - morning: [ - "Good morning, handsome!", - "Enjoy your day!", - "How was your sleep?" - ], - afternoon: [ - "Hello, beauty!", - "You look sexy!", - "Looking good today!" - ], - evening: [ - "Wow, you look hot!", - "You look nice!", - "Hi, sexy!" - ], - "....-01-01": [ - "Happy new year!" - ] + anytime: ["Hey there sexy!"], + morning: ["Good morning, handsome!", "Enjoy your day!", "How was your sleep?"], + afternoon: ["Hello, beauty!", "You look sexy!", "Looking good today!"], + evening: ["Wow, you look hot!", "You look nice!", "Hi, sexy!"], + "....-01-01": ["Happy new year!"] }, updateInterval: 30000, remoteFile: null, @@ -41,31 +24,31 @@ Module.register("compliments", { random: true, mockDate: null }, - lastIndexUsed:-1, + lastIndexUsed: -1, // Set currentweather from module currentWeatherType: "", // Define required scripts. - getScripts: function() { + getScripts: function () { return ["moment.js"]; }, // Define start sequence. - start: function() { + start: function () { Log.info("Starting module: " + this.name); this.lastComplimentIndex = -1; var self = this; if (this.config.remoteFile !== null) { - this.complimentFile(function(response) { + this.complimentFile(function (response) { self.config.compliments = JSON.parse(response); self.updateDom(); }); } // Schedule update timer. - setInterval(function() { + setInterval(function () { self.updateDom(self.config.fadeSpeed); }, this.config.updateInterval); }, @@ -77,12 +60,12 @@ Module.register("compliments", { * * return Number - Random index. */ - randomIndex: function(compliments) { + randomIndex: function (compliments) { if (compliments.length === 1) { return 0; } - var generate = function() { + var generate = function () { return Math.floor(Math.random() * compliments.length); }; @@ -102,7 +85,7 @@ Module.register("compliments", { * * return compliments Array - Array with compliments for the time of the day. */ - complimentArray: function() { + complimentArray: function () { var hour = moment().hour(); var date = this.config.mockDate ? this.config.mockDate : moment().format("YYYY-MM-DD"); var compliments; @@ -111,7 +94,7 @@ Module.register("compliments", { compliments = this.config.compliments.morning.slice(0); } else if (hour >= this.config.afternoonStartTime && hour < this.config.afternoonEndTime && this.config.compliments.hasOwnProperty("afternoon")) { compliments = this.config.compliments.afternoon.slice(0); - } else if(this.config.compliments.hasOwnProperty("evening")) { + } else if (this.config.compliments.hasOwnProperty("evening")) { compliments = this.config.compliments.evening.slice(0); } @@ -137,13 +120,13 @@ Module.register("compliments", { /* complimentFile(callback) * Retrieve a file from the local filesystem */ - complimentFile: function(callback) { + complimentFile: function (callback) { var xobj = new XMLHttpRequest(), isRemote = this.config.remoteFile.indexOf("http://") === 0 || this.config.remoteFile.indexOf("https://") === 0, path = isRemote ? this.config.remoteFile : this.file(this.config.remoteFile); xobj.overrideMimeType("application/json"); xobj.open("GET", path, true); - xobj.onreadystatechange = function() { + xobj.onreadystatechange = function () { if (xobj.readyState === 4 && xobj.status === 200) { callback(xobj.responseText); } @@ -156,27 +139,26 @@ Module.register("compliments", { * * return compliment string - A compliment. */ - randomCompliment: function() { + randomCompliment: function () { // get the current time of day compliments list var compliments = this.complimentArray(); // variable for index to next message to display let index = 0; // are we randomizing - if(this.config.random){ + if (this.config.random) { // yes index = this.randomIndex(compliments); - } - else{ + } else { // no, sequential // if doing sequential, don't fall off the end - index = (this.lastIndexUsed >= (compliments.length-1))?0: ++this.lastIndexUsed; + index = this.lastIndexUsed >= compliments.length - 1 ? 0 : ++this.lastIndexUsed; } return compliments[index] || ""; }, // Override dom generator. - getDom: function() { + getDom: function () { var wrapper = document.createElement("div"); wrapper.className = this.config.classes ? this.config.classes : "thin xlarge bright pre-line"; // get the compliment text @@ -186,7 +168,7 @@ Module.register("compliments", { // create a span to hold it all var compliment = document.createElement("span"); // process all the parts of the compliment text - for (var part of parts){ + for (var part of parts) { // create a text element for each part compliment.appendChild(document.createTextNode(part)); // add a break ` @@ -200,7 +182,7 @@ Module.register("compliments", { }, // From data currentweather set weather type - setCurrentWeatherType: function(data) { + setCurrentWeatherType: function (data) { var weatherIconTable = { "01d": "day_sunny", "02d": "day_cloudy", @@ -225,10 +207,9 @@ Module.register("compliments", { }, // Override notification handler. - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { if (notification === "CURRENTWEATHER_DATA") { this.setCurrentWeatherType(payload.data); } - }, - + } }); diff --git a/modules/default/currentweather/README.md b/modules/default/currentweather/README.md index 27b047da..d4db59ea 100644 --- a/modules/default/currentweather/README.md +++ b/modules/default/currentweather/README.md @@ -1,4 +1,5 @@ # Module: Current Weather + The `currentweather` module is one of the default modules of the MagicMirror. This module displays the current weather, including the windspeed, the sunset or sunrise time, the temperature and an icon to display the current conditions. diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index d24a92b4..e0f8be50 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -4,8 +4,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("currentweather",{ - +Module.register("currentweather", { // Default module config. defaults: { location: false, @@ -63,7 +62,7 @@ Module.register("currentweather",{ "11n": "wi-night-thunderstorm", "13n": "wi-night-snow", "50n": "wi-night-alt-cloudy-windy" - }, + } }, // create a variable for the first upcoming calendar event. Used if no location is specified. @@ -73,17 +72,17 @@ Module.register("currentweather",{ fetchedLocationName: "", // Define required scripts. - getScripts: function() { + getScripts: function () { return ["moment.js"]; }, // Define required scripts. - getStyles: function() { + getStyles: function () { return ["weather-icons.css", "currentweather.css"]; }, // Define required translations. - getTranslations: function() { + getTranslations: function () { // 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. @@ -91,7 +90,7 @@ Module.register("currentweather",{ }, // Define start sequence. - start: function() { + start: function () { Log.info("Starting module: " + this.name); // Set locale. @@ -109,13 +108,11 @@ Module.register("currentweather",{ this.feelsLike = null; this.loaded = false; this.scheduleUpdate(this.config.initialLoadDelay); - }, // add extra information of current weather // windDirection, humidity, sunrise and sunset - addExtraInfoWeather: function(wrapper) { - + addExtraInfoWeather: function (wrapper) { var small = document.createElement("div"); small.className = "normal medium"; @@ -130,8 +127,8 @@ Module.register("currentweather",{ if (this.config.showWindDirection) { var windDirection = document.createElement("sup"); if (this.config.showWindDirectionAsArrow) { - if(this.windDeg !== null) { - windDirection.innerHTML = "   "; + if (this.windDeg !== null) { + windDirection.innerHTML = '   '; } } else { windDirection.innerHTML = " " + this.translate(this.windDirection); @@ -170,7 +167,7 @@ Module.register("currentweather",{ }, // Override dom generator. - getDom: function() { + getDom: function () { var wrapper = document.createElement("div"); wrapper.className = this.config.tableClass; @@ -197,17 +194,17 @@ Module.register("currentweather",{ if (this.config.units === "metric" || this.config.units === "imperial") { degreeLabel += "°"; } - if(this.config.degreeLabel) { - switch(this.config.units) { - case "metric": - degreeLabel += "C"; - break; - case "imperial": - degreeLabel += "F"; - break; - case "default": - degreeLabel += "K"; - break; + if (this.config.degreeLabel) { + switch (this.config.units) { + case "metric": + degreeLabel += "C"; + break; + case "imperial": + degreeLabel += "F"; + break; + case "default": + degreeLabel += "K"; + break; } } @@ -250,7 +247,7 @@ Module.register("currentweather",{ wrapper.appendChild(large); - if (this.config.showFeelsLike && this.config.onlyTemp === false){ + if (this.config.showFeelsLike && this.config.onlyTemp === false) { var small = document.createElement("div"); small.className = "normal medium"; @@ -266,7 +263,7 @@ Module.register("currentweather",{ }, // Override getHeader method. - getHeader: function() { + getHeader: function () { if (this.config.appendLocationNameToHeader && this.data.header !== undefined) { return this.data.header + " " + this.fetchedLocationName; } @@ -279,10 +276,10 @@ Module.register("currentweather",{ }, // Override notification handler. - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { if (notification === "DOM_OBJECTS_CREATED") { if (this.config.appendLocationNameToHeader) { - this.hide(0, {lockString: this.identifier}); + this.hide(0, { lockString: this.identifier }); } } if (notification === "CALENDAR_EVENTS") { @@ -314,7 +311,7 @@ Module.register("currentweather",{ * Requests new data from openweather.org. * Calls processWeather on succesfull response. */ - updateWeather: function() { + updateWeather: function () { if (this.config.appid === "") { Log.error("CurrentWeather: APPID not set!"); return; @@ -326,7 +323,7 @@ Module.register("currentweather",{ var weatherRequest = new XMLHttpRequest(); weatherRequest.open("GET", url, true); - weatherRequest.onreadystatechange = function() { + weatherRequest.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { self.processWeather(JSON.parse(this.response)); @@ -340,7 +337,7 @@ Module.register("currentweather",{ } if (retry) { - self.scheduleUpdate((self.loaded) ? -1 : self.config.retryDelay); + self.scheduleUpdate(self.loaded ? -1 : self.config.retryDelay); } } }; @@ -352,18 +349,18 @@ Module.register("currentweather",{ * * return String - URL params. */ - getParams: function() { + getParams: function () { var params = "?"; - if(this.config.locationID) { + if (this.config.locationID) { params += "id=" + this.config.locationID; - } else if(this.config.location) { + } else if (this.config.location) { params += "q=" + this.config.location; } else if (this.firstEvent && this.firstEvent.geo) { params += "lat=" + this.firstEvent.geo.lat + "&lon=" + this.firstEvent.geo.lon; } else if (this.firstEvent && this.firstEvent.location) { params += "q=" + this.firstEvent.location; } else { - this.hide(this.config.animationSpeed, {lockString:this.identifier}); + this.hide(this.config.animationSpeed, { lockString: this.identifier }); return; } @@ -379,8 +376,7 @@ Module.register("currentweather",{ * * argument data object - Weather information received form openweather.org. */ - processWeather: function(data) { - + processWeather: function (data) { if (!data || !data.main || typeof data.main.temp === "undefined") { // Did not receive usable new data. // Maybe this needs a better check? @@ -392,7 +388,7 @@ Module.register("currentweather",{ this.fetchedLocationName = data.name; this.feelsLike = 0; - if (this.config.useBeaufort){ + if (this.config.useBeaufort) { this.windSpeed = this.ms2Beaufort(this.roundValue(data.wind.speed)); } else if (this.config.useKMPHwind) { this.windSpeed = parseFloat((data.wind.speed * 60 * 60) / 1000).toFixed(0); @@ -404,50 +400,59 @@ Module.register("currentweather",{ var windInMph = parseFloat(data.wind.speed * 2.23694); var tempInF = 0; - switch (this.config.units){ - case "metric": tempInF = 1.8 * this.temperature + 32; - break; - case "imperial": tempInF = this.temperature; - break; - case "default": - tempInF = 1.8 * (this.temperature - 273.15) + 32; - break; + switch (this.config.units) { + case "metric": + tempInF = 1.8 * this.temperature + 32; + break; + case "imperial": + tempInF = this.temperature; + break; + case "default": + tempInF = 1.8 * (this.temperature - 273.15) + 32; + break; } - if (windInMph > 3 && tempInF < 50){ + if (windInMph > 3 && tempInF < 50) { // windchill - var windChillInF = Math.round(35.74+0.6215*tempInF-35.75*Math.pow(windInMph,0.16)+0.4275*tempInF*Math.pow(windInMph,0.16)); - var windChillInC = (windChillInF - 32) * (5/9); + var windChillInF = Math.round(35.74 + 0.6215 * tempInF - 35.75 * Math.pow(windInMph, 0.16) + 0.4275 * tempInF * Math.pow(windInMph, 0.16)); + var windChillInC = (windChillInF - 32) * (5 / 9); // this.feelsLike = windChillInC.toFixed(0); - switch (this.config.units){ - case "metric": this.feelsLike = windChillInC.toFixed(0); - break; - case "imperial": this.feelsLike = windChillInF.toFixed(0); - break; - case "default": - this.feelsLike = (windChillInC + 273.15).toFixed(0); - break; + switch (this.config.units) { + case "metric": + this.feelsLike = windChillInC.toFixed(0); + break; + case "imperial": + this.feelsLike = windChillInF.toFixed(0); + break; + case "default": + this.feelsLike = (windChillInC + 273.15).toFixed(0); + break; } - - } else if (tempInF > 80 && this.humidity > 40){ + } else if (tempInF > 80 && this.humidity > 40) { // heat index - var Hindex = -42.379 + 2.04901523*tempInF + 10.14333127*this.humidity - - 0.22475541*tempInF*this.humidity - 6.83783*Math.pow(10,-3)*tempInF*tempInF - - 5.481717*Math.pow(10,-2)*this.humidity*this.humidity - + 1.22874*Math.pow(10,-3)*tempInF*tempInF*this.humidity - + 8.5282*Math.pow(10,-4)*tempInF*this.humidity*this.humidity - - 1.99*Math.pow(10,-6)*tempInF*tempInF*this.humidity*this.humidity; + var Hindex = + -42.379 + + 2.04901523 * tempInF + + 10.14333127 * this.humidity - + 0.22475541 * tempInF * this.humidity - + 6.83783 * Math.pow(10, -3) * tempInF * tempInF - + 5.481717 * Math.pow(10, -2) * this.humidity * this.humidity + + 1.22874 * Math.pow(10, -3) * tempInF * tempInF * this.humidity + + 8.5282 * Math.pow(10, -4) * tempInF * this.humidity * this.humidity - + 1.99 * Math.pow(10, -6) * tempInF * tempInF * this.humidity * this.humidity; - switch (this.config.units){ - case "metric": this.feelsLike = parseFloat((Hindex - 32) / 1.8).toFixed(0); - break; - case "imperial": this.feelsLike = Hindex.toFixed(0); - break; - case "default": - var tc = parseFloat((Hindex - 32) / 1.8) + 273.15; - this.feelsLike = tc.toFixed(0); - break; + switch (this.config.units) { + case "metric": + this.feelsLike = parseFloat((Hindex - 32) / 1.8).toFixed(0); + break; + case "imperial": + this.feelsLike = Hindex.toFixed(0); + break; + case "default": + var tc = parseFloat((Hindex - 32) / 1.8) + 273.15; + this.feelsLike = tc.toFixed(0); + break; } } else { this.feelsLike = parseFloat(this.temperature).toFixed(0); @@ -464,7 +469,7 @@ Module.register("currentweather",{ // The moment().format('h') method has a bug on the Raspberry Pi. // So we need to generate the timestring manually. // See issue: https://github.com/MichMich/MagicMirror/issues/181 - var sunriseSunsetDateObject = (sunrise < now && sunset > now) ? sunset : sunrise; + var sunriseSunsetDateObject = sunrise < now && sunset > now ? sunset : sunrise; var timeString = moment(sunriseSunsetDateObject).format("HH:mm"); if (this.config.timeFormat !== 24) { //var hours = sunriseSunsetDateObject.getHours() % 12 || 12; @@ -483,12 +488,12 @@ Module.register("currentweather",{ } this.sunriseSunsetTime = timeString; - this.sunriseSunsetIcon = (sunrise < now && sunset > now) ? "wi-sunset" : "wi-sunrise"; + this.sunriseSunsetIcon = sunrise < now && sunset > now ? "wi-sunset" : "wi-sunrise"; - this.show(this.config.animationSpeed, {lockString:this.identifier}); + this.show(this.config.animationSpeed, { lockString: this.identifier }); this.loaded = true; this.updateDom(this.config.animationSpeed); - this.sendNotification("CURRENTWEATHER_DATA", {data: data}); + this.sendNotification("CURRENTWEATHER_DATA", { data: data }); }, /* scheduleUpdate() @@ -496,14 +501,14 @@ Module.register("currentweather",{ * * argument delay number - Milliseconds before next update. If empty, this.config.updateInterval is used. */ - scheduleUpdate: function(delay) { + scheduleUpdate: function (delay) { var nextLoad = this.config.updateInterval; if (typeof delay !== "undefined" && delay >= 0) { nextLoad = delay; } var self = this; - setTimeout(function() { + setTimeout(function () { self.updateWeather(); }, nextLoad); }, @@ -519,8 +524,8 @@ Module.register("currentweather",{ * * return number - Windspeed in beaufort. */ - ms2Beaufort: function(ms) { - var kmh = ms * 60 * 60 / 1000; + ms2Beaufort: function (ms) { + var kmh = (ms * 60 * 60) / 1000; var speeds = [1, 5, 11, 19, 28, 38, 49, 61, 74, 88, 102, 117, 1000]; for (var beaufort in speeds) { var speed = speeds[beaufort]; @@ -531,8 +536,8 @@ Module.register("currentweather",{ return 12; }, - deg2Cardinal: function(deg) { - if (deg>11.25 && deg<=33.75){ + deg2Cardinal: function (deg) { + if (deg > 11.25 && deg <= 33.75) { return "NNE"; } else if (deg > 33.75 && deg <= 56.25) { return "NE"; @@ -574,9 +579,8 @@ Module.register("currentweather",{ * * return string - Rounded Temperature. */ - roundValue: function(temperature) { + roundValue: function (temperature) { var decimals = this.config.roundTemp ? 0 : 1; return parseFloat(temperature).toFixed(decimals); } - }); diff --git a/modules/default/defaultmodules.js b/modules/default/defaultmodules.js index d792ae09..9bdcbe95 100644 --- a/modules/default/defaultmodules.js +++ b/modules/default/defaultmodules.js @@ -7,18 +7,9 @@ // Modules listed below can be loaded without the 'default/' prefix. Omitting the default folder name. -var defaultModules = [ - "alert", - "calendar", - "clock", - "compliments", - "currentweather", - "helloworld", - "newsfeed", - "weatherforecast", - "updatenotification", - "weather" -]; +var defaultModules = ["alert", "calendar", "clock", "compliments", "currentweather", "helloworld", "newsfeed", "weatherforecast", "updatenotification", "weather"]; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = defaultModules;} +if (typeof module !== "undefined") { + module.exports = defaultModules; +} diff --git a/modules/default/helloworld/README.md b/modules/default/helloworld/README.md index 8ad06f77..5d5d3a17 100644 --- a/modules/default/helloworld/README.md +++ b/modules/default/helloworld/README.md @@ -1,4 +1,5 @@ # Module: Hello World + The `helloworld` module is one of the default modules of the MagicMirror. It is a simple way to display a static text on the mirror. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/helloworld.html). diff --git a/modules/default/helloworld/helloworld.js b/modules/default/helloworld/helloworld.js index 72474577..68eb22fc 100644 --- a/modules/default/helloworld/helloworld.js +++ b/modules/default/helloworld/helloworld.js @@ -4,8 +4,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("helloworld",{ - +Module.register("helloworld", { // Default module config. defaults: { text: "Hello World!" diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index 33690aa6..484fedba 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -1,5 +1,6 @@ # 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. Scrolling through news headlines happens time-based (````updateInterval````), but can also be controlled by sending news feed specific notifications to the module. + +The `newsfeed` module is one of the default modules of the MagicMirror. +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. For configuration options, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/modules/newsfeed.html). diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index e74ac114..3877818b 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -17,7 +17,7 @@ var iconv = require("iconv-lite"); * attribute logFeedWarnings boolean - Log warnings when there is an error parsing a news article. */ -var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { +var Fetcher = function (url, reloadInterval, encoding, logFeedWarnings) { var self = this; if (reloadInterval < 1000) { reloadInterval = 1000; @@ -26,8 +26,8 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { var reloadTimer = null; var items = []; - var fetchFailedCallback = function() {}; - var itemsReceivedCallback = function() {}; + var fetchFailedCallback = function () {}; + var itemsReceivedCallback = function () {}; /* private methods */ @@ -35,32 +35,29 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { * Request the new items. */ - var fetchNews = function() { + var fetchNews = function () { clearTimeout(reloadTimer); reloadTimer = null; items = []; var parser = new FeedMe(); - parser.on("item", function(item) { - + parser.on("item", function (item) { var title = item.title; var description = item.description || item.summary || item.content || ""; var pubdate = item.pubdate || item.published || item.updated || item["dc:date"]; var url = item.url || item.link || ""; if (title && pubdate) { - - var regex = /(<([^>]+)>)/ig; + var regex = /(<([^>]+)>)/gi; description = description.toString().replace(regex, ""); items.push({ title: title, description: description, pubdate: pubdate, - url: url, + url: url }); - } else if (logFeedWarnings) { console.log("Can't parse feed item:"); console.log(item); @@ -70,39 +67,37 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { } }); - parser.on("end", function() { + parser.on("end", function () { //console.log("end parsing - " + url); self.broadcastItems(); scheduleTimer(); }); - parser.on("error", function(error) { + parser.on("error", function (error) { fetchFailedCallback(self, error); scheduleTimer(); }); var nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); - var headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)", - "Cache-Control": "max-age=0, no-cache, no-store, must-revalidate", - "Pragma": "no-cache"}; + var headers = { "User-Agent": "Mozilla/5.0 (Node.js " + nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)", "Cache-Control": "max-age=0, no-cache, no-store, must-revalidate", Pragma: "no-cache" }; - request({uri: url, encoding: null, headers: headers}) - .on("error", function(error) { + request({ uri: url, encoding: null, headers: headers }) + .on("error", function (error) { fetchFailedCallback(self, error); scheduleTimer(); }) - .pipe(iconv.decodeStream(encoding)).pipe(parser); - + .pipe(iconv.decodeStream(encoding)) + .pipe(parser); }; /* scheduleTimer() * Schedule the timer for the next update. */ - var scheduleTimer = function() { + var scheduleTimer = function () { //console.log('Schedule update timer.'); clearTimeout(reloadTimer); - reloadTimer = setTimeout(function() { + reloadTimer = setTimeout(function () { fetchNews(); }, reloadInterval); }; @@ -114,7 +109,7 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { * * attribute interval number - Interval for the update in milliseconds. */ - this.setReloadInterval = function(interval) { + this.setReloadInterval = function (interval) { if (interval > 1000 && interval < reloadInterval) { reloadInterval = interval; } @@ -123,14 +118,14 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { /* startFetch() * Initiate fetchNews(); */ - this.startFetch = function() { + this.startFetch = function () { fetchNews(); }; /* broadcastItems() * Broadcast the existing items. */ - this.broadcastItems = function() { + this.broadcastItems = function () { if (items.length <= 0) { //console.log('No items to broadcast yet.'); return; @@ -139,19 +134,19 @@ var Fetcher = function(url, reloadInterval, encoding, logFeedWarnings) { itemsReceivedCallback(self); }; - this.onReceive = function(callback) { + this.onReceive = function (callback) { itemsReceivedCallback = callback; }; - this.onError = function(callback) { + this.onError = function (callback) { fetchFailedCallback = callback; }; - this.url = function() { + this.url = function () { return url; }; - this.items = function() { + this.items = function () { return items; }; }; diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index edbac68d..70809522 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -4,8 +4,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("newsfeed",{ - +Module.register("newsfeed", { // Default module config. defaults: { feeds: [ @@ -41,12 +40,12 @@ Module.register("newsfeed",{ }, // Define required scripts. - getScripts: function() { + getScripts: function () { return ["moment.js"]; }, // Define required translations. - getTranslations: function() { + getTranslations: function () { // 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. @@ -54,7 +53,7 @@ Module.register("newsfeed",{ }, // Define start sequence. - start: function() { + start: function () { Log.info("Starting module: " + this.name); // Set locale. @@ -71,7 +70,7 @@ Module.register("newsfeed",{ }, // Override socket notification handler. - socketNotificationReceived: function(notification, payload) { + socketNotificationReceived: function (notification, payload) { if (notification === "NEWS_ITEMS") { this.generateFeed(payload); @@ -84,7 +83,7 @@ Module.register("newsfeed",{ }, // Override dom generator. - getDom: function() { + getDom: function () { var wrapper = document.createElement("div"); if (this.config.feedUrl) { @@ -98,7 +97,6 @@ Module.register("newsfeed",{ } if (this.newsItems.length > 0) { - // 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"); @@ -113,7 +111,7 @@ Module.register("newsfeed",{ if (this.config.showPublishDate) { sourceAndTimestamp.innerHTML += moment(new Date(this.newsItems[this.activeItem].pubdate)).fromNow(); } - if (this.config.showSourceTitle && this.newsItems[this.activeItem].sourceTitle !== "" || this.config.showPublishDate) { + if ((this.config.showSourceTitle && this.newsItems[this.activeItem].sourceTitle !== "") || this.config.showPublishDate) { sourceAndTimestamp.innerHTML += ":"; } @@ -123,47 +121,42 @@ Module.register("newsfeed",{ //Remove selected tags from the beginning of rss feed items (title or description) if (this.config.removeStartTags === "title" || this.config.removeStartTags === "both") { - - for (let f=0; f this.config.lengthDescription ? txtDesc.substring(0, this.config.lengthDescription) + "..." : txtDesc) : txtDesc); + description.innerHTML = this.config.truncDescription ? (txtDesc.length > this.config.lengthDescription ? txtDesc.substring(0, this.config.lengthDescription) + "..." : txtDesc) : txtDesc; wrapper.appendChild(description); } @@ -196,7 +189,6 @@ Module.register("newsfeed",{ if (this.config.hideLoading) { this.show(); } - } else { if (this.config.hideLoading) { this.hide(); @@ -209,14 +201,14 @@ Module.register("newsfeed",{ return wrapper; }, - getActiveItemURL: function() { + getActiveItemURL: function () { return typeof this.newsItems[this.activeItem].url === "string" ? this.newsItems[this.activeItem].url : this.newsItems[this.activeItem].url.href; }, /* registerFeeds() * registers the feeds to be used by the backend. */ - registerFeeds: function() { + registerFeeds: function () { for (var f in this.config.feeds) { var feed = this.config.feeds[f]; this.sendSocketNotification("ADD_FEED", { @@ -231,7 +223,7 @@ Module.register("newsfeed",{ * * attribute feeds object - An object with feeds returned by the node helper. */ - generateFeed: function(feeds) { + generateFeed: function (feeds) { var newsItems = []; for (var feed in feeds) { var feedItems = feeds[feed]; @@ -239,24 +231,24 @@ Module.register("newsfeed",{ for (var i in feedItems) { var item = feedItems[i]; item.sourceTitle = this.titleForFeed(feed); - if (!(this.config.ignoreOldItems && ((Date.now() - new Date(item.pubdate)) > this.config.ignoreOlderThan))) { + if (!(this.config.ignoreOldItems && Date.now() - new Date(item.pubdate) > this.config.ignoreOlderThan)) { newsItems.push(item); } } } } - newsItems.sort(function(a,b) { + newsItems.sort(function (a, b) { var dateA = new Date(a.pubdate); var dateB = new Date(b.pubdate); return dateB - dateA; }); - if(this.config.maxNewsItems > 0) { + if (this.config.maxNewsItems > 0) { newsItems = newsItems.slice(0, this.config.maxNewsItems); } - if(this.config.prohibitedWords.length > 0) { - newsItems = newsItems.filter(function(value){ - for (var i=0; i < this.config.prohibitedWords.length; i++) { + if (this.config.prohibitedWords.length > 0) { + newsItems = newsItems.filter(function (value) { + for (var i = 0; i < this.config.prohibitedWords.length; i++) { if (value["title"].toLowerCase().indexOf(this.config.prohibitedWords[i].toLowerCase()) > -1) { return false; } @@ -267,8 +259,8 @@ Module.register("newsfeed",{ // get updated news items and broadcast them var updatedItems = []; - newsItems.forEach(value => { - if (this.newsItems.findIndex(value1 => value1 === value) === -1) { + newsItems.forEach((value) => { + if (this.newsItems.findIndex((value1) => value1 === value) === -1) { // Add item to updated items list updatedItems.push(value); } @@ -276,7 +268,7 @@ Module.register("newsfeed",{ // check if updated items exist, if so and if we should broadcast these updates, then lets do so if (this.config.broadcastNewsUpdates && updatedItems.length > 0) { - this.sendNotification("NEWS_FEED_UPDATE", {items: updatedItems}); + this.sendNotification("NEWS_FEED_UPDATE", { items: updatedItems }); } this.newsItems = newsItems; @@ -289,7 +281,7 @@ Module.register("newsfeed",{ * * returns bool */ - subscribedToFeed: function(feedUrl) { + subscribedToFeed: function (feedUrl) { for (var f in this.config.feeds) { var feed = this.config.feeds[f]; if (feed.url === feedUrl) { @@ -306,7 +298,7 @@ Module.register("newsfeed",{ * * returns string */ - titleForFeed: function(feedUrl) { + titleForFeed: function (feedUrl) { for (var f in this.config.feeds) { var feed = this.config.feeds[f]; if (feed.url === feedUrl) { @@ -319,23 +311,23 @@ Module.register("newsfeed",{ /* scheduleUpdateInterval() * Schedule visual update. */ - scheduleUpdateInterval: function() { + scheduleUpdateInterval: function () { var self = this; self.updateDom(self.config.animationSpeed); // Broadcast NewsFeed if needed if (self.config.broadcastNewsFeeds) { - self.sendNotification("NEWS_FEED", {items: self.newsItems}); + self.sendNotification("NEWS_FEED", { items: self.newsItems }); } - this.timer = setInterval(function() { + this.timer = setInterval(function () { self.activeItem++; self.updateDom(self.config.animationSpeed); // Broadcast NewsFeed if needed if (self.config.broadcastNewsFeeds) { - self.sendNotification("NEWS_FEED", {items: self.newsItems}); + self.sendNotification("NEWS_FEED", { items: self.newsItems }); } }, this.config.updateInterval); }, @@ -347,25 +339,25 @@ Module.register("newsfeed",{ * * return string - Capitalized output string. */ - capitalizeFirstLetter: function(string) { + capitalizeFirstLetter: function (string) { return string.charAt(0).toUpperCase() + string.slice(1); }, - resetDescrOrFullArticleAndTimer: function() { + resetDescrOrFullArticleAndTimer: function () { this.isShowingDescription = this.config.showDescription; this.config.showFullArticle = false; this.scrollPosition = 0; // reset bottom bar alignment document.getElementsByClassName("region bottom bar")[0].style.bottom = "0"; document.getElementsByClassName("region bottom bar")[0].style.top = "inherit"; - if(!this.timer){ + if (!this.timer) { this.scheduleUpdateInterval(); } }, - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { var before = this.activeItem; - if(notification === "ARTICLE_NEXT"){ + if (notification === "ARTICLE_NEXT") { this.activeItem++; if (this.activeItem >= this.newsItems.length) { this.activeItem = 0; @@ -373,7 +365,7 @@ Module.register("newsfeed",{ 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"){ + } else if (notification === "ARTICLE_PREVIOUS") { this.activeItem--; if (this.activeItem < 0) { this.activeItem = this.newsItems.length - 1; @@ -383,51 +375,50 @@ Module.register("newsfeed",{ this.updateDom(100); } // if "more details" is received the first time: show article summary, on second time show full article - else if(notification === "ARTICLE_MORE_DETAILS"){ + else if (notification === "ARTICLE_MORE_DETAILS") { // full article is already showing, so scrolling down - if(this.config.showFullArticle === true){ + if (this.config.showFullArticle === true) { this.scrollPosition += this.config.scrollLength; window.scrollTo(0, this.scrollPosition); Log.info(this.name + " - scrolling down"); Log.info(this.name + " - ARTICLE_MORE_DETAILS, scroll position: " + this.config.scrollLength); - } - else { + } else { this.showFullArticle(); } - } else if(notification === "ARTICLE_SCROLL_UP"){ - if(this.config.showFullArticle === true){ + } else if (notification === "ARTICLE_SCROLL_UP") { + if (this.config.showFullArticle === true) { this.scrollPosition -= this.config.scrollLength; window.scrollTo(0, this.scrollPosition); Log.info(this.name + " - scrolling up"); Log.info(this.name + " - ARTICLE_SCROLL_UP, scroll position: " + this.config.scrollLength); } - } else if(notification === "ARTICLE_LESS_DETAILS"){ + } else if (notification === "ARTICLE_LESS_DETAILS") { this.resetDescrOrFullArticleAndTimer(); Log.info(this.name + " - showing only article titles again"); this.updateDom(100); - } else if (notification === "ARTICLE_TOGGLE_FULL"){ - if (this.config.showFullArticle){ + } else if (notification === "ARTICLE_TOGGLE_FULL") { + if (this.config.showFullArticle) { this.activeItem++; this.resetDescrOrFullArticleAndTimer(); } else { this.showFullArticle(); } - } else if (notification === "ARTICLE_INFO_REQUEST"){ + } else if (notification === "ARTICLE_INFO_REQUEST") { this.sendNotification("ARTICLE_INFO_RESPONSE", { - title: this.newsItems[this.activeItem].title, + title: this.newsItems[this.activeItem].title, source: this.newsItems[this.activeItem].sourceTitle, - date: this.newsItems[this.activeItem].pubdate, - desc: this.newsItems[this.activeItem].description, - url: this.getActiveItemURL() + date: this.newsItems[this.activeItem].pubdate, + desc: this.newsItems[this.activeItem].description, + url: this.getActiveItemURL() }); } }, - showFullArticle: function() { + showFullArticle: function () { this.isShowingDescription = !this.isShowingDescription; this.config.showFullArticle = !this.isShowingDescription; // make bottom bar align to top to allow scrolling - if(this.config.showFullArticle === true){ + if (this.config.showFullArticle === true) { document.getElementsByClassName("region bottom bar")[0].style.bottom = "inherit"; document.getElementsByClassName("region bottom bar")[0].style.top = "-90px"; } diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index ef547bd2..f6d6705a 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -11,13 +11,13 @@ var Fetcher = require("./fetcher.js"); module.exports = NodeHelper.create({ // Subclass start method. - start: function() { + start: function () { console.log("Starting module: " + this.name); this.fetchers = []; }, // Subclass socketNotificationReceived received. - socketNotificationReceived: function(notification, payload) { + socketNotificationReceived: function (notification, payload) { if (notification === "ADD_FEED") { this.createFetcher(payload.feed, payload.config); return; @@ -31,7 +31,7 @@ module.exports = NodeHelper.create({ * attribute feed object - A feed object. * attribute config object - A configuration object containing reload interval in milliseconds. */ - createFetcher: function(feed, config) { + createFetcher: function (feed, config) { var self = this; var url = feed.url || ""; @@ -48,11 +48,11 @@ module.exports = NodeHelper.create({ console.log("Create new news fetcher for url: " + url + " - Interval: " + reloadInterval); fetcher = new Fetcher(url, reloadInterval, encoding, config.logFeedWarnings); - fetcher.onReceive(function(fetcher) { + fetcher.onReceive(function (fetcher) { self.broadcastFeeds(); }); - fetcher.onError(function(fetcher, error) { + fetcher.onError(function (fetcher, error) { self.sendSocketNotification("FETCH_ERROR", { url: fetcher.url(), error: error @@ -74,7 +74,7 @@ module.exports = NodeHelper.create({ * Creates an object with all feed items of the different registered feeds, * and broadcasts these using sendSocketNotification. */ - broadcastFeeds: function() { + broadcastFeeds: function () { var feeds = {}; for (var f in this.fetchers) { feeds[f] = this.fetchers[f].items(); diff --git a/modules/default/newsfeed/translations/de.json b/modules/default/newsfeed/translations/de.json index 9ec3ef7b..a11eb323 100644 --- a/modules/default/newsfeed/translations/de.json +++ b/modules/default/newsfeed/translations/de.json @@ -1,3 +1,3 @@ { - "configuration_changed": "Die Konfigurationsoptionen für das Newsfeed-Modul haben sich geändert. \nBitte überprüfen Sie die Dokumentation." -} \ No newline at end of file + "configuration_changed": "Die Konfigurationsoptionen für das Newsfeed-Modul haben sich geändert. \nBitte überprüfen Sie die Dokumentation." +} diff --git a/modules/default/newsfeed/translations/en.json b/modules/default/newsfeed/translations/en.json index 23b6100d..9e804445 100644 --- a/modules/default/newsfeed/translations/en.json +++ b/modules/default/newsfeed/translations/en.json @@ -1,3 +1,3 @@ { - "configuration_changed": "The configuration options for the newsfeed module have changed.\nPlease check the documentation." -} \ No newline at end of file + "configuration_changed": "The configuration options for the newsfeed module have changed.\nPlease check the documentation." +} diff --git a/modules/default/newsfeed/translations/es.json b/modules/default/newsfeed/translations/es.json index 6143f68c..b1124b6e 100644 --- a/modules/default/newsfeed/translations/es.json +++ b/modules/default/newsfeed/translations/es.json @@ -1,3 +1,3 @@ { - "configuration_changed": "Las opciones de configuración para el módulo de suministro de noticias han cambiado. \nVerifique la documentación." -} \ No newline at end of file + "configuration_changed": "Las opciones de configuración para el módulo de suministro de noticias han cambiado. \nVerifique la documentación." +} diff --git a/modules/default/newsfeed/translations/fr.json b/modules/default/newsfeed/translations/fr.json index 85c6b412..fa6d522e 100644 --- a/modules/default/newsfeed/translations/fr.json +++ b/modules/default/newsfeed/translations/fr.json @@ -1,3 +1,3 @@ { - "configuration_changed": "Les options de configuration du module newsfeed ont changé. \nVeuillez consulter la documentation." -} \ No newline at end of file + "configuration_changed": "Les options de configuration du module newsfeed ont changé. \nVeuillez consulter la documentation." +} diff --git a/modules/default/updatenotification/README.md b/modules/default/updatenotification/README.md index af6305e6..0ab6886a 100644 --- a/modules/default/updatenotification/README.md +++ b/modules/default/updatenotification/README.md @@ -1,4 +1,5 @@ # Module: Update Notification + The `updatenotification` module is one of the default modules of the MagicMirror. This will display a message whenever a new version of the MagicMirror application is available. diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 2fc62c95..1e47b47e 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -6,21 +6,18 @@ var defaultModules = require(__dirname + "/../defaultmodules.js"); var NodeHelper = require("node_helper"); module.exports = NodeHelper.create({ - config: {}, updateTimer: null, updateProcessStarted: false, - start: function () { - }, - - configureModules: function(modules) { + start: function () {}, + configureModules: function (modules) { // Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten // others will be added in front // this method returns promises so we can't wait for every one to resolve before continuing - simpleGits.push({"module": "default", "git": SimpleGit(path.normalize(__dirname + "/../../../"))}); + simpleGits.push({ module: "default", git: SimpleGit(path.normalize(__dirname + "/../../../")) }); var promises = []; @@ -33,7 +30,7 @@ module.exports = NodeHelper.create({ //console.log("checking git for module="+moduleName) let stat = fs.statSync(path.join(moduleFolder, ".git")); promises.push(this.resolveRemote(moduleName, moduleFolder)); - } catch(err) { + } catch (err) { // Error when directory .git doesn't exist // This module is not managed with git, skip continue; @@ -47,7 +44,7 @@ module.exports = NodeHelper.create({ socketNotificationReceived: function (notification, payload) { if (notification === "CONFIG") { this.config = payload; - } else if(notification === "MODULES") { + } else if (notification === "MODULES") { // if this is the 1st time thru the update check process if (!this.updateProcessStarted) { this.updateProcessStarted = true; @@ -56,7 +53,7 @@ module.exports = NodeHelper.create({ } }, - resolveRemote: function(moduleName, moduleFolder) { + resolveRemote: function (moduleName, moduleFolder) { return new Promise((resolve, reject) => { var git = SimpleGit(moduleFolder); git.getRemotes(true, (err, remotes) => { @@ -65,19 +62,19 @@ module.exports = NodeHelper.create({ return resolve(); } // Folder has .git and has at least one git remote, watch this folder - simpleGits.unshift({"module": moduleName, "git": git}); + simpleGits.unshift({ module: moduleName, git: git }); resolve(); }); }); }, - performFetch: function() { + performFetch: function () { var self = this; simpleGits.forEach((sg) => { sg.git.fetch().status((err, data) => { data.module = sg.module; if (!err) { - sg.git.log({"-1": null}, (err, data2) => { + sg.git.log({ "-1": null }, (err, data2) => { if (!err && data2.latest && "hash" in data2.latest) { data.hash = data2.latest.hash; self.sendSocketNotification("STATUS", data); @@ -90,19 +87,19 @@ module.exports = NodeHelper.create({ this.scheduleNextFetch(this.config.updateInterval); }, - scheduleNextFetch: function(delay) { + scheduleNextFetch: function (delay) { if (delay < 60 * 1000) { delay = 60 * 1000; } var self = this; clearTimeout(this.updateTimer); - this.updateTimer = setTimeout(function() { + this.updateTimer = setTimeout(function () { self.performFetch(); }, delay); }, - ignoreUpdateChecking: function(moduleName) { + ignoreUpdateChecking: function (moduleName) { // Should not check for updates for default modules if (defaultModules.indexOf(moduleName) >= 0) { return true; @@ -116,5 +113,4 @@ module.exports = NodeHelper.create({ // The rest of the modules that passes should check for updates return false; } - }); diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js index 0c4e2ad9..3de82f1c 100644 --- a/modules/default/updatenotification/updatenotification.js +++ b/modules/default/updatenotification/updatenotification.js @@ -5,7 +5,6 @@ * MIT Licensed. */ Module.register("updatenotification", { - defaults: { updateInterval: 10 * 60 * 1000, // every 10 minutes refreshInterval: 24 * 60 * 60 * 1000, // one day @@ -18,7 +17,10 @@ Module.register("updatenotification", { start: function () { var self = this; Log.log("Start updatenotification"); - setInterval( () => { self.moduleList = {};self.updateDom(2); } , self.config.refreshInterval); + setInterval(() => { + self.moduleList = {}; + self.updateDom(2); + }, self.config.refreshInterval); }, notificationReceived: function (notification, payload, sender) { @@ -39,16 +41,15 @@ Module.register("updatenotification", { var self = this; if (payload && payload.behind > 0) { // if we haven't seen info for this module - if(this.moduleList[payload.module] === undefined){ + if (this.moduleList[payload.module] === undefined) { // save it - this.moduleList[payload.module]=payload; + this.moduleList[payload.module] = payload; self.updateDom(2); } //self.show(1000, { lockString: self.identifier }); - - } else if (payload && payload.behind === 0){ + } else if (payload && payload.behind === 0) { // if the module WAS in the list, but shouldn't be - if(this.moduleList[payload.module] !== undefined){ + if (this.moduleList[payload.module] !== undefined) { // remove it delete this.moduleList[payload.module]; self.updateDom(2); @@ -56,23 +57,18 @@ Module.register("updatenotification", { } }, - diffLink: function(module, text) { + diffLink: function (module, text) { var localRef = module.hash; var remoteRef = module.tracking.replace(/.*\//, ""); - return "" + - text + - ""; + return '' + text + ""; }, // Override dom generator. getDom: function () { var wrapper = document.createElement("div"); - if(this.suspended === false){ + if (this.suspended === false) { // process the hash of module info found - for(var key of Object.keys(this.moduleList)){ + for (var key of Object.keys(this.moduleList)) { let m = this.moduleList[key]; var message = document.createElement("div"); @@ -93,7 +89,7 @@ Module.register("updatenotification", { var text = document.createElement("span"); if (m.module === "default") { text.innerHTML = this.translate("UPDATE_NOTIFICATION"); - subtextHtml = this.diffLink(m,subtextHtml); + subtextHtml = this.diffLink(m, subtextHtml); } else { text.innerHTML = this.translate("UPDATE_NOTIFICATION_MODULE", { MODULE_NAME: m.module @@ -112,11 +108,11 @@ Module.register("updatenotification", { return wrapper; }, - suspend: function() { - this.suspended=true; + suspend: function () { + this.suspended = true; }, - resume: function() { - this.suspended=false; + resume: function () { + this.suspended = false; this.updateDom(2); } }); diff --git a/modules/default/weather/providers/README.md b/modules/default/weather/providers/README.md index a1bb24df..02cef8dd 100755 --- a/modules/default/weather/providers/README.md +++ b/modules/default/weather/providers/README.md @@ -15,15 +15,15 @@ Table of Contents: This is the script in which the weather provider will be defined. In its most simple form, the weather provider must implement the following: -````javascript +```javascript WeatherProvider.register("yourprovider", { - providerName: "YourProvider", + providerName: "YourProvider", - fetchCurrentWeather() {}, + fetchCurrentWeather() {}, - fetchWeatherForecast() {} + fetchWeatherForecast() {} }); -```` +``` ### Weather provider methods to implement @@ -89,24 +89,24 @@ A convenience function to make requests. It returns a promise. ### WeatherObject -| Property | Type | Value/Unit | -| --- | --- | --- | -| units | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| tempUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| windUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| date | `object` | [Moment.js](https://momentjs.com/) object of the time/date. | -| windSpeed |`number` | Metric: `meter/second`
Imperial: `miles/hour` | -| windDirection |`number` | Direction of the wind in degrees. | -| sunrise |`object` | [Moment.js](https://momentjs.com/) object of sunrise. | -| sunset |`object` | [Moment.js](https://momentjs.com/) object of sunset. | -| temperature | `number` | Current temperature | -| minTemperature | `number` | Lowest temperature of the day. | -| maxTemperature | `number` | Highest temperature of the day. | -| weatherType | `string` | Icon name of the weather type.
Possible values: [WeatherIcons](https://www.npmjs.com/package/weathericons) | -| humidity | `number` | Percentage of humidity | -| rain | `number` | Metric: `millimeters`
Imperial: `inches` | -| snow | `number` | Metric: `millimeters`
Imperial: `inches` | -| precipitation | `number` | Metric: `millimeters`
Imperial: `inches`
UK Met Office provider: `percent` | +| Property | Type | Value/Unit | +| -------------- | -------- | --------------------------------------------------------------------------------------------------------------- | +| units | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | +| tempUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | +| windUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | +| date | `object` | [Moment.js](https://momentjs.com/) object of the time/date. | +| windSpeed | `number` | Metric: `meter/second`
Imperial: `miles/hour` | +| windDirection | `number` | Direction of the wind in degrees. | +| sunrise | `object` | [Moment.js](https://momentjs.com/) object of sunrise. | +| sunset | `object` | [Moment.js](https://momentjs.com/) object of sunset. | +| temperature | `number` | Current temperature | +| minTemperature | `number` | Lowest temperature of the day. | +| maxTemperature | `number` | Highest temperature of the day. | +| weatherType | `string` | Icon name of the weather type.
Possible values: [WeatherIcons](https://www.npmjs.com/package/weathericons) | +| humidity | `number` | Percentage of humidity | +| rain | `number` | Metric: `millimeters`
Imperial: `inches` | +| snow | `number` | Metric: `millimeters`
Imperial: `inches` | +| precipitation | `number` | Metric: `millimeters`
Imperial: `inches`
UK Met Office provider: `percent` | #### Current weather diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index ea36da28..4ba90105 100755 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -22,15 +22,16 @@ WeatherProvider.register("darksky", { fetchCurrentWeather() { this.fetchData(this.getUrl()) - .then(data => { - if(!data || !data.currently || typeof data.currently.temperature === "undefined") { + .then((data) => { + if (!data || !data.currently || typeof data.currently.temperature === "undefined") { // No usable data? return; } const currentWeather = this.generateWeatherDayFromCurrentWeather(data); this.setCurrentWeather(currentWeather); - }).catch(function(request) { + }) + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -38,15 +39,16 @@ WeatherProvider.register("darksky", { fetchWeatherForecast() { this.fetchData(this.getUrl()) - .then(data => { - if(!data || !data.daily || !data.daily.data.length) { + .then((data) => { + if (!data || !data.daily || !data.daily.data.length) { // No usable data? return; } const forecast = this.generateWeatherObjectsFromForecast(data.daily.data); this.setWeatherForecast(forecast); - }).catch(function(request) { + }) + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -109,12 +111,12 @@ WeatherProvider.register("darksky", { const weatherTypes = { "clear-day": "day-sunny", "clear-night": "night-clear", - "rain": "rain", - "snow": "snow", - "sleet": "snow", - "wind": "wind", - "fog": "fog", - "cloudy": "cloudy", + rain: "rain", + snow: "snow", + sleet: "snow", + wind: "wind", + fog: "fog", + cloudy: "cloudy", "partly-cloudy-day": "day-cloudy", "partly-cloudy-night": "night-cloudy" }; diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index 1a134f47..70b715a0 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -9,7 +9,6 @@ * This class is the blueprint for a weather provider. */ WeatherProvider.register("openweathermap", { - // Set the name of the provider. // This isn't strictly necessary, since it will fallback to the provider identifier // But for debugging (and future alerts) it would be nice to have the real name. @@ -18,7 +17,7 @@ WeatherProvider.register("openweathermap", { // Overwrite the fetchCurrentWeather method. fetchCurrentWeather() { this.fetchData(this.getUrl()) - .then(data => { + .then((data) => { if (!data || !data.main || typeof data.main.temp === "undefined") { // Did not receive usable new data. // Maybe this needs a better check? @@ -30,7 +29,7 @@ WeatherProvider.register("openweathermap", { const currentWeather = this.generateWeatherObjectFromCurrentWeather(data); this.setCurrentWeather(currentWeather); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -39,7 +38,7 @@ WeatherProvider.register("openweathermap", { // Overwrite the fetchCurrentWeather method. fetchWeatherForecast() { this.fetchData(this.getUrl()) - .then(data => { + .then((data) => { if (!data || !data.list || !data.list.length) { // Did not receive usable new data. // Maybe this needs a better check? @@ -51,7 +50,7 @@ WeatherProvider.register("openweathermap", { const forecast = this.generateWeatherObjectsFromForecast(data.list); this.setWeatherForecast(forecast); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -86,7 +85,6 @@ WeatherProvider.register("openweathermap", { * Generate WeatherObjects based on forecast information */ generateWeatherObjectsFromForecast(forecasts) { - if (this.config.weatherEndpoint === "/forecast") { return this.fetchForecastHourly(forecasts); } else if (this.config.weatherEndpoint === "/forecast/daily") { @@ -113,7 +111,6 @@ WeatherProvider.register("openweathermap", { let weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); for (const forecast of forecasts) { - if (date !== moment(forecast.dt, "X").format("YYYY-MM-DD")) { // calculate minimum/maximum temperature, specify rain amount weather.minTemperature = Math.min.apply(null, minTemp); @@ -139,7 +136,6 @@ WeatherProvider.register("openweathermap", { // If the first value of today is later than 17:00, we have an icon at least! weather.weatherType = this.convertWeatherType(forecast.weather[0].icon); - } if (moment(forecast.dt, "X").format("H") >= 8 && moment(forecast.dt, "X").format("H") <= 17) { @@ -260,16 +256,16 @@ WeatherProvider.register("openweathermap", { */ getParams() { let params = "?"; - if(this.config.locationID) { + if (this.config.locationID) { params += "id=" + this.config.locationID; - } else if(this.config.location) { + } else if (this.config.location) { params += "q=" + this.config.location; } else if (this.firstEvent && this.firstEvent.geo) { params += "lat=" + this.firstEvent.geo.lat + "&lon=" + this.firstEvent.geo.lon; } else if (this.firstEvent && this.firstEvent.location) { params += "q=" + this.firstEvent.location; } else { - this.hide(this.config.animationSpeed, {lockString:this.identifier}); + this.hide(this.config.animationSpeed, { lockString: this.identifier }); return; } diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 17cc463e..f1a50074 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -9,7 +9,6 @@ * This class is a provider for UK Met Office Datapoint. */ WeatherProvider.register("ukmetoffice", { - // Set the name of the provider. // This isn't strictly necessary, since it will fallback to the provider identifier // But for debugging (and future alerts) it would be nice to have the real name. @@ -23,7 +22,7 @@ WeatherProvider.register("ukmetoffice", { // Overwrite the fetchCurrentWeather method. fetchCurrentWeather() { this.fetchData(this.getUrl("3hourly")) - .then(data => { + .then((data) => { if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? @@ -35,7 +34,7 @@ WeatherProvider.register("ukmetoffice", { const currentWeather = this.generateWeatherObjectFromCurrentWeather(data); this.setCurrentWeather(currentWeather); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -44,7 +43,7 @@ WeatherProvider.register("ukmetoffice", { // Overwrite the fetchCurrentWeather method. fetchWeatherForecast() { this.fetchData(this.getUrl("daily")) - .then(data => { + .then((data) => { if (!data || !data.SiteRep || !data.SiteRep.DV || !data.SiteRep.DV.Location || !data.SiteRep.DV.Location.Period || data.SiteRep.DV.Location.Period.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? @@ -56,7 +55,7 @@ WeatherProvider.register("ukmetoffice", { const forecast = this.generateWeatherObjectsFromForecast(data); this.setWeatherForecast(forecast); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -83,18 +82,17 @@ WeatherProvider.register("ukmetoffice", { // loop round each of the (5) periods, look for today (the first period may be yesterday) for (var i in currentWeatherData.SiteRep.DV.Location.Period) { - let periodDate = moment.utc(currentWeatherData.SiteRep.DV.Location.Period[i].value.substr(0,10), "YYYY-MM-DD"); + let periodDate = moment.utc(currentWeatherData.SiteRep.DV.Location.Period[i].value.substr(0, 10), "YYYY-MM-DD"); // ignore if period is before today if (periodDate.isSameOrAfter(moment.utc().startOf("day"))) { - // check this is the period we want, after today the diff will be -ve if (moment().diff(periodDate, "minutes") > 0) { // loop round the reports looking for the one we are in // $ value specifies the time in minutes-of-the-day: 0, 180, 360,...1260 - for (var j in currentWeatherData.SiteRep.DV.Location.Period[i].Rep){ + for (var j in currentWeatherData.SiteRep.DV.Location.Period[i].Rep) { let p = currentWeatherData.SiteRep.DV.Location.Period[i].Rep[j].$; - if (timeInMins >= p && timeInMins-180 < p) { + if (timeInMins >= p && timeInMins - 180 < p) { // finally got the one we want, so populate weather object currentWeather.humidity = currentWeatherData.SiteRep.DV.Location.Period[i].Rep[j].H; currentWeather.temperature = this.convertTemp(currentWeatherData.SiteRep.DV.Location.Period[i].Rep[j].T); @@ -121,7 +119,6 @@ WeatherProvider.register("ukmetoffice", { * Generate WeatherObjects based on forecast information */ generateWeatherObjectsFromForecast(forecasts) { - const days = []; // loop round the (5) periods getting the data @@ -131,12 +128,12 @@ WeatherProvider.register("ukmetoffice", { // data times are always UTC const dateStr = forecasts.SiteRep.DV.Location.Period[j].value; - let periodDate = moment.utc(dateStr.substr(0,10), "YYYY-MM-DD"); + let periodDate = moment.utc(dateStr.substr(0, 10), "YYYY-MM-DD"); // ignore if period is before today if (periodDate.isSameOrAfter(moment.utc().startOf("day"))) { // populate the weather object - weather.date = moment.utc(dateStr.substr(0,10), "YYYY-MM-DD"); + weather.date = moment.utc(dateStr.substr(0, 10), "YYYY-MM-DD"); weather.minTemperature = this.convertTemp(forecasts.SiteRep.DV.Location.Period[j].Rep[1].Nm); weather.maxTemperature = this.convertTemp(forecasts.SiteRep.DV.Location.Period[j].Rep[0].Dm); weather.weatherType = this.convertWeatherType(forecasts.SiteRep.DV.Location.Period[j].Rep[0].W); @@ -207,7 +204,7 @@ WeatherProvider.register("ukmetoffice", { * Convert temp (from degrees C) if required */ convertTemp(tempInC) { - return this.tempUnits === "imperial" ? tempInC * 9 / 5 + 32 : tempInC; + return this.tempUnits === "imperial" ? (tempInC * 9) / 5 + 32 : tempInC; }, /* @@ -222,22 +219,22 @@ WeatherProvider.register("ukmetoffice", { */ convertWindDirection(windDirection) { const windCardinals = { - "N": 0, - "NNE": 22, - "NE": 45, - "ENE": 67, - "E": 90, - "ESE": 112, - "SE": 135, - "SSE": 157, - "S": 180, - "SSW": 202, - "SW": 225, - "WSW": 247, - "W": 270, - "WNW": 292, - "NW": 315, - "NNW": 337 + N: 0, + NNE: 22, + NE: 45, + ENE: 67, + E: 90, + ESE: 112, + SE: 135, + SSE: 157, + S: 180, + SSW: 202, + SW: 225, + WSW: 247, + W: 270, + WNW: 292, + NW: 315, + NNW: 337 }; return windCardinals.hasOwnProperty(windDirection) ? windCardinals[windDirection] : null; diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 68211b56..c24e4de1 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -12,7 +12,6 @@ * Since it is free, there are some items missing - like sunrise, sunset, humidity, etc. */ WeatherProvider.register("weathergov", { - // Set the name of the provider. // This isn't strictly necessary, since it will fallback to the provider identifier // But for debugging (and future alerts) it would be nice to have the real name. @@ -21,7 +20,7 @@ WeatherProvider.register("weathergov", { // Overwrite the fetchCurrentWeather method. fetchCurrentWeather() { this.fetchData(this.getUrl()) - .then(data => { + .then((data) => { if (!data || !data.properties || !data.properties.periods || !data.properties.periods.length) { // Did not receive usable new data. // Maybe this needs a better check? @@ -31,7 +30,7 @@ WeatherProvider.register("weathergov", { const currentWeather = this.generateWeatherObjectFromCurrentWeather(data.properties.periods[0]); this.setCurrentWeather(currentWeather); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -40,7 +39,7 @@ WeatherProvider.register("weathergov", { // Overwrite the fetchCurrentWeather method. fetchWeatherForecast() { this.fetchData(this.getUrl()) - .then(data => { + .then((data) => { if (!data || !data.properties || !data.properties.periods || !data.properties.periods.length) { // Did not receive usable new data. // Maybe this needs a better check? @@ -50,7 +49,7 @@ WeatherProvider.register("weathergov", { const forecast = this.generateWeatherObjectsFromForecast(data.properties.periods); this.setWeatherForecast(forecast); }) - .catch(function(request) { + .catch(function (request) { Log.error("Could not load data ... ", request); }) .finally(() => this.updateAvailable()); @@ -105,9 +104,7 @@ WeatherProvider.register("weathergov", { weather.precipitation = 0; for (const forecast of forecasts) { - if (date !== moment(forecast.startTime).format("YYYY-MM-DD")) { - // calculate minimum/maximum temperature, specify rain amount weather.minTemperature = Math.min.apply(null, minTemp); weather.maxTemperature = Math.max.apply(null, maxTemp); @@ -240,22 +237,22 @@ WeatherProvider.register("weathergov", { */ convertWindDirection(windDirection) { const windCardinals = { - "N": 0, - "NNE": 22, - "NE": 45, - "ENE": 67, - "E": 90, - "ESE": 112, - "SE": 135, - "SSE": 157, - "S": 180, - "SSW": 202, - "SW": 225, - "WSW": 247, - "W": 270, - "WNW": 292, - "NW": 315, - "NNW": 337 + N: 0, + NNE: 22, + NE: 45, + ENE: 67, + E: 90, + ESE: 112, + SE: 135, + SSE: 157, + S: 180, + SSW: 202, + SW: 225, + WSW: 247, + W: 270, + WNW: 292, + NW: 315, + NNW: 337 }; return windCardinals.hasOwnProperty(windDirection) ? windCardinals[windDirection] : null; diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 6e277447..b7ddd0c9 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -6,7 +6,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("weather",{ +Module.register("weather", { // Default module config. defaults: { weatherProvider: "openweathermap", @@ -60,23 +60,17 @@ Module.register("weather",{ weatherProvider: null, // Define required scripts. - getStyles: function() { + getStyles: function () { return ["font-awesome.css", "weather-icons.css", "weather.css"]; }, // Return the scripts that are necessary for the weather module. getScripts: function () { - return [ - "moment.js", - "weatherprovider.js", - "weatherobject.js", - "suncalc.js", - this.file("providers/" + this.config.weatherProvider.toLowerCase() + ".js") - ]; + return ["moment.js", "weatherprovider.js", "weatherobject.js", "suncalc.js", this.file("providers/" + this.config.weatherProvider.toLowerCase() + ".js")]; }, // Override getHeader method. - getHeader: function() { + getHeader: function () { if (this.config.appendLocationNameToHeader && this.data.header !== undefined && this.weatherProvider) { return this.data.header + " " + this.weatherProvider.fetchedLocation(); } @@ -102,7 +96,7 @@ Module.register("weather",{ }, // Override notification handler. - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { if (notification === "CALENDAR_EVENTS") { var senderClasses = sender.data.classes.toLowerCase().split(" "); if (senderClasses.indexOf(this.config.calendarClass.toLowerCase()) !== -1) { @@ -145,13 +139,13 @@ Module.register("weather",{ }, // What to do when the weather provider has new information available? - updateAvailable: function() { + updateAvailable: function () { Log.log("New weather information available."); this.updateDom(0); this.scheduleUpdate(); }, - scheduleUpdate: function(delay = null) { + scheduleUpdate: function (delay = null) { var nextLoad = this.config.updateInterval; if (delay !== null && delay >= 0) { nextLoad = delay; @@ -166,88 +160,106 @@ Module.register("weather",{ }, nextLoad); }, - roundValue: function(temperature) { + roundValue: function (temperature) { var decimals = this.config.roundTemp ? 0 : 1; return parseFloat(temperature).toFixed(decimals); }, addFilters() { - this.nunjucksEnvironment().addFilter("formatTime", function(date) { - date = moment(date); + this.nunjucksEnvironment().addFilter( + "formatTime", + function (date) { + date = moment(date); - if (this.config.timeFormat !== 24) { - if (this.config.showPeriod) { - if (this.config.showPeriodUpper) { - return date.format("h:mm A"); + if (this.config.timeFormat !== 24) { + if (this.config.showPeriod) { + if (this.config.showPeriodUpper) { + return date.format("h:mm A"); + } else { + return date.format("h:mm a"); + } } else { - return date.format("h:mm a"); - } - } else { - return date.format("h:mm"); - } - } - - return date.format("HH:mm"); - }.bind(this)); - - this.nunjucksEnvironment().addFilter("unit", function (value, type) { - if (type === "temperature") { - if (this.config.tempUnits === "metric" || this.config.tempUnits === "imperial") { - value += "°"; - } - if (this.config.degreeLabel) { - if (this.config.tempUnits === "metric") { - value += "C"; - } else if (this.config.tempUnits === "imperial") { - value += "F"; - } else { - value += "K"; + return date.format("h:mm"); } } - } else if (type === "precip") { - if (isNaN(value) || value === 0 || value.toFixed(2) === "0.00") { - value = ""; - } else { - if (this.config.weatherProvider === "ukmetoffice") { - value += "%"; - } else { - value = `${value.toFixed(2)} ${this.config.units === "imperial" ? "in" : "mm"}`; + + return date.format("HH:mm"); + }.bind(this) + ); + + this.nunjucksEnvironment().addFilter( + "unit", + function (value, type) { + if (type === "temperature") { + if (this.config.tempUnits === "metric" || this.config.tempUnits === "imperial") { + value += "°"; } + if (this.config.degreeLabel) { + if (this.config.tempUnits === "metric") { + value += "C"; + } else if (this.config.tempUnits === "imperial") { + value += "F"; + } else { + value += "K"; + } + } + } else if (type === "precip") { + if (isNaN(value) || value === 0 || value.toFixed(2) === "0.00") { + value = ""; + } else { + if (this.config.weatherProvider === "ukmetoffice") { + value += "%"; + } else { + value = `${value.toFixed(2)} ${this.config.units === "imperial" ? "in" : "mm"}`; + } + } + } else if (type === "humidity") { + value += "%"; } - } else if (type === "humidity") { - value += "%"; - } - return value; - }.bind(this)); + return value; + }.bind(this) + ); - this.nunjucksEnvironment().addFilter("roundValue", function(value) { - return this.roundValue(value); - }.bind(this)); + this.nunjucksEnvironment().addFilter( + "roundValue", + function (value) { + return this.roundValue(value); + }.bind(this) + ); - this.nunjucksEnvironment().addFilter("decimalSymbol", function(value) { - return value.toString().replace(/\./g, this.config.decimalSymbol); - }.bind(this)); + this.nunjucksEnvironment().addFilter( + "decimalSymbol", + function (value) { + return value.toString().replace(/\./g, this.config.decimalSymbol); + }.bind(this) + ); - this.nunjucksEnvironment().addFilter("calcNumSteps", function(forecast) { - return Math.min(forecast.length, this.config.maxNumberOfDays); - }.bind(this)); + this.nunjucksEnvironment().addFilter( + "calcNumSteps", + function (forecast) { + return Math.min(forecast.length, this.config.maxNumberOfDays); + }.bind(this) + ); - this.nunjucksEnvironment().addFilter("opacity", function(currentStep, numSteps) { - if (this.config.fade && this.config.fadePoint < 1) { - if (this.config.fadePoint < 0) { - this.config.fadePoint = 0; - } - var startingPoint = numSteps * this.config.fadePoint; - var numFadesteps = numSteps - startingPoint; - if (currentStep >= startingPoint) { - return 1 - (currentStep - startingPoint) / numFadesteps; + this.nunjucksEnvironment().addFilter( + "opacity", + function (currentStep, numSteps) { + if (this.config.fade && this.config.fadePoint < 1) { + if (this.config.fadePoint < 0) { + this.config.fadePoint = 0; + } + var startingPoint = numSteps * this.config.fadePoint; + var numFadesteps = numSteps - startingPoint; + if (currentStep >= startingPoint) { + return 1 - (currentStep - startingPoint) / numFadesteps; + } else { + return 1; + } } else { return 1; } - } else { - return 1; - } - }.bind(this)); + }.bind(this) + ); } }); diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 0ecab34d..0ee42123 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -11,7 +11,6 @@ */ class WeatherObject { constructor(units, tempUnits, windUnits) { - this.units = units; this.tempUnits = tempUnits; this.windUnits = windUnits; @@ -29,11 +28,10 @@ class WeatherObject { this.snow = null; this.precipitation = null; this.feelsLikeTemp = null; - } cardinalWindDirection() { - if (this.windDirection > 11.25 && this.windDirection <= 33.75){ + if (this.windDirection > 11.25 && this.windDirection <= 33.75) { return "NNE"; } else if (this.windDirection > 33.75 && this.windDirection <= 56.25) { return "NE"; @@ -69,7 +67,7 @@ class WeatherObject { } beaufortWindSpeed() { - const windInKmh = (this.windUnits === "imperial") ? this.windSpeed * 1.609344 : this.windSpeed * 60 * 60 / 1000; + const windInKmh = this.windUnits === "imperial" ? this.windSpeed * 1.609344 : (this.windSpeed * 60 * 60) / 1000; const speeds = [1, 5, 11, 19, 28, 38, 49, 61, 74, 88, 102, 117, 1000]; for (const [index, speed] of speeds.entries()) { if (speed > windInKmh) { @@ -87,21 +85,25 @@ class WeatherObject { if (this.feelsLikeTemp) { return this.feelsLikeTemp; } - const windInMph = (this.windUnits === "imperial") ? this.windSpeed : this.windSpeed * 2.23694; - const tempInF = this.tempUnits === "imperial" ? this.temperature : this.temperature * 9 / 5 + 32; + const windInMph = this.windUnits === "imperial" ? this.windSpeed : this.windSpeed * 2.23694; + const tempInF = this.tempUnits === "imperial" ? this.temperature : (this.temperature * 9) / 5 + 32; let feelsLike = tempInF; if (windInMph > 3 && tempInF < 50) { feelsLike = Math.round(35.74 + 0.6215 * tempInF - 35.75 * Math.pow(windInMph, 0.16) + 0.4275 * tempInF * Math.pow(windInMph, 0.16)); } else if (tempInF > 80 && this.humidity > 40) { - feelsLike = -42.379 + 2.04901523 * tempInF + 10.14333127 * this.humidity - - 0.22475541 * tempInF * this.humidity - 6.83783 * Math.pow(10, -3) * tempInF * tempInF - - 5.481717 * Math.pow(10, -2) * this.humidity * this.humidity - + 1.22874 * Math.pow(10, -3) * tempInF * tempInF * this.humidity - + 8.5282 * Math.pow(10, -4) * tempInF * this.humidity * this.humidity - - 1.99 * Math.pow(10, -6) * tempInF * tempInF * this.humidity * this.humidity; + feelsLike = + -42.379 + + 2.04901523 * tempInF + + 10.14333127 * this.humidity - + 0.22475541 * tempInF * this.humidity - + 6.83783 * Math.pow(10, -3) * tempInF * tempInF - + 5.481717 * Math.pow(10, -2) * this.humidity * this.humidity + + 1.22874 * Math.pow(10, -3) * tempInF * tempInF * this.humidity + + 8.5282 * Math.pow(10, -4) * tempInF * this.humidity * this.humidity - + 1.99 * Math.pow(10, -6) * tempInF * tempInF * this.humidity * this.humidity; } - return this.tempUnits === "imperial" ? feelsLike : (feelsLike - 32) * 5 / 9; + return this.tempUnits === "imperial" ? feelsLike : ((feelsLike - 32) * 5) / 9; } } diff --git a/modules/default/weather/weatherprovider.js b/modules/default/weather/weatherprovider.js index bea363f0..cfcb3ef6 100644 --- a/modules/default/weather/weatherprovider.js +++ b/modules/default/weather/weatherprovider.js @@ -28,77 +28,77 @@ var WeatherProvider = Class.extend({ // All the following methods can be overwritten, although most are good as they are. // Called when a weather provider is initialized. - init: function(config) { + init: function (config) { this.config = config; Log.info(`Weather provider: ${this.providerName} initialized.`); }, // Called to set the config, this config is the same as the weather module's config. - setConfig: function(config) { + setConfig: function (config) { this.config = config; Log.info(`Weather provider: ${this.providerName} config set.`, this.config); }, // Called when the weather provider is about to start. - start: function() { + start: function () { Log.info(`Weather provider: ${this.providerName} started.`); }, // This method should start the API request to fetch the current weather. // This method should definitely be overwritten in the provider. - fetchCurrentWeather: function() { + fetchCurrentWeather: function () { Log.warn(`Weather provider: ${this.providerName} does not subclass the fetchCurrentWeather method.`); }, // This method should start the API request to fetch the weather forecast. // This method should definitely be overwritten in the provider. - fetchWeatherForecast: function() { + fetchWeatherForecast: function () { Log.warn(`Weather provider: ${this.providerName} does not subclass the fetchWeatherForecast method.`); }, // This returns a WeatherDay object for the current weather. - currentWeather: function() { + currentWeather: function () { return this.currentWeatherObject; }, // This returns an array of WeatherDay objects for the weather forecast. - weatherForecast: function() { + weatherForecast: function () { return this.weatherForecastArray; }, // This returns the name of the fetched location or an empty string. - fetchedLocation: function() { + fetchedLocation: function () { return this.fetchedLocationName || ""; }, // Set the currentWeather and notify the delegate that new information is available. - setCurrentWeather: function(currentWeatherObject) { + setCurrentWeather: function (currentWeatherObject) { // We should check here if we are passing a WeatherDay this.currentWeatherObject = currentWeatherObject; }, // Set the weatherForecastArray and notify the delegate that new information is available. - setWeatherForecast: function(weatherForecastArray) { + setWeatherForecast: function (weatherForecastArray) { // We should check here if we are passing a WeatherDay this.weatherForecastArray = weatherForecastArray; }, // Set the fetched location name. - setFetchedLocation: function(name) { + setFetchedLocation: function (name) { this.fetchedLocationName = name; }, // Notify the delegate that new weather is available. - updateAvailable: function() { + updateAvailable: function () { this.delegate.updateAvailable(this); }, // A convenience function to make requests. It returns a promise. - fetchData: function(url, method = "GET", data = null) { - return new Promise(function(resolve, reject) { + fetchData: function (url, method = "GET", data = null) { + return new Promise(function (resolve, reject) { var request = new XMLHttpRequest(); request.open(method, url, true); - request.onreadystatechange = function() { + request.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { resolve(JSON.parse(this.response)); @@ -120,14 +120,14 @@ WeatherProvider.providers = []; /** * Static method to register a new weather provider. */ -WeatherProvider.register = function(providerIdentifier, providerDetails) { +WeatherProvider.register = function (providerIdentifier, providerDetails) { WeatherProvider.providers[providerIdentifier.toLowerCase()] = WeatherProvider.extend(providerDetails); }; /** * Static method to initialize a new weather provider. */ -WeatherProvider.initialize = function(providerIdentifier, delegate) { +WeatherProvider.initialize = function (providerIdentifier, delegate) { providerIdentifier = providerIdentifier.toLowerCase(); var provider = new WeatherProvider.providers[providerIdentifier](); diff --git a/modules/default/weatherforecast/README.md b/modules/default/weatherforecast/README.md index 7dfbd16f..035e23c0 100644 --- a/modules/default/weatherforecast/README.md +++ b/modules/default/weatherforecast/README.md @@ -1,4 +1,5 @@ # Module: Weather Forecast + The `weatherforecast` module is one of the default modules of the MagicMirror. This module displays the weather forecast for the coming week, including an an icon to display the current conditions, the minimum temperature and the maximum temperature. diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 8df266a0..8846289e 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -4,8 +4,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -Module.register("weatherforecast",{ - +Module.register("weatherforecast", { // Default module config. defaults: { location: false, @@ -56,7 +55,7 @@ Module.register("weatherforecast",{ "11n": "wi-night-thunderstorm", "13n": "wi-night-snow", "50n": "wi-night-alt-cloudy-windy" - }, + } }, // create a variable for the first upcoming calendar event. Used if no location is specified. @@ -66,17 +65,17 @@ Module.register("weatherforecast",{ fetchedLocationName: "", // Define required scripts. - getScripts: function() { + getScripts: function () { return ["moment.js"]; }, // Define required scripts. - getStyles: function() { + getStyles: function () { return ["weather-icons.css", "weatherforecast.css"]; }, // Define required translations. - getTranslations: function() { + getTranslations: function () { // 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. @@ -84,7 +83,7 @@ Module.register("weatherforecast",{ }, // Define start sequence. - start: function() { + start: function () { Log.info("Starting module: " + this.name); // Set locale. @@ -95,11 +94,10 @@ Module.register("weatherforecast",{ this.scheduleUpdate(this.config.initialLoadDelay); this.updateTimer = null; - }, // Override dom generator. - getDom: function() { + getDom: function () { var wrapper = document.createElement("div"); if (this.config.appid === "") { @@ -143,17 +141,17 @@ Module.register("weatherforecast",{ if (this.config.units === "metric" || this.config.units === "imperial") { degreeLabel += "°"; } - if(this.config.scale) { - switch(this.config.units) { - case "metric": - degreeLabel += "C"; - break; - case "imperial": - degreeLabel += "F"; - break; - case "default": - degreeLabel = "K"; - break; + if (this.config.scale) { + switch (this.config.units) { + case "metric": + degreeLabel += "C"; + break; + case "imperial": + degreeLabel += "F"; + break; + case "default": + degreeLabel = "K"; + break; } } @@ -176,7 +174,7 @@ Module.register("weatherforecast",{ if (isNaN(forecast.rain)) { rainCell.innerHTML = ""; } else { - if(config.units !== "imperial") { + if (config.units !== "imperial") { rainCell.innerHTML = parseFloat(forecast.rain).toFixed(1).replace(".", this.config.decimalSymbol) + " mm"; } else { rainCell.innerHTML = (parseFloat(forecast.rain) / 25.4).toFixed(2).replace(".", this.config.decimalSymbol) + " in"; @@ -194,7 +192,7 @@ Module.register("weatherforecast",{ var steps = this.forecast.length - startingPoint; if (f >= startingPoint) { var currentStep = f - startingPoint; - row.style.opacity = 1 - (1 / steps * currentStep); + row.style.opacity = 1 - (1 / steps) * currentStep; } } } @@ -203,7 +201,7 @@ Module.register("weatherforecast",{ }, // Override getHeader method. - getHeader: function() { + getHeader: function () { if (this.config.appendLocationNameToHeader) { return this.data.header + " " + this.fetchedLocationName; } @@ -212,10 +210,10 @@ Module.register("weatherforecast",{ }, // Override notification handler. - notificationReceived: function(notification, payload, sender) { + notificationReceived: function (notification, payload, sender) { if (notification === "DOM_OBJECTS_CREATED") { if (this.config.appendLocationNameToHeader) { - this.hide(0, {lockString: this.identifier}); + this.hide(0, { lockString: this.identifier }); } } if (notification === "CALENDAR_EVENTS") { @@ -239,7 +237,7 @@ Module.register("weatherforecast",{ * Requests new data from openweather.org. * Calls processWeather on successful response. */ - updateWeather: function() { + updateWeather: function () { if (this.config.appid === "") { Log.error("WeatherForecast: APPID not set!"); return; @@ -251,7 +249,7 @@ Module.register("weatherforecast",{ var weatherRequest = new XMLHttpRequest(); weatherRequest.open("GET", url, true); - weatherRequest.onreadystatechange = function() { + weatherRequest.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { self.processWeather(JSON.parse(this.response)); @@ -269,7 +267,7 @@ Module.register("weatherforecast",{ } if (retry) { - self.scheduleUpdate((self.loaded) ? -1 : self.config.retryDelay); + self.scheduleUpdate(self.loaded ? -1 : self.config.retryDelay); } } }; @@ -281,18 +279,18 @@ Module.register("weatherforecast",{ * * return String - URL params. */ - getParams: function() { + getParams: function () { var params = "?"; - if(this.config.locationID) { + if (this.config.locationID) { params += "id=" + this.config.locationID; - } else if(this.config.location) { + } else if (this.config.location) { params += "q=" + this.config.location; } else if (this.firstEvent && this.firstEvent.geo) { params += "lat=" + this.firstEvent.geo.lat + "&lon=" + this.firstEvent.geo.lon; } else if (this.firstEvent && this.firstEvent.location) { params += "q=" + this.firstEvent.location; } else { - this.hide(this.config.animationSpeed, {lockString:this.identifier}); + this.hide(this.config.animationSpeed, { lockString: this.identifier }); return; } @@ -310,9 +308,9 @@ Module.register("weatherforecast",{ * from openweather.org * */ - parserDataWeather: function(data) { + parserDataWeather: function (data) { if (data.hasOwnProperty("main")) { - data["temp"] = {"min": data.main.temp_min, "max": data.main.temp_max}; + data["temp"] = { min: data.main.temp_min, max: data.main.temp_max }; } return data; }, @@ -322,7 +320,7 @@ Module.register("weatherforecast",{ * * argument data object - Weather information received form openweather.org. */ - processWeather: function(data) { + processWeather: function (data) { this.fetchedLocationName = data.city.name + ", " + data.city.country; this.forecast = []; @@ -330,13 +328,12 @@ Module.register("weatherforecast",{ var forecastData = {}; for (var i = 0, count = data.list.length; i < count; i++) { - var forecast = data.list[i]; this.parserDataWeather(forecast); // hack issue #1017 var day; var hour; - if(forecast.dt_txt) { + if (forecast.dt_txt) { day = moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss").format("ddd"); hour = moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss").format("H"); } else { @@ -375,7 +372,7 @@ Module.register("weatherforecast",{ } //Log.log(this.forecast); - this.show(this.config.animationSpeed, {lockString:this.identifier}); + this.show(this.config.animationSpeed, { lockString: this.identifier }); this.loaded = true; this.updateDom(this.config.animationSpeed); }, @@ -385,7 +382,7 @@ Module.register("weatherforecast",{ * * argument delay number - Milliseconds before next update. If empty, this.config.updateInterval is used. */ - scheduleUpdate: function(delay) { + scheduleUpdate: function (delay) { var nextLoad = this.config.updateInterval; if (typeof delay !== "undefined" && delay >= 0) { nextLoad = delay; @@ -393,7 +390,7 @@ Module.register("weatherforecast",{ var self = this; clearTimeout(this.updateTimer); - this.updateTimer = setTimeout(function() { + this.updateTimer = setTimeout(function () { self.updateWeather(); }, nextLoad); }, @@ -409,8 +406,8 @@ Module.register("weatherforecast",{ * * return number - Windspeed in beaufort. */ - ms2Beaufort: function(ms) { - var kmh = ms * 60 * 60 / 1000; + ms2Beaufort: function (ms) { + var kmh = (ms * 60 * 60) / 1000; var speeds = [1, 5, 11, 19, 28, 38, 49, 61, 74, 88, 102, 117, 1000]; for (var beaufort in speeds) { var speed = speeds[beaufort]; @@ -428,7 +425,7 @@ Module.register("weatherforecast",{ * * return string - Rounded Temperature. */ - roundValue: function(temperature) { + roundValue: function (temperature) { var decimals = this.config.roundTemp ? 0 : 1; return parseFloat(temperature).toFixed(decimals); }, @@ -440,16 +437,16 @@ Module.register("weatherforecast",{ * That object has a property "3h" which contains the amount of rain since the previous forecast in the list. * This code finds all forecasts that is for the same day and sums the amount of rain and returns that. */ - processRain: function(forecast, allForecasts) { + processRain: function (forecast, allForecasts) { //If the amount of rain actually is a number, return it if (!isNaN(forecast.rain)) { return forecast.rain; } //Find all forecasts that is for the same day - var checkDateTime = (forecast.dt_txt) ? moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(forecast.dt, "X"); - var daysForecasts = allForecasts.filter(function(item) { - var itemDateTime = (item.dt_txt) ? moment(item.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(item.dt, "X"); + var checkDateTime = forecast.dt_txt ? moment(forecast.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(forecast.dt, "X"); + var daysForecasts = allForecasts.filter(function (item) { + var itemDateTime = item.dt_txt ? moment(item.dt_txt, "YYYY-MM-DD hh:mm:ss") : moment(item.dt, "X"); return itemDateTime.isSame(checkDateTime, "day") && item.rain instanceof Object; }); @@ -459,10 +456,12 @@ Module.register("weatherforecast",{ } //Summarize all the rain from the matching days - return daysForecasts.map(function(item) { - return Object.values(item.rain)[0]; - }).reduce(function(a, b) { - return a + b; - }, 0); + return daysForecasts + .map(function (item) { + return Object.values(item.rain)[0]; + }) + .reduce(function (a, b) { + return a + b; + }, 0); } }); diff --git a/serveronly/index.js b/serveronly/index.js index f7da58f5..44435ec2 100644 --- a/serveronly/index.js +++ b/serveronly/index.js @@ -1,5 +1,5 @@ var app = require("../js/app.js"); -app.start(function(config) { +app.start(function (config) { var bindAddress = config.address ? config.address : "localhost"; var httpType = config.useHttps ? "https" : "http"; console.log("\nReady to go! Please point your browser to: " + httpType + "://" + bindAddress + ":" + config.port); diff --git a/tests/configs/data/StripComments.json b/tests/configs/data/StripComments.json index 62d5d618..e9d1c403 100644 --- a/tests/configs/data/StripComments.json +++ b/tests/configs/data/StripComments.json @@ -1,13 +1,13 @@ { - // Escaped - "FOO\"BAR": "Today", + // Escaped + "FOO\"BAR": "Today", - /* - * The following lines - * represent cardinal directions - */ - "N": "N", - "E": "E", - "S": "S", - "W": "W" + /* + * The following lines + * represent cardinal directions + */ + "N": "N", + "E": "E", + "S": "S", + "W": "W" } diff --git a/tests/configs/data/TranslationTest.json b/tests/configs/data/TranslationTest.json index bbb13845..8a24a16f 100644 --- a/tests/configs/data/TranslationTest.json +++ b/tests/configs/data/TranslationTest.json @@ -1,33 +1,33 @@ { - "LOADING": "Loading …", + "LOADING": "Loading …", - "TODAY": "Today", - "TOMORROW": "Tomorrow", - "DAYAFTERTOMORROW": "In 2 days", - "RUNNING": "Ends in", - "EMPTY": "No upcoming events.", + "TODAY": "Today", + "TOMORROW": "Tomorrow", + "DAYAFTERTOMORROW": "In 2 days", + "RUNNING": "Ends in", + "EMPTY": "No upcoming events.", - "WEEK": "Week {weekNumber}", + "WEEK": "Week {weekNumber}", - "N": "N", - "NNE": "NNE", - "NE": "NE", - "ENE": "ENE", - "E": "E", - "ESE": "ESE", - "SE": "SE", - "SSE": "SSE", - "S": "S", - "SSW": "SSW", - "SW": "SW", - "WSW": "WSW", - "W": "W", - "WNW": "WNW", - "NW": "NW", - "NNW": "NNW", + "N": "N", + "NNE": "NNE", + "NE": "NE", + "ENE": "ENE", + "E": "E", + "ESE": "ESE", + "SE": "SE", + "SSE": "SSE", + "S": "S", + "SSW": "SSW", + "SW": "SW", + "WSW": "WSW", + "W": "W", + "WNW": "WNW", + "NW": "NW", + "NNW": "NNW", - "UPDATE_NOTIFICATION": "MagicMirror² update available.", - "UPDATE_NOTIFICATION_MODULE": "Update available for MODULE_NAME module.", - "UPDATE_INFO_SINGLE": "The current installation is COMMIT_COUNT commit behind on the BRANCH_NAME branch.", - "UPDATE_INFO_MULTIPLE": "The current installation is COMMIT_COUNT commits behind on the BRANCH_NAME branch." + "UPDATE_NOTIFICATION": "MagicMirror² update available.", + "UPDATE_NOTIFICATION_MODULE": "Update available for MODULE_NAME module.", + "UPDATE_INFO_SINGLE": "The current installation is COMMIT_COUNT commit behind on the BRANCH_NAME branch.", + "UPDATE_INFO_MULTIPLE": "The current installation is COMMIT_COUNT commits behind on the BRANCH_NAME branch." } diff --git a/tests/configs/data/en.json b/tests/configs/data/en.json index bbb13845..8a24a16f 100644 --- a/tests/configs/data/en.json +++ b/tests/configs/data/en.json @@ -1,33 +1,33 @@ { - "LOADING": "Loading …", + "LOADING": "Loading …", - "TODAY": "Today", - "TOMORROW": "Tomorrow", - "DAYAFTERTOMORROW": "In 2 days", - "RUNNING": "Ends in", - "EMPTY": "No upcoming events.", + "TODAY": "Today", + "TOMORROW": "Tomorrow", + "DAYAFTERTOMORROW": "In 2 days", + "RUNNING": "Ends in", + "EMPTY": "No upcoming events.", - "WEEK": "Week {weekNumber}", + "WEEK": "Week {weekNumber}", - "N": "N", - "NNE": "NNE", - "NE": "NE", - "ENE": "ENE", - "E": "E", - "ESE": "ESE", - "SE": "SE", - "SSE": "SSE", - "S": "S", - "SSW": "SSW", - "SW": "SW", - "WSW": "WSW", - "W": "W", - "WNW": "WNW", - "NW": "NW", - "NNW": "NNW", + "N": "N", + "NNE": "NNE", + "NE": "NE", + "ENE": "ENE", + "E": "E", + "ESE": "ESE", + "SE": "SE", + "SSE": "SSE", + "S": "S", + "SSW": "SSW", + "SW": "SW", + "WSW": "WSW", + "W": "W", + "WNW": "WNW", + "NW": "NW", + "NNW": "NNW", - "UPDATE_NOTIFICATION": "MagicMirror² update available.", - "UPDATE_NOTIFICATION_MODULE": "Update available for MODULE_NAME module.", - "UPDATE_INFO_SINGLE": "The current installation is COMMIT_COUNT commit behind on the BRANCH_NAME branch.", - "UPDATE_INFO_MULTIPLE": "The current installation is COMMIT_COUNT commits behind on the BRANCH_NAME branch." + "UPDATE_NOTIFICATION": "MagicMirror² update available.", + "UPDATE_NOTIFICATION_MODULE": "Update available for MODULE_NAME module.", + "UPDATE_INFO_SINGLE": "The current installation is COMMIT_COUNT commit behind on the BRANCH_NAME branch.", + "UPDATE_INFO_MULTIPLE": "The current installation is COMMIT_COUNT commits behind on the BRANCH_NAME branch." } diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index 232836c3..991ca8e5 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -13,13 +13,14 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, - modules: [ - ] + modules: [] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/env.js b/tests/configs/env.js index ef244c39..998c1b8d 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -13,13 +13,14 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, - modules: [ - ] + modules: [] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index 3fee5015..19259119 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -38,4 +38,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index 1b210102..cd6a0695 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -39,4 +39,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 3f70d930..9fecc1f9 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -34,4 +34,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index ad22046a..922c3cdb 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -15,8 +15,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -41,4 +41,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index 971a2d2a..b580be92 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -36,4 +36,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 31f9e4ea..d938fc5d 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -26,4 +26,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index e5dd89f6..cd47d14b 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -26,4 +26,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 91bbebba..5e2a1d3f 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -29,4 +29,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index e7ee7d0a..a001f6bc 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -29,4 +29,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 8a5f305a..dc36d7d4 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -29,4 +29,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index d546e608..4b0f7f83 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -26,4 +26,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index abdf7a44..ae5b2e24 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -26,4 +26,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +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 index 6bb396db..7aac8efe 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -29,4 +29,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index 120ef4ef..1c20388d 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -16,8 +16,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -32,4 +32,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 1d2818bc..9b0ab340 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -27,7 +27,6 @@ var config = { afternoon: [], evening: [], anytime: ["Anytime here"] - } } } @@ -35,4 +34,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 7ea984b1..91975410 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -14,8 +14,8 @@ let config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -28,9 +28,7 @@ let config = { morning: [], afternoon: [], evening: [], - "....-01-01": [ - "Happy new year!" - ] + "....-01-01": ["Happy new year!"] } } } @@ -38,4 +36,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index f0189652..47c22480 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -24,7 +24,6 @@ var config = { config: { compliments: { anytime: ["Anytime here"] - } } } @@ -32,4 +31,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index b4443567..09766227 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -23,15 +23,9 @@ var config = { position: "middle_center", config: { compliments: { - morning: [ - "Hi", "Good Morning", "Morning test" - ], - afternoon: [ - "Hello", "Good Afternoon", "Afternoon test" - ], - evening: [ - "Hello There", "Good Evening", "Evening test" - ] + morning: ["Hi", "Good Morning", "Morning test"], + afternoon: ["Hello", "Good Afternoon", "Afternoon test"], + evening: ["Hello There", "Good Evening", "Evening test"] } } } @@ -39,4 +33,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 6b617cf2..17603be1 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -29,4 +29,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 8207175f..1218ec80 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -13,8 +13,8 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -26,4 +26,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 5cb9d311..3da874cf 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -13,13 +13,12 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ { - module: "newsfeed", position: "bottom_bar", config: { @@ -27,7 +26,7 @@ var config = { { title: "Rodrigo Ramirez Blog", url: "http://localhost:8080/tests/configs/data/feed_test_rodrigoramirez.xml" - }, + } ] } } @@ -35,4 +34,6 @@ var config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index 1d36a0c0..bbb07da8 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -15,16 +15,14 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + 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"]; + (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 (var idx in positions) { modules.push({ @@ -36,7 +34,9 @@ var config = { }); } return modules; - })(), + })() }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index d52a7962..57ce23e4 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -14,8 +14,8 @@ let config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -32,4 +32,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index abea5bd1..2b5f9774 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -14,8 +14,8 @@ let config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -37,4 +37,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index e7ad1dbc..f7303784 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -14,8 +14,8 @@ let config = { units: "imperial", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -34,4 +34,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index c87ca260..ad4aff76 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -14,8 +14,8 @@ let config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -34,4 +34,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 82e3da08..877c4ac6 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -14,8 +14,8 @@ let config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, modules: [ @@ -37,4 +37,6 @@ let config = { }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index 79366e09..68c711e6 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -13,13 +13,14 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, - modules: [ - ] + modules: [] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index d1dc546f..433508df 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -13,13 +13,14 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } }, - modules: [ - ] + modules: [] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 921e71d7..051b3509 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -13,11 +13,12 @@ var config = { units: "metric", electronOptions: { webPreferences: { - nodeIntegration: true, - }, + nodeIntegration: true + } } - }; /*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") {module.exports = config;} +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 8cddee1d..4e5d1ca1 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -4,7 +4,7 @@ const expect = require("chai").expect; const describe = global.describe; const it = global.it; -describe("Development console tests", function() { +describe("Development console tests", function () { // FIXME: This tests fail and crash another tests // Suspect problem with window focus return false; @@ -14,47 +14,47 @@ describe("Development console tests", function() { var app = null; - before(function() { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/env.js"; }); - describe("Without 'dev' commandline argument", function() { - before(function() { + describe("Without 'dev' commandline argument", function () { + before(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - after(function() { + after(function () { return helpers.stopApplication(app); }); - it("should not open dev console when absent", function() { + it("should not open dev console when absent", function () { return expect(app.browserWindow.isDevToolsOpened()).to.eventually.equal(false); }); }); - describe("With 'dev' commandline argument", function() { - before(function() { + describe("With 'dev' commandline argument", function () { + before(function () { return helpers .startApplication({ args: ["js/electron.js", "dev"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - after(function() { + after(function () { return helpers.stopApplication(app); }); - it("should open dev console when provided", function() { + it("should open dev console when provided", function () { return expect(app.browserWindow.isDevToolsOpened()).to.eventually.equal(true); }); }); diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 73784e96..7fef9f3c 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -7,59 +7,61 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Electron app environment", function() { +describe("Electron app environment", function () { helpers.setupTimeout(this); var app = null; - before(function() { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/env.js"; }); - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - it("should open a browserwindow", function() { - return app.client - .waitUntilWindowLoaded() - // .browserWindow.focus() - .getWindowCount() - .should.eventually.equal(1) - .browserWindow.isMinimized() - .should.eventually.be.false.browserWindow.isDevToolsOpened() - .should.eventually.be.false.browserWindow.isVisible() - .should.eventually.be.true.browserWindow.isFocused() - .should.eventually.be.true.browserWindow.getBounds() - .should.eventually.have.property("width") - .and.be.above(0) - .browserWindow.getBounds() - .should.eventually.have.property("height") - .and.be.above(0) - .browserWindow.getTitle() - .should.eventually.equal("MagicMirror²"); + it("should open a browserwindow", function () { + return ( + app.client + .waitUntilWindowLoaded() + // .browserWindow.focus() + .getWindowCount() + .should.eventually.equal(1) + .browserWindow.isMinimized() + .should.eventually.be.false.browserWindow.isDevToolsOpened() + .should.eventually.be.false.browserWindow.isVisible() + .should.eventually.be.true.browserWindow.isFocused() + .should.eventually.be.true.browserWindow.getBounds() + .should.eventually.have.property("width") + .and.be.above(0) + .browserWindow.getBounds() + .should.eventually.have.property("height") + .and.be.above(0) + .browserWindow.getTitle() + .should.eventually.equal("MagicMirror²") + ); }); - it("get request from http://localhost:8080 should return 200", function(done) { - request.get("http://localhost:8080", function(err, res, body) { + 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(); }); }); - it("get request from http://localhost:8080/nothing should return 404", function(done) { - request.get("http://localhost:8080/nothing", function(err, res, body) { + 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(); }); diff --git a/tests/e2e/fonts.js b/tests/e2e/fonts.js index 7ebfb034..d6c69e50 100644 --- a/tests/e2e/fonts.js +++ b/tests/e2e/fonts.js @@ -5,7 +5,7 @@ const forEach = require("mocha-each"); const describe = global.describe; -describe("All font files from roboto.css should be downloadable", function() { +describe("All font files from roboto.css should be downloadable", function () { helpers.setupTimeout(this); var app; @@ -21,7 +21,7 @@ describe("All font files from roboto.css should be downloadable", function() { match = regex.exec(fileContent); } - before(function() { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/without_modules.js"; @@ -29,18 +29,18 @@ describe("All font files from roboto.css should be downloadable", function() { .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - after(function() { + after(function () { return helpers.stopApplication(app); }); forEach(fontFiles).it("should return 200 HTTP code for file '%s'", (fontFile, done) => { var fontUrl = "http://localhost:8080/fonts/" + fontFile; - request.get(fontUrl, function(err, res, body) { + request.get(fontUrl, function (err, res, body) { expect(res.statusCode).to.equal(200); done(); }); diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index c4b170fe..cce9fc05 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -6,7 +6,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. * -*/ + */ const Application = require("spectron").Application; const assert = require("assert"); @@ -14,12 +14,12 @@ const chai = require("chai"); const chaiAsPromised = require("chai-as-promised"); const path = require("path"); -global.before(function() { +global.before(function () { chai.should(); chai.use(chaiAsPromised); }); -exports.getElectronPath = function() { +exports.getElectronPath = function () { var electronPath = path.join(__dirname, "..", "..", "node_modules", ".bin", "electron"); if (process.platform === "win32") { electronPath += ".cmd"; @@ -28,7 +28,7 @@ exports.getElectronPath = function() { }; // Set timeout - if this is run within Travis, increase timeout -exports.setupTimeout = function(test) { +exports.setupTimeout = function (test) { if (process.env.CI) { test.timeout(30000); } else { @@ -36,26 +36,26 @@ exports.setupTimeout = function(test) { } }; -exports.startApplication = function(options) { +exports.startApplication = function (options) { options.path = exports.getElectronPath(); if (process.env.CI) { options.startTimeout = 30000; } var app = new Application(options); - return app.start().then(function() { + return app.start().then(function () { assert.equal(app.isRunning(), true); chaiAsPromised.transferPromiseness = app.transferPromiseness; return app; }); }; -exports.stopApplication = function(app) { +exports.stopApplication = function (app) { if (!app || !app.isRunning()) { return; } - return app.stop().then(function() { + return app.stop().then(function () { assert.equal(app.isRunning(), false); }); }; diff --git a/tests/e2e/ipWhistlist_spec.js b/tests/e2e/ipWhistlist_spec.js index c544465e..e22231b9 100644 --- a/tests/e2e/ipWhistlist_spec.js +++ b/tests/e2e/ipWhistlist_spec.js @@ -13,9 +13,13 @@ describe("ipWhitelist directive configuration", function () { var app = null; beforeEach(function () { - return helpers.startApplication({ - args: ["js/electron.js"] - }).then(function (startedApp) { app = startedApp; }); + return helpers + .startApplication({ + args: ["js/electron.js"] + }) + .then(function (startedApp) { + app = startedApp; + }); }); afterEach(function () { @@ -47,5 +51,4 @@ describe("ipWhitelist directive configuration", function () { }); }); }); - }); diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index beeba148..7af78201 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -6,96 +6,96 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Calendar module", function() { +describe("Calendar module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("Default configuration", function() { - before(function() { + 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() { + it("Should return TestEvents", function () { return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); }); }); - describe("Basic auth", function() { - before(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"; }); - after(function(done) { + after(function (done) { serverBasicAuth.close(done()); }); - it("Should return TestEvents", function() { + it("Should return TestEvents", function () { return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); }); }); - describe("Basic auth by default", function() { - before(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"; }); - after(function(done) { + after(function (done) { serverBasicAuth.close(done()); }); - it("Should return TestEvents", function() { + it("Should return TestEvents", function () { return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); }); }); - describe("Basic auth backward compatibility configuration: DEPRECATED", function() { - before(function() { + describe("Basic auth backward compatibility configuration: DEPRECATED", 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"; }); - after(function(done) { + after(function (done) { serverBasicAuth.close(done()); }); - it("Should return TestEvents", function() { + it("Should return TestEvents", function () { return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000); }); }); - describe("Fail Basic auth", function() { - before(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"; }); - after(function(done) { + after(function (done) { serverBasicAuth.close(done()); }); - it("Should return No upcoming events", function() { + it("Should return No upcoming events", function () { return app.client.waitUntilTextExists(".calendar", "No upcoming events.", 10000); }); }); diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js index 7ad4ae64..6006aeb6 100644 --- a/tests/e2e/modules/clock_es_spec.js +++ b/tests/e2e/modules/clock_es_spec.js @@ -5,81 +5,80 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Clock set to spanish language module", function() { +describe("Clock set to spanish language module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("with default 24hr clock config", function() { - before(function() { + 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"; }); - it("shows date with correct format", function() { + it("shows date with correct format", function () { 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); }); - it("shows time in 24hr format", function() { + 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() { + 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"; }); - it("shows date with correct format", function() { + it("shows date with correct format", function () { 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); }); - it("shows time in 12hr format", function() { + 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() { + 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"; }); - it("shows 12hr time with upper case AM/PM", 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); }); }); - describe("with showWeek config enabled", function() { - before(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/es/clock_showWeek.js"; }); - it("shows week with correct format", function() { + it("shows week with correct format", function () { const weekRegex = /^Semana [0-9]{1,2}$/; - return app.client.waitUntilWindowLoaded() - .getText(".clock .week").should.eventually.match(weekRegex); + return app.client.waitUntilWindowLoaded().getText(".clock .week").should.eventually.match(weekRegex); }); }); }); diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index be4ef0e3..372d61af 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -5,95 +5,95 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Clock module", function() { +describe("Clock module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("with default 24hr clock config", function() { - before(function() { + 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"; }); - it("shows date with correct format", 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); }); - it("shows time in 24hr format", function() { + 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() { + 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"; }); - it("shows date with correct format", 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); }); - it("shows time in 12hr format", function() { + 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() { + 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"; }); - it("shows 12hr time with upper case AM/PM", 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); }); }); - describe("with displaySeconds config disabled", function() { - before(function() { + 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"; }); - it("shows 12hr time without seconds am/pm", function() { + 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); }); }); - describe("with showWeek config enabled", function() { - before(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"; }); - it("shows week with correct format", function() { + 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); }); - it("shows week with correct number of week of year", function() { + it("shows week with correct number of week of year", function () { it("FIXME: if the day is a sunday this not match"); // const currentWeekNumber = require("current-week-number")(); // const weekToShow = "Week " + currentWeekNumber; diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 97fd0ed9..841aae03 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -6,101 +6,119 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Compliments module", function() { +describe("Compliments module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("parts of days", function() { - before(function() { + 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"; }); - it("if Morning compliments for that part of day", function() { + it("if Morning compliments for that part of day", function () { var hour = new Date().getHours(); if (hour >= 3 && hour < 12) { // 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") + .then(function (text) { + expect(text).to.be.oneOf(["Hi", "Good Morning", "Morning test"]); + }); } }); - it("if Afternoon show Compliments for that part of day", function() { + 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"]); - }); + 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() { + 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"]); - }); + return app.client + .waitUntilWindowLoaded() + .getText(".compliments") + .then(function (text) { + expect(text).to.be.oneOf(["Hello There", "Good Evening", "Evening test"]); + }); } }); }); - describe("Feature anytime in compliments module", function() { - describe("Set anytime and empty compliments for morning, evening and afternoon ", function() { - before(function() { + describe("Feature anytime in compliments module", function () { + 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"]); - }); + 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() { + 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"]); - }); + it("Show anytime compliments", function () { + return app.client + .waitUntilWindowLoaded() + .getText(".compliments") + .then(function (text) { + expect(text).to.be.oneOf(["Anytime here"]); + }); }); }); }); - describe("Feature date in compliments module", function() { - describe("Set date and empty compliments for anytime, morning, evening and afternoon", function() { - before(function() { + describe("Feature date in compliments module", function () { + describe("Set date and empty compliments for anytime, morning, evening and afternoon", function () { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; }); - it("Show happy new year compliment on new years day", function() { - return app.client.waitUntilWindowLoaded().getText(".compliments").then(function(text) { - expect(text).to.be.oneOf(["Happy new year!"]); - }); + it("Show happy new year compliment on new years day", function () { + return app.client + .waitUntilWindowLoaded() + .getText(".compliments") + .then(function (text) { + expect(text).to.be.oneOf(["Happy new year!"]); + }); }); }); }); diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js index a59e2ae4..e215b3aa 100644 --- a/tests/e2e/modules/helloworld_spec.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -5,46 +5,44 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Test helloworld module", function() { +describe("Test helloworld module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); describe("helloworld set config text", function () { - before(function() { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld.js"; }); it("Test message helloworld module", function () { - return app.client.waitUntilWindowLoaded() - .getText(".helloworld").should.eventually.equal("Test HelloWorld Module"); + return app.client.waitUntilWindowLoaded().getText(".helloworld").should.eventually.equal("Test HelloWorld Module"); }); }); describe("helloworld default config text", function () { - before(function() { + before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld_default.js"; }); it("Test message helloworld module", function () { - return app.client.waitUntilWindowLoaded() - .getText(".helloworld").should.eventually.equal("Hello World!"); + return app.client.waitUntilWindowLoaded().getText(".helloworld").should.eventually.equal("Hello World!"); }); }); }); diff --git a/tests/e2e/modules/mocks/index.js b/tests/e2e/modules/mocks/index.js index afd061c6..c7082638 100644 --- a/tests/e2e/modules/mocks/index.js +++ b/tests/e2e/modules/mocks/index.js @@ -1,4 +1,4 @@ const generateWeather = require("./weather_current"); const generateWeatherForecast = require("./weather_forecast"); -module.exports = {generateWeather, generateWeatherForecast}; +module.exports = { generateWeather, generateWeatherForecast }; diff --git a/tests/e2e/modules/mocks/weather_current.js b/tests/e2e/modules/mocks/weather_current.js index 807ee559..a0c3401d 100644 --- a/tests/e2e/modules/mocks/weather_current.js +++ b/tests/e2e/modules/mocks/weather_current.js @@ -1,54 +1,60 @@ const _ = require("lodash"); function generateWeather(extendedData = {}) { - return JSON.stringify(_.merge({}, { - coord:{ - lon: 11.58, - lat: 48.14 - }, - weather:[ + return JSON.stringify( + _.merge( + {}, { - id: 615, - main: "Snow", - description: "light rain and snow", - icon: "13d" + coord: { + lon: 11.58, + lat: 48.14 + }, + weather: [ + { + id: 615, + main: "Snow", + description: "light rain and snow", + icon: "13d" + }, + { + id: 500, + main: "Rain", + description: "light rain", + icon: "10d" + } + ], + base: "stations", + main: { + temp: 1.49, + pressure: 1005, + humidity: 93.7, + temp_min: 1, + temp_max: 2 + }, + visibility: 7000, + wind: { + speed: 11.8, + deg: 250 + }, + clouds: { + all: 75 + }, + dt: 1547387400, + sys: { + type: 1, + id: 1267, + message: 0.0031, + country: "DE", + sunrise: 1547362817, + sunset: 1547394301 + }, + id: 2867714, + name: "Munich", + cod: 200 }, - { - id: 500, - main: "Rain", - description: "light rain", - icon: "10d" - } - ], - base: "stations", - main:{ - temp: 1.49, - pressure: 1005, - humidity: 93.7, - temp_min: 1, - temp_max: 2 - }, - visibility: 7000, - wind:{ - speed: 11.8, - deg: 250 - }, - clouds:{ - all: 75 - }, - dt: 1547387400, - sys:{ - type: 1, - id: 1267, - message: 0.0031, - country: "DE", - sunrise: 1547362817, - sunset: 1547394301 - }, - id: 2867714, - name: "Munich", - cod: 200 - }, extendedData)); + extendedData + ) + ); } module.exports = generateWeather; diff --git a/tests/e2e/modules/mocks/weather_forecast.js b/tests/e2e/modules/mocks/weather_forecast.js index 9e74262f..eaf2e375 100644 --- a/tests/e2e/modules/mocks/weather_forecast.js +++ b/tests/e2e/modules/mocks/weather_forecast.js @@ -1,97 +1,111 @@ const _ = require("lodash"); function generateWeatherForecast(extendedData = {}) { - return JSON.stringify(_.merge({}, { - "city": { - "id": 2867714, - "name": "Munich", - "coord": {"lon": 11.5754, "lat": 48.1371}, - "country": "DE", - "population": 1260391, - "timezone": 7200 - }, - "cod": "200", - "message": 0.9653487, - "cnt": 7, - "list": [{ - "dt": 1568372400, - "sunrise": 1568350044, - "sunset": 1568395948, - "temp": {"day": 24.44, "min": 15.35, "max": 24.44, "night": 15.35, "eve": 18, "morn": 23.03}, - "pressure": 1031.65, - "humidity": 70, - "weather": [{"id": 801, "main": "Clouds", "description": "few clouds", "icon": "02d"}], - "speed": 3.35, - "deg": 314, - "clouds": 21 - }, { - "dt": 1568458800, - "sunrise": 1568436525, - "sunset": 1568482223, - "temp": {"day": 20.81, "min": 13.56, "max": 21.02, "night": 13.56, "eve": 16.6, "morn": 15.88}, - "pressure": 1028.81, - "humidity": 72, - "weather": [{"id": 500, "main": "Rain", "description": "light rain", "icon": "10d"}], - "speed": 2.21, - "deg": 81, - "clouds": 100 - }, { - "dt": 1568545200, - "sunrise": 1568523007, - "sunset": 1568568497, - "temp": {"day": 22.65, "min": 13.76, "max": 22.88, "night": 15.27, "eve": 17.45, "morn": 13.76}, - "pressure": 1023.75, - "humidity": 64, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 1.15, - "deg": 7, - "clouds": 0 - }, { - "dt": 1568631600, - "sunrise": 1568609489, - "sunset": 1568654771, - "temp": {"day": 23.45, "min": 13.95, "max": 23.45, "night": 13.95, "eve": 17.75, "morn": 15.21}, - "pressure": 1020.41, - "humidity": 64, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 3.07, - "deg": 298, - "clouds": 7 - }, { - "dt": 1568718000, - "sunrise": 1568695970, - "sunset": 1568741045, - "temp": {"day": 20.55, "min": 10.95, "max": 20.55, "night": 10.95, "eve": 14.82, "morn": 13.24}, - "pressure": 1019.4, - "humidity": 66, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.8, - "deg": 333, - "clouds": 2 - }, { - "dt": 1568804400, - "sunrise": 1568782452, - "sunset": 1568827319, - "temp": {"day": 18.15, "min": 7.75, "max": 18.15, "night": 7.75, "eve": 12.45, "morn": 9.41}, - "pressure": 1017.56, - "humidity": 52, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.92, - "deg": 34, - "clouds": 0 - }, { - "dt": 1568890800, - "sunrise": 1568868934, - "sunset": 1568913593, - "temp": {"day": 14.85, "min": 5.56, "max": 15.05, "night": 5.56, "eve": 9.56, "morn": 6.25}, - "pressure": 1022.7, - "humidity": 59, - "weather": [{"id": 800, "main": "Clear", "description": "sky is clear", "icon": "01d"}], - "speed": 2.89, - "deg": 51, - "clouds": 1 - }] - }, extendedData)); + return JSON.stringify( + _.merge( + {}, + { + city: { + id: 2867714, + name: "Munich", + coord: { lon: 11.5754, lat: 48.1371 }, + country: "DE", + population: 1260391, + timezone: 7200 + }, + cod: "200", + message: 0.9653487, + cnt: 7, + list: [ + { + dt: 1568372400, + sunrise: 1568350044, + sunset: 1568395948, + temp: { day: 24.44, min: 15.35, max: 24.44, night: 15.35, eve: 18, morn: 23.03 }, + pressure: 1031.65, + humidity: 70, + weather: [{ id: 801, main: "Clouds", description: "few clouds", icon: "02d" }], + speed: 3.35, + deg: 314, + clouds: 21 + }, + { + dt: 1568458800, + sunrise: 1568436525, + sunset: 1568482223, + temp: { day: 20.81, min: 13.56, max: 21.02, night: 13.56, eve: 16.6, morn: 15.88 }, + pressure: 1028.81, + humidity: 72, + weather: [{ id: 500, main: "Rain", description: "light rain", icon: "10d" }], + speed: 2.21, + deg: 81, + clouds: 100 + }, + { + dt: 1568545200, + sunrise: 1568523007, + sunset: 1568568497, + temp: { day: 22.65, min: 13.76, max: 22.88, night: 15.27, eve: 17.45, morn: 13.76 }, + pressure: 1023.75, + humidity: 64, + weather: [{ id: 800, main: "Clear", description: "sky is clear", icon: "01d" }], + speed: 1.15, + deg: 7, + clouds: 0 + }, + { + dt: 1568631600, + sunrise: 1568609489, + sunset: 1568654771, + temp: { day: 23.45, min: 13.95, max: 23.45, night: 13.95, eve: 17.75, morn: 15.21 }, + pressure: 1020.41, + humidity: 64, + weather: [{ id: 800, main: "Clear", description: "sky is clear", icon: "01d" }], + speed: 3.07, + deg: 298, + clouds: 7 + }, + { + dt: 1568718000, + sunrise: 1568695970, + sunset: 1568741045, + temp: { day: 20.55, min: 10.95, max: 20.55, night: 10.95, eve: 14.82, morn: 13.24 }, + pressure: 1019.4, + humidity: 66, + weather: [{ id: 800, main: "Clear", description: "sky is clear", icon: "01d" }], + speed: 2.8, + deg: 333, + clouds: 2 + }, + { + dt: 1568804400, + sunrise: 1568782452, + sunset: 1568827319, + temp: { day: 18.15, min: 7.75, max: 18.15, night: 7.75, eve: 12.45, morn: 9.41 }, + pressure: 1017.56, + humidity: 52, + weather: [{ id: 800, main: "Clear", description: "sky is clear", icon: "01d" }], + speed: 2.92, + deg: 34, + clouds: 0 + }, + { + dt: 1568890800, + sunrise: 1568868934, + sunset: 1568913593, + temp: { day: 14.85, min: 5.56, max: 15.05, night: 5.56, eve: 9.56, morn: 6.25 }, + pressure: 1022.7, + humidity: 59, + weather: [{ id: 800, main: "Clear", description: "sky is clear", icon: "01d" }], + speed: 2.89, + deg: 51, + clouds: 1 + } + ] + }, + extendedData + ) + ); } module.exports = generateWeatherForecast; diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js index 88cb8c3e..9c9ee2ca 100644 --- a/tests/e2e/modules/newsfeed_spec.js +++ b/tests/e2e/modules/newsfeed_spec.js @@ -5,31 +5,31 @@ const it = global.it; const beforeEach = global.beforeEach; const afterEach = global.afterEach; -describe("Newsfeed module", function() { +describe("Newsfeed module", function () { helpers.setupTimeout(this); var app = null; - beforeEach(function() { + beforeEach(function () { return helpers .startApplication({ args: ["js/electron.js"] }) - .then(function(startedApp) { + .then(function (startedApp) { app = startedApp; }); }); - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("Default configuration", function() { - before(function() { + describe("Default configuration", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/newsfeed/default.js"; }); - it("show title newsfeed", function() { + it("show title newsfeed", function () { return app.client.waitUntilTextExists(".newsfeed .small", "Rodrigo Ramirez Blog", 10000).should.be.fulfilled; }); }); diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index ea916e5e..d87a44cd 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -6,10 +6,9 @@ const wdajaxstub = require("webdriverajaxstub"); const helpers = require("../global-setup"); -const {generateWeather, generateWeatherForecast} = require("./mocks"); - -describe("Weather module", function() { +const { generateWeather, generateWeatherForecast } = require("./mocks"); +describe("Weather module", function () { let app; helpers.setupTimeout(this); @@ -24,85 +23,85 @@ describe("Weather module", function() { app.client.setupStub(); } - afterEach(function() { + afterEach(function () { return helpers.stopApplication(app); }); - describe("Current weather", function() { + describe("Current weather", function () { let template; - before(function() { + before(function () { template = fs.readFileSync(path.join(__dirname, "..", "..", "..", "modules", "default", "weather", "current.njk"), "utf8"); }); - describe("Default configuration", function() { - before(function() { + describe("Default configuration", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/weather/currentweather_default.js"; }); - it("should render wind speed and wind direction", async function() { + it("should render wind speed and wind direction", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "6 WSW", 10000); }); - it("should render sunrise", async function() { + it("should render sunrise", async function () { const sunrise = moment().startOf("day").unix(); const sunset = moment().startOf("day").unix(); - const weather = generateWeather({sys: {sunrise, sunset}}); - await setup({template, data: weather}); + const weather = generateWeather({ sys: { sunrise, sunset } }); + await setup({ template, data: weather }); await app.client.waitForExist(".weather .normal.medium span.wi.dimmed.wi-sunrise", 10000); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(4)", "12:00 am", 10000); }); - it("should render sunset", async function() { + it("should render sunset", async function () { const sunrise = moment().startOf("day").unix(); const sunset = moment().endOf("day").unix(); - const weather = generateWeather({sys: {sunrise, sunset}}); - await setup({template, data: weather}); + const weather = generateWeather({ sys: { sunrise, sunset } }); + await setup({ template, data: weather }); await app.client.waitForExist(".weather .normal.medium span.wi.dimmed.wi-sunset", 10000); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(4)", "11:59 pm", 10000); }); - it("should render temperature with icon", async function() { + it("should render temperature with icon", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitForExist(".weather .large.light span.wi.weathericon.wi-snow", 10000); return app.client.waitUntilTextExists(".weather .large.light span.bright", "1.5°", 10000); }); - it("should render feels like temperature", async function() { + it("should render feels like temperature", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); return app.client.waitUntilTextExists(".weather .normal.medium span.dimmed", "Feels like -5.6°", 10000); }); }); - describe("Configuration Options", function() { - before(function() { + describe("Configuration Options", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/weather/currentweather_options.js"; }); - it("should render useBeaufort = false", async function() { + it("should render useBeaufort = false", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); return app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "12", 10000); }); - it("should render showWindDirectionAsArrow = true", async function() { + it("should render showWindDirectionAsArrow = true", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitForExist(".weather .normal.medium sup i.fa-long-arrow-up", 10000); const element = await app.client.getHTML(".weather .normal.medium sup i.fa-long-arrow-up"); @@ -110,17 +109,17 @@ describe("Weather module", function() { expect(element).to.include("transform:rotate(250deg);"); }); - it("should render showHumidity = true", async function() { + it("should render showHumidity = true", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(3)", "93", 10000); return app.client.waitForExist(".weather .normal.medium sup i.wi-humidity", 10000); }); - it("should render degreeLabel = true", async function() { + it("should render degreeLabel = true", async function () { const weather = generateWeather(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitUntilTextExists(".weather .large.light span.bright", "1°C", 10000); @@ -128,41 +127,41 @@ describe("Weather module", function() { }); }); - describe("Current weather units", function() { - before(function() { + describe("Current weather units", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/weather/currentweather_units.js"; }); - it("should render imperial units", async function() { + it("should render imperial units", async function () { const weather = generateWeather({ - main:{ - temp: 1.49 * 9 / 5 + 32, - temp_min: 1 * 9 / 5 + 32, - temp_max: 2 * 9 / 5 + 32 + main: { + temp: (1.49 * 9) / 5 + 32, + temp_min: (1 * 9) / 5 + 32, + temp_max: (2 * 9) / 5 + 32 }, - wind:{ + wind: { speed: 11.8 * 2.23694 - }, + } }); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(2)", "6 WSW", 10000); await app.client.waitUntilTextExists(".weather .large.light span.bright", "34,7°", 10000); return app.client.waitUntilTextExists(".weather .normal.medium span.dimmed", "22,0°", 10000); }); - it("should render decimalSymbol = ','", async function() { + it("should render decimalSymbol = ','", async function () { const weather = generateWeather({ - main:{ - temp: 1.49 * 9 / 5 + 32, - temp_min: 1 * 9 / 5 + 32, - temp_max: 2 * 9 / 5 + 32 + main: { + temp: (1.49 * 9) / 5 + 32, + temp_min: (1 * 9) / 5 + 32, + temp_max: (2 * 9) / 5 + 32 }, - wind:{ + wind: { speed: 11.8 * 2.23694 - }, + } }); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitUntilTextExists(".weather .normal.medium span:nth-child(3)", "93,7", 10000); await app.client.waitUntilTextExists(".weather .large.light span.bright", "34,7°", 10000); @@ -171,21 +170,21 @@ describe("Weather module", function() { }); }); - describe("Weather Forecast", function() { + describe("Weather Forecast", function () { let template; - before(function() { + before(function () { template = fs.readFileSync(path.join(__dirname, "..", "..", "..", "modules", "default", "weather", "forecast.njk"), "utf8"); }); - describe("Default configuration", function() { - before(function() { + describe("Default configuration", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/weather/forecastweather_default.js"; }); - it("should render days", async function() { + it("should render days", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); const days = ["Fri", "Sat", "Sun", "Mon", "Tue"]; @@ -194,9 +193,9 @@ describe("Weather module", function() { } }); - it("should render icons", async function() { + it("should render icons", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); const icons = ["day-cloudy", "rain", "day-sunny", "day-sunny", "day-sunny"]; @@ -205,9 +204,9 @@ describe("Weather module", function() { } }); - it("should render max temperatures", async function() { + it("should render max temperatures", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); const temperatures = ["24.4°", "21.0°", "22.9°", "23.4°", "20.6°"]; @@ -216,9 +215,9 @@ describe("Weather module", function() { } }); - it("should render min temperatures", async function() { + it("should render min temperatures", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); const temperatures = ["15.3°", "13.6°", "13.8°", "13.9°", "10.9°"]; @@ -227,9 +226,9 @@ describe("Weather module", function() { } }); - it("should render fading of rows", async function() { + it("should render fading of rows", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); const opacities = [1, 1, 0.8, 0.5333333333333333, 0.2666666666666667]; @@ -242,21 +241,21 @@ describe("Weather module", function() { }); }); - describe("Configuration Options", function() { - before(function() { + describe("Configuration Options", function () { + before(function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/weather/forecastweather_options.js"; }); - it("should render custom table class", async function() { + it("should render custom table class", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitForExist(".weather table.myTableClass", 10000); }); - it("should render colored rows", async function() { + it("should render colored rows", async function () { const weather = generateWeatherForecast(); - await setup({template, data: weather}); + await setup({ template, data: weather }); await app.client.waitForExist(".weather table.myTableClass", 10000); diff --git a/tests/e2e/modules_position_spec.js b/tests/e2e/modules_position_spec.js index ca24ecee..930acbfd 100644 --- a/tests/e2e/modules_position_spec.js +++ b/tests/e2e/modules_position_spec.js @@ -9,7 +9,6 @@ describe("Position of modules", function () { var app = null; describe("Using helloworld", function () { - after(function () { return helpers.stopApplication(app); }); @@ -17,14 +16,16 @@ describe("Position of modules", function () { before(function () { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/positions.js"; - return helpers.startApplication({ - args: ["js/electron.js"] - }).then(function (startedApp) { app = startedApp; }); + return helpers + .startApplication({ + args: ["js/electron.js"] + }) + .then(function (startedApp) { + app = startedApp; + }); }); - 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 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; @@ -32,8 +33,10 @@ describe("Position of modules", function () { position = positions[idx]; className = position.replace("_", "."); it("show text in " + position, function () { - return app.client.waitUntilWindowLoaded() - .getText("." + className).should.eventually.equal("Text in " + position); + return app.client + .waitUntilWindowLoaded() + .getText("." + className) + .should.eventually.equal("Text in " + position); }); } }); diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index 41f50e75..77889748 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -13,9 +13,13 @@ describe("port directive configuration", function () { var app = null; beforeEach(function () { - return helpers.startApplication({ - args: ["js/electron.js"] - }).then(function (startedApp) { app = startedApp; }); + return helpers + .startApplication({ + args: ["js/electron.js"] + }) + .then(function (startedApp) { + app = startedApp; + }); }); afterEach(function () { diff --git a/tests/e2e/translations_spec.js b/tests/e2e/translations_spec.js index e589689e..cf039eb1 100644 --- a/tests/e2e/translations_spec.js +++ b/tests/e2e/translations_spec.js @@ -5,13 +5,13 @@ const expect = chai.expect; const mlog = require("mocha-logger"); const translations = require("../../translations/translations.js"); const helmet = require("helmet"); -const {JSDOM} = require("jsdom"); +const { JSDOM } = require("jsdom"); const express = require("express"); -describe("Translations", function() { +describe("Translations", function () { let server; - before(function() { + before(function () { const app = express(); app.use(helmet()); app.use(function (req, res, next) { @@ -23,12 +23,12 @@ describe("Translations", function() { server = app.listen(3000); }); - after(function() { + after(function () { server.close(); }); - it("should have a translation file in the specified path", function() { - for(let language in translations) { + it("should have a translation file in the specified path", function () { + for (let language in translations) { const file = fs.statSync(translations[language]); expect(file.isFile()).to.be.equal(true); } @@ -41,16 +41,18 @@ describe("Translations", function() { } }; - describe("Parsing language files through the Translator class", function() { - for(let language in translations) { - it(`should parse ${language}`, function(done) { - const dom = new JSDOM(`\ - \ + \ - \ + \ - \ + \ - \ + \ - \ + \ - \ + \ - \ + \ - \ + \ - \ +