trmnl_preview 0.14.2 → 0.16.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +31 -0
  4. data/db/data/and_x_more.yml +86 -0
  5. data/db/data/locales/cs.yml +339 -0
  6. data/db/data/locales/da.yml +339 -0
  7. data/db/data/locales/de-AT.yml +341 -0
  8. data/db/data/locales/de.yml +341 -0
  9. data/db/data/locales/en-AU.yml +79 -0
  10. data/db/data/locales/en-GB.yml +79 -0
  11. data/db/data/locales/en.yml +341 -0
  12. data/db/data/locales/es-ES.yml +341 -0
  13. data/db/data/locales/fr.yml +339 -0
  14. data/db/data/locales/he.yml +339 -0
  15. data/db/data/locales/hu.yml +339 -0
  16. data/db/data/locales/id.yml +339 -0
  17. data/db/data/locales/is.yml +339 -0
  18. data/db/data/locales/it.yml +341 -0
  19. data/db/data/locales/ja.yml +342 -0
  20. data/db/data/locales/ko.yml +337 -0
  21. data/db/data/locales/lt.yml +340 -0
  22. data/db/data/locales/nl.yml +339 -0
  23. data/db/data/locales/no.yml +4 -0
  24. data/db/data/locales/pl.yml +342 -0
  25. data/db/data/locales/pt-BR.yml +340 -0
  26. data/db/data/locales/raw.yml +256 -0
  27. data/db/data/locales/ro.yml +339 -0
  28. data/db/data/locales/ru.yml +342 -0
  29. data/db/data/locales/sk.yml +339 -0
  30. data/db/data/locales/sv.yml +340 -0
  31. data/db/data/locales/uk.yml +339 -0
  32. data/db/data/locales/zh-CN.yml +338 -0
  33. data/db/data/locales/zh-HK.yml +338 -0
  34. data/lib/trmnlp/app.rb +5 -4
  35. data/lib/trmnlp/async_callback.rb +75 -0
  36. data/lib/trmnlp/cli.rb +2 -0
  37. data/lib/trmnlp/commands/lint.rb +18 -3
  38. data/lib/trmnlp/commands/serve.rb +3 -0
  39. data/lib/trmnlp/config/plugin.rb +52 -12
  40. data/lib/trmnlp/config/project.rb +14 -4
  41. data/lib/trmnlp/context.rb +17 -2
  42. data/lib/trmnlp/firefox_driver.rb +0 -3
  43. data/lib/trmnlp/framework_version.rb +9 -0
  44. data/lib/trmnlp/image_quantizer.rb +28 -15
  45. data/lib/trmnlp/lint/checks/image_links_reachable.rb +6 -1
  46. data/lib/trmnlp/lint/checks/limited_inline_styles.rb +12 -5
  47. data/lib/trmnlp/lint/checks/no_custom_filters.rb +27 -0
  48. data/lib/trmnlp/lint/diagnostic.rb +97 -0
  49. data/lib/trmnlp/lint/source.rb +53 -0
  50. data/lib/trmnlp/lint.rb +3 -1
  51. data/lib/trmnlp/merged_plugin_locals.rb +57 -0
  52. data/lib/trmnlp/outbound_request.rb +99 -0
  53. data/lib/trmnlp/paths.rb +11 -6
  54. data/lib/trmnlp/poller.rb +83 -44
  55. data/lib/trmnlp/rails_helpers.rb +41 -0
  56. data/lib/trmnlp/renderer.rb +37 -11
  57. data/lib/trmnlp/screen_generator.rb +14 -2
  58. data/lib/trmnlp/screenshot.rb +29 -4
  59. data/lib/trmnlp/select_field_choices.rb +25 -0
  60. data/lib/trmnlp/transform_pipeline.rb +47 -6
  61. data/lib/trmnlp/transform_state.rb +48 -0
  62. data/lib/trmnlp/user_data_assembler.rb +63 -25
  63. data/lib/trmnlp/version.rb +1 -1
  64. data/lib/trmnlp/watcher.rb +2 -1
  65. data/lib/trmnlp/webhook_payload.rb +74 -0
  66. data/lib/trmnlp/webhook_receiver.rb +78 -0
  67. data/lib/trmnlp.rb +1 -1
  68. data/trmnl_preview.gemspec +3 -0
  69. data/web/public/index.js +18 -6
  70. data/web/views/index.erb +7 -0
  71. data/web/views/render_html.erb +36 -0
  72. metadata +83 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2dabcf8ddd9b11d8ce8fc76e389820c7cd4f2d3b48db7aa7848896f9dfb6ec59
4
- data.tar.gz: 467322fc910fdfed1ed5c37bb9773a7256d3d8f1f44683e2c9e4f3882b4ab7df
3
+ metadata.gz: 2460473710692cd80df450f411bdf811e44a9da068600b45db871c9e00ce0651
4
+ data.tar.gz: b34619a0fccac692176089ae44fe45c4c040a04bb2ca7035031750f768adc73d
5
5
  SHA512:
6
- metadata.gz: 75747b93b8aa45ac964b1ae87ef0dd50134c836bf5bc4bef19e47f166132b1dfca6edf8744f967702be6ffdc4c80c7b9b725646443053708f2d74df37a8537e9
7
- data.tar.gz: b6fa8f755ab31f3dae9a3c2773ced039f646c7363288ae27512d0e3a95e72143093ca2869cb26a402084dd1b66c6c2dfc29a022ef8fed84bbb6e18fa5ffed347
6
+ metadata.gz: 8de469fd1f6f81023ac8b3ad25168dce59f68a731a5814fc845e8a6155996e0800a7d5871e0d89fbd009bc910ad6b497f5a4dc6186025f60a79f758df31aaab1
7
+ data.tar.gz: b0bf8c9737e32bb67b3489de471c29ce78b03a4a40fcef69916834477d5daa0d3a4a89dcdaca68e411f20a1cafb5e91142216ae85c2e3d3a6e42a94f5fe944cf
data/CHANGELOG.md CHANGED
@@ -1,6 +1,27 @@
1
1
 
2
2
  # Changelog
3
3
 
4
+ ## 0.16.0
5
+
6
+ - Webhook posts must wrap their data in `merge_variables`, as TRMNL requires, and `merge_strategy` (`replace`, `deep_merge`, or `stream` with `stream_limit`) works from the body or the query string. A post without the wrapper is refused with TRMNL's message and a 422; a body that is not JSON gets a 400. Before, trmnlp stored the raw body and always answered 200, so a correct post rendered its data under `merge_variables.*`. A post over 5 kB is stored with a warning, since trmnlp cannot know your plan's limit. (#155)
7
+ - Polled and posted data is cached per project, so two plugins no longer share one `data.json`. Data cached by an older trmnlp is not read: a polling plugin polls again on start, and a webhook plugin needs one new post. (#155)
8
+ - A webhook plugin with a transform runs it once, when a post arrives, and stores the result, as TRMNL does; renders no longer run it. A transform's `trmnl_state` comes back as `trmnl.state` on its next run and in the markup, and `trmnl.previous_merge_variables` carries what the last run stored. (#155)
9
+ - `trmnl.plugin_settings` carries the plugin's name as `instance_name`, plus `no_screen_padding` and `data_fetched_utc`; `polling_url` appears only for a polling plugin and is the unrendered url; `polling_headers` is gone. `trmnl.device` carries `orientation` from the picker. The `trmnl` namespace now wins over a `trmnl` key in fetched data, as on TRMNL. (#155, #158)
10
+ - `dark_mode: 'yes'` darkens every render, `trmnlp build` and PNGs included, and a dark render gets the bare `dark-mode` class Framework 1.x inverts on. The default font class is `screen--fonts-trmnl`, the picker's `screen--1x` is dropped, and a theme select adds `screen--theme-*` with the theme's stylesheet on Framework 3.2.0 and later. `window.I18n.andXMore` uses the user's locale. (#155)
11
+ - A select custom field saves what TRMNL saves: "New York" as `new_york`, a `{ Label: value }` option as its value. The editor saved the label, so `{% if units == "metric" %}` matched only on TRMNL. A label already in `.trmnlp.yml` is read as its value. (#158)
12
+ - A custom field's `default` fills a blank value, in the markup and in the polling url, headers and body, and a custom field set to `{{ env.X }}` in `.trmnlp.yml` reaches the markup filled in, as it already did for polling. Polling is skipped with TRMNL's "Plugin is not configured" message while a field the url needs is blank. (#158)
13
+ - Polling follows TRMNL: the url, headers and body render with the `trmnl` namespace; urls split on CR or LF and drop blank lines; a GET sends the polling body as its query string; up to 5 redirects are followed, dropping `Authorization` when the host changes; reads time out after 10 s with one retry; a 429 or 5xx is a failed fetch while a 4xx body still renders; CSV, markdown, a byte order mark and an unlisted content type parse as on TRMNL. A url that resolves to a private address gets a warning, since TRMNL refuses it, but is still fetched. Logs and warnings leave out the query string, which often holds an api key. (#158)
14
+ - Merge variables over 100 kB fail the render with TRMNL's message. A transform stops after 5 s, gets `trmnl.oauth` when an account is connected, keeps the last good output when it fails, and renders nothing from an output that is not an object. (#158)
15
+ - `l_word`, `l_date`, `pluralize` and `number_to_currency` render as on TRMNL in its 29 locales: `pluralize` gave "3 persons", `number_to_currency: "de"` gave `de1,234.50`, and any non-English `l_word` or `l_date` raised. The locale data is copied from trmnl-i18n and rails-i18n into `db/data/locales` by `rake i18n:sync`, so trmnlp needs no Rails gems. (#156)
16
+ - PNG renders follow TRMNL's renderer: a page dithers only when it asks for it with `image-dither`, otherwise it is posterized with TRMNL's ImageMagick steps, and the capture waits for the Framework's ready signals (up to 5 s, 12 s with a map). Highcharts charts rendered blank, since the unversioned CDN url refuses a page with no Referer; they now load TRMNL's 12.3.0 copy. Text is no longer drawn with antialiasing turned off, which brings it closer to TRMNL's own PNGs. (#157)
17
+ - The `async_polling` strategy works locally: `{{ callback_url }}` points at the preview server, and the callback answers as TRMNL does, 410 for a stale or expired request. The `plugin_merge` strategy works too: list each referenced plugin as `<keyname>_<id>: <path to its trmnlp project>` under `merged_plugins` in `.trmnlp.yml`, and the markup gets TRMNL's merged data. (#160)
18
+ - `trmnlp lint` reports a filter that only `custom_filters` in `.trmnlp.yml` defines (`no_custom_filters`). TRMNL does not load those modules and outputs the value unfiltered. (#159)
19
+
20
+ ## 0.15.0
21
+
22
+ - `trmnlp lint` names where each finding is: a rule ID such as `[no_opacity]`, then the file, line and column with the source line. Before, it printed only the message, so you had to search every view and Shared for the cause. `trmnlp lint --format json` writes the same report as one JSON object (`version`, `passed`, `issues`) for CI. Exit statuses are unchanged, and the values of unused custom fields in `.trmnlp.yml` are never printed. (#153)
23
+ - The inline-style check counts real CSS declarations in `style` attributes, still with a limit of six. It counted eight property names anywhere in the markup, so `font-size` in an HTML comment or a `<style>` block failed while seven `style="color:red"` passed. Comments, scripts, text and `<style>` blocks no longer count, and declarations inside Liquid `{% if %}` branches all count. (#152)
24
+
4
25
  ## 0.14.2
5
26
 
6
27
  - A failed transform prints its stderr once. The `transform failed:` line repeated the whole stack trace that the `transform stderr:` line had just printed; it now names only the exit code. The preview page still shows the full error. (#148)
data/README.md CHANGED
@@ -99,6 +99,30 @@ trmnlp push # upload
99
99
 
100
100
  `trmnlp lint` exits non-zero when it finds issues, so you can gate CI on it. Run `trmnlp help` for all flags.
101
101
 
102
+ Lint findings include a stable snake_case rule ID, severity and source locations.
103
+ Locations use project-relative paths and one-based line/column numbers, followed
104
+ by a source excerpt (up to 240 characters). Aggregate checks show their contributing
105
+ locations; checks for a missing chart setting show the related Highcharts usage.
106
+ Unused project custom-field values are omitted from excerpts because they can
107
+ contain credentials.
108
+
109
+ For CI integrations, use `trmnlp lint --format json`. It writes one JSON object
110
+ with `version: 1`, `passed` and an `issues` array. Each issue has `rule_id`,
111
+ `severity`, `message`, `locations` and, when available, `learn_more`. Each location
112
+ has `path`, `line`, `column` and `snippet`. A clean report has `passed: true` and
113
+ `issues: []`. All existing checks retain severity `error` and the same exit status:
114
+ zero when clean, nonzero when findings exist. `--quiet` suppresses either format.
115
+
116
+ The inline-style check counts CSS declarations in actual HTML `style` attributes,
117
+ with a limit of six across the view templates and Shared. All property names count,
118
+ including custom properties. HTML/Liquid comments, script strings, text,
119
+ `data-*` attributes and `<style>` blocks are excluded from this inline check.
120
+ Liquid in declaration values is counted without rendering the plugin, every branch included.
121
+
122
+ Filters from `custom_filters` in `.trmnlp.yml` exist only in trmnlp. TRMNL does not load them
123
+ and outputs the value unfiltered, so `no_custom_filters` reports each place the markup uses one.
124
+ Filters that trmnl-liquid also provides are not reported.
125
+
102
126
  ## Building Static Files
103
127
 
104
128
  `trmnlp build` renders every view to a static file under `_build/` — handy for exporting a snapshot or feeding the output into another pipeline. Run it from inside a plugin project:
@@ -314,8 +338,15 @@ variables:
314
338
  plugin_settings:
315
339
  instance_name: Kevin Bacon Facts
316
340
 
341
+ # plugin_merge strategy: the plugins this one reads, as "<keyname>_<id>" on TRMNL,
342
+ # each mapped to the trmnlp project whose last fetched data stands in for it
343
+ merged_plugins:
344
+ private_plugin_42: ../weather
317
345
  ```
318
346
 
347
+ An `async_polling` plugin gets `{{ callback_url }}` in its polling url. It points at
348
+ `trmnlp serve`'s `/callback` route, where the API posts `merge_variables` after answering 202.
349
+
319
350
  ## OAuth2
320
351
 
321
352
  This feature is in beta. Please report incorrect behaviour at https://github.com/usetrmnl/trmnlp/issues.
@@ -0,0 +1,86 @@
1
+ # Mirrored from trmnl-i18n renders.and_x_more_* (window.I18n.andXMore).
2
+ # Refresh with `rake i18n:sync[trmnl_i18n_path,rails_i18n_path]` — do not edit manually.
3
+ cs:
4
+ - A
5
+ - více
6
+ da:
7
+ - Og
8
+ - mere
9
+ de-AT:
10
+ - und
11
+ - weitere
12
+ de:
13
+ - und
14
+ - weitere
15
+ en:
16
+ - And
17
+ - more
18
+ es-ES:
19
+ - "y"
20
+ - más
21
+ fr:
22
+ - Et
23
+ - de plus
24
+ he:
25
+ - And
26
+ - more
27
+ hu:
28
+ - És
29
+ - további
30
+ id:
31
+ - And
32
+ - more
33
+ is:
34
+ - Og
35
+ - fleiri
36
+ it:
37
+ - e
38
+ - più
39
+ ja:
40
+ - And
41
+ - more
42
+ ko:
43
+ - And
44
+ - 개 더
45
+ lt:
46
+ - Ir dar
47
+ - daugiau
48
+ nl:
49
+ - En nog
50
+ - more
51
+ 'no':
52
+ - And
53
+ - more
54
+ pl:
55
+ - i
56
+ - więcej
57
+ pt-BR:
58
+ - E
59
+ - mais
60
+ raw:
61
+ - renders.and_x_more_prefix
62
+ - renders.and_x_more_suffix
63
+ ro:
64
+ - Și
65
+ - mai mult
66
+ ru:
67
+ - И
68
+ - ещё
69
+ sk:
70
+ - A
71
+ - ďalšie
72
+ sl:
73
+ - in še
74
+ - ''
75
+ sv:
76
+ - And
77
+ - more
78
+ uk:
79
+ - And
80
+ - more
81
+ zh-CN:
82
+ - 及其他
83
+ - 项
84
+ zh-HK:
85
+ - 還有
86
+ - 個
@@ -0,0 +1,339 @@
1
+ # Mirrored from trmnl-i18n custom_plugins and rails-i18n date, time, number.
2
+ # Refresh with `rake i18n:sync[trmnl_i18n_path,rails_i18n_path]` — do not edit manually.
3
+ cs:
4
+ custom_plugins:
5
+ today: dnes
6
+ tomorrow: zítra
7
+ updated: Aktualizováno
8
+ activity: Aktivita
9
+ done: Hotovo
10
+ due: Termín
11
+ deutsche_bahn_departures:
12
+ departures: Odjezdy
13
+ time: Čas
14
+ line: Linka
15
+ destination: Cíl
16
+ platform: Nástupiště
17
+ delay: Zpoždění
18
+ train: Vlak
19
+ on_time: Na čas
20
+ cancelled: Zrušeno
21
+ minutes: min
22
+ refreshed: Obnoveno
23
+ simple_calendar:
24
+ title: Kalendář
25
+ ym_format: "%B %Y"
26
+ chinese_korean:
27
+ leap_format: Přestupný %{month_label}
28
+ leap_format_short: PM%{alt_month}
29
+ ym_format: ", %{leap_month_label} %{heavenly_stem} %{earthly_branch}"
30
+ month_labels:
31
+ -
32
+ - M1
33
+ - M2
34
+ - M3
35
+ - M4
36
+ - M5
37
+ - M6
38
+ - M7
39
+ - M8
40
+ - M9
41
+ - M10
42
+ - M11
43
+ - M12
44
+ date_labels:
45
+ -
46
+ - '1'
47
+ - '2'
48
+ - '3'
49
+ - '4'
50
+ - '5'
51
+ - '6'
52
+ - '7'
53
+ - '8'
54
+ - '9'
55
+ - '10'
56
+ - '11'
57
+ - '12'
58
+ - '13'
59
+ - '14'
60
+ - '15'
61
+ - '16'
62
+ - '17'
63
+ - '18'
64
+ - '19'
65
+ - '20'
66
+ - '21'
67
+ - '22'
68
+ - '23'
69
+ - '24'
70
+ - '25'
71
+ - '26'
72
+ - '27'
73
+ - '28'
74
+ - '29'
75
+ - '30'
76
+ heavenly_stems:
77
+ - Dřevo
78
+ - Dřevo
79
+ - Oheň
80
+ - Oheň
81
+ - Země
82
+ - Země
83
+ - Kov
84
+ - Kov
85
+ - Voda
86
+ - Voda
87
+ earthly_branches:
88
+ - Krysa
89
+ - Vůl
90
+ - Tygr
91
+ - Králík
92
+ - Drak
93
+ - Had
94
+ - Kůň
95
+ - Koza
96
+ - Opice
97
+ - Kohout
98
+ - Pes
99
+ - Vepř
100
+ zodiac_animals:
101
+ - Rat
102
+ - Ox
103
+ - Tiger
104
+ - Rabbit
105
+ - Dragon
106
+ - Snake
107
+ - Horse
108
+ - Goat
109
+ - Monkey
110
+ - Rooster
111
+ - Dog
112
+ - Pig
113
+ solar_terms:
114
+ - Minor Cold
115
+ - Major Cold
116
+ - Start of Spring
117
+ - Rain Water
118
+ - Awakening of Insects
119
+ - Spring Equinox
120
+ - Pure Brightness
121
+ - Grain Rain
122
+ - Start of Summer
123
+ - Grain Buds
124
+ - Grain in Ear
125
+ - Summer Solstice
126
+ - Minor Heat
127
+ - Major Heat
128
+ - Start of Autumn
129
+ - End of Heat
130
+ - White Dew
131
+ - Autumn Equinox
132
+ - Cold Dew
133
+ - Frost's Descent
134
+ - Start of Winter
135
+ - Minor Snow
136
+ - Major Snow
137
+ - Winter Solstice
138
+ japanese:
139
+ rokuyo_terms:
140
+ - 先勝
141
+ - 友引
142
+ - 先負
143
+ - 仏滅
144
+ - 大安
145
+ - 赤口
146
+ nengo:
147
+ reiwa: Reiwa
148
+ ym_format: "%B %Y (%{nengo} %{alt_year})"
149
+ year_1: '1'
150
+ hebrew:
151
+ ym_format: ", %{month_label} %{alt_year}"
152
+ month_labels:
153
+ - Nisan
154
+ - Ijar
155
+ - Sivan
156
+ - Tamuz
157
+ - Av
158
+ - Elul
159
+ - Tišri
160
+ - Chešvan
161
+ - Kislev
162
+ - Tevet
163
+ - Ševat
164
+ - Adar
165
+ - Adar I
166
+ - Adar II
167
+ month_labels_abbr:
168
+ - Nis
169
+ - Ija
170
+ - Siv
171
+ - Tam
172
+ - Av
173
+ - Elu
174
+ - Tiš
175
+ - Che
176
+ - Kis
177
+ - Tev
178
+ - Šev
179
+ - Ada
180
+ - Ad1
181
+ - Ad2
182
+ hijri:
183
+ ym_format: ", %{month_label} %{alt_year}"
184
+ month_labels:
185
+ -
186
+ - Muharram
187
+ - Safar
188
+ - Rabíʻ I
189
+ - Rabíʻ II
190
+ - Džumádá I
191
+ - Džumádá II
192
+ - Radžab
193
+ - Šaʻbán
194
+ - Ramadán
195
+ - Šawwál
196
+ - Dhú al-ki'da
197
+ - Dhú al-hidždža
198
+ bengali:
199
+ ym_format: ", %{month_label} %{alt_year}"
200
+ month_labels:
201
+ -
202
+ - Boishakh
203
+ - Joishtho
204
+ - Asharh
205
+ - Srabon
206
+ - Bhadro
207
+ - Ashwin
208
+ - Kartika
209
+ - Ogrohayon
210
+ - Poush
211
+ - Magh
212
+ - Falgun
213
+ - Choitro
214
+ indian:
215
+ ym_format: ", %{month_label} %{alt_year}"
216
+ month_labels:
217
+ -
218
+ - Chaitra
219
+ - Vaisakha
220
+ - Jyaistha
221
+ - Asadha
222
+ - Sravana
223
+ - Bhadra
224
+ - Asvina
225
+ - Kartika
226
+ - Agrahayana
227
+ - Pausa
228
+ - Magha
229
+ - Phalguna
230
+ public_recipe_stats:
231
+ connections: ".input {$value :number} .match $value zero {{Žádná připojení}}
232
+ one {{{$value :number} připojení}} * {{{$value :number} připojení}}"
233
+ forks: ".input {$value :number} .match $value zero {{Žádný fork}} one {{{$value
234
+ :number} fork}} * {{{$value :number} forků}}"
235
+ installs: ".input {$value :number} .match $value zero {{Žádná instalace}} one
236
+ {{{$value :number} instalace}} * {{{$value :number} instalací}}"
237
+ and_more: a {$value :number} dalších
238
+ error_keyword_title: "“{$keyword}” neodpovídá žádnému výsledku."
239
+ error_keyword_subtitle: Zkuste vyhledat něco jiného.
240
+ error_new_title: Nebyl nalezen žádný nový recept.
241
+ error_new_subtitle: To by se nemělo stávat.
242
+ error_self_title: Nepublikovali jste žádný recept.
243
+ error_self_subtitle: Jak publikovat svůj první recept, se dozvíte na https://help.trmnl.com/en/articles/9510536-private-plugins
244
+ error_author_id_title: 'Uživatel #{$authorId} nepublikoval žádný recept.'
245
+ error_author_id_subtitle: S tímto ID nebyl nalezen žádný recept.
246
+ error_recipe_ids_title: Nebylo nalezeno žádné ID receptu.
247
+ error_recipe_ids_subtitle: Chcete-li začít, přidejte ID receptu.
248
+ horizontal_world_clock:
249
+ name: Světové hodiny
250
+ language_learning_sentences:
251
+ from_to: Z jazyka {$from :langName} do {$to :langNameList}
252
+ custom_next_holiday:
253
+ next_holiday: Příští svátek
254
+ today_and_next: ".input {$nextDays :number} .match $nextDays one {{ {#mainLabel}Dnes
255
+ je{/mainLabel}{#br/}{#mainValue}{$name}{/mainValue}{#br/}{#subLabel}Zítra
256
+ je {$nextName}.{/subLabel} }}* {{ {#mainLabel}Dnes je{/mainLabel}{#br/}{#mainValue}{$name}{/mainValue}{#br/}{#subLabel}Příští
257
+ svátek je {$nextName} za {$nextDays} dní.{/subLabel} }}"
258
+ today_only: "{#mainLabel}Dnes je{/mainLabel}{#br/}{#mainValue}{$name}{/mainValue}"
259
+ next_only: ".input {$nextDays :number} .match $nextDays one {{ {#mainLabel}Zítra
260
+ je{/mainLabel}{#br/}{#mainValue}{$nextName}{/mainValue} }}* {{ {#mainValue}{$nextDays}{/mainValue}{#mainLabel}
261
+ dní do{/mainLabel}{#br/}{#mainValue}{$nextName}{/mainValue} }}"
262
+ no_holidays: "{#subLabel}Konec přidaných svátků.{/subLabel}"
263
+ sun_chart: Sun Chart
264
+ date:
265
+ abbr_day_names:
266
+ - Ne
267
+ - Po
268
+ - Út
269
+ - St
270
+ - Čt
271
+ - Pá
272
+ - So
273
+ abbr_month_names:
274
+ -
275
+ - Led
276
+ - Úno
277
+ - Bře
278
+ - Dub
279
+ - Kvě
280
+ - Čvn
281
+ - Čvc
282
+ - Srp
283
+ - Zář
284
+ - Říj
285
+ - Lis
286
+ - Pro
287
+ day_names:
288
+ - Neděle
289
+ - Pondělí
290
+ - Úterý
291
+ - Středa
292
+ - Čtvrtek
293
+ - Pátek
294
+ - Sobota
295
+ formats:
296
+ default: "%d. %m. %Y"
297
+ long: "%d. %B %Y"
298
+ short: "%d %b"
299
+ month_names:
300
+ -
301
+ - Leden
302
+ - Únor
303
+ - Březen
304
+ - Duben
305
+ - Květen
306
+ - Červen
307
+ - Červenec
308
+ - Srpen
309
+ - Září
310
+ - Říjen
311
+ - Listopad
312
+ - Prosinec
313
+ order:
314
+ - :day
315
+ - :month
316
+ - :year
317
+ time:
318
+ am: dopoledne
319
+ formats:
320
+ default: "%a %e. %B %Y %H:%M %z"
321
+ long: "%A %e. %B %Y %H:%M"
322
+ short: "%e. %-m. %H:%M"
323
+ pm: odpoledne
324
+ number:
325
+ currency:
326
+ format:
327
+ delimiter: " "
328
+ format: "%n %u"
329
+ precision: 2
330
+ separator: ","
331
+ significant: false
332
+ strip_insignificant_zeros: false
333
+ unit: Kč
334
+ format:
335
+ delimiter: "."
336
+ precision: 3
337
+ separator: ","
338
+ significant: false
339
+ strip_insignificant_zeros: false