mwoffliner 1.17.4 → 2.0.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 (227) hide show
  1. package/README.md +355 -62
  2. package/docs/functional_architecture.md +34 -38
  3. package/extensions/wiktionary_fr.js +18 -17
  4. package/jest.config.cjs +2 -2
  5. package/lib/DOMUtils.js +0 -1
  6. package/lib/DOMUtils.js.map +1 -1
  7. package/lib/Downloader.d.ts +39 -31
  8. package/lib/Downloader.js +418 -349
  9. package/lib/Downloader.js.map +1 -1
  10. package/lib/Dump.d.ts +24 -10
  11. package/lib/Dump.js +95 -50
  12. package/lib/Dump.js.map +1 -1
  13. package/lib/Gadgets.d.ts +2 -1
  14. package/lib/Gadgets.js +7 -5
  15. package/lib/Gadgets.js.map +1 -1
  16. package/lib/Logger.d.ts +6 -6
  17. package/lib/Logger.js +33 -33
  18. package/lib/Logger.js.map +1 -1
  19. package/lib/MediaWiki.d.ts +14 -31
  20. package/lib/MediaWiki.js +119 -172
  21. package/lib/MediaWiki.js.map +1 -1
  22. package/lib/RedisStore.d.ts +3 -3
  23. package/lib/RedisStore.js +21 -23
  24. package/lib/RedisStore.js.map +1 -1
  25. package/lib/S3.js +1 -1
  26. package/lib/S3.js.map +1 -1
  27. package/lib/Templates.d.ts +3 -10
  28. package/lib/Templates.js +5 -14
  29. package/lib/Templates.js.map +1 -1
  30. package/lib/cli.js +7 -6
  31. package/lib/cli.js.map +1 -1
  32. package/lib/config.d.ts +10 -16
  33. package/lib/config.js +33 -55
  34. package/lib/config.js.map +1 -1
  35. package/lib/error.manager.d.ts +2 -2
  36. package/lib/error.manager.js +42 -49
  37. package/lib/error.manager.js.map +1 -1
  38. package/lib/i18n.d.ts +2 -0
  39. package/lib/i18n.js +53 -0
  40. package/lib/i18n.js.map +1 -0
  41. package/lib/mutex.d.ts +2 -1
  42. package/lib/mutex.js +2 -1
  43. package/lib/mutex.js.map +1 -1
  44. package/lib/mwoffliner.lib.js +370 -222
  45. package/lib/mwoffliner.lib.js.map +1 -1
  46. package/lib/parameterList.d.ts +20 -8
  47. package/lib/parameterList.js +30 -18
  48. package/lib/parameterList.js.map +1 -1
  49. package/lib/renderers/abstract.renderer.d.ts +48 -55
  50. package/lib/renderers/abstract.renderer.js +377 -98
  51. package/lib/renderers/abstract.renderer.js.map +1 -1
  52. package/lib/renderers/action-parse.renderer.d.ts +22 -3
  53. package/lib/renderers/action-parse.renderer.js +123 -81
  54. package/lib/renderers/action-parse.renderer.js.map +1 -1
  55. package/lib/renderers/renderer.builder.js +6 -69
  56. package/lib/renderers/renderer.builder.js.map +1 -1
  57. package/lib/renderers/rendering.context.d.ts +2 -3
  58. package/lib/renderers/rendering.context.js +6 -14
  59. package/lib/renderers/rendering.context.js.map +1 -1
  60. package/lib/sanitize-argument.d.ts +7 -4
  61. package/lib/sanitize-argument.js +99 -41
  62. package/lib/sanitize-argument.js.map +1 -1
  63. package/lib/util/FileManager.d.ts +36 -0
  64. package/lib/util/FileManager.js +246 -0
  65. package/lib/util/FileManager.js.map +1 -0
  66. package/lib/util/RedisKvs.js +4 -4
  67. package/lib/util/RedisKvs.js.map +1 -1
  68. package/lib/util/RedisQueue.js +1 -1
  69. package/lib/util/RedisQueue.js.map +1 -1
  70. package/lib/util/builders/url/action-parse.director.d.ts +2 -2
  71. package/lib/util/builders/url/action-parse.director.js +7 -7
  72. package/lib/util/builders/url/action-parse.director.js.map +1 -1
  73. package/lib/util/builders/url/api.director.d.ts +2 -4
  74. package/lib/util/builders/url/api.director.js +10 -17
  75. package/lib/util/builders/url/api.director.js.map +1 -1
  76. package/lib/util/builders/url/base.director.d.ts +0 -4
  77. package/lib/util/builders/url/base.director.js +0 -25
  78. package/lib/util/builders/url/base.director.js.map +1 -1
  79. package/lib/util/builders/url/basic.director.d.ts +1 -1
  80. package/lib/util/builders/url/basic.director.js +1 -1
  81. package/lib/util/builders/url/web.director.d.ts +1 -1
  82. package/lib/util/builders/url/web.director.js +2 -2
  83. package/lib/util/builders/url/web.director.js.map +1 -1
  84. package/lib/util/categories.d.ts +5 -5
  85. package/lib/util/categories.js +175 -174
  86. package/lib/util/categories.js.map +1 -1
  87. package/lib/util/const.d.ts +4 -8
  88. package/lib/util/const.js +9 -17
  89. package/lib/util/const.js.map +1 -1
  90. package/lib/util/customCssJs.d.ts +6 -0
  91. package/lib/util/customCssJs.js +70 -0
  92. package/lib/util/customCssJs.js.map +1 -0
  93. package/lib/util/dump.d.ts +15 -4
  94. package/lib/util/dump.js +282 -86
  95. package/lib/util/dump.js.map +1 -1
  96. package/lib/util/index.d.ts +1 -1
  97. package/lib/util/index.js +1 -1
  98. package/lib/util/index.js.map +1 -1
  99. package/lib/util/metaData.js.map +1 -1
  100. package/lib/util/misc.d.ts +23 -13
  101. package/lib/util/misc.js +90 -59
  102. package/lib/util/misc.js.map +1 -1
  103. package/lib/util/mw-api.d.ts +7 -5
  104. package/lib/util/mw-api.js +167 -221
  105. package/lib/util/mw-api.js.map +1 -1
  106. package/lib/util/pageListMainPage.d.ts +3 -0
  107. package/lib/util/pageListMainPage.js +10 -0
  108. package/lib/util/pageListMainPage.js.map +1 -0
  109. package/lib/util/pages.d.ts +30 -0
  110. package/lib/util/pages.js +146 -0
  111. package/lib/util/pages.js.map +1 -0
  112. package/lib/util/rewriteUrls.d.ts +2 -2
  113. package/lib/util/rewriteUrls.js +33 -31
  114. package/lib/util/rewriteUrls.js.map +1 -1
  115. package/lib/util/savePages.d.ts +8 -0
  116. package/lib/util/savePages.js +182 -0
  117. package/lib/util/savePages.js.map +1 -0
  118. package/lib/version.d.ts +1 -1
  119. package/lib/version.js +1 -1
  120. package/lib/version.js.map +1 -1
  121. package/offliner-definition.json +178 -90
  122. package/package.json +50 -49
  123. package/res/page_list_home.js +20 -0
  124. package/res/{article_not_found.svg → page_not_found.svg} +1 -1
  125. package/res/script.js +30 -45
  126. package/res/style.css +52 -68
  127. package/res/templates/download_error_placeholder.html +7 -8
  128. package/res/templates/javaScript.html +19 -0
  129. package/res/templates/pageFallback.html +9 -7
  130. package/res/templates/pageVector2022.html +9 -7
  131. package/res/templates/pageVectorLegacy.html +9 -7
  132. package/res/templates/{article_list_home.html → page_list_home.html} +1 -2
  133. package/translation/ar.json +21 -21
  134. package/translation/bn.json +1 -1
  135. package/translation/de.json +46 -19
  136. package/translation/en.json +54 -21
  137. package/translation/es.json +17 -19
  138. package/translation/fi.json +23 -3
  139. package/translation/fr.json +57 -21
  140. package/translation/he.json +8 -6
  141. package/translation/ia.json +19 -19
  142. package/translation/id.json +13 -13
  143. package/translation/it.json +13 -8
  144. package/translation/ko.json +55 -3
  145. package/translation/lb.json +5 -2
  146. package/translation/mk.json +5 -5
  147. package/translation/nl.json +57 -22
  148. package/translation/or.json +2 -2
  149. package/translation/pt.json +2 -2
  150. package/translation/qqq.json +55 -22
  151. package/translation/ru.json +2 -2
  152. package/translation/sc.json +2 -2
  153. package/translation/sk.json +62 -0
  154. package/translation/sl.json +54 -21
  155. package/translation/sv.json +20 -19
  156. package/translation/sw.json +45 -2
  157. package/translation/zh-hans.json +56 -22
  158. package/translation/zh-hant.json +26 -19
  159. package/lib/renderers/abstractDesktop.render.d.ts +0 -12
  160. package/lib/renderers/abstractDesktop.render.js +0 -67
  161. package/lib/renderers/abstractDesktop.render.js.map +0 -1
  162. package/lib/renderers/abstractMobile.render.d.ts +0 -12
  163. package/lib/renderers/abstractMobile.render.js +0 -54
  164. package/lib/renderers/abstractMobile.render.js.map +0 -1
  165. package/lib/renderers/rest-api.renderer.d.ts +0 -7
  166. package/lib/renderers/rest-api.renderer.js +0 -68
  167. package/lib/renderers/rest-api.renderer.js.map +0 -1
  168. package/lib/renderers/visual-editor.renderer.d.ts +0 -7
  169. package/lib/renderers/visual-editor.renderer.js +0 -76
  170. package/lib/renderers/visual-editor.renderer.js.map +0 -1
  171. package/lib/renderers/wikimedia-desktop.renderer.d.ts +0 -4
  172. package/lib/renderers/wikimedia-desktop.renderer.js +0 -7
  173. package/lib/renderers/wikimedia-desktop.renderer.js.map +0 -1
  174. package/lib/renderers/wikimedia-mobile.renderer.d.ts +0 -19
  175. package/lib/renderers/wikimedia-mobile.renderer.js +0 -243
  176. package/lib/renderers/wikimedia-mobile.renderer.js.map +0 -1
  177. package/lib/util/articleListMainPage.d.ts +0 -3
  178. package/lib/util/articleListMainPage.js +0 -10
  179. package/lib/util/articleListMainPage.js.map +0 -1
  180. package/lib/util/articles.d.ts +0 -26
  181. package/lib/util/articles.js +0 -102
  182. package/lib/util/articles.js.map +0 -1
  183. package/lib/util/builders/url/desktop.director.d.ts +0 -8
  184. package/lib/util/builders/url/desktop.director.js +0 -15
  185. package/lib/util/builders/url/desktop.director.js.map +0 -1
  186. package/lib/util/builders/url/mobile.director.d.ts +0 -8
  187. package/lib/util/builders/url/mobile.director.js +0 -15
  188. package/lib/util/builders/url/mobile.director.js.map +0 -1
  189. package/lib/util/builders/url/rest-api.director.d.ts +0 -8
  190. package/lib/util/builders/url/rest-api.director.js +0 -18
  191. package/lib/util/builders/url/rest-api.director.js.map +0 -1
  192. package/lib/util/builders/url/visual-editor.director.d.ts +0 -9
  193. package/lib/util/builders/url/visual-editor.director.js +0 -18
  194. package/lib/util/builders/url/visual-editor.director.js.map +0 -1
  195. package/lib/util/saveArticles.d.ts +0 -8
  196. package/lib/util/saveArticles.js +0 -411
  197. package/lib/util/saveArticles.js.map +0 -1
  198. package/res/article_list_home.js +0 -24
  199. package/res/content.parsoid.css +0 -196
  200. package/res/inserted_style.css +0 -45
  201. package/res/templates/categories.html +0 -11
  202. package/res/templates/lead_section_wrapper.html +0 -6
  203. package/res/templates/pageWikimediaDesktop.html +0 -24
  204. package/res/templates/pageWikimediaMobile.html +0 -24
  205. package/res/templates/section_wrapper.html +0 -5
  206. package/res/templates/subcategories.html +0 -23
  207. package/res/templates/subpages.html +0 -17
  208. package/res/templates/subsection_wrapper.html +0 -5
  209. package/res/webpHandler.js +0 -165
  210. package/res/wm_mobile_override_script.js +0 -15
  211. package/res/wm_mobile_override_style.css +0 -20
  212. package/translation/br.json +0 -8
  213. package/translation/dag.json +0 -9
  214. package/translation/es-formal.json +0 -29
  215. package/translation/ha.json +0 -10
  216. package/translation/hi.json +0 -9
  217. package/translation/ig.json +0 -10
  218. package/translation/kaa.json +0 -9
  219. package/translation/nb.json +0 -9
  220. package/translation/nqo.json +0 -8
  221. package/translation/pt-br.json +0 -10
  222. package/translation/ro.json +0 -9
  223. package/translation/scn.json +0 -8
  224. package/translation/sq.json +0 -9
  225. package/translation/te.json +0 -9
  226. package/translation/tn.json +0 -9
  227. package/translation/tr.json +0 -10
@@ -15,53 +15,64 @@
15
15
  "title": "Admin Email",
16
16
  "description": "Email of the mwoffliner user which will be put in the HTTP user-agent string"
17
17
  },
18
- "articleList": {
18
+ "userAgent": {
19
19
  "type": "string",
20
20
  "required": false,
21
- "title": "Article List",
22
- "description": "List of articles to include. Comma separated list of titles or HTTP(S) URL to a file with one title (in UTF8) per line"
21
+ "title": "User Agent",
22
+ "description": "Custom User-Agent header for all HTTP requests. Defaults to 'MWOffliner/<version> (<adminEmail>)'"
23
23
  },
24
- "articleListToIgnore": {
25
- "type": "string",
24
+ "pageList": {
25
+ "type": "blob",
26
+ "kind": "txt",
27
+ "required": false,
28
+ "title": "Page List",
29
+ "description": "List of pages to include. Comma separated list of titles or HTTP(S) URL to a file with one title (in UTF8) per line",
30
+ "allowRemoteUrl": true
31
+ },
32
+ "pageListToIgnore": {
33
+ "type": "blob",
34
+ "kind": "txt",
26
35
  "required": false,
27
- "title": "Article List to ignore",
28
- "description": "List of articles to ignore. Comma separated list of titles or HTTP(S) URL to a file with one title (in UTF8) per line"
36
+ "title": "Page List to ignore",
37
+ "description": "List of pages to ignore. Comma separated list of titles or HTTP(S) URL to a file with one title (in UTF8) per line",
38
+ "allowRemoteUrl": true
29
39
  },
30
40
  "customMainPage": {
31
41
  "type": "string",
32
42
  "required": false,
33
43
  "title": "Main Page",
34
- "description": "Article Name to use as home page. Automatically built or guessed otherwise."
44
+ "description": "Custom page to be used as welcome page."
35
45
  },
36
46
  "customZimTitle": {
37
47
  "type": "string",
38
48
  "required": false,
39
49
  "title": "ZIM Title",
40
- "description": "Custom ZIM title. Wiki name otherwise.",
41
- "minLength": 1,
42
- "maxLength": 30
50
+ "description": "ZIM custom title metadata.",
51
+ "minGraphemes": 1,
52
+ "maxGraphemes": 30
43
53
  },
44
54
  "customZimDescription": {
45
55
  "type": "string",
46
56
  "required": false,
47
- "title": "ZIM Description",
57
+ "title": "ZIM custom description",
48
58
  "description": "Max length is 80 chars",
49
- "minLength": 1,
50
- "maxLength": 80
59
+ "minGraphemes": 1,
60
+ "maxGraphemes": 80
51
61
  },
52
62
  "customZimLongDescription": {
53
63
  "type": "string",
54
64
  "required": false,
55
- "title": "ZIM Long Description",
65
+ "title": "ZIM custom long description",
56
66
  "description": "Max length is 4000 chars",
57
- "minLength": 1,
58
- "maxLength": 4000
67
+ "minGraphemes": 1,
68
+ "maxGraphemes": 4000
59
69
  },
60
70
  "customZimFavicon": {
61
- "type": "url",
71
+ "type": "blob",
72
+ "kind": "image",
62
73
  "required": false,
63
74
  "title": "ZIM favicon",
64
- "description": "URL to a png to use as favicon. Will be resized to 48x48px."
75
+ "description": "URL to a PNG to use as favicon. Will be resized to 48x48px."
65
76
  },
66
77
  "customZimTags": {
67
78
  "type": "string",
@@ -77,6 +88,18 @@
77
88
  "pattern": "^[a-z]{3}(,[a-z]{3})*$",
78
89
  "customValidator": "language_code"
79
90
  },
91
+ "customZimName": {
92
+ "type": "string",
93
+ "required": false,
94
+ "title": "ZIM Name",
95
+ "description": "Custom ZIM Name template. Placeholders: {domain}, {lang}, {lang_or_variant}, {selection}."
96
+ },
97
+ "customZimFilename": {
98
+ "type": "string",
99
+ "required": false,
100
+ "title": "ZIM filename",
101
+ "description": "Custom ZIM filename template, with the .zim extension. Placeholders: {zim_name}, {domain}, {lang}, {lang_or_variant}, {selection}, {flavour}, {period}."
102
+ },
80
103
  "publisher": {
81
104
  "type": "string",
82
105
  "required": false,
@@ -84,66 +107,62 @@
84
107
  "isPublisher": true,
85
108
  "description": "ZIM publisher metadata. `openZIM` otherwise."
86
109
  },
87
- "filenamePrefix": {
88
- "type": "string",
89
- "required": false,
90
- "title": "Filename prefix",
91
- "description": "Custome filename up to the formats and date parts."
92
- },
93
110
  "formats": {
94
111
  "type": "list-of-string-enum",
95
112
  "required": false,
96
113
  "title": "Formats",
97
- "description": "Which flavours to build, as `<flavour>:<custom-suffix>`. Empty option is full without suffix.",
114
+ "description": "Which flavours to build. Empty option will scrape all page contents, including videos.",
98
115
  "alias": "format",
99
116
  "choices": [
100
- { "title": "NODET_NOPIC_MINI", "value": "nodet,nopic:mini" },
101
- { "title": "NODET_MINI", "value": "nodet:mini" },
102
- { "title": "NOPIC_NOPIC", "value": "nopic:nopic" },
103
- { "title": "NOVID_MAXI", "value": "novid:maxi" },
104
- { "title": "EMPTY", "value": "" },
105
- { "title": "NODET", "value": "nodet" },
106
- { "title": "NOPIC", "value": "nopic" },
107
- { "title": "NOVID", "value": "novid" },
108
- { "title": "NODET_NOPIC", "value": "nodet,nopic" }
109
- ]
110
- },
111
- "customFlavour": {
112
- "type": "string-enum",
113
- "required": false,
114
- "title": "Custom Flavour",
115
- "description": "Custom processor to filter and process articles (see extensions/*.js)",
116
- "choices": [
117
- {
118
- "title": "WIKTIONARY_FR",
119
- "value": "/tmp/mwoffliner/extensions/wiktionary_fr.js"
120
- }
117
+ { "title": "mini: no page details or pictures or videos", "value": "nodet,nopic:mini" },
118
+ { "title": "nopic: no page pictures or videos", "value": "nopic:nopic" },
119
+ { "title": "maxi: all except page videos", "value": "novid:maxi" },
120
+ { "title": "all: everything including videos", "value": "" }
121
121
  ]
122
122
  },
123
123
  "optimisationCacheUrl": {
124
124
  "type": "url",
125
125
  "required": false,
126
126
  "title": "Optimisation Cache URL",
127
- "description": "S3 Storage URL including credentials and bucket",
127
+ "description": "Object Storage URL (including credentials and bucket name) to cache optimised media files.",
128
128
  "secret": true
129
129
  },
130
130
  "addNamespaces": {
131
131
  "type": "string",
132
132
  "required": false,
133
133
  "title": "Add Namespaces",
134
- "description": "Include addional namespaces (comma separated numbers)"
134
+ "description": "Force additional namespaces (comma separated numbers)"
135
+ },
136
+ "addContentModels": {
137
+ "type": "string",
138
+ "required": false,
139
+ "title": "Add Content Models",
140
+ "description": "Include additional content models besides wikitext (comma separated, e.g 'Scribunto,json'). By default, only wikitext pages are scraped."
141
+ },
142
+ "onlyNamespaces": {
143
+ "type": "string",
144
+ "required": false,
145
+ "title": "Only Namespaces",
146
+ "description": "Include only pages of provided namespaces (comma separated numbers)"
135
147
  },
136
148
  "getCategories": {
137
149
  "type": "boolean",
138
150
  "required": false,
139
151
  "title": "Add categories",
140
- "description": "[WIP] Download category pages"
152
+ "description": "Download category pages"
141
153
  },
142
- "keepEmptyParagraphs": {
154
+ "categoriesPageSize": {
155
+ "type": "integer",
156
+ "required": false,
157
+ "title": "Categories page size",
158
+ "description": "Number of items (subcategories, pages, files) to display per page on category pages (default is 200)",
159
+ "min": 1
160
+ },
161
+ "keepEmptySections": {
143
162
  "type": "boolean",
144
163
  "required": false,
145
- "title": "Keep empty paragraphs",
146
- "description": "Keep all paragraphs, even empty ones."
164
+ "title": "Keep empty sections",
165
+ "description": "Keep all sections, even empty ones typically used as placeholders in wikis to outline expected page structure."
147
166
  },
148
167
  "minifyHtml": {
149
168
  "type": "boolean",
@@ -151,35 +170,17 @@
151
170
  "title": "Minify HTML",
152
171
  "description": "Try to reduce the size of the HTML"
153
172
  },
154
- "mwWikiPath": {
155
- "type": "string",
156
- "required": false,
157
- "title": "Wiki Path",
158
- "description": "Mediawiki wiki base path. Otherwise `/wiki/`."
159
- },
160
173
  "mwActionApiPath": {
161
174
  "type": "string",
162
175
  "required": false,
163
176
  "title": "API Path",
164
- "description": "Mediawiki API path. Otherwise `/w/api.php`."
165
- },
166
- "mwRestApiPath": {
167
- "type": "string",
168
- "required": false,
169
- "title": "REST API Path",
170
- "description": "Mediawiki REST API path. Otherwise `/w/rest.php`."
177
+ "description": "Mediawiki API path. (by default `/w/api.php`)."
171
178
  },
172
179
  "mwModulePath": {
173
180
  "type": "string",
174
181
  "required": false,
175
182
  "title": "Module Path",
176
- "description": "Mediawiki module load path. Otherwise `/w/load.php`."
177
- },
178
- "mwIndexPhpPath": {
179
- "type": "string",
180
- "required": false,
181
- "title": "index.php Path",
182
- "description": "Path to Mediawiki index.php. Otherwise `/w/index.php`."
183
+ "description": "MediaWiki module load path ($wgLoadScript), automatically chosen based on script path otherwise."
183
184
  },
184
185
  "mwDomain": {
185
186
  "type": "string",
@@ -217,14 +218,14 @@
217
218
  "type": "integer",
218
219
  "required": false,
219
220
  "title": "Request Timeout",
220
- "description": "Request timeout (in seconds)",
221
+ "description": "Request timeout in seconds (default is 120s)",
221
222
  "min": 1
222
223
  },
223
224
  "speed": {
224
225
  "type": "float",
225
226
  "title": "Speed",
226
227
  "required": false,
227
- "description": "Multiplicator for the number of parallel HTTP requests on Parsoid backend. Otherwise `1`. Reduce on throttled Wikis."
228
+ "description": "Controls scraping speed. 1 is the default, 0.1 makes it ten times slower, 10 makes it ten times faster. Values above 1 must be integers (number of parallel workers)."
228
229
  },
229
230
  "withoutZimFullTextIndex": {
230
231
  "type": "boolean",
@@ -232,23 +233,23 @@
232
233
  "required": false,
233
234
  "description": "Don't include a fulltext search index to the ZIM"
234
235
  },
235
- "verbose": {
236
+ "logLevel": {
236
237
  "type": "string-enum",
237
238
  "required": false,
238
239
  "title": "Verbose",
239
- "description": "Level of log verbosity, one of info, log, warn, error or quiet. Default is error.",
240
+ "description": "Set the log level. One of: \"debug\", \"info\", \"warn\", \"error\", \"silent\" (default: \"info\").",
240
241
  "choices": [
242
+ { "title": "DEBUG", "value": "debug " },
241
243
  { "title": "INFO", "value": "info" },
242
- { "title": "LOG", "value": "log" },
243
244
  { "title": "WARN", "value": "warn" },
244
245
  { "title": "ERROR", "value": "error" },
245
- { "title": "QUIET", "value": "quiet" }
246
+ { "title": "SILENT", "value": "silent" }
246
247
  ]
247
248
  },
248
249
  "webp": {
249
250
  "type": "boolean",
250
251
  "title": "Webp",
251
- "description": "Convert images to Webp",
252
+ "description": "Convert all jpeg, png and gif images to webp format",
252
253
  "required": false
253
254
  },
254
255
  "forceRender": {
@@ -256,13 +257,7 @@
256
257
  "required": false,
257
258
  "title": "Force Render",
258
259
  "description": "Force the usage of a specific API end-point/render, automatically chosen otherwise",
259
- "choices": [
260
- { "title": "VISUAL_EDITOR", "value": "VisualEditor" },
261
- { "title": "WIKIMEDIA_DESKTOP", "value": "WikimediaDeskto" },
262
- { "title": "WIKIMEDIA_MOBILE", "value": "WikimediaMobile" },
263
- { "title": "REST_API", "value": "RestApi" },
264
- { "title": "ACTION_PARSE", "value": "ActionParse" }
265
- ]
260
+ "choices": [{ "title": "ACTION_PARSE", "value": "ActionParse" }]
266
261
  },
267
262
  "forceSkin": {
268
263
  "type": "string",
@@ -277,10 +272,103 @@
277
272
  "required": false
278
273
  },
279
274
  "langVariant": {
275
+ "type": "list-of-string",
276
+ "title": "Language Variants",
277
+ "description": "Use specific language variants, only for wikis supporting language conversion. Each variant will cause a new ZIM file to be created.",
278
+ "required": false
279
+ },
280
+ "javaScript": {
281
+ "type": "string-enum",
282
+ "title": "JavaScript",
283
+ "description": "Amount of JavaScript being allowed in pages (default: trusted)",
284
+ "required": false,
285
+ "choices": [
286
+ { "title": "NONE", "value": "none" },
287
+ { "title": "TRUSTED", "value": "trusted" },
288
+ { "title": "ALL", "value": "all" }
289
+ ]
290
+ },
291
+ "addModules": {
280
292
  "type": "string",
281
- "title": "Language Variant",
282
- "description": "Use a specific language variant, only for wikis supporting language conversion",
293
+ "title": "Additional modules",
294
+ "description": "Add additional ResourceLoader modules for dynamic loading (comma separated list)",
283
295
  "required": false
296
+ },
297
+ "customCss": {
298
+ "type": "blob",
299
+ "kind": "css",
300
+ "required": false,
301
+ "title": "Custom CSS",
302
+ "description": "Custom CSS to inject into all rendered pages ; remote value can be a comma-separated list of CSS URLs.",
303
+ "allowRemoteUrl": true
304
+ },
305
+ "customJs": {
306
+ "type": "blob",
307
+ "kind": "txt",
308
+ "required": false,
309
+ "title": "Custom JS",
310
+ "description": "Custom JS to inject into all rendered pages ; remote value can be a comma-separated list of JS URLs.",
311
+ "allowRemoteUrl": true
312
+ },
313
+ "mathJaxSource": {
314
+ "type": "url",
315
+ "required": false,
316
+ "title": "MathJax Source",
317
+ "description": "MathJax ZIP archive to extract and include in the ZIM. Pages needing MathJax are detected automatically from their JS module list."
318
+ },
319
+ "mathJaxConfig": {
320
+ "type": "blob",
321
+ "kind": "html",
322
+ "required": false,
323
+ "title": "MathJax Config",
324
+ "description": "MathJax configuration HTML <script>. Its content is injected inline in pages that need MathJax, before the MathJax library.",
325
+ "allowRemoteUrl": true
326
+ },
327
+ "mathJaxEntryPoint": {
328
+ "type": "string",
329
+ "required": false,
330
+ "title": "MathJax Entry Point",
331
+ "description": "Relative path inside the extracted MathJax archive to the main entry-point script. Defaults to MathJax.js (MathJax 2). For MathJax 3 use e.g. es5/tex-chtml.js."
332
+ },
333
+ "mathJaxAllPages": {
334
+ "type": "boolean",
335
+ "required": false,
336
+ "title": "MathJax On All Pages",
337
+ "description": "Inject MathJax config/entry-point scripts on all pages, instead of only on pages whose JS module list mentions MathJax. Useful for wikis which do not list MathJax in their page modules. Requires MathJax Source to also be set."
338
+ }
339
+ },
340
+ "zimMetadata": [
341
+ {
342
+ "metadata": "Name",
343
+ "flag": "customZimName"
344
+ },
345
+ {
346
+ "metadata": "Title",
347
+ "flag": "customZimTitle"
348
+ },
349
+ {
350
+ "metadata": "Description",
351
+ "flag": "customZimDescription"
352
+ },
353
+ {
354
+ "metadata": "LongDescription",
355
+ "flag": "customZimLongDescription"
356
+ },
357
+ {
358
+ "metadata": "Publisher",
359
+ "flag": "publisher"
360
+ },
361
+ {
362
+ "metadata": "Language",
363
+ "flag": "customZimLanguage"
364
+ },
365
+ {
366
+ "metadata": "Illustration",
367
+ "flag": "customZimFavicon"
368
+ },
369
+ {
370
+ "metadata": "Flavour",
371
+ "flag": "formats"
284
372
  }
285
- }
373
+ ]
286
374
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mwoffliner",
3
- "version": "1.17.4",
3
+ "version": "2.0.0",
4
4
  "description": "MediaWiki ZIM scraper",
5
5
  "main": "lib/mwoffliner.lib.js",
6
6
  "license": "GPL-3.0",
@@ -20,10 +20,12 @@
20
20
  "test": "npm run test:unit-coverage -- --silent && npm run test:e2e-coverage -- --silent",
21
21
  "test-verbose": "npm run test:unit-coverage && npm run test:e2e-coverage",
22
22
  "test-without-coverage": "npm run test:unit -- -- --silent && npm run test:e2e -- -- --silent",
23
+ "test:i18n": "node dev/check-translations.js",
23
24
  "codecov:merge": "rm -f coverage.json && rm -rf coverage/merge && mkdir -p coverage/merge && cp coverage/e2e/coverage-final.json coverage/merge/coverage-e2e.json && cp coverage/unit/coverage-final.json coverage/merge/coverage-unit.json && nyc report --reporter=lcov --temp-dir=coverage/merge && rm -rf coverage/merge coverage/unit coverage/e2e",
24
25
  "codecov": "rm -rf coverage && npm run test:unit-coverage && npm run test:e2e-coverage && npm run codecov:merge",
25
26
  "lint": "eslint .",
26
27
  "lint-fix": "eslint --fix .",
28
+ "typecheck": "tsc --noEmit",
27
29
  "format": "prettier --write './**/*.ts' 'translation/*'",
28
30
  "format-check": "prettier --check './**/*.ts' 'translation/*'",
29
31
  "prebuild": "node -p \"'export const LIB_VERSION = \\'' + require('./package.json').version + '\\''\" > src/version.ts",
@@ -55,84 +57,83 @@
55
57
  "url": "https://github.com/openzim/mwoffliner/issues"
56
58
  },
57
59
  "engines": {
58
- "node": ">=24 <24.6 || >=24.7 <25"
60
+ "node": ">=26 <27"
59
61
  },
60
62
  "dependencies": {
61
- "@aws-sdk/client-s3": "^3.937.0",
63
+ "@aws-sdk/client-s3": "^3.1090.0",
64
+ "@file-type/xml": "^1.1.1",
62
65
  "@ladjs/country-language": "^1.0.3",
63
- "@openzim/libzim": "^3.5.0",
66
+ "@openzim/libzim": "4.6.0",
64
67
  "@types/async": "^3.2.25",
65
68
  "@types/backoff": "^2.5.5",
66
69
  "@types/bluebird": "^3.5.42",
67
70
  "@types/html-minifier-terser": "^7.0.2",
68
- "@types/imagemin-gifsicle": "^7.0.4",
69
- "@types/imagemin-jpegtran": "^5.0.4",
70
- "@types/imagemin-optipng": "^5.2.4",
71
- "@types/imagemin-webp": "^7.0.3",
72
71
  "@types/md5": "^2.3.6",
73
- "@types/node": "^24.10.1",
72
+ "@types/node": "^26.1.1",
74
73
  "@types/semver": "^7.7.1",
75
- "ajv": "^8.17.1",
74
+ "ajv": "^8.20.0",
76
75
  "async": "^3.2.6",
77
76
  "async-mutex": "^0.5.0",
78
- "axios": "^1.13.2",
77
+ "axios": "^1.18.1",
79
78
  "backoff": "^2.5.0",
80
79
  "deepmerge": "^4.3.1",
81
- "details-element-polyfill": "^2.4.0",
82
- "domino": "^2.1.6",
83
- "execa": "^9.6.0",
84
- "follow-redirects": "^1.15.11",
80
+ "domino": "^2.1.7",
81
+ "execa": "^10.0.0",
82
+ "follow-redirects": "^1.16.0",
85
83
  "html-minifier-terser": "^7.2.0",
86
- "http-cookie-agent": "^7.0.1",
87
- "imagemin": "^9.0.1",
88
- "imagemin-advpng": "^6.0.0",
89
- "imagemin-gifsicle": "^7.0.0",
90
- "imagemin-jpegoptim": "^8.0.0",
91
- "imagemin-jpegtran": "^8.0.0",
92
- "imagemin-optipng": "^8.0.0",
93
- "imagemin-pngquant": "^10.0.0",
94
- "imagemin-webp": "^8.0.0",
84
+ "http-cookie-agent": "^8.0.0",
85
+ "i18next": "^26.3.6",
95
86
  "md5": "^2.3.0",
96
87
  "merge": "^2.1.1",
97
88
  "mkdirp": "^3.0.1",
98
- "mocha": "^11.7.5",
99
- "p-map": "^7.0.3",
100
- "public-ip": "^7.0.1",
101
- "redis": "^4.7.1",
102
- "rimraf": "^6.1.2",
103
- "semver": "^7.7.3",
104
- "sharp": "^0.33.5",
89
+ "p-map": "^7.0.5",
90
+ "pino": "^10.3.1",
91
+ "pino-pretty": "^13.1.3",
92
+ "public-ip": "^8.0.0",
93
+ "redis": "^6.1.0",
94
+ "rimraf": "^6.1.3",
95
+ "semver": "^7.8.5",
96
+ "sharp": "^0.35.3",
97
+ "sharp-apng": "^0.1.5",
105
98
  "split-by-grapheme": "^1.0.1",
106
99
  "swig-templates": "^2.0.3",
107
- "tough-cookie": "^5.1.2",
100
+ "tough-cookie": "^6.0.2",
101
+ "unzipper": "^0.12.5",
108
102
  "url-join": "^5.0.0",
109
103
  "utf8-binary-cutter": "^0.9.2",
110
104
  "webp-hero": "0.0.2",
111
- "yargs": "^17.7.2"
105
+ "yargs": "^18.0.0"
112
106
  },
113
107
  "keywords": [
114
108
  "mediawiki",
115
109
  "zim"
116
110
  ],
117
111
  "devDependencies": {
118
- "@eslint/js": "^9.23.0",
119
- "@types/http-cache-semantics": "^4.0.4",
120
- "@types/jest": "^29.5.14",
121
- "@types/tape-promise": "^4.0.6",
112
+ "@eslint/js": "^10.0.1",
113
+ "@types/http-cache-semantics": "^4.2.0",
114
+ "@types/jest": "^30.0.0",
115
+ "@types/tape-promise": "^4.0.7",
122
116
  "@types/tmp": "^0.2.6",
123
- "@typescript-eslint/parser": "^8.29.0",
124
- "dotenv": "^16.6.1",
125
- "eslint": "^9.23.0",
126
- "file-type": "^20.5.0",
127
- "jest": "^29.7.0",
128
- "nyc": "^17.1.0",
129
- "prettier": "3.5.3",
130
- "replace": "^1.2.2",
131
- "tmp": "^0.2.3",
132
- "ts-jest": "^29.3.1",
117
+ "@types/unzipper": "^0.10.11",
118
+ "@typescript-eslint/parser": "^8.64.0",
119
+ "dotenv": "^17.4.2",
120
+ "eslint": "^10.7.0",
121
+ "file-type": "^22.0.1",
122
+ "jest": "^30.4.2",
123
+ "nyc": "^18.0.0",
124
+ "prettier": "3.9.6",
125
+ "tmp": "^0.2.7",
126
+ "ts-jest": "^29.4.11",
133
127
  "ts-node": "^10.9.2",
134
128
  "tsconfig-paths": "^4.2.0",
135
- "typescript": "^5.8.2",
136
- "typescript-eslint": "^8.29.0"
129
+ "typescript": "^6.0.3",
130
+ "typescript-eslint": "^8.64.0"
131
+ },
132
+ "allowScripts": {
133
+ "@openzim/libzim@4.6.0": true,
134
+ "unrs-resolver@1.12.2": true
135
+ },
136
+ "overrides": {
137
+ "minimist": "^1.2.8"
137
138
  }
138
139
  }
@@ -0,0 +1,20 @@
1
+ ;(function () {
2
+ document.addEventListener('DOMContentLoaded', function () {
3
+ var body = document.body
4
+ if (body.classList.contains('page-list-home')) {
5
+ // 'import' to avoid not defined js error
6
+ var imagesLoaded = window['imagesLoaded']
7
+ var Masonry = window['Masonry']
8
+ var grid = document.getElementById('content')
9
+
10
+ // js available, remove nojs styles
11
+ document.getElementsByClassName('mw-body-content')[0].classList.remove('nojs')
12
+
13
+ imagesLoaded(grid, function () {
14
+ new Masonry(grid, {
15
+ itemSelector: '.item',
16
+ })
17
+ })
18
+ }
19
+ })
20
+ })()
@@ -1 +1 @@
1
- <svg viewBox="0 0 1500 1500" xmlns="http://www.w3.org/2000/svg"><path d="m565.8 364.8h865.2v563.3h-865.2z" fill="#fff"/><path d="m1430.5 365.3v562.3h-864.2v-562.3zm1-1h-866.2v564.3h866.2z"/><path d="m781 1081.5c1.1 5.5 5.5 3.8 8.9 3.9h60.8c3.3-3.1 7.6-2.4 11.5-2.4h273.1c4.2 0 8.8-1 12.3 2.8-39.8 13.6-79.7 27.2-119.5 40.8-9.1 3.1-18.1 6.4-27.2 9.5-75.4 0-150.7-.2-226.1-.3-3.7 0-7.4 0-12.5 0 6.4-18.6 12.6-36.5 18.7-54.3z" fill="#c5c6c8"/><path d="m1499.7 360.6c0-19.2-14.3-28.7-33.9-29.4s-18.6-.2-27.9 0c17.3 6.7 23.9 19.5 23.9 37.8-.2 184.4-.3 368.8 0 553.2 0 18.2-6.4 31-23.1 38.5 7.7.1 15.4.4 23.1.4 21 0 37.7-7.1 37.7-28.1 0-141 .1-429.1.1-572.2z" fill="#f89a16"/><path d="m991.4 1168.2c7.7 0 10.4-2.6 9.7-10.4-.7-7.4-.2-14.9-.2-22.3 2.1-5.1 7.3-5.4 11.5-6.8 44.5-14.8 88.9-29.7 133.1-45.1 2.5-.8 3.7-2.6 3.8-5.2.2-23.9 0-47.8 0-71.7 0-4.6-.5-9.4 2.5-13.5 14.4-3.7 28.7-4.7 43 .4.1 32.2.6 64.5 0 96.7-.1 9.3 1.7 12.8 11.9 12.3 18.6.5 30.7 1.1 49.9 1.1 3 0-8.2-.5-5.3 1.3-3.7 5.4 3.1 1.9-2 1.4-31.9-.3-53.7.1-85.7 0-6.4 0-8.7 3-8.7 9.1.2 13 .2 26 0 39 0 6.7 2.7 9.5 9.4 9.4 10.9-.1 21.7-.2 32.6 0 4.2 0 8.8-.8 12 3.4-21.4 1.8-42.7.9-64.1.9-127.6 0-15.9 0-143.5-.2-11.4 0-10.1 0-10.1 0z" fill="#f89a16"/><path d="m1265.6 1104.5c-30.9 6.8-50.6 31.5-52 64.2-.8.2-1.8-.2-2.6 0-17.3-.1-34.5-.4-51.8-.3-4.4 0-7-.4-6.9-6 .3-17.9.2-35.8 0-53.7 0-4.3.9-6.3 5.7-6.2 34.5.2 69.1.2 103.6.3 1.6 0 3.2-.1 3.9 1.8z"/><path d="m1194.9 994.1c-14.1 0-28.2 0-42.3 0-5.8-9.9-2.8-20.3-2.1-30.6.5-1.1 1.3-2 2.2-2.7 89.8-.1 179.7-.2 269.5-.3 3.1 0 6.2.3 9.2.5-3.3 1.6-6.7.7-10.1.8-72.4 0-144.7.1-217.1-.1-7.2 0-9.9 1.6-9.3 9.2 0 7.4 0 15.5-.2 23.2z" fill="#cc7f3e"/><path d="m1422.9 330.8c-267.4 0-534.8 0-802.2 0-2.5 0-5-.2-7.4-.3-13.7 0-27.4 0-41.1 0-20.3 2.6-30.7 14.6-30.7 36.1v238.5c0 3.3 1 6.8-1.2 10.3-7.8-3-15.4-6.5-23.4-8.7-6.5-1.9-8-5.3-8.2-11.8-2.4-66.2-32.8-116.6-93.6-142.2-79.7-33.5-156-20.5-225.6 30.7-38.6 28.3-65.3 66.5-89 107.3-46.4 79.8-83.4 163.2-96 255.6-7.3 53.3-6 106.4 8.5 158.6 27.8 99.8 107.7 162.2 208.1 162.6 104.1.3 208.2.5 312.4.7 17.1 0 34.2-.8 51.3-.3 47.8 1.5 95.7 0 143.5.4h264.1c1.5 0 3.1-.1 4.6 0 4.3.3 6.5-2 6.8-5.9.6-8.9 2.1-17.9-1.5-26.6-4.1-3.8-9.3-3-14.2-3-36.6 0-73.3 0-109.9 0-33.2 0-68.8 0-102 0-11.3 0-11.9-.9-8.3-11.8 3.8-11.6 7.8-23.1 11.5-34.7 1.3-3.7 1-2.5 1.7-4.9 2-6.1 4.1-12.3 6.1-18.4l27.9-83.4c2.7-7.9.6-9-6.5-8.1-33 4.4-56.2 21.8-68.3 52.7-8.8 22.7-16 45.9-24 68.9-1 .5-1.9 1-2.9 1.6-4.1 12.2-4.6 12.4-18 12.3-5.1 0-10.3.2-15.4.2-3.5.9-7.1 1.6-10.7 2.3-2.4-.8-1-5.4-.3-7.7 13.4-40.5 26.9-80.9 40.4-121.3.8-2.4 1.6-4.9 2.6-8.2 0 0 0 0 0-.1-.2-.2-.4-.4-.6-.6-28.2.3-49.6 12.1-66.2 33.9-10 13.1-13.3 29.1-18.7 44.2-6.4 18.1-12.4 36.3-18.3 54.6-1.2 3.6-2.2 6-6.7 5.9-25.1-.2-50.3 0-77.2 0 30.8-46.1 43.5-95.7 37.1-149.2h288.2c1 .7 1.6 1.5 2.1 2.4-.2 93.4 54.7 93.5 54.9.1 3.7.5 11.1 4 11.1.3 0-2.9 174.2-1.9 176.6-1.8 0 19.4 38.9 1.3 58.3 1.6 20.8 0 35.2.2 52.8 0 71.9-.6 143.9-1.8 215.9-1.9 3.4 0 6.8.4 10.2-.4 2.4-.2 4.8-.4 7.2-.6 8.5-1.2 14.9-5.7 19.8-12.6 5.7-8.1 6.4-17.3 6.4-26.7 0-182.9 0-365.7 0-548.6 0-5.9-.2-11.8-1.9-17.5-3.8-12.8-10.6-22.4-25.1-23.9l-15-.3zm-881.6 557.1c0 .5-.5 1-1.3 2.5-29.3-54-72.2-90.1-130.3-107.8-1.8-.5-3.3-1-5.4-1.3-16.8-2.7-25.9-10.4-29-26.9 11-2.7 22.7-5.2 33.8-9.7 25.9-10.5 47.7-26.4 64.9-48.2 15.8-20 37.3-25.2 61.1-25.5 3.6 0 6.3.6 6.3 5.6-.2 70.4-.2 140.9-.2 211.3zm865.3 27.9c-270.1-.2-540.2-.2-810.4 0-7.8 0-9.7-2-9.6-9.7.3-71.7.2-143.5.2-215.2v-8.4c4.8-.3 8.2 2.1 11.8 3.7 84.5 37.3 152.8 93.9 203.7 171.2 6.3 9.6 7.2 9.6 14.4.2 9.6-12.6 10.2-26.4 4.3-40.5-10.8-26-29.2-46.7-49.3-65.8-51.1-48.4-111.4-82.5-175-111.2-7.5-3.4-10.2-7.1-10.2-15.7.4-78.9.3-157.7 0-236.6 0-7.6 1-10.5 9.8-10.4 270.1.3 540.2.3 810.4 0 7.9 0 9.6 2.2 9.6 9.8-.2 173-.2 345.9 0 518.9 0 7.9-2.2 9.6-9.8 9.6z"/><path d="m460 627.3c-17 22.8-44.3 31.1-70.2 22-24.3-8.6-41.5-33.6-40.4-58.9 1.2-27.7 18.9-50.5 44.8-57.5 25.5-7 52.1 2.7 66.7 25-9.6-4.3-18.8-6.7-28.4-4.6-9.4 2.1-17.3 6.7-23.2 14.4-10.2 13.1-11 31.1-2 45.3 10.1 15.8 24.8 20 52.8 14.3z" fill="#fdfdfd"/><path d="m906.7 961h187.5c.9.8 1.6 1.8 2.1 2.8 2 10.4 1.1 20.9.7 31.4-.1 2.7 9.4 6.6 4.7 6.4-4.6-7.4.3-18.7 0-26.6-.5-11.9 13.4-12.6-24.6-12.6-38.1 0-76.7 0-114.2 0-12 0-16.2.2-16.4 12.1-.1 5.5 0 11.7.5 19.7-5.1 4-10.2 2.7-15.9 2.7-7.7 0-15.4.5-23.1 0-3.6-1.3-4.1-4.5-4.2-7.5-.2-8.6-1.2-17.2.8-25.8.5-1.1 1.3-1.9 2.3-2.6z" fill="#cb7f3e"/><path d="m669.2 1109.5c15.4-6.2 31-12 47.1-16.3-3.7 16.8-3.7 16.9-20.3 16.8-8.9 0-17.9-.3-26.8-.5z" fill="#c5c6c8"/><path d="m1094.8 962.5c-.3-.5-.5-1-.6-1.6h58.6c0 .6-.3 1.2-.7 1.7-1.9 1.9-4.3 2.6-6.8 2.7-14.6.4-29.2.4-43.8 0-2.5 0-4.9-.8-6.8-2.7z" fill="#2c1d08"/><path d="m1152.1 951.1c-19.1 0-38.2 2.7-57.3 2.7-1.2 12.7 1.5 34.3-1.7 46.9-3.6 19.3-17.9 32-37.4 32.2-24.2.3-48.4 0-72.6 0-4.2-.3-8.1-1-11.6-2-8.5 0-17.1 0-25.6-.2-17.3-.3-29.8-10.1-34.8-26.8-.8-2.6-.7-5.6-3.4-7.3-3-11.2-.3-34.1-1.6-45.4-14.9 0-29.8 3.3-44.7 2.7-7.5-.3-9.4 10.8-9.3 18 .3 34.1.3 68.3 0 102.4 0 7.1 1.6 9.6 9.2 9.6 96.9-.3 193.8-.2 290.7-.2l.2-132.4z"/><path d="m946.8 994.1c2.8 23.6 12.6 34 36.3 38.7-13.9.1-27.9.9-41.8.3-18.4-.8-32.6-16.8-33.7-36.6 5.4-4.6 11.9-1.8 17.9-2.2 7.1-.5 14.3-.1 21.4-.1z" fill="#f89a16"/><path d="m330.3 629.9c-15 .3-29.9.2-43.3-8.2-17.3-10.9-29.8-25.5-33.2-46.1-3.2-19.1-3.9-38.4 1.2-57.3 4.9-18.1 16.2-31.6 32.5-41.1 5.2-3 6.7-2.6 6.7 3.7-.2 23.3-.1 46.6 0 69.9 0 13.4 9.6 25.7 22.1 28.6 11.7 2.8 24.7-3.3 31.3-14.4 2.3-3.9 2.8-8 2.8-12.5 0-22.3 0-44.6 0-66.9 0-3.5-1.2-7.4 2.2-10.3 23.4 10.5 35.4 29.4 40.1 53.8 9.6 24.7.6 65.7-18.4 83.5-2.4 2.3-9.4 8.4-14 10.6-11.5 5.4-16.4 6.9-29.8 6.7z" fill="#f89a16"/><path d="m352.1 475.3c-.5-15.1-1.2-24-1.7-36 0-15.9 0-31.8-.3-47.6-.3-14.1-8.1-23.2-22.1-26.3-30.2-2-60.5-.3-90.7-.9 0 0-.1 0-.2 0-3.8 0-8.1.4-11.7.8-27.5 2.3-48.7 26-49 55.1-.3 24.7-.2 49.4-.3 74.1 17.2-14.3 35.7-26.6 55.6-36.7 2.9-3.7 1-8.3 1.1-12.7.2-10.6.3-21.1.4-31.6h.5c17.7 0 35.3.3 53 0 5.7-.1 7.7 1.7 7.2 7.3-.5 6.3-.3 12.6-.4 19 0 2.3.3 4.7.3 7q.2 20.7-20.4 21.2c-34.3.9-62.2 23.8-68.9 57.2-2.6 12.8-1.4 25.9-1 38.9.9 28.6 19.9 55.1 47.4 62.9 25.8 7.3 51.3 6 77.8 2.8-4.1.5-3.8.2-8.2 0-19.8-.5-38-11.3-50.3-26.2-23.6-28.6-22.5-82.8 2-110.8 4.8-5.5 10.4-10 17.8-12.7 1.4 3.8.9 7.2.9 10.4.1 20.7-.5 41.4.2 62 .6 16.4 14.8 29.7 30.6 29.8 16 .1 30.1-11.5 30.6-27.1.7-26.6.9-53.3-.1-80z" fill="#cc803e"/><g fill="#f89a16"><path d="m1338.6 1168.6c-.3-36.6-30.1-66.3-66.8-66.3s-66.5 29.6-66.8 66.3z"/><path d="m894.3 727-158.3-59.9v-43.2l158.3-59.9v40.9l-143 52.2v-23.3l143 52.2v40.9z"/><path d="m986.8 680.8c0-7.5 1.3-14.2 3.8-20.1s5.8-11.2 9.6-16c3.9-4.8 8-9.1 12.5-13.1 4.4-4 8.6-7.8 12.5-11.5s7.1-7.5 9.6-11.5 3.8-8.5 3.8-13.6c0-7.8-3.3-14.1-9.8-19s-15.1-7.3-25.8-7.3-20.3 2.2-28.4 6.5-14.8 10.4-20.1 18.1l-40.2-23.6c9.1-13.7 21.5-24.6 37.1-32.6s34.6-12 57-12 31.6 2.4 44.2 7.2 22.5 11.7 29.6 20.8 10.6 20.2 10.6 33.3-1.3 16.9-4 23.4-6.1 12.3-10.3 17.1c-4.2 4.9-8.7 9.4-13.5 13.6s-9.3 8.3-13.5 12.3-7.6 8.2-10.3 12.6-4 9.5-4 15.3h-50.6zm25.3 83.8c-9.1 0-16.6-3-22.6-9s-9-13.1-9-21.3 3-15.5 9-21.1c6-5.7 13.5-8.5 22.6-8.5s17.2 2.8 23.1 8.5 8.8 12.7 8.8 21.1-2.9 15.3-8.8 21.3-13.6 9-23.1 9z"/><path d="m1131.1 727v-40.9l143-52.2v23.3l-143-52.2v-40.9l158.3 59.9v43.2l-158.3 59.9z"/><path d="m330.3 629.9c-15 .3-29.9.2-43.3-8.2-17.3-10.9-29.8-25.5-33.2-46.1-3.2-19.1-3.9-38.4 1.2-57.3 4.9-18.1 16.2-31.6 32.5-41.1 5.2-3 6.7-2.6 6.7 3.7-.2 23.3-.1 46.6 0 69.9 0 13.4 9.6 25.7 22.1 28.6 11.7 2.8 24.7-3.3 31.3-14.4 2.3-3.9 2.8-8 2.8-12.5 0-22.3 0-44.6 0-66.9 0-3.5-1.2-7.4 2.2-10.3 23.4 10.5 35.4 29.4 40.1 53.8 9.6 24.7.6 65.7-18.4 83.5-2.4 2.3-9.4 8.4-14 10.6-11.5 5.4-16.4 6.9-29.8 6.7z"/></g></svg>
1
+ <svg viewBox="0 0 1500 1500" xmlns="http://www.w3.org/2000/svg"><path d="m565.8 364.8h865.2v563.3h-865.2z" fill="#fff"/><path d="m1430.5 365.3v562.3h-864.2v-562.3zm1-1h-866.2v564.3h866.2z"/><path d="m781 1081.5c1.1 5.5 5.5 3.8 8.9 3.9h60.8c3.3-3.1 7.6-2.4 11.5-2.4h273.1c4.2 0 8.8-1 12.3 2.8-39.8 13.6-79.7 27.2-119.5 40.8-9.1 3.1-18.1 6.4-27.2 9.5-75.4 0-150.7-.2-226.1-.3-3.7 0-7.4 0-12.5 0 6.4-18.6 12.6-36.5 18.7-54.3z" fill="#c5c6c8"/><path d="m1499.7 360.6c0-19.2-14.3-28.7-33.9-29.4s-18.6-.2-27.9 0c17.3 6.7 23.9 19.5 23.9 37.8-.2 184.4-.3 368.8 0 553.2 0 18.2-6.4 31-23.1 38.5 7.7.1 15.4.4 23.1.4 21 0 37.7-7.1 37.7-28.1 0-141 .1-429.1.1-572.2z" fill="#f89a16"/><path d="m991.4 1168.2c7.7 0 10.4-2.6 9.7-10.4-.7-7.4-.2-14.9-.2-22.3 2.1-5.1 7.3-5.4 11.5-6.8 44.5-14.8 88.9-29.7 133.1-45.1 2.5-.8 3.7-2.6 3.8-5.2.2-23.9 0-47.8 0-71.7 0-4.6-.5-9.4 2.5-13.5 14.4-3.7 28.7-4.7 43 .4.1 32.2.6 64.5 0 96.7-.1 9.3 1.7 12.8 11.9 12.3 18.6.5 30.7 1.1 49.9 1.1 3 0-8.2-.5-5.3 1.3-3.7 5.4 3.1 1.9-2 1.4-31.9-.3-53.7.1-85.7 0-6.4 0-8.7 3-8.7 9.1.2 13 .2 26 0 39 0 6.7 2.7 9.5 9.4 9.4 10.9-.1 21.7-.2 32.6 0 4.2 0 8.8-.8 12 3.4-21.4 1.8-42.7.9-64.1.9-127.6 0-15.9 0-143.5-.2-11.4 0-10.1 0-10.1 0z" fill="#f89a16"/><path d="m1265.6 1104.5c-30.9 6.8-50.6 31.5-52 64.2-.8.2-1.8-.2-2.6 0-17.3-.1-34.5-.4-51.8-.3-4.4 0-7-.4-6.9-6 .3-17.9.2-35.8 0-53.7 0-4.3.9-6.3 5.7-6.2 34.5.2 69.1.2 103.6.3 1.6 0 3.2-.1 3.9 1.8z"/><path d="m1194.9 994.1c-14.1 0-28.2 0-42.3 0-5.8-9.9-2.8-20.3-2.1-30.6.5-1.1 1.3-2 2.2-2.7 89.8-.1 179.7-.2 269.5-.3 3.1 0 6.2.3 9.2.5-3.3 1.6-6.7.7-10.1.8-72.4 0-144.7.1-217.1-.1-7.2 0-9.9 1.6-9.3 9.2 0 7.4 0 15.5-.2 23.2z" fill="#cc7f3e"/><path d="m1422.9 330.8c-267.4 0-534.8 0-802.2 0-2.5 0-5-.2-7.4-.3-13.7 0-27.4 0-41.1 0-20.3 2.6-30.7 14.6-30.7 36.1v238.5c0 3.3 1 6.8-1.2 10.3-7.8-3-15.4-6.5-23.4-8.7-6.5-1.9-8-5.3-8.2-11.8-2.4-66.2-32.8-116.6-93.6-142.2-79.7-33.5-156-20.5-225.6 30.7-38.6 28.3-65.3 66.5-89 107.3-46.4 79.8-83.4 163.2-96 255.6-7.3 53.3-6 106.4 8.5 158.6 27.8 99.8 107.7 162.2 208.1 162.6 104.1.3 208.2.5 312.4.7 17.1 0 34.2-.8 51.3-.3 47.8 1.5 95.7 0 143.5.4h264.1c1.5 0 3.1-.1 4.6 0 4.3.3 6.5-2 6.8-5.9.6-8.9 2.1-17.9-1.5-26.6-4.1-3.8-9.3-3-14.2-3-36.6 0-73.3 0-109.9 0-33.2 0-68.8 0-102 0-11.3 0-11.9-.9-8.3-11.8 3.8-11.6 7.8-23.1 11.5-34.7 1.3-3.7 1-2.5 1.7-4.9 2-6.1 4.1-12.3 6.1-18.4l27.9-83.4c2.7-7.9.6-9-6.5-8.1-33 4.4-56.2 21.8-68.3 52.7-8.8 22.7-16 45.9-24 68.9-1 .5-1.9 1-2.9 1.6-4.1 12.2-4.6 12.4-18 12.3-5.1 0-10.3.2-15.4.2-3.5.9-7.1 1.6-10.7 2.3-2.4-.8-1-5.4-.3-7.7 13.4-40.5 26.9-80.9 40.4-121.3.8-2.4 1.6-4.9 2.6-8.2 0 0 0 0 0-.1-.2-.2-.4-.4-.6-.6-28.2.3-49.6 12.1-66.2 33.9-10 13.1-13.3 29.1-18.7 44.2-6.4 18.1-12.4 36.3-18.3 54.6-1.2 3.6-2.2 6-6.7 5.9-25.1-.2-50.3 0-77.2 0 30.8-46.1 43.5-95.7 37.1-149.2h288.2c1 .7 1.6 1.5 2.1 2.4-.2 93.4 54.7 93.5 54.9.1 3.7.5 11.1 4 11.1.3 0-2.9 174.2-1.9 176.6-1.8 0 19.4 38.9 1.3 58.3 1.6 20.8 0 35.2.2 52.8 0 71.9-.6 143.9-1.8 215.9-1.9 3.4 0 6.8.4 10.2-.4 2.4-.2 4.8-.4 7.2-.6 8.5-1.2 14.9-5.7 19.8-12.6 5.7-8.1 6.4-17.3 6.4-26.7 0-182.9 0-365.7 0-548.6 0-5.9-.2-11.8-1.9-17.5-3.8-12.8-10.6-22.4-25.1-23.9l-15-.3zm-881.6 557.1c0 .5-.5 1-1.3 2.5-29.3-54-72.2-90.1-130.3-107.8-1.8-.5-3.3-1-5.4-1.3-16.8-2.7-25.9-10.4-29-26.9 11-2.7 22.7-5.2 33.8-9.7 25.9-10.5 47.7-26.4 64.9-48.2 15.8-20 37.3-25.2 61.1-25.5 3.6 0 6.3.6 6.3 5.6-.2 70.4-.2 140.9-.2 211.3zm865.3 27.9c-270.1-.2-540.2-.2-810.4 0-7.8 0-9.7-2-9.6-9.7.3-71.7.2-143.5.2-215.2v-8.4c4.8-.3 8.2 2.1 11.8 3.7 84.5 37.3 152.8 93.9 203.7 171.2 6.3 9.6 7.2 9.6 14.4.2 9.6-12.6 10.2-26.4 4.3-40.5-10.8-26-29.2-46.7-49.3-65.8-51.1-48.4-111.4-82.5-175-111.2-7.5-3.4-10.2-7.1-10.2-15.7.4-78.9.3-157.7 0-236.6 0-7.6 1-10.5 9.8-10.4 270.1.3 540.2.3 810.4 0 7.9 0 9.6 2.2 9.6 9.8-.2 173-.2 345.9 0 518.9 0 7.9-2.2 9.6-9.8 9.6z"/><path d="m460 627.3c-17 22.8-44.3 31.1-70.2 22-24.3-8.6-41.5-33.6-40.4-58.9 1.2-27.7 18.9-50.5 44.8-57.5 25.5-7 52.1 2.7 66.7 25-9.6-4.3-18.8-6.7-28.4-4.6-9.4 2.1-17.3 6.7-23.2 14.4-10.2 13.1-11 31.1-2 45.3 10.1 15.8 24.8 20 52.8 14.3z" fill="#fdfdfd"/><path d="m906.7 961h187.5c.9.8 1.6 1.8 2.1 2.8 2 10.4 1.1 20.9.7 31.4-.1 2.7 9.4 6.6 4.7 6.4-4.6-7.4.3-18.7 0-26.6-.5-11.9 13.4-12.6-24.6-12.6-38.1 0-76.7 0-114.2 0-12 0-16.2.2-16.4 12.1-.1 5.5 0 11.7.5 19.7-5.1 4-10.2 2.7-15.9 2.7-7.7 0-15.4.5-23.1 0-3.6-1.3-4.1-4.5-4.2-7.5-.2-8.6-1.2-17.2.8-25.8.5-1.1 1.3-1.9 2.3-2.6z" fill="#cb7f3e"/><path d="m669.2 1109.5c15.4-6.2 31-12 47.1-16.3-3.7 16.8-3.7 16.9-20.3 16.8-8.9 0-17.9-.3-26.8-.5z" fill="#c5c6c8"/><path d="m1094.8 962.5c-.3-.5-.5-1-.6-1.6h58.6c0 .6-.3 1.2-.7 1.7-1.9 1.9-4.3 2.6-6.8 2.7-14.6.4-29.2.4-43.8 0-2.5 0-4.9-.8-6.8-2.7z" fill="#2c1d08"/><path d="m1152.1 951.1c-19.1 0-38.2 2.7-57.3 2.7-1.2 12.7 1.5 34.3-1.7 46.9-3.6 19.3-17.9 32-37.4 32.2-24.2.3-48.4 0-72.6 0-4.2-.3-8.1-1-11.6-2-8.5 0-17.1 0-25.6-.2-17.3-.3-29.8-10.1-34.8-26.8-.8-2.6-.7-5.6-3.4-7.3-3-11.2-.3-34.1-1.6-45.4-14.9 0-29.8 3.3-44.7 2.7-7.5-.3-9.4 10.8-9.3 18 .3 34.1.3 68.3 0 102.4 0 7.1 1.6 9.6 9.2 9.6 96.9-.3 193.8-.2 290.7-.2l.2-132.4z"/><path d="m946.8 994.1c2.8 23.6 12.6 34 36.3 38.7-13.9.1-27.9.9-41.8.3-18.4-.8-32.6-16.8-33.7-36.6 5.4-4.6 11.9-1.8 17.9-2.2 7.1-.5 14.3-.1 21.4-.1z" fill="#f89a16"/><path d="m330.3 629.9c-15 .3-29.9.2-43.3-8.2-17.3-10.9-29.8-25.5-33.2-46.1-3.2-19.1-3.9-38.4 1.2-57.3 4.9-18.1 16.2-31.6 32.5-41.1 5.2-3 6.7-2.6 6.7 3.7-.2 23.3-.1 46.6 0 69.9 0 13.4 9.6 25.7 22.1 28.6 11.7 2.8 24.7-3.3 31.3-14.4 2.3-3.9 2.8-8 2.8-12.5 0-22.3 0-44.6 0-66.9 0-3.5-1.2-7.4 2.2-10.3 23.4 10.5 35.4 29.4 40.1 53.8 9.6 24.7.6 65.7-18.4 83.5-2.4 2.3-9.4 8.4-14 10.6-11.5 5.4-16.4 6.9-29.8 6.7z" fill="#f89a16"/><path d="m352.1 475.3c-.5-15.1-1.2-24-1.7-36 0-15.9 0-31.8-.3-47.6-.3-14.1-8.1-23.2-22.1-26.3-30.2-2-60.5-.3-90.7-.9 0 0-.1 0-.2 0-3.8 0-8.1.4-11.7.8-27.5 2.3-48.7 26-49 55.1-.3 24.7-.2 49.4-.3 74.1 17.2-14.3 35.7-26.6 55.6-36.7 2.9-3.7 1-8.3 1.1-12.7.2-10.6.3-21.1.4-31.6h.5c17.7 0 35.3.3 53 0 5.7-.1 7.7 1.7 7.2 7.3-.5 6.3-.3 12.6-.4 19 0 2.3.3 4.7.3 7q.2 20.7-20.4 21.2c-34.3.9-62.2 23.8-68.9 57.2-2.6 12.8-1.4 25.9-1 38.9.9 28.6 19.9 55.1 47.4 62.9 25.8 7.3 51.3 6 77.8 2.8-4.1.5-3.8.2-8.2 0-19.8-.5-38-11.3-50.3-26.2-23.6-28.6-22.5-82.8 2-110.8 4.8-5.5 10.4-10 17.8-12.7 1.4 3.8.9 7.2.9 10.4.1 20.7-.5 41.4.2 62 .6 16.4 14.8 29.7 30.6 29.8 16 .1 30.1-11.5 30.6-27.1.7-26.6.9-53.3-.1-80z" fill="#cc803e"/><g fill="#f89a16"><path d="m1338.6 1168.6c-.3-36.6-30.1-66.3-66.8-66.3s-66.5 29.6-66.8 66.3z"/><path d="m894.3 727-158.3-59.9v-43.2l158.3-59.9v40.9l-143 52.2v-23.3l143 52.2v40.9z"/><path d="m986.8 680.8c0-7.5 1.3-14.2 3.8-20.1s5.8-11.2 9.6-16c3.9-4.8 8-9.1 12.5-13.1 4.4-4 8.6-7.8 12.5-11.5s7.1-7.5 9.6-11.5 3.8-8.5 3.8-13.6c0-7.8-3.3-14.1-9.8-19s-15.1-7.3-25.8-7.3-20.3 2.2-28.4 6.5-14.8 10.4-20.1 18.1l-40.2-23.6c9.1-13.7 21.5-24.6 37.1-32.6s34.6-12 57-12 31.6 2.4 44.2 7.2 22.5 11.7 29.6 20.8 10.6 20.2 10.6 33.3-1.3 16.9-4 23.4-6.1 12.3-10.3 17.1c-4.2 4.9-8.7 9.4-13.5 13.6s-9.3 8.3-13.5 12.3-7.6 8.2-10.3 12.6-4 9.5-4 15.3h-50.6zm25.3 83.8c-9.1 0-16.6-3-22.6-9s-9-13.1-9-21.3 3-15.5 9-21.1c6-5.7 13.5-8.5 22.6-8.5s17.2 2.8 23.1 8.5 8.8 12.7 8.8 21.1-2.9 15.3-8.8 21.3-13.6 9-23.1 9z"/><path d="m1131.1 727v-40.9l143-52.2v23.3l-143-52.2v-40.9l158.3 59.9v43.2l-158.3 59.9z"/><path d="m330.3 629.9c-15 .3-29.9.2-43.3-8.2-17.3-10.9-29.8-25.5-33.2-46.1-3.2-19.1-3.9-38.4 1.2-57.3 4.9-18.1 16.2-31.6 32.5-41.1 5.2-3 6.7-2.6 6.7 3.7-.2 23.3-.1 46.6 0 69.9 0 13.4 9.6 25.7 22.1 28.6 11.7 2.8 24.7-3.3 31.3-14.4 2.3-3.9 2.8-8 2.8-12.5 0-22.3 0-44.6 0-66.9 0-3.5-1.2-7.4 2.2-10.3 23.4 10.5 35.4 29.4 40.1 53.8 9.6 24.7.6 65.7-18.4 83.5-2.4 2.3-9.4 8.4-14 10.6-11.5 5.4-16.4 6.9-29.8 6.7z"/></g></svg>