mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 19:53:36 +00:00
Merge branch 'develop' of https://github.com/MichMich/MagicMirror into cal-again
This commit is contained in:
commit
ecd0b6fa83
@ -12,12 +12,14 @@ _This release is scheduled to be released on 2021-01-01._
|
|||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added new log level "debug" to the logger.
|
- Added new log level "debug" to the logger.
|
||||||
- Chuvash translation
|
|
||||||
|
- Added Hindi & Gujarati translation.
|
||||||
|
- Chuvash translation.
|
||||||
|
|
||||||
### Updated
|
### Updated
|
||||||
|
|
||||||
- Weather module - forecast now show TODAY and TOMORROW instead of weekday, to make it easier to understand
|
- Weather module - forecast now show TODAY and TOMORROW instead of weekday, to make it easier to understand.
|
||||||
- Update dependencies to latest versions
|
- Update dependencies to latest versions.
|
||||||
|
|
||||||
### Deleted
|
### Deleted
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ var config = {
|
|||||||
httpsCertificate: "", // HTTPS Certificate path, only require when useHttps is true
|
httpsCertificate: "", // HTTPS Certificate path, only require when useHttps is true
|
||||||
|
|
||||||
language: "en",
|
language: "en",
|
||||||
logLevel: ["INFO", "LOG", "WARN", "ERROR"],
|
logLevel: ["DEBUG", "INFO", "LOG", "WARN", "ERROR"],
|
||||||
timeFormat: 24,
|
timeFormat: 24,
|
||||||
units: "metric",
|
units: "metric",
|
||||||
// serverOnly: true/false/"local" ,
|
// serverOnly: true/false/"local" ,
|
||||||
|
@ -20,10 +20,11 @@
|
|||||||
}
|
}
|
||||||
})(this, function (config) {
|
})(this, function (config) {
|
||||||
const logLevel = {
|
const logLevel = {
|
||||||
|
debug: Function.prototype.bind.call(console.debug, console),
|
||||||
info: Function.prototype.bind.call(console.info, console),
|
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),
|
warn: Function.prototype.bind.call(console.warn, console),
|
||||||
|
error: Function.prototype.bind.call(console.error, console),
|
||||||
group: Function.prototype.bind.call(console.group, console),
|
group: Function.prototype.bind.call(console.group, console),
|
||||||
groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console),
|
groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console),
|
||||||
groupEnd: Function.prototype.bind.call(console.groupEnd, console),
|
groupEnd: Function.prototype.bind.call(console.groupEnd, console),
|
||||||
|
@ -49,7 +49,7 @@ var Server = function (config, callback) {
|
|||||||
res.status(403).send("This device is not allowed to access your mirror. <br> Please check your config.js or config.js.sample to change this.");
|
res.status(403).send("This device is not allowed to access your mirror. <br> Please check your config.js or config.js.sample to change this.");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
app.use(helmet());
|
app.use(helmet({ contentSecurityPolicy: false }));
|
||||||
|
|
||||||
app.use("/js", express.static(__dirname));
|
app.use("/js", express.static(__dirname));
|
||||||
var directories = ["/config", "/css", "/fonts", "/modules", "/vendor", "/translations", "/tests/configs"];
|
var directories = ["/config", "/css", "/fonts", "/modules", "/vendor", "/translations", "/tests/configs"];
|
||||||
|
@ -279,7 +279,6 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn
|
|||||||
// This date is an exception date, which means we should skip it in the recurrence pattern.
|
// This date is an exception date, which means we should skip it in the recurrence pattern.
|
||||||
showRecurrence = false;
|
showRecurrence = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.debug("duration=" + duration);
|
Log.debug("duration=" + duration);
|
||||||
|
|
||||||
endDate = moment(parseInt(startDate.format("x")) + duration, "x");
|
endDate = moment(parseInt(startDate.format("x")) + duration, "x");
|
||||||
@ -320,6 +319,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn
|
|||||||
// Single event.
|
// Single event.
|
||||||
const fullDayEvent = isFacebookBirthday ? true : isFullDayEvent(event);
|
const fullDayEvent = isFacebookBirthday ? true : isFullDayEvent(event);
|
||||||
// Log.debug("full day event")
|
// Log.debug("full day event")
|
||||||
|
|
||||||
if (includePastEvents) {
|
if (includePastEvents) {
|
||||||
// Past event is too far in the past, so skip.
|
// Past event is too far in the past, so skip.
|
||||||
if (endDate < past) {
|
if (endDate < past) {
|
||||||
|
@ -135,5 +135,103 @@
|
|||||||
"UTC+13": { "iana": ["Etc/GMT-13"] },
|
"UTC+13": { "iana": ["Etc/GMT-13"] },
|
||||||
"Tonga Standard Time": { "iana": ["Pacific/Tongatapu"] },
|
"Tonga Standard Time": { "iana": ["Pacific/Tongatapu"] },
|
||||||
"Samoa Standard Time": { "iana": ["Pacific/Apia"] },
|
"Samoa Standard Time": { "iana": ["Pacific/Apia"] },
|
||||||
"Line Islands Standard Time": { "iana": ["Pacific/Kiritimati"] }
|
"Line Islands Standard Time": { "iana": ["Pacific/Kiritimati"] },
|
||||||
|
"(UTC-12:00) International Date Line West": { "iana": ["Etc/GMT+12"] },
|
||||||
|
"(UTC-11:00) Midway Island, Samoa": { "iana": ["Pacific/Apia"] },
|
||||||
|
"(UTC-10:00) Hawaii": { "iana": ["Pacific/Honolulu"] },
|
||||||
|
"(UTC-09:00) Alaska": { "iana": ["America/Anchorage"] },
|
||||||
|
"(UTC-08:00) Pacific Time (US & Canada); Tijuana": { "iana": ["America/Los_Angeles"] },
|
||||||
|
"(UTC-08:00) Pacific Time (US and Canada); Tijuana": { "iana": ["America/Los_Angeles"] },
|
||||||
|
"(UTC-07:00) Mountain Time (US & Canada)": { "iana": ["America/Denver"] },
|
||||||
|
"(UTC-07:00) Mountain Time (US and Canada)": { "iana": ["America/Denver"] },
|
||||||
|
"(UTC-07:00) Chihuahua, La Paz, Mazatlan": { "iana": [null] },
|
||||||
|
"(UTC-07:00) Arizona": { "iana": ["America/Phoenix"] },
|
||||||
|
"(UTC-06:00) Central Time (US & Canada)": { "iana": ["America/Chicago"] },
|
||||||
|
"(UTC-06:00) Central Time (US and Canada)": { "iana": ["America/Chicago"] },
|
||||||
|
"(UTC-06:00) Saskatchewan": { "iana": ["America/Regina"] },
|
||||||
|
"(UTC-06:00) Guadalajara, Mexico City, Monterrey": { "iana": [null] },
|
||||||
|
"(UTC-06:00) Central America": { "iana": ["America/Guatemala"] },
|
||||||
|
"(UTC-05:00) Eastern Time (US & Canada)": { "iana": ["America/New_York"] },
|
||||||
|
"(UTC-05:00) Eastern Time (US and Canada)": { "iana": ["America/New_York"] },
|
||||||
|
"(UTC-05:00) Indiana (East)": { "iana": ["America/Indianapolis"] },
|
||||||
|
"(UTC-05:00) Bogota, Lima, Quito": { "iana": ["America/Bogota"] },
|
||||||
|
"(UTC-04:00) Atlantic Time (Canada)": { "iana": ["America/Halifax"] },
|
||||||
|
"(UTC-04:00) Georgetown, La Paz, San Juan": { "iana": ["America/La_Paz"] },
|
||||||
|
"(UTC-04:00) Santiago": { "iana": ["America/Santiago"] },
|
||||||
|
"(UTC-03:30) Newfoundland": { "iana": [null] },
|
||||||
|
"(UTC-03:00) Brasilia": { "iana": ["America/Sao_Paulo"] },
|
||||||
|
"(UTC-03:00) Georgetown": { "iana": ["America/Cayenne"] },
|
||||||
|
"(UTC-03:00) Greenland": { "iana": ["America/Godthab"] },
|
||||||
|
"(UTC-02:00) Mid-Atlantic": { "iana": [null] },
|
||||||
|
"(UTC-01:00) Azores": { "iana": ["Atlantic/Azores"] },
|
||||||
|
"(UTC-01:00) Cape Verde Islands": { "iana": ["Atlantic/Cape_Verde"] },
|
||||||
|
"(UTC) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London": { "iana": [null] },
|
||||||
|
"(UTC) Monrovia, Reykjavik": { "iana": ["Atlantic/Reykjavik"] },
|
||||||
|
"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague": { "iana": ["Europe/Budapest"] },
|
||||||
|
"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb": { "iana": ["Europe/Warsaw"] },
|
||||||
|
"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris": { "iana": ["Europe/Paris"] },
|
||||||
|
"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna": { "iana": ["Europe/Berlin"] },
|
||||||
|
"(UTC+01:00) West Central Africa": { "iana": ["Africa/Lagos"] },
|
||||||
|
"(UTC+02:00) Minsk": { "iana": ["Europe/Chisinau"] },
|
||||||
|
"(UTC+02:00) Cairo": { "iana": ["Africa/Cairo"] },
|
||||||
|
"(UTC+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius": { "iana": ["Europe/Kiev"] },
|
||||||
|
"(UTC+02:00) Athens, Bucharest, Istanbul": { "iana": ["Europe/Bucharest"] },
|
||||||
|
"(UTC+02:00) Jerusalem": { "iana": ["Asia/Jerusalem"] },
|
||||||
|
"(UTC+02:00) Harare, Pretoria": { "iana": ["Africa/Johannesburg"] },
|
||||||
|
"(UTC+03:00) Moscow, St. Petersburg, Volgograd": { "iana": ["Europe/Moscow"] },
|
||||||
|
"(UTC+03:00) Kuwait, Riyadh": { "iana": ["Asia/Riyadh"] },
|
||||||
|
"(UTC+03:00) Nairobi": { "iana": ["Africa/Nairobi"] },
|
||||||
|
"(UTC+03:00) Baghdad": { "iana": ["Asia/Baghdad"] },
|
||||||
|
"(UTC+03:30) Tehran": { "iana": ["Asia/Tehran"] },
|
||||||
|
"(UTC+04:00) Abu Dhabi, Muscat": { "iana": ["Asia/Dubai"] },
|
||||||
|
"(UTC+04:00) Baku, Tbilisi, Yerevan": { "iana": ["Asia/Yerevan"] },
|
||||||
|
"(UTC+04:30) Kabul": { "iana": [null] },
|
||||||
|
"(UTC+05:00) Ekaterinburg": { "iana": ["Asia/Yekaterinburg"] },
|
||||||
|
"(UTC+05:00) Tashkent": { "iana": ["Asia/Tashkent"] },
|
||||||
|
"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi": { "iana": ["Asia/Calcutta"] },
|
||||||
|
"(UTC+05:45) Kathmandu": { "iana": ["Asia/Katmandu"] },
|
||||||
|
"(UTC+06:00) Astana, Dhaka": { "iana": ["Asia/Almaty"] },
|
||||||
|
"(UTC+06:00) Sri Jayawardenepura": { "iana": ["Asia/Colombo"] },
|
||||||
|
"(UTC+06:00) Almaty, Novosibirsk": { "iana": ["Asia/Novosibirsk"] },
|
||||||
|
"(UTC+06:30) Yangon (Rangoon)": { "iana": ["Asia/Rangoon"] },
|
||||||
|
"(UTC+07:00) Bangkok, Hanoi, Jakarta": { "iana": ["Asia/Bangkok"] },
|
||||||
|
"(UTC+07:00) Krasnoyarsk": { "iana": ["Asia/Krasnoyarsk"] },
|
||||||
|
"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi": { "iana": ["Asia/Shanghai"] },
|
||||||
|
"(UTC+08:00) Kuala Lumpur, Singapore": { "iana": ["Asia/Singapore"] },
|
||||||
|
"(UTC+08:00) Taipei": { "iana": ["Asia/Taipei"] },
|
||||||
|
"(UTC+08:00) Perth": { "iana": ["Australia/Perth"] },
|
||||||
|
"(UTC+08:00) Irkutsk, Ulaanbaatar": { "iana": ["Asia/Irkutsk"] },
|
||||||
|
"(UTC+09:00) Seoul": { "iana": ["Asia/Seoul"] },
|
||||||
|
"(UTC+09:00) Osaka, Sapporo, Tokyo": { "iana": ["Asia/Tokyo"] },
|
||||||
|
"(UTC+09:00) Yakutsk": { "iana": ["Asia/Yakutsk"] },
|
||||||
|
"(UTC+09:30) Darwin": { "iana": ["Australia/Darwin"] },
|
||||||
|
"(UTC+09:30) Adelaide": { "iana": ["Australia/Adelaide"] },
|
||||||
|
"(UTC+10:00) Canberra, Melbourne, Sydney": { "iana": ["Australia/Sydney"] },
|
||||||
|
"(GMT+10:00) Canberra, Melbourne, Sydney": { "iana": ["Australia/Sydney"] },
|
||||||
|
"(UTC+10:00) Brisbane": { "iana": ["Australia/Brisbane"] },
|
||||||
|
"(UTC+10:00) Hobart": { "iana": ["Australia/Hobart"] },
|
||||||
|
"(UTC+10:00) Vladivostok": { "iana": ["Asia/Vladivostok"] },
|
||||||
|
"(UTC+10:00) Guam, Port Moresby": { "iana": ["Pacific/Port_Moresby"] },
|
||||||
|
"(UTC+11:00) Magadan, Solomon Islands, New Caledonia": { "iana": ["Pacific/Guadalcanal"] },
|
||||||
|
"(UTC+12:00) Fiji, Kamchatka, Marshall Is.": { "iana": [null] },
|
||||||
|
"(UTC+12:00) Auckland, Wellington": { "iana": ["Pacific/Auckland"] },
|
||||||
|
"(UTC+13:00) Nuku'alofa": { "iana": ["Pacific/Tongatapu"] },
|
||||||
|
"(UTC-03:00) Buenos Aires": { "iana": ["America/Buenos_Aires"] },
|
||||||
|
"(UTC+02:00) Beirut": { "iana": ["Asia/Beirut"] },
|
||||||
|
"(UTC+02:00) Amman": { "iana": ["Asia/Amman"] },
|
||||||
|
"(UTC-06:00) Guadalajara, Mexico City, Monterrey - New": { "iana": ["America/Mexico_City"] },
|
||||||
|
"(UTC-07:00) Chihuahua, La Paz, Mazatlan - New": { "iana": ["America/Chihuahua"] },
|
||||||
|
"(UTC-08:00) Tijuana, Baja California": { "iana": ["America/Tijuana"] },
|
||||||
|
"(UTC+02:00) Windhoek": { "iana": ["Africa/Windhoek"] },
|
||||||
|
"(UTC+03:00) Tbilisi": { "iana": ["Asia/Tbilisi"] },
|
||||||
|
"(UTC-04:00) Manaus": { "iana": ["America/Cuiaba"] },
|
||||||
|
"(UTC-03:00) Montevideo": { "iana": ["America/Montevideo"] },
|
||||||
|
"(UTC+04:00) Yerevan": { "iana": [null] },
|
||||||
|
"(UTC-04:30) Caracas": { "iana": ["America/Caracas"] },
|
||||||
|
"(UTC) Casablanca": { "iana": ["Africa/Casablanca"] },
|
||||||
|
"(UTC+05:00) Islamabad, Karachi": { "iana": ["Asia/Karachi"] },
|
||||||
|
"(UTC+04:00) Port Louis": { "iana": ["Indian/Mauritius"] },
|
||||||
|
"(UTC) Coordinated Universal Time": { "iana": ["Etc/GMT"] },
|
||||||
|
"(UTC-04:00) Asuncion": { "iana": ["America/Asuncion"] },
|
||||||
|
"(UTC+12:00) Petropavlovsk-Kamchatsky": { "iana": [null] }
|
||||||
}
|
}
|
||||||
|
@ -350,7 +350,7 @@ Module.register("newsfeed", {
|
|||||||
this.activeItem = 0;
|
this.activeItem = 0;
|
||||||
}
|
}
|
||||||
this.resetDescrOrFullArticleAndTimer();
|
this.resetDescrOrFullArticleAndTimer();
|
||||||
Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")");
|
Log.debug(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")");
|
||||||
this.updateDom(100);
|
this.updateDom(100);
|
||||||
} else if (notification === "ARTICLE_PREVIOUS") {
|
} else if (notification === "ARTICLE_PREVIOUS") {
|
||||||
this.activeItem--;
|
this.activeItem--;
|
||||||
@ -358,7 +358,7 @@ Module.register("newsfeed", {
|
|||||||
this.activeItem = this.newsItems.length - 1;
|
this.activeItem = this.newsItems.length - 1;
|
||||||
}
|
}
|
||||||
this.resetDescrOrFullArticleAndTimer();
|
this.resetDescrOrFullArticleAndTimer();
|
||||||
Log.info(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")");
|
Log.debug(this.name + " - going from article #" + before + " to #" + this.activeItem + " (of " + this.newsItems.length + ")");
|
||||||
this.updateDom(100);
|
this.updateDom(100);
|
||||||
}
|
}
|
||||||
// if "more details" is received the first time: show article summary, on second time show full article
|
// if "more details" is received the first time: show article summary, on second time show full article
|
||||||
@ -367,8 +367,8 @@ Module.register("newsfeed", {
|
|||||||
if (this.config.showFullArticle === true) {
|
if (this.config.showFullArticle === true) {
|
||||||
this.scrollPosition += this.config.scrollLength;
|
this.scrollPosition += this.config.scrollLength;
|
||||||
window.scrollTo(0, this.scrollPosition);
|
window.scrollTo(0, this.scrollPosition);
|
||||||
Log.info(this.name + " - scrolling down");
|
Log.debug(this.name + " - scrolling down");
|
||||||
Log.info(this.name + " - ARTICLE_MORE_DETAILS, scroll position: " + this.config.scrollLength);
|
Log.debug(this.name + " - ARTICLE_MORE_DETAILS, scroll position: " + this.config.scrollLength);
|
||||||
} else {
|
} else {
|
||||||
this.showFullArticle();
|
this.showFullArticle();
|
||||||
}
|
}
|
||||||
@ -376,12 +376,12 @@ Module.register("newsfeed", {
|
|||||||
if (this.config.showFullArticle === true) {
|
if (this.config.showFullArticle === true) {
|
||||||
this.scrollPosition -= this.config.scrollLength;
|
this.scrollPosition -= this.config.scrollLength;
|
||||||
window.scrollTo(0, this.scrollPosition);
|
window.scrollTo(0, this.scrollPosition);
|
||||||
Log.info(this.name + " - scrolling up");
|
Log.debug(this.name + " - scrolling up");
|
||||||
Log.info(this.name + " - ARTICLE_SCROLL_UP, scroll position: " + this.config.scrollLength);
|
Log.debug(this.name + " - ARTICLE_SCROLL_UP, scroll position: " + this.config.scrollLength);
|
||||||
}
|
}
|
||||||
} else if (notification === "ARTICLE_LESS_DETAILS") {
|
} else if (notification === "ARTICLE_LESS_DETAILS") {
|
||||||
this.resetDescrOrFullArticleAndTimer();
|
this.resetDescrOrFullArticleAndTimer();
|
||||||
Log.info(this.name + " - showing only article titles again");
|
Log.debug(this.name + " - showing only article titles again");
|
||||||
this.updateDom(100);
|
this.updateDom(100);
|
||||||
} else if (notification === "ARTICLE_TOGGLE_FULL") {
|
} else if (notification === "ARTICLE_TOGGLE_FULL") {
|
||||||
if (this.config.showFullArticle) {
|
if (this.config.showFullArticle) {
|
||||||
@ -411,7 +411,7 @@ Module.register("newsfeed", {
|
|||||||
}
|
}
|
||||||
clearInterval(this.timer);
|
clearInterval(this.timer);
|
||||||
this.timer = null;
|
this.timer = null;
|
||||||
Log.info(this.name + " - showing " + this.isShowingDescription ? "article description" : "full article");
|
Log.debug(this.name + " - showing " + this.isShowingDescription ? "article description" : "full article");
|
||||||
this.updateDom(100);
|
this.updateDom(100);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -10,7 +10,13 @@
|
|||||||
{% set forecast = forecast.slice(0, numSteps) %}
|
{% set forecast = forecast.slice(0, numSteps) %}
|
||||||
{% for f in forecast %}
|
{% for f in forecast %}
|
||||||
<tr {% if config.colored %}class="colored"{% endif %} {% if config.fade %}style="opacity: {{ currentStep | opacity(numSteps) }};"{% endif %}>
|
<tr {% if config.colored %}class="colored"{% endif %} {% if config.fade %}style="opacity: {{ currentStep | opacity(numSteps) }};"{% endif %}>
|
||||||
<td class="day">{{ f.date.format('ddd') }}</td>
|
{% if (currentStep == 0) %}
|
||||||
|
<td class="day">{{ "TODAY" | translate }}</td>
|
||||||
|
{% elif (currentStep == 1) %}
|
||||||
|
<td class="day">{{ "TOMORROW" | translate }}</td>
|
||||||
|
{% else %}
|
||||||
|
<td class="day">{{ f.date.format('ddd') }}</td>
|
||||||
|
{% endif %}
|
||||||
<td class="bright weather-icon"><span class="wi weathericon wi-{{ f.weatherType }}"></span></td>
|
<td class="bright weather-icon"><span class="wi weathericon wi-{{ f.weatherType }}"></span></td>
|
||||||
<td class="align-right bright max-temp">
|
<td class="align-right bright max-temp">
|
||||||
{{ f.maxTemperature | roundValue | unit("temperature") }}
|
{{ f.maxTemperature | roundValue | unit("temperature") }}
|
||||||
|
@ -87,7 +87,7 @@ WeatherProvider.register("ukmetofficedatahub", {
|
|||||||
// Did not receive usable new data.
|
// Did not receive usable new data.
|
||||||
// Maybe this needs a better check?
|
// Maybe this needs a better check?
|
||||||
Log.error("Possibly bad current/hourly data?");
|
Log.error("Possibly bad current/hourly data?");
|
||||||
Log.info(data);
|
Log.error(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ WeatherProvider.register("ukmetofficedatahub", {
|
|||||||
// Did not receive usable new data.
|
// Did not receive usable new data.
|
||||||
// Maybe this needs a better check?
|
// Maybe this needs a better check?
|
||||||
Log.error("Possibly bad forecast data?");
|
Log.error("Possibly bad forecast data?");
|
||||||
Log.info(data);
|
Log.error(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19582
package-lock.json
generated
19582
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
33
package.json
33
package.json
@ -44,46 +44,47 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"chai-as-promised": "^7.1.1",
|
"chai-as-promised": "^7.1.1",
|
||||||
"danger": "^3.1.3",
|
"danger": "^10.5.1",
|
||||||
"eslint-config-prettier": "^6.11.0",
|
"eslint-config-prettier": "^6.15.0",
|
||||||
"eslint-plugin-jsdoc": "^30.5.1",
|
"eslint-plugin-jsdoc": "^30.7.7",
|
||||||
"eslint-plugin-prettier": "^3.1.4",
|
"eslint-plugin-prettier": "^3.1.4",
|
||||||
"http-auth": "^3.2.3",
|
"express-basic-auth": "^1.2.0",
|
||||||
"husky": "^4.3.0",
|
"husky": "^4.3.0",
|
||||||
"jsdom": "^11.6.2",
|
"jsdom": "^16.4.0",
|
||||||
"lodash": "^4.17.20",
|
"lodash": "^4.17.20",
|
||||||
"mocha": "^7.1.2",
|
"mocha": "^8.2.1",
|
||||||
"mocha-each": "^2.0.1",
|
"mocha-each": "^2.0.1",
|
||||||
"mocha-logger": "^1.0.6",
|
"mocha-logger": "^1.0.7",
|
||||||
"nyc": "^15.1.0",
|
"nyc": "^15.1.0",
|
||||||
"prettier": "^2.1.2",
|
"prettier": "^2.1.2",
|
||||||
"pretty-quick": "^3.0.2",
|
"pretty-quick": "^3.1.0",
|
||||||
"spectron": "^8.0.0",
|
"spectron": "^10.0.1",
|
||||||
"stylelint": "^13.7.1",
|
"stylelint": "^13.7.2",
|
||||||
"stylelint-config-prettier": "^8.0.2",
|
"stylelint-config-prettier": "^8.0.2",
|
||||||
"stylelint-config-standard": "^20.0.0",
|
"stylelint-config-standard": "^20.0.0",
|
||||||
"stylelint-prettier": "^1.1.2"
|
"stylelint-prettier": "^1.1.2"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"electron": "^6.1.7"
|
"electron": "^8.5.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"console-stamp": "^0.2.9",
|
"console-stamp": "^0.2.9",
|
||||||
"eslint": "^7.9.0",
|
"electron": "^8.5.3",
|
||||||
|
"eslint": "^7.13.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-ipfilter": "^1.1.2",
|
"express-ipfilter": "^1.1.2",
|
||||||
"feedme": "^1.2.0",
|
"feedme": "^1.2.0",
|
||||||
"helmet": "^3.23.3",
|
"helmet": "^4.2.0",
|
||||||
"ical": "^0.8.0",
|
"ical": "^0.8.0",
|
||||||
"iconv-lite": "^0.6.2",
|
"iconv-lite": "^0.6.2",
|
||||||
"module-alias": "^2.2.2",
|
"module-alias": "^2.2.2",
|
||||||
"moment": "^2.28.0",
|
"moment": "^2.29.1",
|
||||||
"node-ical": "^0.12.1",
|
"node-ical": "^0.12.3",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"rrule": "^2.6.6",
|
"rrule": "^2.6.6",
|
||||||
"rrule-alt": "^2.2.8",
|
"rrule-alt": "^2.2.8",
|
||||||
"simple-git": "^1.85.0",
|
"simple-git": "^2.21.0",
|
||||||
"socket.io": "^2.3.0",
|
"socket.io": "^2.3.0",
|
||||||
"valid-url": "^1.0.9"
|
"valid-url": "^1.0.9"
|
||||||
},
|
},
|
||||||
|
@ -186,7 +186,7 @@ describe("Weather module", function () {
|
|||||||
const weather = generateWeatherForecast();
|
const weather = generateWeatherForecast();
|
||||||
await setup({ template, data: weather });
|
await setup({ template, data: weather });
|
||||||
|
|
||||||
const days = ["Fri", "Sat", "Sun", "Mon", "Tue"];
|
const days = ["Today", "Tomorrow", "Sun", "Mon", "Tue"];
|
||||||
|
|
||||||
for (const [index, day] of days.entries()) {
|
for (const [index, day] of days.entries()) {
|
||||||
await app.client.waitUntilTextExists(`.weather table.small tr:nth-child(${index + 1}) td:nth-child(1)`, day, 10000);
|
await app.client.waitUntilTextExists(`.weather table.small tr:nth-child(${index + 1}) td:nth-child(1)`, day, 10000);
|
||||||
|
@ -46,7 +46,7 @@ describe("Translations", function () {
|
|||||||
it(`should parse ${language}`, function (done) {
|
it(`should parse ${language}`, function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
@ -68,7 +68,7 @@ describe("Translations", function () {
|
|||||||
before(function (done) {
|
before(function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
@ -92,7 +92,7 @@ describe("Translations", function () {
|
|||||||
before(function (done) {
|
before(function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
`<script>var translations = ${JSON.stringify(translations)}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
|
@ -1,20 +1,16 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const auth = require("http-auth");
|
const auth = require("express-basic-auth");
|
||||||
const express = require("express");
|
const express = require("express");
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
var server;
|
var server;
|
||||||
|
|
||||||
var basic = auth.basic(
|
var basicAuth = auth({
|
||||||
{
|
realm: "MagicMirror Area restricted.",
|
||||||
realm: "MagicMirror Area restricted."
|
users: { MagicMirror: "CallMeADog" }
|
||||||
},
|
});
|
||||||
(username, password, callback) => {
|
|
||||||
callback(username === "MagicMirror" && password === "CallMeADog");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(auth.connect(basic));
|
app.use(basicAuth);
|
||||||
|
|
||||||
// Set available directories
|
// Set available directories
|
||||||
var directories = ["/tests/configs"];
|
var directories = ["/tests/configs"];
|
||||||
|
@ -10,7 +10,7 @@ describe("File js/class", function () {
|
|||||||
before(function (done) {
|
before(function (done) {
|
||||||
dom = new JSDOM(
|
dom = new JSDOM(
|
||||||
`<script>var Log = {log: function() {}};</script>\
|
`<script>var Log = {log: function() {}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "class.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "class.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
|
@ -65,7 +65,7 @@ describe("Translator", function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it("should return custom module translation", function (done) {
|
it("should return custom module translation", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -78,7 +78,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should return core translation", function (done) {
|
it("should return core translation", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -91,7 +91,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should return custom module translation fallback", function (done) {
|
it("should return custom module translation fallback", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -102,7 +102,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should return core translation fallback", function (done) {
|
it("should return core translation fallback", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -113,7 +113,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should return translation with placeholder for missing variables", function (done) {
|
it("should return translation with placeholder for missing variables", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -124,7 +124,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should return key if no translation was found", function (done) {
|
it("should return key if no translation was found", function (done) {
|
||||||
const dom = new JSDOM(`<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
setTranslations(Translator);
|
setTranslations(Translator);
|
||||||
@ -144,7 +144,7 @@ describe("Translator", function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
it("should load translations", function (done) {
|
it("should load translations", function (done) {
|
||||||
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
const file = "TranslationTest.json";
|
const file = "TranslationTest.json";
|
||||||
@ -158,7 +158,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should load translation fallbacks", function (done) {
|
it("should load translation fallbacks", function (done) {
|
||||||
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator } = dom.window;
|
const { Translator } = dom.window;
|
||||||
const file = "TranslationTest.json";
|
const file = "TranslationTest.json";
|
||||||
@ -172,7 +172,7 @@ describe("Translator", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should not load translations, if module fallback exists", function (done) {
|
it("should not load translations, if module fallback exists", function (done) {
|
||||||
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
const dom = new JSDOM(`<script>var Log = {log: function(){}};</script><script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`, { runScripts: "dangerously", resources: "usable" });
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
const { Translator, XMLHttpRequest } = dom.window;
|
const { Translator, XMLHttpRequest } = dom.window;
|
||||||
const file = "TranslationTest.json";
|
const file = "TranslationTest.json";
|
||||||
@ -200,7 +200,7 @@ describe("Translator", function () {
|
|||||||
it("should load core translations and fallback", function (done) {
|
it("should load core translations and fallback", function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
@ -219,7 +219,7 @@ describe("Translator", function () {
|
|||||||
it("should load core fallback if language cannot be found", function (done) {
|
it("should load core fallback if language cannot be found", function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
@ -240,7 +240,7 @@ describe("Translator", function () {
|
|||||||
it("should load core translations fallback", function (done) {
|
it("should load core translations fallback", function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
`<script>var translations = {en: "http://localhost:3000/translations/en.json"}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
@ -258,7 +258,7 @@ describe("Translator", function () {
|
|||||||
it("should load core fallback if language cannot be found", function (done) {
|
it("should load core fallback if language cannot be found", function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var translations = {}; var Log = {log: function(){}};</script>\
|
`<script>var translations = {}; var Log = {log: function(){}};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "translator.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
|
@ -8,7 +8,7 @@ describe("Test function cmpVersions in js/module.js", function () {
|
|||||||
before(function (done) {
|
before(function (done) {
|
||||||
const dom = new JSDOM(
|
const dom = new JSDOM(
|
||||||
`<script>var Class = {extend: function() { return {}; }};</script>\
|
`<script>var Class = {extend: function() { return {}; }};</script>\
|
||||||
<script src="${path.join(__dirname, "..", "..", "..", "js", "module.js")}">`,
|
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "module.js")}">`,
|
||||||
{ runScripts: "dangerously", resources: "usable" }
|
{ runScripts: "dangerously", resources: "usable" }
|
||||||
);
|
);
|
||||||
dom.window.onload = function () {
|
dom.window.onload = function () {
|
||||||
|
34
translations/cv.json
Normal file
34
translations/cv.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"LOADING": "Тиенет …",
|
||||||
|
|
||||||
|
"TODAY": "Паян",
|
||||||
|
"TOMORROW": "Ыран",
|
||||||
|
"DAYAFTERTOMORROW": "Виҫмине",
|
||||||
|
"RUNNING": "Хальхи",
|
||||||
|
"EMPTY": "Пулас ӗҫ ҫук",
|
||||||
|
|
||||||
|
"WEEK": "{weekNumber} эрне",
|
||||||
|
|
||||||
|
"N": "Ҫ",
|
||||||
|
"NNE": "ҪҪТ",
|
||||||
|
"NE": "ҪТ",
|
||||||
|
"ENE": "ТҪТ",
|
||||||
|
"E": "Т",
|
||||||
|
"ESE": "ТКТ",
|
||||||
|
"SE": "КТ",
|
||||||
|
"SSE": "ККТ",
|
||||||
|
"S": "К",
|
||||||
|
"SSW": "ККА",
|
||||||
|
"SW": "КА",
|
||||||
|
"WSW": "АКА",
|
||||||
|
"W": "А",
|
||||||
|
"WNW": "АҪА",
|
||||||
|
"NW": "ҪА",
|
||||||
|
"NNW": "ҪҪА",
|
||||||
|
"FEELS": "Туйӑннӑ",
|
||||||
|
|
||||||
|
"UPDATE_NOTIFICATION": "MagicMirror² валли ҫӗнетӳ пур.",
|
||||||
|
"UPDATE_NOTIFICATION_MODULE": "{MODULE_NAME} модуль валли ҫӗнетӳ пур.",
|
||||||
|
"UPDATE_INFO_SINGLE": "Ҫак инсталляци {BRANCH_NAME} commit турат {COMMIT_COUNT} коммитпа кая уйрӑлса тӑрать.",
|
||||||
|
"UPDATE_INFO_MULTIPLE": "Ҫак инсталляци {BRANCH_NAME} commit турат {COMMIT_COUNT} коммитпа кая уйрӑлса тӑрать."
|
||||||
|
}
|
38
translations/gu.json
Normal file
38
translations/gu.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"LOADING": "લોડ થઈ રહ્યું છે …",
|
||||||
|
|
||||||
|
"TODAY": "આજે",
|
||||||
|
"TOMORROW": "આવતી કાલે",
|
||||||
|
"DAYAFTERTOMORROW": "પરમ દિવસે",
|
||||||
|
"RUNNING": "માં સમાપ્ત થાય છે",
|
||||||
|
"EMPTY": "કોઈ આગામી કાર્યક્રમ નથી.",
|
||||||
|
|
||||||
|
"WEEK": "સપ્તાહ {weekNumber}",
|
||||||
|
|
||||||
|
"N": "ઉ",
|
||||||
|
"NNE": "ઉઉપુ",
|
||||||
|
"NE": "ઉપુ",
|
||||||
|
"ENE": "પુઉપુ",
|
||||||
|
"E": "પુ",
|
||||||
|
"ESE": "પુદપુ",
|
||||||
|
"SE": "દપુ",
|
||||||
|
"SSE": "દદપુ",
|
||||||
|
"S": "દ",
|
||||||
|
"SSW": "દદપ",
|
||||||
|
"SW": "દપ",
|
||||||
|
"WSW": "પદપ",
|
||||||
|
"W": "પ",
|
||||||
|
"WNW": "પઉપ",
|
||||||
|
"NW": "ઉપ",
|
||||||
|
"NNW": "ઉઉપ",
|
||||||
|
|
||||||
|
"MODULE_CONFIG_CHANGED": "{MODULE_NAME} મોડ્યુલ માટે ગોઠવણી વિકલ્પો બદલાયા છે. \nકૃપા કરીને દસ્તાવેજોને તપાસો.",
|
||||||
|
|
||||||
|
"UPDATE_NOTIFICATION": "MagicMirror² અપડેટ ઉપલબ્ધ છે.",
|
||||||
|
"UPDATE_NOTIFICATION_MODULE": "{MODULE_NAME} મોડ્યુલ માટે અપડેટ ઉપલબ્ધ છે.",
|
||||||
|
"UPDATE_INFO_SINGLE": "વર્તમાન ઇન્સ્ટોલેશન એ {BRANCH_NAME} શાખા ની {COMMIT_COUNT} કમીટ પાછળ છે. ",
|
||||||
|
"UPDATE_INFO_MULTIPLE": "વર્તમાન ઇન્સ્ટોલેશન એ {BRANCH_NAME} શાખા ની {COMMIT_COUNT} કમીટ પાછળ છે. ",
|
||||||
|
|
||||||
|
"FEELS": "જેવી લાગે છે",
|
||||||
|
"PRECIP": "PoP"
|
||||||
|
}
|
38
translations/hi.json
Normal file
38
translations/hi.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"LOADING": "लोड हो रहा है …",
|
||||||
|
|
||||||
|
"TODAY": "आज",
|
||||||
|
"TOMORROW": "आने वाला कल",
|
||||||
|
"DAYAFTERTOMORROW": "2 दिनों में",
|
||||||
|
"RUNNING": "में समाप्त",
|
||||||
|
"EMPTY": "कोई आगामी कार्यक्रम नहीं।",
|
||||||
|
|
||||||
|
"WEEK": "सप्ताह {weekNumber}",
|
||||||
|
|
||||||
|
"N": "उ",
|
||||||
|
"NNE": "उउपु",
|
||||||
|
"NE": "उपु",
|
||||||
|
"ENE": "पुउपु",
|
||||||
|
"E": "पु",
|
||||||
|
"ESE": "पुSपु",
|
||||||
|
"SE": "दपु",
|
||||||
|
"SSE": "ददपु",
|
||||||
|
"S": "द",
|
||||||
|
"SSW": "ददW",
|
||||||
|
"SW": "दW",
|
||||||
|
"WSW": "WदW",
|
||||||
|
"W": "प",
|
||||||
|
"WNW": "पउप",
|
||||||
|
"NW": "उप",
|
||||||
|
"NNW": "उउप",
|
||||||
|
|
||||||
|
"MODULE_CONFIG_CHANGED": "{MODULE_NAME} मॉड्यूल के लिए कॉन्फ़िगरेशन विकल्प बदल गए हैं। n कृपया दस्तावेज़ देखें।",
|
||||||
|
|
||||||
|
"UPDATE_NOTIFICATION": "MagicMirror² अपडेट उपलब्ध।",
|
||||||
|
"UPDATE_NOTIFICATION_MODULE": "{MODULE_NAME} मॉड्यूल के लिए उपलब्ध अद्यतन।",
|
||||||
|
"UPDATE_INFO_SINGLE": "वर्तमान स्थापना {COMMIT_COUNT} {BRANCH_NAME} शाखा के पीछे है।",
|
||||||
|
"UPDATE_INFO_MULTIPLE": "वर्तमान स्थापना {COMMIT_COUNT} पीछे {BRANCH_NAME} शाखा पर है।",
|
||||||
|
|
||||||
|
"FEELS": "की तरह लगना",
|
||||||
|
"PRECIP": "PoP"
|
||||||
|
}
|
@ -14,6 +14,7 @@ var translations = {
|
|||||||
fy: "translations/fy.json", // Frysk
|
fy: "translations/fy.json", // Frysk
|
||||||
es: "translations/es.json", // Spanish
|
es: "translations/es.json", // Spanish
|
||||||
ca: "translations/ca.json", // Catalan
|
ca: "translations/ca.json", // Catalan
|
||||||
|
cv: "translations/cv.json", // Chuvash
|
||||||
nb: "translations/nb.json", // Norsk bokmål
|
nb: "translations/nb.json", // Norsk bokmål
|
||||||
nn: "translations/nn.json", // Norsk nynorsk
|
nn: "translations/nn.json", // Norsk nynorsk
|
||||||
pt: "translations/pt.json", // Português
|
pt: "translations/pt.json", // Português
|
||||||
@ -43,7 +44,9 @@ var translations = {
|
|||||||
tlh: "translations/tlh.json", // Klingon
|
tlh: "translations/tlh.json", // Klingon
|
||||||
"ms-my": "translations/ms-my.json", // Malay
|
"ms-my": "translations/ms-my.json", // Malay
|
||||||
he: "translations/he.json", // Hebrew
|
he: "translations/he.json", // Hebrew
|
||||||
uk: "translations/uk.json" // Ukrainian
|
uk: "translations/uk.json", // Ukrainian
|
||||||
|
hi: "translations/hi.json", // Hindi
|
||||||
|
gu: "translations/gu.json" // Gujarati
|
||||||
};
|
};
|
||||||
|
|
||||||
if (typeof module !== "undefined") {
|
if (typeof module !== "undefined") {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user