Compare commits

...

88 Commits

Author SHA1 Message Date
Michael Teeuw
5d9d71dee8 Merge pull request #373 from MichMich/develop
Release of 2.0.3.
2016-07-12 15:55:34 +02:00
Michael Teeuw
1f558d46a4 Add version number for 2.0.3 release. 2016-07-12 15:42:10 +02:00
Michael Teeuw
36eb899c3b Merge pull request #372 from KirAsh4/upstream-dev
Analog clock addition
2016-07-10 13:39:19 +02:00
Ashley M. Kirchner
e223d752cb Fixed README typo
(cherry picked from commit 368dc5d9b87da7ebdbc80f2fe7fcfc6a86e04b71)
2016-07-09 19:40:54 -06:00
Ashley M. Kirchner
fcb503e885 Switched to SVG graphics for scalability
(cherry picked from commit 15f0956b60ec0d16302875bd53dcc037581ad96b)
2016-07-09 19:37:00 -06:00
Ashley M. Kirchner
c1055234d8 Switched to SVG graphics for scalability
(cherry picked from commit 6cb43cac824d57e0ebafc3b00bb15104ff78d4be)
2016-07-09 19:36:52 -06:00
Ashley M. Kirchner
35ec98cf13 Analog clock addition
(cherry picked from commit 5032967343aec2d1a1d66f2ed26dce8b84d8cf37)
2016-07-09 19:36:44 -06:00
Ashley M. Kirchner
66a9138666 Analog clock addition
(cherry picked from commit 6af2ce07a17c6456c3a328133db48c2201345f6d)
2016-07-09 19:36:36 -06:00
Ashley M. Kirchner
279582ff21 Analog clock addition
(cherry picked from commit 9c7da4c24ee50b51e1e3ab513f73caadf3985e84)
2016-07-09 19:36:28 -06:00
Ashley M. Kirchner
a9540ffabe Analog clock addition
(cherry picked from commit 7bae93fdb2744b0deab84882506a333ff809b3a3)
2016-07-09 19:36:20 -06:00
Ashley M. Kirchner
8f02cb83ed Analog clock addition
(cherry picked from commit e7e7c6494d2cbf739069f8d77278b9241ae6aeec)
2016-07-09 19:36:13 -06:00
Ashley M. Kirchner
5e94c8be7b Analog clock addition
(cherry picked from commit f01b6325ed1784f1bebc3fc755da01e6fda60070)
2016-07-09 19:36:02 -06:00
Michael Teeuw
ea6e9af5da Change Requirements. 2016-07-09 17:22:06 +02:00
Michael Teeuw
1bb72262ba Merge pull request #366 from KirAsh4/upstream-dev
Removed 'null' setting
2016-07-01 19:58:43 +02:00
Ashley M. Kirchner
61ace7bd97 CHANGELOG update 2016-07-01 11:57:24 -06:00
Ashley M. Kirchner
1a417cc36f CHANGELOG update 2016-07-01 11:51:42 -06:00
Ashley M. Kirchner
00a11f4343 Removed 'null' setting 2016-07-01 11:33:32 -06:00
Michael Teeuw
491bbacddd Merge pull request #365 from gzot/develop
Fix issue #300
2016-06-27 18:46:33 +02:00
GzoT
1b9daa0adb Fix #300 2016-06-27 16:34:51 +00:00
GzoT
ccdc981756 small fix 2016-06-27 16:15:53 +00:00
GzoT
b44dcc9f30 Not display title and/or message if they are not provided (alert module) 2016-06-24 09:15:12 +00:00
Michael Teeuw
479ceb14e4 Merge pull request #361 from matt08/patch-2
Added polish translation
2016-06-09 20:40:50 +02:00
matt08
50e41d1999 Update CHANGELOG.md 2016-06-09 13:57:46 +02:00
matt08
f6e2073de0 Added polish translation 2016-06-09 13:56:41 +02:00
matt08
271aab9746 Polish translation 2016-06-09 13:53:55 +02:00
Michael Teeuw
8d9bf5cf17 Update CHANGELOG.md 2016-06-07 16:46:32 +02:00
Michael Teeuw
ceb7ed093e Merge pull request #359 from simonsmh/patch-1
Simplified Chinese, Traditional Chinese, Japanese
2016-06-07 16:44:15 +02:00
Simon Shi
abdbcbb741 Update ja.json
@aidasan
2016-06-07 22:24:58 +08:00
Simon Shi
51ac07cd34 Update translations.js
@aidasan
2016-06-07 22:23:17 +08:00
Simon Shi
4b29698c6c Create ja.json 2016-06-07 22:22:22 +08:00
Simon Shi
f93285846a Update translations.js 2016-06-07 21:51:35 +08:00
Simon Shi
44347db52e Rename zh_cn.js to zh_cn.json 2016-06-07 21:50:21 +08:00
Simon Shi
f2749ff17f Create zh_tw.json 2016-06-07 21:50:18 +08:00
Simon Shi
3735342dfa Create zh_cn.js 2016-06-07 21:44:34 +08:00
Michael Teeuw
fed6e1e82f Update CHANGELOG.md 2016-06-06 12:09:17 +02:00
Michael Teeuw
58a59b624a Merge pull request #356 from MichMich/master
Update default titleReplace.
2016-06-06 12:08:02 +02:00
Michael Teeuw
1338918a89 Update default titleReplace. 2016-06-06 12:05:41 +02:00
Michael Teeuw
831e7cdb3f Update CHANGELOG.md 2016-06-06 11:35:31 +02:00
Michael Teeuw
2b8583e652 Merge pull request #355 from Sonaryr/add-max-newsitems-parameter
Add max newsitems parameter to the newsfeed module
2016-06-06 11:34:07 +02:00
Maarten Schroeven
b0220e4200 Update README to explain new parameter 2016-06-06 00:18:01 +02:00
Maarten Schroeven
0d94ef10ce add maxNewsItems config
Added extra config parameter to limit the amount of news items this module cycles through.
2016-06-06 00:16:49 +02:00
Michael Teeuw
544a1381fc Merge pull request #353 from MichMich/develop
Update to 2.0.2
2016-06-05 12:06:27 +02:00
Michael Teeuw
bc17ef896e Update CHANGELOG.md 2016-06-05 12:03:00 +02:00
Michael Teeuw
0bcbf999fb Update CHANGELOG.md 2016-06-05 09:25:36 +02:00
Michael Teeuw
0c4c44f4b6 Merge pull request #352 from KirAsh4/develop
Added proper User-Agent string to Facebook calendar call, and various…
2016-06-05 09:24:47 +02:00
Ashley M. Kirchner
486956b762 Added proper User-Agent string to Facebook calendar call, and various fixed spelling of 'exist'. 2016-06-04 20:32:55 -06:00
Michael Teeuw
8d1ef5291f Add Fix info and. 2016-06-04 21:42:05 +02:00
Michael Teeuw
611627ca97 Fix NE translations for all languages. 2016-06-04 21:36:03 +02:00
Michael Teeuw
732225b781 Merge pull request #345 from OskarKlintrot/patch-1
Adding reference to the Italian language file
2016-06-04 20:18:48 +02:00
Oskar Klintrot
58f88075c8 Adding reference to the Italian language file 2016-05-29 13:15:04 +02:00
Michael Teeuw
e17ef5eccf Merge pull request #343 from OskarKlintrot/develop
Added Swedish translation
2016-05-28 07:58:40 +02:00
OskarKlintrot
70c697f094 Added Swedish translation 2016-05-27 19:04:53 +02:00
Michael Teeuw
4b5625e0b4 Update CHANGELOG.md 2016-05-26 12:03:29 +02:00
Michael Teeuw
7df48870df Merge pull request #341 from mochman/weather-update
Weather update
2016-05-26 12:01:55 +02:00
mochman
4a309c49e5 Updated README.md 2016-05-25 15:47:22 -05:00
mochman
b45899bf90 Updated weather to get a locationID 2016-05-25 15:23:29 -05:00
Michael Teeuw
5ae3c8acfe Merge pull request #337 from EdgardosReis/develop
Portuguese translation
2016-05-21 16:41:38 +02:00
EdgardosReis
ef5df5f01b Update CHANGELOG.md 2016-05-21 15:37:00 +01:00
EdgardosReis
9af7451a61 Update translations.js
portuguese translation
2016-05-21 15:33:47 +01:00
EdgardosReis
7048c550b7 Create pt.json
portuguese translation
2016-05-21 15:33:04 +01:00
Michael Teeuw
f035627f42 Update CHANGELOG.md 2016-05-20 12:32:14 +02:00
Michael Teeuw
7659ff1f77 Merge pull request #335 from RemiHansen/master
Norwegian translations
2016-05-20 12:31:52 +02:00
RemiHansen
3df4062a55 Norwegian translation (nb and nn) 2016-05-20 01:22:45 +02:00
RemiHansen
02bbbe668b Changelog updated 2016-05-19 23:37:32 +02:00
RemiHansen
2b82c8fdc9 Norwegian translation for MM2 2016-05-19 23:26:56 +02:00
Michael Teeuw
93abaed0c2 Merge pull request #333 from MichMich/develop
v2.0.1
2016-05-18 11:04:31 +02:00
Michael Teeuw
b7fff6d452 Update CHANGELOG.md 2016-05-18 11:03:19 +02:00
Michael Teeuw
d09f01db90 Update PULL_REQUEST_TEMPLATE.md 2016-05-13 22:06:07 +02:00
Michael Teeuw
e0c1a58b84 Italian Translation 2016-05-13 22:01:51 +02:00
Michael Teeuw
1b82649cca Merge pull request #326 from MichMich/master
Italian translation.
2016-05-13 22:00:28 +02:00
Michael Teeuw
9317e2a36b Merge pull request #325 from iosonopersia/master
Italian translation
2016-05-13 21:54:48 +02:00
iosonopersia
51aff8ccdc Italian translation 2016-05-13 20:45:55 +02:00
iosonopersia
bdd3ea45af Added italian language 2016-05-13 20:42:56 +02:00
Michael Teeuw
3eb5c77ac4 Merge pull request #323 from MichMich/master
Remove BETA warning.
2016-05-13 10:21:19 +02:00
Michael Teeuw
ccc85784c6 Remove BETA warning. 2016-05-13 10:20:37 +02:00
Michael Teeuw
46806e8607 Merge pull request #322 from MichMich/master
Update PULL_REQUEST_TEMPLATE.md
2016-05-13 09:13:15 +02:00
Michael Teeuw
95f914d6bd Update PULL_REQUEST_TEMPLATE.md 2016-05-13 09:12:26 +02:00
Michael Teeuw
0f86011106 Create CHANGELOG.md 2016-05-13 09:10:54 +02:00
Michael Teeuw
acdd3c0602 Merge pull request #321 from jordi2830/patch-1
Fetch the latest Node.js without any 3rd party interferences
2016-05-13 07:35:04 +02:00
Jordi De Poortere
05b7237add Fixing various typo's in the installer 2016-05-13 00:02:36 +02:00
Jordi De Poortere
51f4e9e160 Get the latest Node.js
This will get the latest Node.js from the selected branch.
I do recommend only using a stable and tested version as newer ones might break MM.
Branch can be changed by simply editing the NODE_STABLE_BRANCH variable.

By using this setup script, Node.js will be downloaded from the official repository provided by NodeSource.
2016-05-12 23:39:11 +02:00
Michael Teeuw
7bbac35d6b Merge pull request #317 from MichMich/master
Fix installer URL.
2016-05-12 14:47:53 +02:00
Michael Teeuw
d280fe457c Fix installer URL. 2016-05-12 14:47:36 +02:00
Michael Teeuw
b5772af4c3 Merge pull request #316 from MichMich/master
Merge master changes.
2016-05-12 13:31:35 +02:00
Michael Teeuw
7ab79bb76e Update PULL_REQUEST_TEMPLATE.md 2016-05-12 13:30:41 +02:00
Michael Teeuw
00e3cc26de Update ISSUE_TEMPLATE.md 2016-05-12 13:29:59 +02:00
Michael Teeuw
4b491c43ff Update CONTRIBUTING.md 2016-05-12 13:29:36 +02:00
Michael Teeuw
41233a933e Merge pull request #315 from MichMich/master
v2-beta references.
2016-05-12 13:04:45 +02:00
54 changed files with 811 additions and 158 deletions

View File

@@ -31,3 +31,29 @@ To run StyleLint, use `npm run stylelint`.
We use [NU Validator](https://validator.w3.org/nu) to validate our HTML. The configuration is in the command in the package.json file.
To run HTML Validator, use `npm run htmlvalidator`.
## Submitting Issues
Please only submit reproducible issues.
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 - Problems installing or configuring your MagicMirror? Check out: https://forum.magicmirror.builders/category/10/troubleshooting
When submitting a new issue, please supply the following information:
**Platform** [ Raspberry Pi 2/3, Windows, Mac OS X, Linux, Etc ... ]:
**Node Version** [ 0.12.13 or later ]:
**MagicMirror Version** [ V1 / V2-Beta ]:
**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.
**Steps to Reproduce:** List the step by step process to reproduce the issue.
**Expected Results:** Describe what you expected to see.
**Actual Results:** Describe what you actually saw.
**Configuration:** What does the used config.js file look like? (Don't forget to remove any sensitive information.)
**Additional Notes:** Provide any other relevant notes not previously mentioned (optional)

View File

@@ -1,2 +1,21 @@
* **Platform** [ Raspberry Pi 2/3, Windows, Mac OS X, Linux]:
* **Node Version** [ 0.12.13 or later ]:
Please only submit reproducible issues.
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 - Problems installing or configuring your MagicMirror? Check out: https://forum.magicmirror.builders/category/10/troubleshooting
**Platform** [ Raspberry Pi 2/3, Windows, Mac OS X, Linux, Etc ... ]:
**Node Version** [ 0.12.13 or later ]:
**MagicMirror Version** [ V1 / V2-Beta ]:
**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.
**Steps to Reproduce:** List the step by step process to reproduce the issue.
**Expected Results:** Describe what you expected to see.
**Actual Results:** Describe what you actually saw.
**Configuration:** What does the used config.js file look like? (Don't forget to remove any sensitive information.)
**Additional Notes:** Provide any other relevant notes not previously mentioned (optional)

View File

@@ -1,5 +1,9 @@
> Please send your PR's the develop branch.
> Don't forget to add the change to changelog.md.
* Does the pull request solve a **related** issue? [yes | no]
* If so, can you reference the issue?
* What does the pull request accomplish? (please list)
* If it includes major visual changes please add screenshots.

View File

@@ -2,8 +2,6 @@ language: node_js
node_js:
- "6"
- "5.1"
- "4"
- "0.12"
before_script:
- npm install grunt-cli -g
script: grunt
script: grunt

51
CHANGELOG.md Normal file
View File

@@ -0,0 +1,51 @@
# MagicMirror² Change Log
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [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)
- Removed 'null' reference from updateModuleContent(). This fixes recent Edge and Internet Explorer browser displays (Issue #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. [#334](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: http://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the

View File

@@ -13,8 +13,6 @@
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!
**NOTE:** This version is in currently in beta stage. Please use the master branch if you need a thoroughly tested version.
## Table Of Contents
- [Usage](#usage)
@@ -33,7 +31,7 @@ Electron, the app wrapper around MagicMirror², only supports the Raspberry Pi 2
Execute the following command on your Raspberry Pi to install MagicMirror²:
````
curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/installers/raspberry.sh | bash
curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh | bash
````
#### Manual Installation

View File

@@ -41,6 +41,7 @@ var config = {
position: 'top_right',
config: {
location: 'New York',
locationID: '', //ID from bulk.openweather.org/sample/
appid: 'YOUR_OPENWEATHER_API_KEY'
}
},
@@ -50,6 +51,7 @@ var config = {
header: 'Weather Forecast',
config: {
location: 'New York',
locationID: '5128581', //ID from bulk.openweather.org/sample/
appid: 'YOUR_OPENWEATHER_API_KEY'
}
},

View File

@@ -18,7 +18,7 @@ echo ' \$$$$$$ |'
echo ' \______/'
echo -e "\e[0m"
# Define the tested version of node.
# Define the tested version of Node.js.
NODE_TESTED="v5.1.0"
#Determine which Pi is running.
@@ -39,7 +39,7 @@ function command_exists () { type "$1" &> /dev/null ;}
echo -e "\e[96mInstalling helper tools ...\e[90m"
sudo apt-get install curl wget git build-essential unzip || exit
# Check if we need to install or upgrade node.
# Check if we need to install or upgrade Node.js.
echo -e "\e[96mCheck current Node installation ...\e[0m"
NODE_INSTALL=false
if command_exists node; then
@@ -60,63 +60,33 @@ if command_exists node; then
fi
else
echo -e "\e[92mNo Node upgrade nessecery.\e[0m"
echo -e "\e[92mNo Node.js upgrade nessecery.\e[0m"
fi
else
echo -e "\e[93mNode is not installed.\e[0m";
echo -e "\e[93mNode.js is not installed.\e[0m";
NODE_INSTALL=true
fi
# Install or upgare node if nessecery.
if $NODE_INSTALL; then
echo -e "\e[96mInstalling Node.js ...\e[90m"
echo -e "\e[96mStart Node download ...\e[0m"
#Fetch the latest version of Node.js.
#TODO: Is there a native way to fetch the latest node version?
echo -e "\e[39mRetrieving latest node version."
NODE_LATEST=$(curl -l http://api.jordidepoortere.com/nodejs-latest/ 2> /dev/null)
if [ "$NODE_LATEST" == "" ]; then
echo -e "\e[91mCould not retreive latest node version."
echo -e "\e[91mPlease try again or open an issue on GitHub."
exit
fi
echo -e "Latest node version: \e[1m$NODE_LATEST\e[0m"
#Construct the download URL.
DOWNLOAD_URL="https://nodejs.org/dist/latest/node-$NODE_LATEST-linux-$ARM.tar.gz"
#Create Download Directory
rm -Rf ~/.MagicMirrorNodeInstaller || exit
mkdir ~/.MagicMirrorNodeInstaller || exit
cd ~/.MagicMirrorNodeInstaller || exit
#Download Installer
echo -e "\e[39mDownloading node ... \e[90m"
if wget $DOWNLOAD_URL --no-verbose --show-progress; then
echo -e "\e[39mDownload complete."
else
echo -e "\e[91mCould not download node."
exit;
fi
#Unpack and copy.
echo -e "\e[96mStart Node installation ...\e[90m"
tar xvf node-$NODE_LATEST-linux-$ARM.tar.gz || exit
cd node* || exit
sudo cp -R * /usr/local || exit
#Cleanup
rm -Rf ~/.MagicMirrorNodeInstaller || exit
#Fetch the latest version of Node.js from the selected branch
#The NODE_STABLE_BRANCH variable will need to be manually adjusted when a new branch is released. (e.g. 7.x)
#Only tested (stable) versions are recommended as newer versions could break MagicMirror.
NODE_STABLE_BRANCH="6.x"
curl -sL https://deb.nodesource.com/setup_$NODE_STABLE_BRANCH | sudo -E bash -
sudo apt-get install -y nodejs
echo -e "\e[92mNode.js installation Done!\e[0m"
fi
#Install magic mirror
cd ~
if [ -d "$HOME/MagicMirror" ] ; then
echo -e "\e[93mIt seems like MagicMirror is allready installed."
echo -e "\e[93mIt seems like MagicMirror is already installed."
echo -e "To prevent overwriting, the installer will be aborted."
echo -e "Please rename the \e[1m~/MagicMirror\e[0m\e[93m folder and try again.\e[0m"
echo ""
@@ -143,6 +113,6 @@ else
fi
echo " "
echo -e "\e[92mWe're ready! Run \e[1m\e[97mDISPLAY=:0 npm start\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror."
echo -e "\e[92mWe're ready! Run \e[1m\e[97mDISPLAY=:0 npm start\e[0m\e[92m from the ~/MagicMirror directory to start your MagicMirror.\e[0m"
echo " "
echo " "

View File

@@ -144,7 +144,7 @@ var MM = (function() {
var moduleWrapper = document.getElementById(module.identifier);
var contentWrapper = moduleWrapper.getElementsByClassName("module-content")[0];
contentWrapper.innerHTML = null;
contentWrapper.innerHTML = "";
contentWrapper.appendChild(content);
};

View File

@@ -152,7 +152,7 @@ var Module = Class.extend({
},
/* socket()
* Returns a socket object. If it doesn"t exsist, it"s created.
* Returns a socket object. If it doesn"t exist, it"s created.
* It also registers the notification callback.
*/
socket: function() {

View File

@@ -298,7 +298,7 @@ If no translation is found, a fallback will be used. The fallback sequence is as
- 4. Translation as defined in core translation file of the fallback language (the first defined core translation file).
- 5. The key (identifier) of the translation.
When adding translations to your module, it's a good idea to see if an apropriate translation is already available in the [core translation files](https://github.com/MichMich/MagicMirror/tree/master/translations). This way, your module can benefit from the exsisting translations.
When adding translations to your module, it's a good idea to see if an apropriate translation is already available in the [core translation files](https://github.com/MichMich/MagicMirror/tree/master/translations). This way, your module can benefit from the existing translations.
**Example:**
````javascript

View File

@@ -35,9 +35,20 @@ Module.register("alert",{
},
show_notification: function(message) {
if (this.config.effect == "slide") {this.config.effect = this.config.effect + "-" + this.config.position;}
message = "<span class='thin' style='line-height: 35px; font-size:24px' color='#4A4A4A'>" + message.title + "</span><br /><span class='light' style='font-size:28px;line-height: 30px;'>" + message.message + "</span>";
msg = "";
if (message.title) {
msg += "<span class='thin' style='line-height: 35px; font-size:24px' color='#4A4A4A'>" + message.title + "</span>";
}
if (message.message){
if (msg != ""){
msg+= "<br />";
}
msg += "<span class='light' style='font-size:28px;line-height: 30px;'>" + message.message + "</span>";
}
new NotificationFx({
message: message,
message: msg,
layout: "growl",
effect: this.config.effect,
ttl: this.config.display_time
@@ -67,7 +78,19 @@ Module.register("alert",{
this.hide_alert(sender);
}
message = "<span class='light' style='line-height: 35px; font-size:30px' color='#4A4A4A'>" + params.title + "</span><br /><span class='thin' style='font-size:22px;line-height: 30px;'>" + params.message + "</span>";
//Display title and message only if they are provided in notification parameters
message ="";
if (params.title) {
message += "<span class='light' style='line-height: 35px; font-size:30px' color='#4A4A4A'>" + params.title + "</span>"
}
if (params.message) {
if (message != ""){
message += "<br />";
}
message += "<span class='thin' style='font-size:22px;line-height: 30px;'>" + params.message + "</span>";
}
//Store alert in this.alerts
this.alerts[sender.name] = new NotificationFx({
message: image + message,

View File

@@ -31,7 +31,8 @@ Module.register("calendar",{
},
],
titleReplace: {
"De verjaardag van ": ""
"De verjaardag van ": "",
"'s birthday": ""
},
},
@@ -49,7 +50,7 @@ Module.register("calendar",{
getTranslations: function() {
// The translations for the defaut modules are defined in the core translation files.
// Therefor we can just return false. Otherwise we should have returned a dictionairy.
// If you're trying to build yiur own module including translations, check out the documentation.
// If you're trying to build your own module including translations, check out the documentation.
return false;
},

View File

@@ -25,7 +25,12 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
clearTimeout(reloadTimer);
reloadTimer = null;
ical.fromURL(url, {}, function(err, data) {
var opts = {
headers: {
'User-Agent': 'Mozilla/5.0 (Node.js 6.0.0) MagicMirror/v2 (https://github.com/MichMich/MagicMirror/)'
}
}
ical.fromURL(url, opts, function(err, data) {
if (err) {
fetchFailedCallback(self, err);
scheduleTimer();
@@ -188,7 +193,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
};
/* broadcastItems()
* Broadcast the exsisting events.
* Broadcast the existing events.
*/
this.broadcastEvents = function() {
//console.log('Broadcasting ' + events.length + ' events.');

View File

@@ -30,8 +30,8 @@ module.exports = NodeHelper.create({
},
/* createFetcher(url, reloadInterval)
* Creates a fetcher for a new url if it doesn't exsist yet.
* Otherwise it reuses the exsisting one.
* Creates a fetcher for a new url if it doesn't exist yet.
* Otherwise it reuses the existing one.
*
* attribute url string - URL of the news feed.
* attribute reloadInterval number - Reload interval in milliseconds.
@@ -69,7 +69,7 @@ module.exports = NodeHelper.create({
self.fetchers[url] = fetcher;
} else {
//console.log('Use exsisting news fetcher for url: ' + url);
//console.log('Use existing news fetcher for url: ' + url);
fetcher = self.fetchers[url];
fetcher.broadcastEvents();
}

View File

@@ -66,5 +66,40 @@ The following properties can be configured:
<br><b>Default value:</b> <code>false</code>
</td>
</tr>
<tr>
<td><code>displayType</code></td>
<td>Display a digital clock, analog clock, or both together.<br>
<br><b>Possible values:</b> <code>digital</code>, <code>analog</code>, or <code>both</code>
<br><b>Default value:</b> <code>digital</code>
</td>
</tr>
<tr>
<td><code>analogSize</code></td>
<td><strong>Specific to the analog clock.</strong> Defines how large the analog display is.<br>
<br><b>Possible values:</b> A positive number of pixels</code>
<br><b>Default value:</b> <code>200px</code>
</td>
</tr>
<tr>
<td><code>analogFace</code></td>
<td><strong>Specific to the analog clock.</strong> Specifies which clock face to use.<br>
<br><b>Possible values:</b> <code>simple</code> for a simple border, <code>none</code> for no face or border, or <code>face-###</code> (where ### is currently a value between 001 and 012, inclusive)
<br><b>Default value:</b> <code>simple</code>
</td>
</tr>
<tr>
<td><code>secondsColor</code></td>
<td><strong>Specific to the analog clock.</strong> Specifies what color to make the 'seconds' hand.<br>
<br><b>Possible values:</b> <code>any HTML RGB Color</code>
<br><b>Default value:</b> <code>#888888</code>
</td>
</tr>
<tr>
<td><code>analogPlacement</code></td>
<td><strong>Specific to the analog clock. <em>(requires displayType set to <code>'both'</code>)</em></strong> Specifies where the analog clock is in relation to the digital clock<br>
<br><b>Possible values:</b> <code>top</code>, <code>right</code>, <code>bottom</code>, or <code>left</code>
<br><b>Default value:</b> <code>bottom</code>
</td>
</tr>
</tbody>
</table>

View File

@@ -8,31 +8,51 @@
Module.register("clock",{
// Module config defaults.
defaults: {
displayType: 'digital', // options: digital, analog, both
timeFormat: config.timeFormat,
displaySeconds: true,
showPeriod: true,
showPeriodUpper: false,
clockBold: false
clockBold: false,
/* specific to the analog clock */
analogSize: '200px',
analogFace: 'simple', // options: 'none', 'simple', 'face-###' (where ### is 001 to 012 inclusive)
analogPlacement: 'bottom', // options: top, bottom, left, right
secondsColor: '#888888',
},
// Define required scripts.
getScripts: function() {
return ["moment.js"];
},
// Define styles.
getStyles: function() {
return ["clock_styles.css"];
},
// Define start sequence.
start: function() {
Log.info("Starting module: " + this.name);
// Schedule update interval.
var self = this;
setInterval(function() {
self.updateDom();
}, 1000);
// Set locale.
moment.locale(config.language);
},
// Override dom generator.
getDom: function() {
// Create wrappers.
var wrapper = document.createElement("div");
/************************************
* Create wrappers for DIGITAL clock
*/
var dateWrapper = document.createElement("div");
var timeWrapper = document.createElement("div");
var secondsWrapper = document.createElement("sup");
@@ -72,15 +92,127 @@ Module.register("clock",{
} else {
periodWrapper.innerHTML = moment().format("a");
}
// Combine wrappers.
wrapper.appendChild(dateWrapper);
wrapper.appendChild(timeWrapper);
if (this.config.displaySeconds) {
timeWrapper.appendChild(secondsWrapper);
}
if (this.config.showPeriod && this.config.timeFormat !== 24) {
timeWrapper.appendChild(periodWrapper);
}
if (this.config.displaySeconds) {
timeWrapper.appendChild(secondsWrapper);
}
if (this.config.showPeriod && this.config.timeFormat !== 24) {
timeWrapper.appendChild(periodWrapper);
}
/****************************************************************
* Create wrappers for ANALOG clock, only if specified in config
*/
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
var now = moment(),
second = now.seconds() * 6,
minute = now.minute() * 6 + second / 60,
hour = ((now.hours() % 12) / 12) * 360 + 90 + minute / 12;
// Create wrappers
var wrapper = document.createElement("div");
var clockCircle = document.createElement("div");
clockCircle.className = "clockCircle";
clockCircle.style.width = this.config.analogSize;
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.backgroundSize = "100%";
} else if (this.config.analogFace != 'none') {
clockCircle.style.border = "2px solid white";
}
var clockFace = document.createElement("div");
clockFace.className = "clockFace";
var clockHour = document.createElement("div");
clockHour.id = "clockHour";
clockHour.style.transform = "rotate(" + hour + "deg)";
clockHour.className = "clockHour";
var clockMinute = document.createElement("div");
clockMinute.id = "clockMinute";
clockMinute.style.transform = "rotate(" + minute + "deg)";
clockMinute.className = "clockMinute";
// Combine analog wrappers
clockFace.appendChild(clockHour);
clockFace.appendChild(clockMinute);
if (this.config.displaySeconds) {
var clockSecond = document.createElement("div");
clockSecond.id = "clockSecond";
clockSecond.style.transform = "rotate(" + second + "deg)";
clockSecond.className = "clockSecond";
clockSecond.style.backgroundColor = this.config.secondsColor;
clockFace.appendChild(clockSecond);
}
clockCircle.appendChild(clockFace);
}
/*******************************************
* Combine wrappers, check for .displayType
*/
if (this.config.displayType === 'digital') {
// Display only a digital clock
wrapper.appendChild(dateWrapper);
wrapper.appendChild(timeWrapper);
} else if (this.config.displayType === 'analog') {
// Display only an analog clock
dateWrapper.style.textAlign = "center";
dateWrapper.style.paddingBottom = "15px";
wrapper.appendChild(dateWrapper);
wrapper.appendChild(clockCircle);
} else {
// Both clocks have been configured, check position
var placement = this.config.analogPlacement;
analogWrapper = document.createElement("div");
analogWrapper.id = "analog";
analogWrapper.style.cssFloat = "none";
analogWrapper.appendChild(clockCircle);
digitalWrapper = document.createElement("div");
digitalWrapper.id = "digital";
digitalWrapper.style.cssFloat = "none";
digitalWrapper.appendChild(dateWrapper);
digitalWrapper.appendChild(timeWrapper);
if (placement === 'left' || placement === 'right') {
digitalWrapper.style.display = "inline-block";
digitalWrapper.style.verticalAlign = "top";
analogWrapper.style.display = "inline-block";
if (placement === 'left') {
analogWrapper.style.padding = "0 20px 0 0";
wrapper.appendChild(analogWrapper);
wrapper.appendChild(digitalWrapper);
} else {
analogWrapper.style.padding = "0 0 0 20px";
wrapper.appendChild(digitalWrapper);
wrapper.appendChild(analogWrapper);
}
} else {
digitalWrapper.style.textAlign = "center";
if (placement === 'top') {
analogWrapper.style.padding = "0 0 20px 0";
wrapper.appendChild(analogWrapper);
wrapper.appendChild(digitalWrapper);
} else {
analogWrapper.style.padding = "20px 0 0 0";
wrapper.appendChild(digitalWrapper);
wrapper.appendChild(analogWrapper);
}
}
}
// Return the wrapper to the dom.
return wrapper;
}

View File

@@ -0,0 +1,74 @@
#analog {
}
#digital {
}
.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;
-webkit-transform-origin: 100% 50%;
-ms-transform-origin: 100% 50%;
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;
-webkit-transform-origin: 50% 100%;
-ms-transform-origin: 50% 100%;
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: #888888;
-webkit-transform-origin: 50% 100%;
-ms-transform-origin: 50% 100%;
transform-origin: 50% 100%;
}

View File

@@ -0,0 +1 @@
<svg id="Hour_Markers_-_Singlets" data-name="Hour Markers - Singlets" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><defs><style>.cls-1,.cls-2{fill:none;stroke:#fff;stroke-linecap:round;stroke-miterlimit:10;}.cls-2{stroke-width:0.5px;}</style></defs><title>face-001</title><line class="cls-1" x1="125" y1="1.25" x2="125" y2="16.23"/><line class="cls-1" x1="186.87" y1="17.83" x2="179.39" y2="30.8"/><line class="cls-1" x1="232.17" y1="63.12" x2="219.2" y2="70.61"/><line class="cls-1" x1="248.75" y1="125" x2="233.77" y2="125"/><line class="cls-1" x1="232.17" y1="186.87" x2="219.2" y2="179.39"/><line class="cls-1" x1="186.88" y1="232.17" x2="179.39" y2="219.2"/><line class="cls-1" x1="125" y1="248.75" x2="125" y2="233.77"/><line class="cls-1" x1="63.13" y1="232.17" x2="70.61" y2="219.2"/><line class="cls-1" x1="17.83" y1="186.88" x2="30.8" y2="179.39"/><line class="cls-1" x1="1.25" y1="125" x2="16.23" y2="125"/><line class="cls-1" x1="17.83" y1="63.13" x2="30.8" y2="70.61"/><line class="cls-1" x1="63.12" y1="17.83" x2="70.61" y2="30.8"/><line class="cls-2" x1="138.01" y1="1.25" x2="136.96" y2="11.23"/><line class="cls-2" x1="150.87" y1="3.29" x2="148.78" y2="13.11"/><line class="cls-2" x1="163.45" y1="6.66" x2="160.35" y2="16.21"/><line class="cls-2" x1="175.61" y1="11.33" x2="171.53" y2="20.5"/><line class="cls-2" x1="198.14" y1="24.33" x2="192.24" y2="32.45"/><line class="cls-2" x1="208.26" y1="32.53" x2="201.54" y2="39.99"/><line class="cls-2" x1="217.47" y1="41.74" x2="210.01" y2="48.46"/><line class="cls-2" x1="225.67" y1="51.86" x2="217.55" y2="57.76"/><line class="cls-2" x1="238.67" y1="74.39" x2="229.5" y2="78.47"/><line class="cls-2" x1="243.34" y1="86.55" x2="233.79" y2="89.65"/><line class="cls-2" x1="246.71" y1="99.13" x2="236.89" y2="101.22"/><line class="cls-2" x1="248.75" y1="111.99" x2="238.77" y2="113.04"/><line class="cls-2" x1="248.75" y1="138.01" x2="238.77" y2="136.96"/><line class="cls-2" x1="246.71" y1="150.87" x2="236.89" y2="148.78"/><line class="cls-2" x1="243.34" y1="163.45" x2="233.79" y2="160.35"/><line class="cls-2" x1="238.67" y1="175.61" x2="229.5" y2="171.53"/><line class="cls-2" x1="225.67" y1="198.14" x2="217.55" y2="192.24"/><line class="cls-2" x1="217.47" y1="208.26" x2="210.01" y2="201.54"/><line class="cls-2" x1="208.26" y1="217.47" x2="201.54" y2="210.01"/><line class="cls-2" x1="198.14" y1="225.67" x2="192.24" y2="217.55"/><line class="cls-2" x1="175.61" y1="238.67" x2="171.53" y2="229.5"/><line class="cls-2" x1="163.45" y1="243.34" x2="160.35" y2="233.79"/><line class="cls-2" x1="150.87" y1="246.71" x2="148.78" y2="236.89"/><line class="cls-2" x1="138.01" y1="248.75" x2="136.96" y2="238.77"/><line class="cls-2" x1="111.99" y1="248.75" x2="113.04" y2="238.77"/><line class="cls-2" x1="99.13" y1="246.71" x2="101.22" y2="236.89"/><line class="cls-2" x1="86.55" y1="243.34" x2="89.65" y2="233.79"/><line class="cls-2" x1="74.39" y1="238.67" x2="78.47" y2="229.5"/><line class="cls-2" x1="51.86" y1="225.67" x2="57.76" y2="217.55"/><line class="cls-2" x1="41.74" y1="217.47" x2="48.46" y2="210.01"/><line class="cls-2" x1="32.53" y1="208.26" x2="39.99" y2="201.54"/><line class="cls-2" x1="24.33" y1="198.14" x2="32.45" y2="192.24"/><line class="cls-2" x1="11.33" y1="175.61" x2="20.5" y2="171.53"/><line class="cls-2" x1="6.66" y1="163.45" x2="16.21" y2="160.35"/><line class="cls-2" x1="3.29" y1="150.87" x2="13.11" y2="148.78"/><line class="cls-2" x1="1.25" y1="138.01" x2="11.23" y2="136.96"/><line class="cls-2" x1="1.25" y1="111.99" x2="11.23" y2="113.04"/><line class="cls-2" x1="3.29" y1="99.13" x2="13.11" y2="101.22"/><line class="cls-2" x1="6.66" y1="86.55" x2="16.21" y2="89.65"/><line class="cls-2" x1="11.33" y1="74.39" x2="20.5" y2="78.47"/><line class="cls-2" x1="24.33" y1="51.86" x2="32.45" y2="57.76"/><line class="cls-2" x1="32.53" y1="41.74" x2="39.99" y2="48.46"/><line class="cls-2" x1="41.74" y1="32.53" x2="48.46" y2="39.99"/><line class="cls-2" x1="51.86" y1="24.33" x2="57.76" y2="32.45"/><line class="cls-2" x1="74.39" y1="11.33" x2="78.47" y2="20.5"/><line class="cls-2" x1="86.55" y1="6.66" x2="89.65" y2="16.21"/><line class="cls-2" x1="99.13" y1="3.29" x2="101.22" y2="13.11"/><line class="cls-2" x1="111.99" y1="1.25" x2="113.04" y2="11.23"/></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1 @@
<svg id="Hour_Markers_-_Doubles" data-name="Hour Markers - Doubles" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#fff;stroke-linecap:round;stroke-miterlimit:10;stroke-width:2.98px;}</style></defs><title>face-002</title><line class="cls-1" x1="122.01" y1="1.75" x2="122.01" y2="16.67"/><line class="cls-1" x1="186.62" y1="18.26" x2="179.17" y2="31.18"/><line class="cls-1" x1="231.74" y1="63.37" x2="218.82" y2="70.83"/><line class="cls-1" x1="248.25" y1="127.99" x2="233.33" y2="127.99"/><line class="cls-1" x1="231.74" y1="186.62" x2="218.82" y2="179.17"/><line class="cls-1" x1="186.63" y1="231.74" x2="179.17" y2="218.82"/><line class="cls-1" x1="127.99" y1="248.25" x2="127.99" y2="233.33"/><line class="cls-1" x1="63.38" y1="231.74" x2="70.83" y2="218.82"/><line class="cls-1" x1="18.26" y1="186.63" x2="31.18" y2="179.17"/><line class="cls-1" x1="1.75" y1="122.01" x2="16.67" y2="122.01"/><line class="cls-1" x1="18.26" y1="63.38" x2="31.18" y2="70.83"/><line class="cls-1" x1="63.37" y1="18.26" x2="70.83" y2="31.18"/><line class="cls-1" x1="127.99" y1="1.75" x2="127.99" y2="16.67"/><line class="cls-1" x1="248.25" y1="122.01" x2="233.33" y2="122.01"/><line class="cls-1" x1="122.01" y1="248.25" x2="122.01" y2="233.33"/><line class="cls-1" x1="1.75" y1="127.99" x2="16.67" y2="127.99"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -14,6 +14,7 @@ modules: [
config: {
// See 'Configuration options' for more information.
location: 'Amsterdam,Netherlands',
locationID: '', //Location ID from http://bulk.openweather.org/sample/
appid: 'abcde12345abcde12345abcde12345ab' //openweathermap.org API key.
}
}
@@ -34,7 +35,7 @@ The following properties can be configured:
</tr>
<thead>
<tbody>
<tr>
<td><code>location</code></td>
<td>The location used for weather information.<br>
@@ -42,6 +43,13 @@ The following properties can be configured:
<br><b>Default value:</b> <code>New York</code>
</td>
</tr>
<tr>
<td><code>locationID</code></td>
<td>Location ID from <a href="http://bulk.openweather.org/sample/">OpenWeather</a> <b>This will override anything you put in location.</b><br>Leave blank if you want to use location.
<br><b>Example:</b> <code>1234567</code>
<br><b>Default value:</b> <code></code>
</td>
</tr>
<tr>
<td><code>appid</code></td>
<td>The <a href="https://home.openweathermap.org" target="_blank">OpenWeatherMap</a> API key, which can be obtained by creating an OpenWeatherMap account.<br>

View File

@@ -12,6 +12,7 @@ Module.register("currentweather",{
// Default module config.
defaults: {
location: "",
locationID: "",
appid: "",
units: config.units,
updateInterval: 10 * 60 * 1000, // every 10 minutes
@@ -198,7 +199,11 @@ Module.register("currentweather",{
*/
getParams: function() {
var params = "?";
params += "q=" + this.config.location;
if(this.config.locationID !== "") {
params += "id=" + this.config.locationID;
} else {
params += "q=" + this.config.location;
}
params += "&units=" + this.config.units;
params += "&lang=" + this.config.lang;
params += "&APPID=" + this.config.appid;

View File

@@ -101,7 +101,13 @@ The following properties can be configured:
<br><b>Default value:</b> <code>2000</code> (2.5 seconds)
</td>
</tr>
<tr>
<td><code>maxNewsItems</code></td>
<td>Total amount of news items to cycle through. (0 for unlimited)<br>
<br><b>Possible values:</b><code>0</code> - <code>...</code>
<br><b>Default value:</b> <code>0</code>
</td>
</tr>
</tbody>
</table>

View File

@@ -117,7 +117,7 @@ var Fetcher = function(url, reloadInterval, encoding) {
};
/* broadcastItems()
* Broadcast the exsisting items.
* Broadcast the existing items.
*/
this.broadcastItems = function() {
if (items.length <= 0) {

View File

@@ -24,6 +24,7 @@ Module.register("newsfeed",{
reloadInterval: 5 * 60 * 1000, // every 5 minutes
updateInterval: 10 * 1000,
animationSpeed: 2.5 * 1000,
maxNewsItems: 0 // 0 for unlimited
},
// Define required scripts.
@@ -151,7 +152,9 @@ Module.register("newsfeed",{
var dateB = new Date(b.pubdate);
return dateB - dateA;
});
if(this.config.maxNewsItems > 0) {
newsItems = newsItems.slice(0, this.config.maxNewsItems);
}
this.newsItems = newsItems;
},

View File

@@ -25,8 +25,8 @@ module.exports = NodeHelper.create({
},
/* createFetcher(url, reloadInterval)
* Creates a fetcher for a new url if it doesn't exsist yet.
* Otherwise it reoses the exsisting one.
* Creates a fetcher for a new url if it doesn't exist yet.
* Otherwise it reoses the existing one.
*
* attribute url string - URL of the news feed.
* attribute reloadInterval number - Reload interval in milliseconds.
@@ -62,7 +62,7 @@ module.exports = NodeHelper.create({
self.fetchers[url] = fetcher;
} else {
console.log("Use exsisting news fetcher for url: " + url);
console.log("Use existing news fetcher for url: " + url);
fetcher = self.fetchers[url];
fetcher.setReloadInterval(reloadInterval);
fetcher.broadcastItems();

View File

@@ -14,6 +14,7 @@ modules: [
config: {
// See 'Configuration options' for more information.
location: 'Amsterdam,Netherlands',
locationID: '', //Location ID from http://bulk.openweather.org/sample/
appid: 'abcde12345abcde12345abcde12345ab' //openweathermap.org API key.
}
}
@@ -42,6 +43,13 @@ The following properties can be configured:
<br><b>Default value:</b> <code>New York</code>
</td>
</tr>
<tr>
<td><code>locationID</code></td>
<td>Location ID from <a href="http://bulk.openweather.org/sample/">OpenWeather</a> <b>This will override anything you put in location.</b><br>Leave blank if you want to use location.
<br><b>Example:</b> <code>1234567</code>
<br><b>Default value:</b> <code></code>
</td>
</tr>
<tr>
<td><code>appid</code></td>
<td>The <a href="https://home.openweathermap.org" target="_blank">OpenWeatherMap</a> API key, which can be obtained by creating an OpenWeatherMap account.<br>

View File

@@ -12,6 +12,7 @@ Module.register("weatherforecast",{
// Default module config.
defaults: {
location: "",
locationID: "",
appid: "",
units: config.units,
maxNumberOfDays: 7,
@@ -195,7 +196,11 @@ Module.register("weatherforecast",{
*/
getParams: function() {
var params = "?";
params += "q=" + this.config.location;
if(this.config.locationID !== "") {
params += "id=" + this.config.locationID;
} else {
params += "q=" + this.config.location;
}
params += "&units=" + this.config.units;
params += "&lang=" + this.config.lang;
/*

View File

@@ -1,27 +1,28 @@
{
/* GENERAL */
"LOADING": "Lade &hellip;",
/* GENERAL */
"LOADING": "Lade &hellip;",
/* CALENDAR */
"TODAY": "Heute",
"TOMORROW": "Morgen",
"RUNNING": "noch",
"EMPTY": "Keine Termine.",
/* CALENDAR */
"TODAY": "Heute",
"TOMORROW": "Morgen",
"RUNNING": "noch",
"EMPTY": "Keine Termine.",
/* WEATHER */
"N": "N",
"NNE": "NNO",
"ENE": "ONO",
"E": "O",
"ESE": "OSO",
"SE": "SO",
"SSE": "SSO",
"S": "S",
"SSW": "SSW",
"SW": "SW",
"WSW": "WSW",
"W": "W",
"WNW": "WNW",
"NW": "NW",
"NNW": "NNW"
/* WEATHER */
"N": "N",
"NNE": "NNO",
"NE": "NO",
"ENE": "ONO",
"E": "O",
"ESE": "OSO",
"SE": "SO",
"SSE": "SSO",
"S": "S",
"SSW": "SSW",
"SW": "SW",
"WSW": "WSW",
"W": "W",
"WNW": "WNW",
"NW": "NW",
"NNW": "NNW"
}

View File

@@ -1,27 +1,28 @@
{
/* GENERAL */
"LOADING": "Loading &hellip;",
/* GENERAL */
"LOADING": "Loading &hellip;",
/* CALENDAR */
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"RUNNING": "Ends in",
"EMPTY": "No upcoming events.",
/* CALENDAR */
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"RUNNING": "Ends in",
"EMPTY": "No upcoming events.",
/* WEATHER */
"N": "N",
"NNE": "NNE",
"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"
/* WEATHER */
"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"
}

View File

@@ -11,6 +11,7 @@
/* WEATHER */
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",

View File

@@ -1,27 +1,28 @@
{
/* GENERAL */
"LOADING": "Chargement &hellip;",
/* GENERAL */
"LOADING": "Chargement &hellip;",
/* CALENDAR */
"TODAY": "Aujourd'hui",
"TOMORROW": "Demain",
"RUNNING": "Se termine dans",
"EMPTY": "Aucun RDV.",
/* CALENDAR */
"TODAY": "Aujourd'hui",
"TOMORROW": "Demain",
"RUNNING": "Se termine dans",
"EMPTY": "Aucun RDV.",
/* WEATHER */
"N": "N",
"NNE": "NNE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",
"SE": "SE",
"SSE": "SSE",
"S": "S",
"SSW": "SSO",
"SW": "SO",
"WSW": "OSO",
"W": "O",
"WNW": "ONO",
"NW": "NO",
"NNW": "NNO"
/* WEATHER */
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",
"SE": "SE",
"SSE": "SSE",
"S": "S",
"SSW": "SSO",
"SW": "SO",
"WSW": "OSO",
"W": "O",
"WNW": "ONO",
"NW": "NO",
"NNW": "NNO"
}

View File

@@ -11,6 +11,7 @@
/* WEATHER */
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",

28
translations/it.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "Caricamento in corso &hellip;",
/* CALENDAR */
"TODAY": "Oggi",
"TOMORROW": "Domani",
"RUNNING": "Termina entro",
"EMPTY": "Nessun evento in arrivo.",
/* WEATHER */
"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"
}

28
translations/ja.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "ローディング &hellip;",
/* CALENDAR */
"TODAY":"今日",
"TOMORROW":"明日",
"RUNNING":"で終わります",
"EMPTY":"直近のイベントはありません",
/* WEATHER */
"N":"北",
"NNE":"北北東",
"NE":"北東",
"ENE":"東北東",
"E":"東",
"ESE":"東南東",
"SE":"南東",
"SSE":"南南東",
"S":"南",
"SSW":"南南西",
"SW":"南西",
"WSW":"西南西",
"W":"西",
"WNW":"西北西",
"NW":"北西",
"NNW":"北北西"
}

28
translations/nb.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "Laster &hellip;",
/* CALENDAR */
"TODAY": "I dag",
"TOMORROW": "I morgen",
"RUNNING": "Slutter om",
"EMPTY": "Ingen kommende arrangementer.",
/* WEATHER */
"N": "N",
"NNE": "NNØ",
"NE": "NØ",
"ENE": "ØNØ",
"E": "Ø",
"ESE": "ØSØ",
"SE": "SØ",
"SSE": "SSØ",
"S": "S",
"SSW": "SSV",
"SW": "SV",
"WSW": "VSV",
"W": "V",
"WNW": "VNV",
"NW": "NV",
"NNW": "NNV"
}

View File

@@ -11,6 +11,7 @@
/* WEATHER */
"N": "N",
"NNE": "NNO",
"NE": "NO",
"ENE": "ONO",
"E": "O",
"ESE": "OZO",

28
translations/nn.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "Lastar &hellip;",
/* CALENDAR */
"TODAY": "I dag",
"TOMORROW": "I morgon",
"RUNNING": "Sluttar om",
"EMPTY": "Ingen komande hendingar.",
/* WEATHER */
"N": "N",
"NNE": "NNA",
"NE": "NA",
"ENE": "ANA",
"E": "A",
"ESE": "ASA",
"SE": "SA",
"SSE": "SSA",
"S": "S",
"SSW": "SSV",
"SW": "SV",
"WSW": "VSV",
"W": "V",
"WNW": "VNV",
"NW": "NV",
"NNW": "NNV"
}

28
translations/pl.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "Ładowanie &hellip;",
/* CALENDAR */
"TODAY": "Dziś",
"TOMORROW": "Jutro",
"RUNNING": "Koniec za",
"EMPTY": "Brak wydarzeń.",
/* WEATHER */
"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"
}

28
translations/pt.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "A carregar &hellip;",
/* CALENDAR */
"TODAY": "Hoje",
"TOMORROW": "Amanhã",
"RUNNING": "Termina em",
"EMPTY": "Sem eventos a chegar.",
/* WEATHER */
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",
"SE": "SE",
"SSE": "SSE",
"S": "S",
"SSW": "SSO",
"SW": "SO",
"WSW": "OSO",
"W": "O",
"WNW": "ONO",
"NW": "NO",
"NNW": "NNO"
}

28
translations/sv.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "Laddar &hellip;",
/* CALENDAR */
"TODAY": "Idag",
"TOMORROW": "Imorgon",
"RUNNING": "Slutar",
"EMPTY": "Inga kommande händelser.",
/* WEATHER */
"N": "N",
"NNE": "NNO",
"NE": "NO",
"ENE": "ONO",
"E": "Ö",
"ESE": "OSO",
"SE": "SO",
"SSE": "SSO",
"S": "S",
"SSW": "SSV",
"SW": "SV",
"WSW": "VSV",
"W": "V",
"WNW": "VNV",
"NW": "NV",
"NNW": "NNV"
}

View File

@@ -6,10 +6,20 @@
*/
var translations = {
"en" : "translations/en.json",
"nl" : "translations/nl.json",
"de" : "translations/de.json",
"fr" : "translations/fr.json",
"fy" : "translations/fy.json",
"es" : "translations/es.json",
"en" : "translations/en.json", // English
"nl" : "translations/nl.json", // Dutch
"de" : "translations/de.json", // German
"fr" : "translations/fr.json", // French
"fy" : "translations/fy.json", // Frysk
"es" : "translations/es.json", // Spanish
"nb" : "translations/nb.json", // Norsk bokmål
"nn" : "translations/nn.json", // Norsk nynorsk
"pt" : "translations/pt.json", // Português
"sv" : "translations/sv.json", // Svenska
"it" : "translations/it.json", // Italian
"zh_cn" : "translations/zh_cn.json", // Simplified Chinese
"zh_tw" : "translations/zh_tw.json", // Traditional Chinese
"ja" : "translations/ja.json", // Japanese
"pl" : "translations/pl.json", // Polish
};

28
translations/zh_cn.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "正在加载 &hellip;",
/* CALENDAR */
"TODAY": "今天",
"TOMORROW": "明天",
"RUNNING": "结束日期",
"EMPTY": "没有更多的活动。",
/* WEATHER */
"N": "北风",
"NNE": "北偏东风",
"NE": "东北风",
"ENE": "东偏北风",
"E": "东风",
"ESE": "东偏南风",
"SE": "东南风",
"SSE": "南偏东风",
"S": "南风",
"SSW": "南偏西风",
"SW": "西南风",
"WSW": "西偏南风",
"W": "西风",
"WNW": "西偏北风",
"NW": "西北风",
"NNW": "北偏西风"
}

28
translations/zh_tw.json Normal file
View File

@@ -0,0 +1,28 @@
{
/* GENERAL */
"LOADING": "正在加載 &hellip;",
/* CALENDAR */
"TODAY": "今天",
"TOMORROW": "明天",
"RUNNING": "結束日期",
"EMPTY": "沒有更多的活動。",
/* WEATHER */
"N": "北風",
"NNE": "北偏東風",
"NE": "東北風",
"ENE": "東偏北風",
"E": "東風",
"ESE": "東偏南風",
"SE": "東南風",
"SSE": "南偏東風",
"S": "南風",
"SSW": "南偏西風",
"SW": "西南風",
"WSW": "西偏南風",
"W": "西風",
"WNW": "西偏北風",
"NW": "西北風",
"NNW": "北偏西風"
}