volto-aemet 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changelog.draft +3 -0
- package/.release-it.json +34 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +323 -0
- package/babel.config.js +17 -0
- package/locales/de/LC_MESSAGES/volto.po +83 -0
- package/locales/en/LC_MESSAGES/volto.po +83 -0
- package/locales/es/LC_MESSAGES/volto.po +90 -0
- package/locales/pt_BR/LC_MESSAGES/volto.po +88 -0
- package/locales/volto.pot +85 -0
- package/news/.gitkeep +0 -0
- package/package.json +47 -0
- package/public/.gitkeep +0 -0
- package/src/components/Aemet/Weather.js +289 -0
- package/src/components/Aemet/Weather.test.js +398 -0
- package/src/components/Aemet/WeatherCurrent.jsx +97 -0
- package/src/components/Aemet/WeatherCurrent.test.jsx +282 -0
- package/src/components/Aemet/index.js +9 -0
- package/src/components/Blocks/AemetWeatherCurrent/View.jsx +11 -0
- package/src/components/Blocks/AemetWeatherForecast/Edit.jsx +72 -0
- package/src/components/Blocks/AemetWeatherForecast/View.jsx +32 -0
- package/src/components/Blocks/AemetWeatherForecast/messages.js +36 -0
- package/src/components/Blocks/AemetWeatherForecast/schema.js +37 -0
- package/src/config/blocks.ts +70 -0
- package/src/config/settings.ts +16 -0
- package/src/icons/aemet-logo.svg +311 -0
- package/src/icons/weather/temps/11.png +0 -0
- package/src/icons/weather/temps/11n.png +0 -0
- package/src/icons/weather/temps/12.png +0 -0
- package/src/icons/weather/temps/12n.png +0 -0
- package/src/icons/weather/temps/13.png +0 -0
- package/src/icons/weather/temps/13n.png +0 -0
- package/src/icons/weather/temps/14.png +0 -0
- package/src/icons/weather/temps/14n.png +0 -0
- package/src/icons/weather/temps/15.png +0 -0
- package/src/icons/weather/temps/15n.png +0 -0
- package/src/icons/weather/temps/16.png +0 -0
- package/src/icons/weather/temps/16n.png +0 -0
- package/src/icons/weather/temps/17.png +0 -0
- package/src/icons/weather/temps/17n.png +0 -0
- package/src/icons/weather/temps/23.png +0 -0
- package/src/icons/weather/temps/23n.png +0 -0
- package/src/icons/weather/temps/24.png +0 -0
- package/src/icons/weather/temps/24n.png +0 -0
- package/src/icons/weather/temps/25.png +0 -0
- package/src/icons/weather/temps/25n.png +0 -0
- package/src/icons/weather/temps/26.png +0 -0
- package/src/icons/weather/temps/26n.png +0 -0
- package/src/icons/weather/temps/33.png +0 -0
- package/src/icons/weather/temps/33n.png +0 -0
- package/src/icons/weather/temps/34.png +0 -0
- package/src/icons/weather/temps/34n.png +0 -0
- package/src/icons/weather/temps/35.png +0 -0
- package/src/icons/weather/temps/35n.png +0 -0
- package/src/icons/weather/temps/36.png +0 -0
- package/src/icons/weather/temps/36n.png +0 -0
- package/src/icons/weather/temps/43.png +0 -0
- package/src/icons/weather/temps/43n.png +0 -0
- package/src/icons/weather/temps/44.png +0 -0
- package/src/icons/weather/temps/44n.png +0 -0
- package/src/icons/weather/temps/45.png +0 -0
- package/src/icons/weather/temps/45n.png +0 -0
- package/src/icons/weather/temps/46.png +0 -0
- package/src/icons/weather/temps/46n.png +0 -0
- package/src/icons/weather/temps/51.png +0 -0
- package/src/icons/weather/temps/51n.png +0 -0
- package/src/icons/weather/temps/52.png +0 -0
- package/src/icons/weather/temps/52n.png +0 -0
- package/src/icons/weather/temps/53.png +0 -0
- package/src/icons/weather/temps/54.png +0 -0
- package/src/icons/weather/temps/54n.png +0 -0
- package/src/icons/weather/temps/61.png +0 -0
- package/src/icons/weather/temps/61n.png +0 -0
- package/src/icons/weather/temps/62.png +0 -0
- package/src/icons/weather/temps/62n.png +0 -0
- package/src/icons/weather/temps/63.png +0 -0
- package/src/icons/weather/temps/63n.png +0 -0
- package/src/icons/weather/temps/64.png +0 -0
- package/src/icons/weather/temps/64n.png +0 -0
- package/src/icons/weather/temps/71.png +0 -0
- package/src/icons/weather/temps/71n.png +0 -0
- package/src/icons/weather/temps/72.png +0 -0
- package/src/icons/weather/temps/72n.png +0 -0
- package/src/icons/weather/temps/73.png +0 -0
- package/src/icons/weather/temps/74.png +0 -0
- package/src/index.ts +24 -0
- package/src/theme/components/_weather_current.scss +69 -0
- package/src/theme/main.scss +3 -0
- package/towncrier.toml +33 -0
- package/tsconfig.json +30 -0
package/.changelog.draft
ADDED
package/.release-it.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"plugins": {
|
|
3
|
+
"../../core/packages/scripts/prepublish.js": {}
|
|
4
|
+
},
|
|
5
|
+
"hooks": {
|
|
6
|
+
"after:bump": [
|
|
7
|
+
"pipx run towncrier build --draft --yes --version ${version} > .changelog.draft",
|
|
8
|
+
"pipx run towncrier build --yes --version ${version}",
|
|
9
|
+
"cp ../../README.md ./ && cp CHANGELOG.md ../../CHANGELOG.md",
|
|
10
|
+
"python3 -c 'import json; data = json.load(open(\"../../package.json\")); data[\"version\"] = \"${version}\"; json.dump(data, open(\"../../package.json\", \"w\"), indent=2)'",
|
|
11
|
+
"git add ../../CHANGELOG.md ../../package.json"
|
|
12
|
+
],
|
|
13
|
+
"after:release": [
|
|
14
|
+
"bash -c 'source ../../.env && curl -X POST -H \"Authorization: token $GITHUB_TOKEN\" -H \"Accept: application/vnd.github.v3+json\" https://api.github.com/repos/collective/volto-aemet/releases -d \"{\\\"tag_name\\\":\\\"${version}\\\",\\\"name\\\":\\\"${version}\\\",\\\"body\\\":\\\"$(cat ../../.changelog.draft | sed \\\"s/\\\"/\\\\\\\\\\\"/g\\\" | sed \\\":a;N;$!ba;s/\\n/\\\\\\\\n/g\\\")\\\",\\\"prerelease\\\":${isPreRelease}}\"'",
|
|
15
|
+
"rm .changelog.draft README.md"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"npm": {
|
|
19
|
+
"publish": true
|
|
20
|
+
},
|
|
21
|
+
"git": {
|
|
22
|
+
"changelog": "pipx run towncrier build --draft --yes --version 0.0.0",
|
|
23
|
+
"requireUpstream": false,
|
|
24
|
+
"requireCleanWorkingDir": false,
|
|
25
|
+
"commitMessage": "Release ${version}",
|
|
26
|
+
"tagName": "${version}",
|
|
27
|
+
"tagAnnotation": "Release ${version}"
|
|
28
|
+
},
|
|
29
|
+
"github": {
|
|
30
|
+
"release": true,
|
|
31
|
+
"releaseName": "${version}",
|
|
32
|
+
"releaseNotes": "cat .changelog.draft"
|
|
33
|
+
}
|
|
34
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
<!-- You should *NOT* be adding new change log entries to this file.
|
|
4
|
+
You should create a file in the news directory instead.
|
|
5
|
+
For helpful instructions, please see:
|
|
6
|
+
https://6.docs.plone.org/contributing/index.html?highlight=towncrier#change-log-entry
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
<!-- towncrier release notes start -->
|
|
10
|
+
|
|
11
|
+
## 1.0.0-alpha.0 (2026-07-20)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, 2026 Leonardo J. Caballero G.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
# Volto AEMET Weather (volto-aemet)
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/volto-aemet)
|
|
4
|
+
[](https://collective.github.io/volto-aemet/)
|
|
5
|
+
[](https://github.com/collective/volto-aemet/actions/workflows/code.yml)
|
|
6
|
+
[](https://github.com/collective/volto-aemet/actions/workflows/unit.yml)
|
|
7
|
+
|
|
8
|
+
<a href="https://www.aemet.es/" title="Agencia Estatal de Meteorología - AEMET. Gobierno de España" target="_blank">
|
|
9
|
+
<img width="400" alt="Agencia Estatal de Meteorología - AEMET. Gobierno de España" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/_static/logo.svg">
|
|
10
|
+
</a>
|
|
11
|
+
|
|
12
|
+
A volto add-on that integrates AEMET service with Plone to report the weather forecast.
|
|
13
|
+
|
|
14
|
+
## Features
|
|
15
|
+
|
|
16
|
+
- Add a new `AEMET Weather Current` Volto content block.
|
|
17
|
+
|
|
18
|
+
- Add a new `AEMET Weather Forecast` Volto content block.
|
|
19
|
+
|
|
20
|
+
- Add a new `AEMET Settings` Volto control panel.
|
|
21
|
+
|
|
22
|
+
- Add a new react component called `Weather`, that uses data from the AEMET service.
|
|
23
|
+
|
|
24
|
+
## Screenshots
|
|
25
|
+
|
|
26
|
+
**AEMET Weather Current Volto content block**
|
|
27
|
+
|
|
28
|
+
<img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/volto-content-block-aemet-weather-current.png">
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
**AEMET Weather Forecast Volto content block**
|
|
33
|
+
|
|
34
|
+
<img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/volto-content-block-aemet-weather-forecast.png">
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Backend integration
|
|
39
|
+
|
|
40
|
+
To use this product in Plone CMS, you needs to include the following add-on in your project: https://github.com/collective/collective.volto.aemet
|
|
41
|
+
|
|
42
|
+
## Translations
|
|
43
|
+
|
|
44
|
+
This product has been translated into
|
|
45
|
+
|
|
46
|
+
- English
|
|
47
|
+
|
|
48
|
+
- Spanish
|
|
49
|
+
|
|
50
|
+
## Installation
|
|
51
|
+
|
|
52
|
+
To install your project, you must choose the method appropriate to your version of Volto.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Volto 18 and later
|
|
56
|
+
|
|
57
|
+
Add `volto-aemet` to your `package.json`:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
"addons": [
|
|
61
|
+
"volto-aemet": "*"
|
|
62
|
+
]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"volto-aemet": "*"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Install from Github
|
|
72
|
+
|
|
73
|
+
If you trying to install from Github you need edit the `mrs.developer.json` file:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"volto-aemet": {
|
|
78
|
+
"develop": true,
|
|
79
|
+
"output": "./packages/",
|
|
80
|
+
"package": "volto-aemet",
|
|
81
|
+
"url": "git@github.com:collective/volto-aemet.git",
|
|
82
|
+
"https": "https://github.com/collective/volto-aemet.git",
|
|
83
|
+
"branch": "main"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The `mrs.developer.json` is using by an NodeJS utility called `mrs.developer` that makes
|
|
89
|
+
it easy to work with NPM projects containing lots of packages, of which you only want to
|
|
90
|
+
develop some.
|
|
91
|
+
|
|
92
|
+
Also add `volto-aemet` to your `package.json`:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
"addons": [
|
|
96
|
+
"volto-aemet": "*"
|
|
97
|
+
]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
"dependencies": {
|
|
102
|
+
"volto-aemet": "workspace:*",
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
### Volto 17 and earlier
|
|
108
|
+
|
|
109
|
+
Create a new Volto project (you can skip this step if you already have one):
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
npm install -g yo @plone/generator-volto
|
|
113
|
+
yo @plone/volto my-volto-project --addon volto-aemet
|
|
114
|
+
cd my-volto-project
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Add `volto-aemet` to your package.json:
|
|
118
|
+
|
|
119
|
+
```JSON
|
|
120
|
+
"addons": [
|
|
121
|
+
"volto-aemet"
|
|
122
|
+
],
|
|
123
|
+
|
|
124
|
+
"dependencies": {
|
|
125
|
+
"volto-aemet": "*"
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Download and install the new add-on by running:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
yarn install
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Start volto with:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
yarn start
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Test installation
|
|
142
|
+
|
|
143
|
+
Visit http://localhost:3000/ in a browser, login, and check the awesome new features.
|
|
144
|
+
|
|
145
|
+
## Use it
|
|
146
|
+
|
|
147
|
+
To use this add-on, go to the `Site setup`, next to the ``Add-on Configuration`` icon, as shown below:
|
|
148
|
+
|
|
149
|
+
<img width="290" alt="Add-on Configuration" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/addon-configuration-aemet-icon.png">
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
This `AEMET Settings`, you can access the control panel, as shown below:
|
|
154
|
+
|
|
155
|
+
<img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/aemet-settings.png">
|
|
156
|
+
|
|
157
|
+
In this control panel, you can configure the following fields:
|
|
158
|
+
|
|
159
|
+
- ``Location ID``, The Location ID of the AEMET service, for example '41091' to Sevilla location ID.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
## Development
|
|
165
|
+
|
|
166
|
+
The development of this add-on is done in isolation using a new approach using pnpm workspaces and latest `mrs-developer` and other Volto core improvements.
|
|
167
|
+
For this reason, it only works with pnpm and Volto 18 (currently in alpha).
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Prerequisites ✅
|
|
171
|
+
|
|
172
|
+
- An [operating system](https://6.docs.plone.org/install/create-project-cookieplone.html#prerequisites-for-installation) that runs all the requirements mentioned.
|
|
173
|
+
- [nvm](https://6.docs.plone.org/install/create-project-cookieplone.html#nvm)
|
|
174
|
+
- [Node.js and pnpm](https://6.docs.plone.org/install/create-project.html#node-js) 22
|
|
175
|
+
- [Make](https://6.docs.plone.org/install/create-project-cookieplone.html#make)
|
|
176
|
+
- [Git](https://6.docs.plone.org/install/create-project-cookieplone.html#git)
|
|
177
|
+
- [Docker](https://docs.docker.com/get-started/get-docker/) (optional)
|
|
178
|
+
|
|
179
|
+
### Installation 🔧
|
|
180
|
+
|
|
181
|
+
1. Clone this repository, then change your working directory.
|
|
182
|
+
|
|
183
|
+
```shell
|
|
184
|
+
git clone git@github.com:collective/volto-aemet.git
|
|
185
|
+
cd volto-aemet
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
2. Install this code base.
|
|
189
|
+
|
|
190
|
+
```shell
|
|
191
|
+
make install
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
### Make convenience commands
|
|
196
|
+
|
|
197
|
+
Run `make help` to list the available commands.
|
|
198
|
+
|
|
199
|
+
```text
|
|
200
|
+
help Show this help
|
|
201
|
+
install Installs the add-on in a development environment
|
|
202
|
+
start Starts Volto, allowing reloading of the add-on during development
|
|
203
|
+
build Build a production bundle for distribution of the project with the add-on
|
|
204
|
+
i18n Sync i18n
|
|
205
|
+
ci-i18n Check if i18n is not synced
|
|
206
|
+
format Format codebase
|
|
207
|
+
lint Lint, or catch and remove problems, in code base
|
|
208
|
+
release Release the add-on on npmjs.org
|
|
209
|
+
release-dry-run Dry-run the release of the add-on on npmjs.org
|
|
210
|
+
test Run unit tests
|
|
211
|
+
ci-test Run unit tests in CI
|
|
212
|
+
backend-docker-start Starts a Docker-based backend for development
|
|
213
|
+
storybook-start Start Storybook server on port 6006
|
|
214
|
+
storybook-build Build Storybook
|
|
215
|
+
acceptance-frontend-dev-start Start acceptance frontend in development mode
|
|
216
|
+
acceptance-frontend-prod-start Start acceptance frontend in production mode
|
|
217
|
+
acceptance-backend-start Start backend acceptance server
|
|
218
|
+
ci-acceptance-backend-start Start backend acceptance server in headless mode for CI
|
|
219
|
+
acceptance-test Start Cypress in interactive mode
|
|
220
|
+
ci-acceptance-test Run cypress tests in headless mode for CI
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Development environment set up
|
|
224
|
+
|
|
225
|
+
Install package requirements.
|
|
226
|
+
|
|
227
|
+
```shell
|
|
228
|
+
make install
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Start developing
|
|
232
|
+
|
|
233
|
+
Start the backend.
|
|
234
|
+
|
|
235
|
+
```shell
|
|
236
|
+
make backend-docker-start
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
In a separate terminal session, start the frontend.
|
|
240
|
+
|
|
241
|
+
```shell
|
|
242
|
+
make start
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Lint code
|
|
246
|
+
|
|
247
|
+
Run ESlint, Prettier, and Stylelint in analyze mode.
|
|
248
|
+
|
|
249
|
+
```shell
|
|
250
|
+
make lint
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Format code
|
|
254
|
+
|
|
255
|
+
Run ESlint, Prettier, and Stylelint in fix mode.
|
|
256
|
+
|
|
257
|
+
```shell
|
|
258
|
+
make format
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### i18n
|
|
262
|
+
|
|
263
|
+
Extract the i18n messages to locales.
|
|
264
|
+
|
|
265
|
+
```shell
|
|
266
|
+
make i18n
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Unit tests
|
|
270
|
+
|
|
271
|
+
Run unit tests.
|
|
272
|
+
|
|
273
|
+
```shell
|
|
274
|
+
make test
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Run Cypress tests
|
|
278
|
+
|
|
279
|
+
Run each of these steps in separate terminal sessions.
|
|
280
|
+
|
|
281
|
+
In the first session, start the frontend in development mode.
|
|
282
|
+
|
|
283
|
+
```shell
|
|
284
|
+
make acceptance-frontend-dev-start
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
In the second session, start the backend acceptance server.
|
|
288
|
+
|
|
289
|
+
```shell
|
|
290
|
+
make acceptance-backend-start
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
In the third session, start the Cypress interactive test runner.
|
|
294
|
+
|
|
295
|
+
```shell
|
|
296
|
+
make acceptance-test
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Credits
|
|
300
|
+
|
|
301
|
+
Developed with the support of:
|
|
302
|
+
|
|
303
|
+
- [Agencia Estatal de Meteorología - AEMET. Gobierno de España](https://www.aemet.es/).
|
|
304
|
+
|
|
305
|
+
<img width="200" alt="IMD Logo" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/aemet-logo-blue.svg">
|
|
306
|
+
|
|
307
|
+
- [Instituto Municipal de Deportes - IMD, Seville City Council, Spain](https://imd.sevilla.org/).
|
|
308
|
+
|
|
309
|
+
<img width="200" alt="IMD Logo" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/imd-ayto-logo.svg">
|
|
310
|
+
|
|
311
|
+
### Acknowledgements 🙏
|
|
312
|
+
|
|
313
|
+
Generated using [Cookieplone (0.9.10)](https://github.com/plone/cookieplone) and [cookieplone-templates (eb40854)](https://github.com/plone/cookieplone-templates/commit/eb4085428af6261227bcb086ece110bbe5475d89) on 2025-11-06 19:31:17.502224. A special thanks to all contributors and supporters!
|
|
314
|
+
|
|
315
|
+
## Authors
|
|
316
|
+
|
|
317
|
+
This product was developed by [Leonardo J. Caballero G.](https://github.com/macagua).
|
|
318
|
+
|
|
319
|
+
<img width="100" alt="Leonardo J. Caballero G." src="https://avatars.githubusercontent.com/u/185395?v=4&size=100">
|
|
320
|
+
|
|
321
|
+
## License
|
|
322
|
+
|
|
323
|
+
The project is licensed under the MIT license.
|
package/babel.config.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module.exports = function (api) {
|
|
2
|
+
api.cache(true);
|
|
3
|
+
const presets = ['razzle'];
|
|
4
|
+
const plugins = [
|
|
5
|
+
[
|
|
6
|
+
'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work
|
|
7
|
+
{
|
|
8
|
+
messagesDir: './build/messages/',
|
|
9
|
+
},
|
|
10
|
+
],
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
plugins,
|
|
15
|
+
presets,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Project-Id-Version: \n"
|
|
4
|
+
"Report-Msgid-Bugs-To: \n"
|
|
5
|
+
"POT-Creation-Date: \n"
|
|
6
|
+
"PO-Revision-Date: \n"
|
|
7
|
+
"Last-Translator: \n"
|
|
8
|
+
"Language: de\n"
|
|
9
|
+
"Language-Team: \n"
|
|
10
|
+
"Content-Type: \n"
|
|
11
|
+
"Content-Transfer-Encoding: \n"
|
|
12
|
+
"Plural-Forms: \n"
|
|
13
|
+
|
|
14
|
+
#. Default: "AEMET Weather Forecast"
|
|
15
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
16
|
+
msgid "AEMET Weather Forecast"
|
|
17
|
+
msgstr ""
|
|
18
|
+
|
|
19
|
+
#. Default: "Default"
|
|
20
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
21
|
+
msgid "Default"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#. Default: "Location ID"
|
|
25
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
26
|
+
msgid "Location ID"
|
|
27
|
+
msgstr ""
|
|
28
|
+
|
|
29
|
+
#. Default: "Province"
|
|
30
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
31
|
+
msgid "Province"
|
|
32
|
+
msgstr ""
|
|
33
|
+
|
|
34
|
+
#. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
35
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
36
|
+
msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
37
|
+
msgstr ""
|
|
38
|
+
|
|
39
|
+
#. Default: "The name of the province of the location (in lowercase) of the AEMET service."
|
|
40
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
41
|
+
msgid "The name of the province of the location (in lowercase) of the AEMET service."
|
|
42
|
+
msgstr ""
|
|
43
|
+
|
|
44
|
+
#. Default: "Current day"
|
|
45
|
+
#: components/Aemet/Weather
|
|
46
|
+
msgid "current_day"
|
|
47
|
+
msgstr ""
|
|
48
|
+
|
|
49
|
+
#. Default: "Current location"
|
|
50
|
+
#: components/Aemet/Weather
|
|
51
|
+
msgid "current_location"
|
|
52
|
+
msgstr ""
|
|
53
|
+
|
|
54
|
+
#. Default: "Current temperature"
|
|
55
|
+
#: components/Aemet/Weather
|
|
56
|
+
msgid "current_temperature"
|
|
57
|
+
msgstr ""
|
|
58
|
+
|
|
59
|
+
#. Default: "Current time"
|
|
60
|
+
#: components/Aemet/Weather
|
|
61
|
+
msgid "current_time"
|
|
62
|
+
msgstr ""
|
|
63
|
+
|
|
64
|
+
#. Default: "Loading weather forecast..."
|
|
65
|
+
#: components/Aemet/Weather
|
|
66
|
+
#: components/Aemet/WeatherCurrent
|
|
67
|
+
msgid "loading_weather_forecast"
|
|
68
|
+
msgstr ""
|
|
69
|
+
|
|
70
|
+
#. Default: "Minimum-Maximum"
|
|
71
|
+
#: components/Aemet/Weather
|
|
72
|
+
msgid "minimum_maximum"
|
|
73
|
+
msgstr ""
|
|
74
|
+
|
|
75
|
+
#. Default: "Not available"
|
|
76
|
+
#: components/Aemet/Weather
|
|
77
|
+
msgid "not_available"
|
|
78
|
+
msgstr ""
|
|
79
|
+
|
|
80
|
+
#. Default: "Weather description"
|
|
81
|
+
#: components/Aemet/Weather
|
|
82
|
+
msgid "weather_description"
|
|
83
|
+
msgstr ""
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Project-Id-Version: \n"
|
|
4
|
+
"Report-Msgid-Bugs-To: \n"
|
|
5
|
+
"POT-Creation-Date: \n"
|
|
6
|
+
"PO-Revision-Date: \n"
|
|
7
|
+
"Last-Translator: \n"
|
|
8
|
+
"Language: en\n"
|
|
9
|
+
"Language-Team: \n"
|
|
10
|
+
"Content-Type: \n"
|
|
11
|
+
"Content-Transfer-Encoding: \n"
|
|
12
|
+
"Plural-Forms: \n"
|
|
13
|
+
|
|
14
|
+
#. Default: "AEMET Weather Forecast"
|
|
15
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
16
|
+
msgid "AEMET Weather Forecast"
|
|
17
|
+
msgstr ""
|
|
18
|
+
|
|
19
|
+
#. Default: "Default"
|
|
20
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
21
|
+
msgid "Default"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#. Default: "Location ID"
|
|
25
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
26
|
+
msgid "Location ID"
|
|
27
|
+
msgstr ""
|
|
28
|
+
|
|
29
|
+
#. Default: "Province"
|
|
30
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
31
|
+
msgid "Province"
|
|
32
|
+
msgstr ""
|
|
33
|
+
|
|
34
|
+
#. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
35
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
36
|
+
msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
37
|
+
msgstr ""
|
|
38
|
+
|
|
39
|
+
#. Default: "The name of the province of the location (in lowercase) of the AEMET service."
|
|
40
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
41
|
+
msgid "The name of the province of the location (in lowercase) of the AEMET service."
|
|
42
|
+
msgstr ""
|
|
43
|
+
|
|
44
|
+
#. Default: "Current day"
|
|
45
|
+
#: components/Aemet/Weather
|
|
46
|
+
msgid "current_day"
|
|
47
|
+
msgstr ""
|
|
48
|
+
|
|
49
|
+
#. Default: "Current location"
|
|
50
|
+
#: components/Aemet/Weather
|
|
51
|
+
msgid "current_location"
|
|
52
|
+
msgstr ""
|
|
53
|
+
|
|
54
|
+
#. Default: "Current temperature"
|
|
55
|
+
#: components/Aemet/Weather
|
|
56
|
+
msgid "current_temperature"
|
|
57
|
+
msgstr ""
|
|
58
|
+
|
|
59
|
+
#. Default: "Current time"
|
|
60
|
+
#: components/Aemet/Weather
|
|
61
|
+
msgid "current_time"
|
|
62
|
+
msgstr ""
|
|
63
|
+
|
|
64
|
+
#. Default: "Loading weather forecast..."
|
|
65
|
+
#: components/Aemet/Weather
|
|
66
|
+
#: components/Aemet/WeatherCurrent
|
|
67
|
+
msgid "loading_weather_forecast"
|
|
68
|
+
msgstr ""
|
|
69
|
+
|
|
70
|
+
#. Default: "Minimum-Maximum"
|
|
71
|
+
#: components/Aemet/Weather
|
|
72
|
+
msgid "minimum_maximum"
|
|
73
|
+
msgstr ""
|
|
74
|
+
|
|
75
|
+
#. Default: "Not available"
|
|
76
|
+
#: components/Aemet/Weather
|
|
77
|
+
msgid "not_available"
|
|
78
|
+
msgstr ""
|
|
79
|
+
|
|
80
|
+
#. Default: "Weather description"
|
|
81
|
+
#: components/Aemet/Weather
|
|
82
|
+
msgid "weather_description"
|
|
83
|
+
msgstr ""
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Project-Id-Version: Plone\n"
|
|
4
|
+
"Report-Msgid-Bugs-To: \n"
|
|
5
|
+
"POT-Creation-Date: 2026-07-16 1:40-0400\n"
|
|
6
|
+
"PO-Revision-Date: 2026-07-19 14:29-0400\n"
|
|
7
|
+
"Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>\n"
|
|
8
|
+
"Language: es\n"
|
|
9
|
+
"Language-Team: ES <LL@li.org>\n"
|
|
10
|
+
"Content-Type: text/plain; charset=utf-8\n"
|
|
11
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
12
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
13
|
+
"Preferred-Encodings: utf-8\n"
|
|
14
|
+
"MIME-Version: 1.0\n"
|
|
15
|
+
"Language-Code: es\n"
|
|
16
|
+
"Language-Name: Español\n"
|
|
17
|
+
"Domain: volto\n"
|
|
18
|
+
"X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n"
|
|
19
|
+
"X-Generator: Poedit 2.2.1\n"
|
|
20
|
+
|
|
21
|
+
#. Default: "AEMET Weather Forecast"
|
|
22
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
23
|
+
msgid "AEMET Weather Forecast"
|
|
24
|
+
msgstr "AEMET: Pronóstico del tiempo"
|
|
25
|
+
|
|
26
|
+
#. Default: "Default"
|
|
27
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
28
|
+
msgid "Default"
|
|
29
|
+
msgstr "Predeterminado"
|
|
30
|
+
|
|
31
|
+
#. Default: "Location ID"
|
|
32
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
33
|
+
msgid "Location ID"
|
|
34
|
+
msgstr "ID de ubicación"
|
|
35
|
+
|
|
36
|
+
#. Default: "Province"
|
|
37
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
38
|
+
msgid "Province"
|
|
39
|
+
msgstr "Provincia"
|
|
40
|
+
|
|
41
|
+
#. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
42
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
43
|
+
msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
|
|
44
|
+
msgstr "El ID de ubicación del servicio AEMET, por ejemplo '41091' para la ubicación de Sevilla."
|
|
45
|
+
|
|
46
|
+
#. Default: "The name of the province of the location (in lowercase) of the AEMET service."
|
|
47
|
+
#: components/Blocks/AemetWeatherForecast/messages
|
|
48
|
+
msgid "The name of the province of the location (in lowercase) of the AEMET service."
|
|
49
|
+
msgstr "El nombre de la provincia en la que se encuentra (en minúsculas) el servicio de la AEMET."
|
|
50
|
+
|
|
51
|
+
#. Default: "Current day"
|
|
52
|
+
#: components/Aemet/Weather
|
|
53
|
+
msgid "current_day"
|
|
54
|
+
msgstr "Día actual"
|
|
55
|
+
|
|
56
|
+
#. Default: "Current location"
|
|
57
|
+
#: components/Aemet/Weather
|
|
58
|
+
msgid "current_location"
|
|
59
|
+
msgstr "Ubicación actual"
|
|
60
|
+
|
|
61
|
+
#. Default: "Current temperature"
|
|
62
|
+
#: components/Aemet/Weather
|
|
63
|
+
msgid "current_temperature"
|
|
64
|
+
msgstr "Temperatura actual"
|
|
65
|
+
|
|
66
|
+
#. Default: "Current time"
|
|
67
|
+
#: components/Aemet/Weather
|
|
68
|
+
msgid "current_time"
|
|
69
|
+
msgstr "Hora actual"
|
|
70
|
+
|
|
71
|
+
#. Default: "Loading weather forecast..."
|
|
72
|
+
#: components/Aemet/Weather
|
|
73
|
+
#: components/Aemet/WeatherCurrent
|
|
74
|
+
msgid "loading_weather_forecast"
|
|
75
|
+
msgstr "Cargando la previsión meteorológica..."
|
|
76
|
+
|
|
77
|
+
#. Default: "Minimum-Maximum"
|
|
78
|
+
#: components/Aemet/Weather
|
|
79
|
+
msgid "minimum_maximum"
|
|
80
|
+
msgstr "Mínimo-Máximo"
|
|
81
|
+
|
|
82
|
+
#. Default: "Not available"
|
|
83
|
+
#: components/Aemet/Weather
|
|
84
|
+
msgid "not_available"
|
|
85
|
+
msgstr "No disponible"
|
|
86
|
+
|
|
87
|
+
#. Default: "Weather description"
|
|
88
|
+
#: components/Aemet/Weather
|
|
89
|
+
msgid "weather_description"
|
|
90
|
+
msgstr "Descripción del clima"
|