Version Description
- PHP 8.0.0 compatibility
- Bumped WordPress version to 5.6.0
- Added JSON translation file generation
- Added custom JSON loading to LoadHelper
- Disabled emoji image replacement on our admin screens
Download this release
Release Info
Developer | timwhitlock |
Plugin | Loco Translate |
Version | 2.5.0 |
Comparing to | |
See all releases |
Code changes from version 2.4.6 to 2.5.0
- languages/loco-translate.pot +125 -85
- lib/compiled/gettext.php +2 -2
- lib/data/locales.php +1 -1
- loco.php +5 -3
- pub/css/admin.css +1 -1
- pub/css/editor.css +1 -1
- pub/css/podiff.css +1 -1
- pub/css/poview.css +1 -1
- pub/css/skins/blue.css +1 -1
- pub/css/skins/coffee.css +1 -1
- pub/css/skins/ectoplasm.css +1 -1
- pub/css/skins/light.css +1 -1
- pub/css/skins/midnight.css +1 -1
- pub/css/skins/modern.css +1 -1
- pub/css/skins/ocean.css +1 -1
- pub/css/skins/sunrise.css +1 -1
- pub/font/loco.eot +0 -0
- pub/font/loco.svg +1 -0
- pub/font/loco.ttf +0 -0
- pub/font/loco.woff +0 -0
- pub/js/min/admin.js +183 -182
- pub/js/min/config.js +1 -1
- pub/js/min/debug.js +1 -1
- pub/js/min/editor.js +1 -1
- pub/js/min/podiff.js +1 -1
- pub/js/min/poinit.js +1 -1
- pub/js/min/potinit.js +1 -1
- pub/js/min/poview.js +1 -1
- pub/js/min/setup.js +1 -1
- readme.txt +10 -3
- src/Locale.php +18 -14
- src/admin/DebugController.php +2 -1
- src/admin/RootController.php +7 -2
- src/admin/bundle/BaseController.php +14 -1
- src/admin/config/DebugController.php +7 -4
- src/admin/config/VersionController.php +35 -11
- src/admin/file/BaseController.php +3 -6
- src/admin/file/DiffController.php +11 -27
- src/admin/file/MoveController.php +6 -1
- src/admin/init/InitPoController.php +1 -0
- src/ajax/MsginitController.php +8 -14
- src/ajax/SaveController.php +25 -78
- src/ajax/UploadController.php +10 -28
- src/api/WordPressFileSystem.php +2 -2
- src/cli/Commands.php +10 -2
- src/cli/ExtractCommand.php +9 -3
- src/cli/SyncCommand.php +30 -17
- src/config/ArrayModel.php +3 -0
- src/data/Settings.php +6 -5
- src/error/AdminNotices.php +12 -1
- src/fs/File.php +14 -9
- src/fs/Revisions.php +14 -8
- src/fs/Siblings.php +22 -12
- src/gettext/Compiler.php +199 -0
- src/gettext/Data.php +48 -53
- src/gettext/Extraction.php +1 -1
- src/hooks/AdminHooks.php +1 -1
- src/hooks/LoadHelper.php +192 -34
- src/js/Strings.php +1 -1
- src/mvc/AdminRouter.php +2 -0
- src/package/Bundle.php +6 -0
- src/package/Core.php +8 -0
- src/package/Debugger.php +1 -0
- src/package/Header.php +13 -4
- src/package/Plugin.php +8 -0
- src/package/Project.php +23 -5
- src/package/Theme.php +9 -0
- src/test/TestCase.php +2 -2
- src/test/WordPressTestCase.php +4 -2
- tpl/admin/config/settings.php +67 -43
- tpl/admin/config/version.php +40 -2
- tpl/admin/errors/no-tokenizer.php +1 -1
- tpl/admin/file/diff.php +2 -2
- tpl/admin/init/upload.php +8 -4
languages/loco-translate.pot
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
-
"Project-Id-Version: Loco Translate 2.
|
5 |
-
"Report-Msgid-Bugs-To:
|
6 |
-
"POT-Creation-Date: 2020-
|
7 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
"Language-Team: \n"
|
@@ -13,7 +13,8 @@ msgstr ""
|
|
13 |
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
"Content-Transfer-Encoding: 8bit\n"
|
15 |
"X-Generator: Loco https://localise.biz/\n"
|
16 |
-
"X-Loco-Version: 2.
|
|
|
17 |
|
18 |
#: src/fs/FileWriter.php:214
|
19 |
#, php-format
|
@@ -41,6 +42,12 @@ msgstr ""
|
|
41 |
msgid "%s file is writeable"
|
42 |
msgstr ""
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
#. Shows number of fuzzy strings at top of editor
|
45 |
#: src/js/Strings.php:91 src/gettext/Metadata.php:205
|
46 |
#, javascript-format
|
@@ -53,7 +60,7 @@ msgstr ""
|
|
53 |
msgid "%s on disk"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#. e.g. via Google Translate
|
57 |
#: src/js/Strings.php:58
|
58 |
#, javascript-format
|
59 |
msgid "%s string translated via %s"
|
@@ -101,7 +108,7 @@ msgid_plural "%s obsolete strings removed"
|
|
101 |
msgstr[0] ""
|
102 |
msgstr[1] ""
|
103 |
|
104 |
-
#: src/admin/init/InitPoController.php:
|
105 |
#, php-format
|
106 |
msgid "1 source file will be scanned for translatable strings"
|
107 |
msgid_plural "%s source files will be scanned for translatable strings"
|
@@ -131,10 +138,6 @@ msgid_plural "%s words"
|
|
131 |
msgstr[0] ""
|
132 |
msgstr[1] ""
|
133 |
|
134 |
-
#: tpl/admin/config/settings.php:181
|
135 |
-
msgid "About file system access"
|
136 |
-
msgstr ""
|
137 |
-
|
138 |
#: tpl/admin/init/init-prompt.php:33 tpl/admin/init/init-pot.php:42
|
139 |
msgid "About templates"
|
140 |
msgstr ""
|
@@ -159,7 +162,7 @@ msgstr ""
|
|
159 |
msgid "Add set"
|
160 |
msgstr ""
|
161 |
|
162 |
-
#: tpl/admin/config/settings.php:
|
163 |
msgid "Add UTF-8 byte order mark"
|
164 |
msgstr ""
|
165 |
|
@@ -174,7 +177,7 @@ msgid ""
|
|
174 |
"privacy notice</a>."
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: src/admin/bundle/BaseController.php:
|
178 |
msgid "Advanced"
|
179 |
msgstr ""
|
180 |
|
@@ -204,7 +207,7 @@ msgstr ""
|
|
204 |
msgid "Allow (with warning)"
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: tpl/admin/config/settings.php:
|
208 |
msgid "Allow full access to these roles"
|
209 |
msgstr ""
|
210 |
|
@@ -228,7 +231,7 @@ msgid ""
|
|
228 |
"file?"
|
229 |
msgstr ""
|
230 |
|
231 |
-
#: src/admin/init/InitPoController.php:
|
232 |
msgid "Assign template"
|
233 |
msgstr ""
|
234 |
|
@@ -326,7 +329,11 @@ msgstr ""
|
|
326 |
msgid "Compiled translations"
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: tpl/admin/config/settings.php:
|
|
|
|
|
|
|
|
|
330 |
msgid "Compiling MO files"
|
331 |
msgstr ""
|
332 |
|
@@ -344,7 +351,7 @@ msgstr ""
|
|
344 |
msgid "Configure %s"
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: src/package/Debugger.php:
|
348 |
#, php-format
|
349 |
msgid "Configured domain has no extractable strings"
|
350 |
msgid_plural "%u configured domains have no extractable strings"
|
@@ -381,7 +388,7 @@ msgstr ""
|
|
381 |
msgid "Core translations ‹ Loco"
|
382 |
msgstr ""
|
383 |
|
384 |
-
#: src/admin/init/InitPoController.php:
|
385 |
#: src/admin/bundle/ViewController.php:132 tpl/admin/init/init-pot.php:40
|
386 |
msgid "Create template"
|
387 |
msgstr ""
|
@@ -400,7 +407,7 @@ msgstr ""
|
|
400 |
|
401 |
#: src/error/Debug.php:19 src/admin/config/BaseController.php:24
|
402 |
#: src/admin/config/DebugController.php:12
|
403 |
-
#: src/admin/bundle/BaseController.php:
|
404 |
msgid "Debug"
|
405 |
msgstr ""
|
406 |
|
@@ -415,6 +422,10 @@ msgstr ""
|
|
415 |
msgid "Delete %s"
|
416 |
msgstr ""
|
417 |
|
|
|
|
|
|
|
|
|
418 |
#: src/ajax/FsConnectController.php:157
|
419 |
msgid "Deleting this file requires permission"
|
420 |
msgstr ""
|
@@ -436,8 +447,8 @@ msgstr ""
|
|
436 |
msgid "Disallow"
|
437 |
msgstr ""
|
438 |
|
439 |
-
#: src/data/Settings.php:
|
440 |
-
#: src/admin/bundle/LocaleController.php:130 tpl/admin/config/settings.php:
|
441 |
#: tpl/admin/config/apis.php:122 tpl/admin/config/prefs.php:45
|
442 |
#: tpl/admin/common/inc-fsconn.php:16 tpl/admin/common/inc-fsconn.php:41
|
443 |
#: tpl/admin/errors/no-backups.php:22
|
@@ -474,7 +485,7 @@ msgstr ""
|
|
474 |
msgid "Editing %1$s in %2$s"
|
475 |
msgstr ""
|
476 |
|
477 |
-
#: tpl/admin/config/settings.php:
|
478 |
msgid "Editing of POT (template) files"
|
479 |
msgstr ""
|
480 |
|
@@ -624,7 +635,7 @@ msgid ""
|
|
624 |
"it"
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: tpl/admin/config/settings.php:
|
628 |
msgid "Enable Ajax file uploads"
|
629 |
msgstr ""
|
630 |
|
@@ -648,7 +659,7 @@ msgid_plural "Excludes %s files over %2$s"
|
|
648 |
msgstr[0] ""
|
649 |
msgstr[1] ""
|
650 |
|
651 |
-
#: tpl/admin/config/settings.php:
|
652 |
msgid "Extracting strings"
|
653 |
msgstr ""
|
654 |
|
@@ -670,7 +681,7 @@ msgstr ""
|
|
670 |
msgid "Failed to copy %s to %s"
|
671 |
msgstr ""
|
672 |
|
673 |
-
#: src/fs/Revisions.php:
|
674 |
#, php-format
|
675 |
msgid ""
|
676 |
"Failed to create backup file in \"%s\". Check file permissions or disable "
|
@@ -704,7 +715,7 @@ msgstr ""
|
|
704 |
msgid "File backups are disabled in your plugin settings"
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: src/admin/file/DeleteController.php:57 src/admin/file/DiffController.php:
|
708 |
#, php-format
|
709 |
msgid "File deleted"
|
710 |
msgid_plural "%u files deleted"
|
@@ -769,7 +780,7 @@ msgstr ""
|
|
769 |
msgid "File modified"
|
770 |
msgstr ""
|
771 |
|
772 |
-
#: src/admin/file/MoveController.php:
|
773 |
#, php-format
|
774 |
msgid "File moved"
|
775 |
msgid_plural "%u files moved"
|
@@ -784,7 +795,7 @@ msgstr ""
|
|
784 |
msgid "File prefix"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: src/admin/file/DiffController.php:
|
788 |
msgid "File restored"
|
789 |
msgstr ""
|
790 |
|
@@ -793,7 +804,7 @@ msgstr ""
|
|
793 |
msgid "File size"
|
794 |
msgstr ""
|
795 |
|
796 |
-
#: tpl/admin/config/settings.php:
|
797 |
msgid "File system access"
|
798 |
msgstr ""
|
799 |
|
@@ -844,11 +855,11 @@ msgstr ""
|
|
844 |
msgid "Full documentation"
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: tpl/admin/config/settings.php:
|
848 |
msgid "Fuzzy matching tolerance"
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: tpl/admin/config/settings.php:
|
852 |
msgid "Generate hash tables"
|
853 |
msgstr ""
|
854 |
|
@@ -864,7 +875,7 @@ msgstr ""
|
|
864 |
msgid "Go to WordPress Core"
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: tpl/admin/config/settings.php:
|
868 |
msgid "Grant access to roles"
|
869 |
msgstr ""
|
870 |
|
@@ -916,7 +927,7 @@ msgstr ""
|
|
916 |
msgid "Include"
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: tpl/admin/config/settings.php:
|
920 |
msgid "Include Fuzzy strings"
|
921 |
msgstr ""
|
922 |
|
@@ -942,7 +953,7 @@ msgstr ""
|
|
942 |
msgid "Installed languages"
|
943 |
msgstr ""
|
944 |
|
945 |
-
#: src/Locale.php:
|
946 |
msgid "Invalid locale"
|
947 |
msgstr ""
|
948 |
|
@@ -950,6 +961,11 @@ msgstr ""
|
|
950 |
msgid "It needs configuring before you can do any translations"
|
951 |
msgstr ""
|
952 |
|
|
|
|
|
|
|
|
|
|
|
953 |
#: tpl/admin/init/init-po.php:153
|
954 |
msgid "Just copy English source strings"
|
955 |
msgstr ""
|
@@ -1025,7 +1041,7 @@ msgstr ""
|
|
1025 |
msgid "Loco interrupted by output from %s:%u"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#. change "en" in the URL to your language if it's available at
|
1029 |
#: tpl/admin/errors/no-tokenizer.php:17
|
1030 |
msgid ""
|
1031 |
"Loco requires the <a href=\"http://php.net/manual/en/book.tokenizer.php\" "
|
@@ -1044,17 +1060,15 @@ msgstr ""
|
|
1044 |
msgid "Loco Translate %s"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
-
#: src/data/Settings.php:
|
1048 |
-
msgid ""
|
1049 |
-
"Loco Translate 2.4 supports third party translation providers. Set up your "
|
1050 |
-
"API keys in the plugin settings!"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
#: src/mvc/AdminController.php:115
|
1054 |
msgid "Loco Translate is powered by"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: loco.php:
|
1058 |
#, php-format
|
1059 |
msgid ""
|
1060 |
"Loco Translate requires the \"%s\" PHP extension. Ask your hosting provider "
|
@@ -1070,7 +1084,7 @@ msgstr ""
|
|
1070 |
msgid "Mark new translations as Fuzzy"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
-
#: tpl/admin/config/settings.php:
|
1074 |
msgid "Maximum line length (zero disables wrapping)"
|
1075 |
msgstr ""
|
1076 |
|
@@ -1093,7 +1107,7 @@ msgstr ""
|
|
1093 |
msgid "MO file exists for this language already. Delete it first"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
-
#: tpl/admin/config/settings.php:
|
1097 |
msgid "Modification of installed files"
|
1098 |
msgstr ""
|
1099 |
|
@@ -1116,7 +1130,7 @@ msgstr ""
|
|
1116 |
msgid "Move"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: src/admin/file/MoveController.php:
|
1120 |
#, php-format
|
1121 |
msgid "Move %s"
|
1122 |
msgstr ""
|
@@ -1178,7 +1192,7 @@ msgstr ""
|
|
1178 |
msgid "no wildcards"
|
1179 |
msgstr ""
|
1180 |
|
1181 |
-
#: tpl/admin/config/settings.php:
|
1182 |
msgid "Not recommended"
|
1183 |
msgstr ""
|
1184 |
|
@@ -1202,7 +1216,7 @@ msgstr ""
|
|
1202 |
msgid "Notice"
|
1203 |
msgstr ""
|
1204 |
|
1205 |
-
#: tpl/admin/config/settings.php:
|
1206 |
msgid "Number of backups to keep of each file:"
|
1207 |
msgstr ""
|
1208 |
|
@@ -1236,7 +1250,7 @@ msgid_plural "%s files can't be matched to a known set of strings"
|
|
1236 |
msgstr[0] ""
|
1237 |
msgstr[1] ""
|
1238 |
|
1239 |
-
#: src/admin/file/MoveController.php:
|
1240 |
#, php-format
|
1241 |
msgid "One file could not be moved"
|
1242 |
msgid_plural "%u files could not be moved"
|
@@ -1255,14 +1269,16 @@ msgid_plural ""
|
|
1255 |
msgstr[0] ""
|
1256 |
msgstr[1] ""
|
1257 |
|
1258 |
-
|
|
|
1259 |
#, php-format
|
1260 |
msgid "One string extracted from source code for \"%2$s\""
|
1261 |
msgid_plural "%s strings extracted from source code for \"%s\""
|
1262 |
msgstr[0] ""
|
1263 |
msgstr[1] ""
|
1264 |
|
1265 |
-
|
|
|
1266 |
#, php-format
|
1267 |
msgid "One string found in %2$s"
|
1268 |
msgid_plural "%s strings found in %s"
|
@@ -1273,7 +1289,7 @@ msgstr[1] ""
|
|
1273 |
msgid "Out of sync with template"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
-
#: src/admin/bundle/BaseController.php:
|
1277 |
msgid "Overview"
|
1278 |
msgstr ""
|
1279 |
|
@@ -1281,7 +1297,7 @@ msgstr ""
|
|
1281 |
msgid "Overwrite existing translations"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
-
#: src/mvc/AdminRouter.php:
|
1285 |
msgid "Page not found"
|
1286 |
msgstr ""
|
1287 |
|
@@ -1309,7 +1325,13 @@ msgstr ""
|
|
1309 |
msgid "Permission denied to update file"
|
1310 |
msgstr ""
|
1311 |
|
1312 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1313 |
#, php-format
|
1314 |
msgid "Plugin not found: %s"
|
1315 |
msgstr ""
|
@@ -1332,43 +1354,43 @@ msgid "Plugins"
|
|
1332 |
msgstr ""
|
1333 |
|
1334 |
#. Plural category for languages that have no plurals
|
1335 |
-
#: src/Locale.php:
|
1336 |
msgctxt "Plural category"
|
1337 |
msgid "All forms"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
#. Plural category used in some multi-plural languages
|
1341 |
-
#: src/Locale.php:
|
1342 |
msgctxt "Plural category"
|
1343 |
msgid "Few"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
#. Plural category used in some multi-plural languages
|
1347 |
-
#: src/Locale.php:
|
1348 |
msgctxt "Plural category"
|
1349 |
msgid "Many"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
#. Plural category for singular quantity
|
1353 |
-
#: src/Locale.php:
|
1354 |
msgctxt "Plural category"
|
1355 |
msgid "One"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
#. General plural category not covered by other forms
|
1359 |
-
#: src/Locale.php:
|
1360 |
msgctxt "Plural category"
|
1361 |
msgid "Other"
|
1362 |
msgstr ""
|
1363 |
|
1364 |
#. Plural category used in some multi-plural languages
|
1365 |
-
#: src/Locale.php:
|
1366 |
msgctxt "Plural category"
|
1367 |
msgid "Two"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
#. Plural category for zero quantity
|
1371 |
-
#: src/Locale.php:
|
1372 |
msgctxt "Plural category"
|
1373 |
msgid "Zero"
|
1374 |
msgstr ""
|
@@ -1391,20 +1413,20 @@ msgstr ""
|
|
1391 |
msgid "PO file missing"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
-
#: src/
|
1395 |
msgid "PO file saved and MO file compiled"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
-
#: src/
|
1399 |
-
msgid "PO file saved
|
1400 |
msgstr ""
|
1401 |
|
1402 |
-
#: src/
|
1403 |
-
msgid "
|
1404 |
msgstr ""
|
1405 |
|
1406 |
-
#: tpl/admin/config/settings.php:
|
1407 |
-
msgid "
|
1408 |
msgstr ""
|
1409 |
|
1410 |
#: tpl/admin/bundle/conf.php:29
|
@@ -1423,7 +1445,7 @@ msgstr ""
|
|
1423 |
msgid "Recently updated:"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
-
#: tpl/admin/config/settings.php:
|
1427 |
msgid "Recommended"
|
1428 |
msgstr ""
|
1429 |
|
@@ -1448,7 +1470,7 @@ msgstr ""
|
|
1448 |
msgid "Restore"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
-
#: src/admin/file/DiffController.php:
|
1452 |
#, php-format
|
1453 |
msgid "Restore %s"
|
1454 |
msgstr ""
|
@@ -1471,16 +1493,16 @@ msgstr ""
|
|
1471 |
msgid "Save config"
|
1472 |
msgstr ""
|
1473 |
|
1474 |
-
#: tpl/admin/config/settings.php:
|
1475 |
msgid "Save credentials in session"
|
1476 |
msgstr ""
|
1477 |
|
1478 |
-
#: tpl/admin/config/settings.php:
|
1479 |
#: tpl/admin/config/prefs.php:44
|
1480 |
msgid "Save settings"
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#: tpl/admin/config/settings.php:
|
1484 |
msgid "Saving PO/POT files"
|
1485 |
msgstr ""
|
1486 |
|
@@ -1488,11 +1510,11 @@ msgstr ""
|
|
1488 |
msgid "Saving this file requires permission"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: tpl/admin/config/settings.php:
|
1492 |
msgid "Scan JavaScript files with extensions:"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
-
#: tpl/admin/config/settings.php:
|
1496 |
msgid "Scan PHP files with extensions:"
|
1497 |
msgstr ""
|
1498 |
|
@@ -1532,9 +1554,9 @@ msgid "Sets"
|
|
1532 |
msgstr ""
|
1533 |
|
1534 |
#: src/mvc/AdminRouter.php:67 src/mvc/AdminRouter.php:72
|
1535 |
-
#:
|
1536 |
-
#:
|
1537 |
-
#: tpl/admin/
|
1538 |
msgid "Settings"
|
1539 |
msgstr ""
|
1540 |
|
@@ -1544,7 +1566,7 @@ msgstr ""
|
|
1544 |
msgid "Settings saved"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
-
#: src/admin/bundle/BaseController.php:
|
1548 |
msgid "Setup"
|
1549 |
msgstr ""
|
1550 |
|
@@ -1565,11 +1587,11 @@ msgid ""
|
|
1565 |
"Site options apply to all users of Loco Translate across the current site"
|
1566 |
msgstr ""
|
1567 |
|
1568 |
-
#: tpl/admin/config/settings.php:
|
1569 |
msgid "Skip PHP files larger than:"
|
1570 |
msgstr ""
|
1571 |
|
1572 |
-
#: src/admin/init/InitPoController.php:
|
1573 |
msgid "Skip template"
|
1574 |
msgstr ""
|
1575 |
|
@@ -1617,11 +1639,11 @@ msgid "Support forum"
|
|
1617 |
msgstr ""
|
1618 |
|
1619 |
#. Indicates that POT files are optional, which is not recommended
|
1620 |
-
#: tpl/admin/config/settings.php:
|
1621 |
msgid "Sync with source when template missing"
|
1622 |
msgstr ""
|
1623 |
|
1624 |
-
#: tpl/admin/config/settings.php:
|
1625 |
msgid "Syncing PO files"
|
1626 |
msgstr ""
|
1627 |
|
@@ -1906,7 +1928,7 @@ msgstr ""
|
|
1906 |
msgid "Unexpected file type"
|
1907 |
msgstr ""
|
1908 |
|
1909 |
-
#: src/package/Header.php:
|
1910 |
msgid "Unknown author"
|
1911 |
msgstr ""
|
1912 |
|
@@ -1919,7 +1941,7 @@ msgstr ""
|
|
1919 |
msgid "Upgrade to %s"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: src/admin/init/UploadController.php:29 tpl/admin/init/upload.php:
|
1923 |
msgid "Upload"
|
1924 |
msgstr ""
|
1925 |
|
@@ -1931,6 +1953,10 @@ msgstr ""
|
|
1931 |
msgid "Upload PO"
|
1932 |
msgstr ""
|
1933 |
|
|
|
|
|
|
|
|
|
1934 |
#: tpl/admin/init/init-po.php:163
|
1935 |
msgid "Use this file as template when running Sync"
|
1936 |
msgstr ""
|
@@ -1978,7 +2004,7 @@ msgstr ""
|
|
1978 |
msgid "View template"
|
1979 |
msgstr ""
|
1980 |
|
1981 |
-
#: src/package/Header.php:
|
1982 |
msgid "Visit official site"
|
1983 |
msgstr ""
|
1984 |
|
@@ -2004,7 +2030,7 @@ msgstr ""
|
|
2004 |
msgid "Welcome to Loco Translate"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
-
#: src/admin/init/InitPoController.php:
|
2008 |
msgid "What's this?"
|
2009 |
msgstr ""
|
2010 |
|
@@ -2012,7 +2038,13 @@ msgstr ""
|
|
2012 |
msgid "WordPress"
|
2013 |
msgstr ""
|
2014 |
|
2015 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2016 |
msgid "WordPress Core"
|
2017 |
msgstr ""
|
2018 |
|
@@ -2096,6 +2128,14 @@ msgstr ""
|
|
2096 |
msgid "Your changes will be lost if you continue without saving"
|
2097 |
msgstr ""
|
2098 |
|
2099 |
-
#: src/ajax/UploadController.php:
|
2100 |
msgid "Your file is identical to the existing one"
|
2101 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
+
"Project-Id-Version: Loco Translate 2.5.0\n"
|
5 |
+
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n"
|
6 |
+
"POT-Creation-Date: 2020-12-17 15:12+0000\n"
|
7 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
"Language-Team: \n"
|
13 |
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
"Content-Transfer-Encoding: 8bit\n"
|
15 |
"X-Generator: Loco https://localise.biz/\n"
|
16 |
+
"X-Loco-Version: 2.5.0; wp-5.6\n"
|
17 |
+
"X-Domain: loco-translate"
|
18 |
|
19 |
#: src/fs/FileWriter.php:214
|
20 |
#, php-format
|
42 |
msgid "%s file is writeable"
|
43 |
msgstr ""
|
44 |
|
45 |
+
#. Where %s is either PO or POT
|
46 |
+
#: src/gettext/Compiler.php:194
|
47 |
+
#, php-format
|
48 |
+
msgid "%s file saved"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
#. Shows number of fuzzy strings at top of editor
|
52 |
#: src/js/Strings.php:91 src/gettext/Metadata.php:205
|
53 |
#, javascript-format
|
60 |
msgid "%s on disk"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#. 1: Number of strings; 2: Service provider; e.g. "50 strings translated via Google Translate"
|
64 |
#: src/js/Strings.php:58
|
65 |
#, javascript-format
|
66 |
msgid "%s string translated via %s"
|
108 |
msgstr[0] ""
|
109 |
msgstr[1] ""
|
110 |
|
111 |
+
#: src/admin/init/InitPoController.php:225
|
112 |
#, php-format
|
113 |
msgid "1 source file will be scanned for translatable strings"
|
114 |
msgid_plural "%s source files will be scanned for translatable strings"
|
138 |
msgstr[0] ""
|
139 |
msgstr[1] ""
|
140 |
|
|
|
|
|
|
|
|
|
141 |
#: tpl/admin/init/init-prompt.php:33 tpl/admin/init/init-pot.php:42
|
142 |
msgid "About templates"
|
143 |
msgstr ""
|
162 |
msgid "Add set"
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: tpl/admin/config/settings.php:75
|
166 |
msgid "Add UTF-8 byte order mark"
|
167 |
msgstr ""
|
168 |
|
177 |
"privacy notice</a>."
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: src/admin/bundle/BaseController.php:110 tpl/admin/file/move.php:26
|
181 |
msgid "Advanced"
|
182 |
msgstr ""
|
183 |
|
207 |
msgid "Allow (with warning)"
|
208 |
msgstr ""
|
209 |
|
210 |
+
#: tpl/admin/config/settings.php:216
|
211 |
msgid "Allow full access to these roles"
|
212 |
msgstr ""
|
213 |
|
231 |
"file?"
|
232 |
msgstr ""
|
233 |
|
234 |
+
#: src/admin/init/InitPoController.php:241
|
235 |
msgid "Assign template"
|
236 |
msgstr ""
|
237 |
|
329 |
msgid "Compiled translations"
|
330 |
msgstr ""
|
331 |
|
332 |
+
#: tpl/admin/config/settings.php:145 tpl/admin/config/settings.php:151
|
333 |
+
msgid "Compiling JSON files"
|
334 |
+
msgstr ""
|
335 |
+
|
336 |
+
#: tpl/admin/config/settings.php:120 tpl/admin/config/settings.php:126
|
337 |
msgid "Compiling MO files"
|
338 |
msgstr ""
|
339 |
|
351 |
msgid "Configure %s"
|
352 |
msgstr ""
|
353 |
|
354 |
+
#: src/package/Debugger.php:205
|
355 |
#, php-format
|
356 |
msgid "Configured domain has no extractable strings"
|
357 |
msgid_plural "%u configured domains have no extractable strings"
|
388 |
msgid "Core translations ‹ Loco"
|
389 |
msgstr ""
|
390 |
|
391 |
+
#: src/admin/init/InitPoController.php:216
|
392 |
#: src/admin/bundle/ViewController.php:132 tpl/admin/init/init-pot.php:40
|
393 |
msgid "Create template"
|
394 |
msgstr ""
|
407 |
|
408 |
#: src/error/Debug.php:19 src/admin/config/BaseController.php:24
|
409 |
#: src/admin/config/DebugController.php:12
|
410 |
+
#: src/admin/bundle/BaseController.php:113
|
411 |
msgid "Debug"
|
412 |
msgstr ""
|
413 |
|
422 |
msgid "Delete %s"
|
423 |
msgstr ""
|
424 |
|
425 |
+
#: tpl/admin/config/settings.php:162
|
426 |
+
msgid "Delete redundant files"
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
#: src/ajax/FsConnectController.php:157
|
430 |
msgid "Deleting this file requires permission"
|
431 |
msgstr ""
|
447 |
msgid "Disallow"
|
448 |
msgstr ""
|
449 |
|
450 |
+
#: src/data/Settings.php:176 src/admin/file/EditController.php:164
|
451 |
+
#: src/admin/bundle/LocaleController.php:130 tpl/admin/config/settings.php:234
|
452 |
#: tpl/admin/config/apis.php:122 tpl/admin/config/prefs.php:45
|
453 |
#: tpl/admin/common/inc-fsconn.php:16 tpl/admin/common/inc-fsconn.php:41
|
454 |
#: tpl/admin/errors/no-backups.php:22
|
485 |
msgid "Editing %1$s in %2$s"
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: tpl/admin/config/settings.php:197
|
489 |
msgid "Editing of POT (template) files"
|
490 |
msgstr ""
|
491 |
|
635 |
"it"
|
636 |
msgstr ""
|
637 |
|
638 |
+
#: tpl/admin/config/settings.php:81
|
639 |
msgid "Enable Ajax file uploads"
|
640 |
msgstr ""
|
641 |
|
659 |
msgstr[0] ""
|
660 |
msgstr[1] ""
|
661 |
|
662 |
+
#: tpl/admin/config/settings.php:21 tpl/admin/config/settings.php:27
|
663 |
msgid "Extracting strings"
|
664 |
msgstr ""
|
665 |
|
681 |
msgid "Failed to copy %s to %s"
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: src/fs/Revisions.php:220
|
685 |
#, php-format
|
686 |
msgid ""
|
687 |
"Failed to create backup file in \"%s\". Check file permissions or disable "
|
715 |
msgid "File backups are disabled in your plugin settings"
|
716 |
msgstr ""
|
717 |
|
718 |
+
#: src/admin/file/DeleteController.php:57 src/admin/file/DiffController.php:45
|
719 |
#, php-format
|
720 |
msgid "File deleted"
|
721 |
msgid_plural "%u files deleted"
|
780 |
msgid "File modified"
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: src/admin/file/MoveController.php:85
|
784 |
#, php-format
|
785 |
msgid "File moved"
|
786 |
msgid_plural "%u files moved"
|
795 |
msgid "File prefix"
|
796 |
msgstr ""
|
797 |
|
798 |
+
#: src/admin/file/DiffController.php:35
|
799 |
msgid "File restored"
|
800 |
msgstr ""
|
801 |
|
804 |
msgid "File size"
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: tpl/admin/config/settings.php:170 tpl/admin/config/settings.php:176
|
808 |
msgid "File system access"
|
809 |
msgstr ""
|
810 |
|
855 |
msgid "Full documentation"
|
856 |
msgstr ""
|
857 |
|
858 |
+
#: tpl/admin/config/settings.php:99
|
859 |
msgid "Fuzzy matching tolerance"
|
860 |
msgstr ""
|
861 |
|
862 |
+
#: tpl/admin/config/settings.php:131
|
863 |
msgid "Generate hash tables"
|
864 |
msgstr ""
|
865 |
|
875 |
msgid "Go to WordPress Core"
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: tpl/admin/config/settings.php:210
|
879 |
msgid "Grant access to roles"
|
880 |
msgstr ""
|
881 |
|
927 |
msgid "Include"
|
928 |
msgstr ""
|
929 |
|
930 |
+
#: tpl/admin/config/settings.php:137
|
931 |
msgid "Include Fuzzy strings"
|
932 |
msgstr ""
|
933 |
|
953 |
msgid "Installed languages"
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: src/Locale.php:324
|
957 |
msgid "Invalid locale"
|
958 |
msgstr ""
|
959 |
|
961 |
msgid "It needs configuring before you can do any translations"
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: src/gettext/Compiler.php:151
|
965 |
+
#, php-format
|
966 |
+
msgid "JSON compilation failed for %s"
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
#: tpl/admin/init/init-po.php:153
|
970 |
msgid "Just copy English source strings"
|
971 |
msgstr ""
|
1041 |
msgid "Loco interrupted by output from %s:%u"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
+
#. change "en" in the URL to your language if it's available at https://www.php.net/docs.php
|
1045 |
#: tpl/admin/errors/no-tokenizer.php:17
|
1046 |
msgid ""
|
1047 |
"Loco requires the <a href=\"http://php.net/manual/en/book.tokenizer.php\" "
|
1060 |
msgid "Loco Translate %s"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
+
#: src/data/Settings.php:175
|
1064 |
+
msgid "Loco Translate 2.5 adds supports for JSON language pack generation."
|
|
|
|
|
1065 |
msgstr ""
|
1066 |
|
1067 |
#: src/mvc/AdminController.php:115
|
1068 |
msgid "Loco Translate is powered by"
|
1069 |
msgstr ""
|
1070 |
|
1071 |
+
#: loco.php:142
|
1072 |
#, php-format
|
1073 |
msgid ""
|
1074 |
"Loco Translate requires the \"%s\" PHP extension. Ask your hosting provider "
|
1084 |
msgid "Mark new translations as Fuzzy"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
+
#: tpl/admin/config/settings.php:68
|
1088 |
msgid "Maximum line length (zero disables wrapping)"
|
1089 |
msgstr ""
|
1090 |
|
1107 |
msgid "MO file exists for this language already. Delete it first"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: tpl/admin/config/settings.php:187
|
1111 |
msgid "Modification of installed files"
|
1112 |
msgstr ""
|
1113 |
|
1130 |
msgid "Move"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
+
#: src/admin/file/MoveController.php:106 src/admin/file/MoveController.php:133
|
1134 |
#, php-format
|
1135 |
msgid "Move %s"
|
1136 |
msgstr ""
|
1192 |
msgid "no wildcards"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: tpl/admin/config/settings.php:75 tpl/admin/config/settings.php:182
|
1196 |
msgid "Not recommended"
|
1197 |
msgstr ""
|
1198 |
|
1216 |
msgid "Notice"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
+
#: tpl/admin/config/settings.php:62
|
1220 |
msgid "Number of backups to keep of each file:"
|
1221 |
msgstr ""
|
1222 |
|
1250 |
msgstr[0] ""
|
1251 |
msgstr[1] ""
|
1252 |
|
1253 |
+
#: src/admin/file/MoveController.php:89
|
1254 |
#, php-format
|
1255 |
msgid "One file could not be moved"
|
1256 |
msgid_plural "%u files could not be moved"
|
1269 |
msgstr[0] ""
|
1270 |
msgstr[1] ""
|
1271 |
|
1272 |
+
#. 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
|
1273 |
+
#: src/package/Debugger.php:187
|
1274 |
#, php-format
|
1275 |
msgid "One string extracted from source code for \"%2$s\""
|
1276 |
msgid_plural "%s strings extracted from source code for \"%s\""
|
1277 |
msgstr[0] ""
|
1278 |
msgstr[1] ""
|
1279 |
|
1280 |
+
#. 1: Number of strings; 2: Name of POT file; e.g. "100 strings found in file.pot"
|
1281 |
+
#: src/admin/init/InitPoController.php:197
|
1282 |
#, php-format
|
1283 |
msgid "One string found in %2$s"
|
1284 |
msgid_plural "%s strings found in %s"
|
1289 |
msgid "Out of sync with template"
|
1290 |
msgstr ""
|
1291 |
|
1292 |
+
#: src/admin/bundle/BaseController.php:108
|
1293 |
msgid "Overview"
|
1294 |
msgstr ""
|
1295 |
|
1297 |
msgid "Overwrite existing translations"
|
1298 |
msgstr ""
|
1299 |
|
1300 |
+
#: src/mvc/AdminRouter.php:240
|
1301 |
msgid "Page not found"
|
1302 |
msgstr ""
|
1303 |
|
1325 |
msgid "Permission denied to update file"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#. Where %s is the full version number of PHP
|
1329 |
+
#: tpl/admin/config/version.php:49
|
1330 |
+
#, php-format
|
1331 |
+
msgid "PHP %s"
|
1332 |
+
msgstr ""
|
1333 |
+
|
1334 |
+
#: src/package/Plugin.php:233
|
1335 |
#, php-format
|
1336 |
msgid "Plugin not found: %s"
|
1337 |
msgstr ""
|
1354 |
msgstr ""
|
1355 |
|
1356 |
#. Plural category for languages that have no plurals
|
1357 |
+
#: src/Locale.php:405
|
1358 |
msgctxt "Plural category"
|
1359 |
msgid "All forms"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
#. Plural category used in some multi-plural languages
|
1363 |
+
#: src/Locale.php:419
|
1364 |
msgctxt "Plural category"
|
1365 |
msgid "Few"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
#. Plural category used in some multi-plural languages
|
1369 |
+
#: src/Locale.php:421
|
1370 |
msgctxt "Plural category"
|
1371 |
msgid "Many"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
#. Plural category for singular quantity
|
1375 |
+
#: src/Locale.php:415
|
1376 |
msgctxt "Plural category"
|
1377 |
msgid "One"
|
1378 |
msgstr ""
|
1379 |
|
1380 |
#. General plural category not covered by other forms
|
1381 |
+
#: src/Locale.php:423
|
1382 |
msgctxt "Plural category"
|
1383 |
msgid "Other"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
#. Plural category used in some multi-plural languages
|
1387 |
+
#: src/Locale.php:417
|
1388 |
msgctxt "Plural category"
|
1389 |
msgid "Two"
|
1390 |
msgstr ""
|
1391 |
|
1392 |
#. Plural category for zero quantity
|
1393 |
+
#: src/Locale.php:413
|
1394 |
msgctxt "Plural category"
|
1395 |
msgid "Zero"
|
1396 |
msgstr ""
|
1413 |
msgid "PO file missing"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: src/gettext/Compiler.php:190
|
1417 |
msgid "PO file saved and MO file compiled"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: src/gettext/Compiler.php:187
|
1421 |
+
msgid "PO file saved and MO/JSON files compiled"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: src/gettext/Compiler.php:88
|
1425 |
+
msgid "PO file saved, but MO file compilation failed"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: tpl/admin/config/settings.php:156
|
1429 |
+
msgid "Pretty formatting"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
#: tpl/admin/bundle/conf.php:29
|
1445 |
msgid "Recently updated:"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
+
#: tpl/admin/config/settings.php:81
|
1449 |
msgid "Recommended"
|
1450 |
msgstr ""
|
1451 |
|
1470 |
msgid "Restore"
|
1471 |
msgstr ""
|
1472 |
|
1473 |
+
#: src/admin/file/DiffController.php:58 src/admin/file/DiffController.php:76
|
1474 |
#, php-format
|
1475 |
msgid "Restore %s"
|
1476 |
msgstr ""
|
1493 |
msgid "Save config"
|
1494 |
msgstr ""
|
1495 |
|
1496 |
+
#: tpl/admin/config/settings.php:181
|
1497 |
msgid "Save credentials in session"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
+
#: tpl/admin/config/settings.php:233 tpl/admin/config/apis.php:121
|
1501 |
#: tpl/admin/config/prefs.php:44
|
1502 |
msgid "Save settings"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: tpl/admin/config/settings.php:52 tpl/admin/config/settings.php:58
|
1506 |
msgid "Saving PO/POT files"
|
1507 |
msgstr ""
|
1508 |
|
1510 |
msgid "Saving this file requires permission"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: tpl/admin/config/settings.php:43
|
1514 |
msgid "Scan JavaScript files with extensions:"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: tpl/admin/config/settings.php:37
|
1518 |
msgid "Scan PHP files with extensions:"
|
1519 |
msgstr ""
|
1520 |
|
1554 |
msgstr ""
|
1555 |
|
1556 |
#: src/mvc/AdminRouter.php:67 src/mvc/AdminRouter.php:72
|
1557 |
+
#: tpl/ajax/modal-apis-empty.php:15 src/admin/file/EditController.php:163
|
1558 |
+
#: tpl/admin/common/inc-fsconn.php:18 tpl/admin/common/inc-fsconn.php:43
|
1559 |
+
#: tpl/admin/errors/no-backups.php:24
|
1560 |
msgid "Settings"
|
1561 |
msgstr ""
|
1562 |
|
1566 |
msgid "Settings saved"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
+
#: src/admin/bundle/BaseController.php:109
|
1570 |
msgid "Setup"
|
1571 |
msgstr ""
|
1572 |
|
1587 |
"Site options apply to all users of Loco Translate across the current site"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: tpl/admin/config/settings.php:31
|
1591 |
msgid "Skip PHP files larger than:"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: src/admin/init/InitPoController.php:231
|
1595 |
msgid "Skip template"
|
1596 |
msgstr ""
|
1597 |
|
1639 |
msgstr ""
|
1640 |
|
1641 |
#. Indicates that POT files are optional, which is not recommended
|
1642 |
+
#: tpl/admin/config/settings.php:107
|
1643 |
msgid "Sync with source when template missing"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
+
#: tpl/admin/config/settings.php:89 tpl/admin/config/settings.php:95
|
1647 |
msgid "Syncing PO files"
|
1648 |
msgstr ""
|
1649 |
|
1928 |
msgid "Unexpected file type"
|
1929 |
msgstr ""
|
1930 |
|
1931 |
+
#: src/package/Header.php:86 src/admin/file/InfoController.php:136
|
1932 |
msgid "Unknown author"
|
1933 |
msgstr ""
|
1934 |
|
1941 |
msgid "Upgrade to %s"
|
1942 |
msgstr ""
|
1943 |
|
1944 |
+
#: src/admin/init/UploadController.php:29 tpl/admin/init/upload.php:58
|
1945 |
msgid "Upload"
|
1946 |
msgstr ""
|
1947 |
|
1953 |
msgid "Upload PO"
|
1954 |
msgstr ""
|
1955 |
|
1956 |
+
#: tpl/admin/init/upload.php:45
|
1957 |
+
msgid "Upload PO file"
|
1958 |
+
msgstr ""
|
1959 |
+
|
1960 |
#: tpl/admin/init/init-po.php:163
|
1961 |
msgid "Use this file as template when running Sync"
|
1962 |
msgstr ""
|
2004 |
msgid "View template"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
+
#: src/package/Header.php:92
|
2008 |
msgid "Visit official site"
|
2009 |
msgstr ""
|
2010 |
|
2030 |
msgid "Welcome to Loco Translate"
|
2031 |
msgstr ""
|
2032 |
|
2033 |
+
#: src/admin/init/InitPoController.php:319 tpl/admin/file/info.php:113
|
2034 |
msgid "What's this?"
|
2035 |
msgstr ""
|
2036 |
|
2038 |
msgid "WordPress"
|
2039 |
msgstr ""
|
2040 |
|
2041 |
+
#. Where %s is the full version number of WordPress
|
2042 |
+
#: tpl/admin/config/version.php:69
|
2043 |
+
#, php-format
|
2044 |
+
msgid "WordPress %s"
|
2045 |
+
msgstr ""
|
2046 |
+
|
2047 |
+
#: src/package/Core.php:87 src/admin/bundle/LocaleController.php:136
|
2048 |
msgid "WordPress Core"
|
2049 |
msgstr ""
|
2050 |
|
2128 |
msgid "Your changes will be lost if you continue without saving"
|
2129 |
msgstr ""
|
2130 |
|
2131 |
+
#: src/ajax/UploadController.php:70
|
2132 |
msgid "Your file is identical to the existing one"
|
2133 |
msgstr ""
|
2134 |
+
|
2135 |
+
#. This is HTML formatted. (1) placeholder for language code, (2) Example language code
|
2136 |
+
#: tpl/admin/init/upload.php:50
|
2137 |
+
#, php-format
|
2138 |
+
msgid ""
|
2139 |
+
"Your file must be named as shown above where %1$s is the language code, e.g. "
|
2140 |
+
"%2$s"
|
2141 |
+
msgstr ""
|
lib/compiled/gettext.php
CHANGED
@@ -15,8 +15,8 @@ class LocoPoParser extends LocoGettextParser implements Iterator { private $lin
|
|
15 |
class LocoMoParser extends LocoGettextParser { private $bin; private $be; private $n; private $o; private $t; private $v; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse( $limit = -1 ){ $i = -1; $r = array(); $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $soffset = $sourceOffset; $toffset = $targetOffset; while( $soffset < $targetOffset ){ $len = $this->integerAt( $soffset ); $idx = $this->integerAt( $soffset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false === $eot ){ $context = null; } else { $context = $this->str( substr($src, 0, $eot ) ); $src = substr( $src, $eot+1 ); } $sources = explode( "\0", $src, 2 ); $len = $this->integerAt( $toffset ); $idx = $this->integerAt( $toffset + 4 ); $targets = explode( "\0", $this->bytes( $idx, $len ) ); if( -1 === $i && '' === $sources[0] && is_null($context) ){ $this->setHeader( LocoPoHeaders::fromMsgstr($targets[0]) ); } if( ++$i === $limit ){ break; } $r[$i] = array( 'source' => $this->str( $sources[0] ), 'target' => $this->str( $targets[0] ), 'context' => $context, ); if( isset($sources[1]) ){ $p = count($r) - 1; $nforms = max( 2, count($targets) ); for( $i = 1; $i < $nforms; $i++ ){ $r[] = array( 'source' => isset($sources[$i]) ? $this->str( $sources[$i] ) : sprintf('%s (plural %u)',$r[$p]['source'],$i), 'target' => isset($targets[$i]) ? $this->str( $targets[$i] ) : '', 'parent' => $p, 'plural' => $i, ); } } $soffset += 8; $toffset += 8; } return $r; } public function isBigendian(){ if( is_null($this->be) ){ $str = $this->words( 0, 1 ); if( "\xDE\x12\x04\x95" === $str ){ $this->be = false; } else if( "\x95\x04\x12\xDE" === $str ){ $this->be = true; } else { throw new Loco_error_ParseException('Invalid MO format'); } } return $this->be; } public function version(){ if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } public function count(){ if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset(){ if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset(){ if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable(){ $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ){ $s = substr( $this->bin, $offset, $length ); if( strlen($s) !== $length ){ throw new Loco_error_ParseException('Failed to read '.$length.' bytes at ['.$offset.']' ); } return $s; } private function words( $offset, $length ){ return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ){ return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ){ $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Loco_error_ParseException('Failed to read integer at byte '.$offset); } return $arr[1]; } }
|
16 |
abstract class LocoPo { public static function pair( $key, $text, $width = 79, $eol = "\n", $esc = '\\n' ){ if( '' === $text ){ return $key.' ""'; } $text = addcslashes( $text, "\t\x0B\x0C\x07\x08\\\"" ); if( $esc ) { $text = preg_replace('/(?:\\r\\n?|\\n)/', $esc.$eol, $text, -1, $nbr ); } else { $eol = "\n"; $text = preg_replace_callback('/(?:\\r\\n?|\\n)/',array(__CLASS__,'replace_br'), $text, -1, $nbr ); } if( $nbr ){ } else if( $width && $width < mb_strlen($text,'UTF-8') + strlen($key) + 3 ){ } else { return $key.' "'.$text.'"'; } $lines = array( $key.' "' ); if( $width ){ $width -= 2; $a = '/^.{0,'.($width-1).'}[-– \\.,:;\\?!\\)\\]\\}\\>]/u'; $b = '/^[^-– \\.,:;\\?!\\)\\]\\}\\>]+/u'; foreach( explode($eol,$text) as $unwrapped ){ $length = mb_strlen( $unwrapped, 'UTF-8' ); while( $length > $width ){ if( preg_match( $a, $unwrapped, $r ) ){ $line = $r[0]; } else if( preg_match( $b, $unwrapped, $r ) ){ $line = $r[0]; } else { throw new Exception('Wrapping error'); } $lines[] = $line; $trunc = mb_strlen($line,'UTF-8'); $length -= $trunc; $unwrapped = (string) substr( $unwrapped, strlen($line) ); if( ( '' === $unwrapped && 0 !== $length ) || ( 0 === $length && '' !== $unwrapped ) ){ throw new Exception('Truncation error'); } } if( 0 !== $length ){ $lines[] = $unwrapped; } } } else { foreach( explode($eol,$text) as $unwrapped ){ $lines[] = $unwrapped; } } return implode('"'.$eol.'"',$lines).'"'; } private static function replace_br( array $r ){ return addcslashes($r[0],"\r\n")."\n"; } public static function refs( $text, $width = 76, $eol = "\n" ){ $text = preg_replace('/\\s+/u', ' ', $text ); if( $width ){ $text = wordwrap( $text, $width, $eol.'#: ', false ); } return '#: '.$text; } public static function prefix( $text, $prefix, $eol = "\n" ){ return $prefix . implode($eol.$prefix, self::split($text) ); } public static function split( $text ){ $lines = preg_split('/\\R/u', $text ); if( false === $lines ){ if( false === preg_match('//u',$text) ){ $text = mb_convert_encoding( $text, 'UTF-8', 'cp1252' ); } $lines = preg_split('/\\r?\\n+/', $text ); } return $lines; } public static function trim( $text ){ $lines = array(); $deferred = null; foreach( explode("\n",$text) as $line ){ if( '' === $line ){ continue; } if( preg_match('/^msg[a-z]+(?:\\[\\d+])? ""/',$line) ){ $deferred = $line; continue; } if( $deferred && '"' === $line[0] ){ $lines[] = $deferred; $deferred = null; } $lines[] = $line; } return implode("\n",$lines); } }
|
17 |
class LocoPoIndex extends ArrayIterator { public function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); if( ! isset($this[$h]) ){ return 1; } $j = $b->getHash(); if( ! isset($this[$j]) ){ return -1; } return $this[$h] > $this[$j] ? 1 : -1; } }
|
18 |
-
class LocoPoMessage extends ArrayObject { public function __construct( array $r ){ $r['key'] = $r['source']; parent::__construct($r); } public function __get( $prop ){ return $this->offsetExists($prop) ? $this->offsetGet($prop) : null; } private function _getFlags(){ $flags = array(); $plurals = $this->__get('plurals'); if( 4 === $this->__get('flag') ){ $flags[] = 'fuzzy'; } else if( $plurals ){ foreach( $plurals as $child ){ if( 4 === $child->__get('flag') ){ $flags[] = 'fuzzy'; break; } } } if( $f = $this->__get('format') ){ $flags[] = $f.'-format'; } else if( isset($plurals[0]) && ( $f = $plurals[0]->format ) ){ $flags[] = $f.'-format'; } return $flags; } public function getHash(){ $hash = $this->getKey(); if( $this->offsetExists('plurals') ){ foreach( $this['plurals'] as $p ){ $hash .= "\0".$p->getHash(); break; } } return $hash; } public function getKey(){ $msgid = (string) $this['source']; $msgctxt = (string) $this->__get('context'); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\4".$msgid; } return $msgid; } public function __toString(){ return $this->render( 79, 76 ); } public function render( $width, $ref_width ){ $s = array(); try { if( $text = $this->__get('comment') ) { $s[] = LocoPo::prefix( $text, '# '); } if( $text = $this->__get('notes') ) { $s[] = LocoPo::prefix( $text, '#. '); } if( $text = $this->__get('refs') ){ $s[] = LocoPo::refs( $text, $ref_width ); } if( $texts = $this->_getFlags() ){ $s[] = '#, '.implode(', ',$texts); } $prev = $this->__get('prev'); if( is_array($prev) && $prev ){ foreach( new LocoPoIterator($prev) as $p ){ $text = $p->render( max(0,$width-3), 0 ); $s[] = LocoPo::prefix( LocoPo::trim($text),'#| '); break; } } $text = $this->__get('context'); if( is_string($text) && '' !== $text ){ $s[] = LocoPo::pair('msgctxt', $text, $width ); } $s[] = LocoPo::pair( 'msgid', $this['source'], $width ); $target = $this['target']; $plurals = $this->__get('plurals'); if( is_array($plurals) ){ if( $plurals ){ foreach( $plurals as $i => $p ){ if( 0 === $i ){ $s[] = LocoPo::pair('msgid_plural', $p['source'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); } $s[] = LocoPo::pair('msgstr['.(++$i).']', $p['target'], $width ); } } else if( isset($this['plural_key']) ){ $s[] = LocoPo::pair('msgid_plural', $this['plural_key'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); } else { trigger_error('Missing plural_key in zero plural export'); $s[] = LocoPo::pair('msgstr', $target, $width ); } } else { $s[] = LocoPo::pair('msgstr', $target, $width ); } } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); } return implode("\n",$s)."\n"; } public function merge( LocoPoMessage $def, $translate = false ){ if( $def->getHash() !== $this->getHash() ){ $prev = array( 'source' => '', 'target' => '' ); $prev = $this->diff('source',$def,$prev); $prev = $this->diff('context',$def,$prev); $this['flag'] = 4; $this['prev'] = array( $prev ); $defPlural = $def->getPlural(0); $ourPlural = $this->getPlural(0); if( $defPlural && $ourPlural ) { $ourPlural->merge($defPlural); if( $ourPlural->offsetExists('prev') ) { $this['prev'][] = $ourPlural->prev[0]+array('parent'=>0,'plural'=>1); $ourPlural->offsetUnset('prev'); } } else if( $defPlural ){ $this['plurals'] = array( clone $defPlural ); } else if( $ourPlural ){ $this['prev'][] = $ourPlural->exportBasic() + array('parent'=>0,'plural'=>1); $this->offsetUnset('plurals'); } } foreach( array('notes','refs') as $f ){ if( $def->offsetExists($f) ){ $this->offsetSet($f,$def->offsetGet($f)); } else if( $this->offsetExists($f) ){ $this->offsetUnset($f); } } if( $translate && '' === $this['target'] && '' !== $def['target'] ){ $this['target'] = $def['target']; if( $def->offsetExists('comment') ) { $this['comment'] = $def['comment']; } if( $this->offsetExists('plurals') ){ foreach( $this['plurals'] as $i => $ourPlural ){ if( '' === $ourPlural['target'] ){ $defPlural = $def->getPlural($i); if( $defPlural ){ $ourPlural['target'] = $defPlural['target']; } } } } } } private function diff( $key, LocoPoMessage $def, array $prev ){ $old = $this->__get($key); $new = $def->__get($key); if( $new !== $old ){ $this->offsetSet($key,$new); if( is_string($old) && '' !== $old ){ $prev[$key] = $old; } } return $prev; } private function getPlural( $i ){ if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); if( is_array($plurals) && array_key_exists($i,$plurals) ){ return $plurals[$i]; } } return null; } private function exportBasic(){ return array( 'source' => $this['source'], 'context' => $this->context, 'target' => '', ); } public function export(){ $a = $this->getArrayCopy(); unset($a['key']); return $a; } public function countForms(){ $len = 1; if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); $len += count($plurals); } return $len; } public function strip(){ $this['target'] = ''; $plurals = $this->plurals; if( is_array($plurals) ){ foreach( $plurals as $p ){ $p->strip(); } } return $this; } }
|
19 |
-
class LocoPoIterator implements Iterator, Countable { private $po; private $headers = null; private $i; private $t; private $j; private $z = 0; private $w = 79; public function __construct( $po ){ if( is_array($po) ){ $this->po = $po; } else if( $po instanceof Traversable ){ $this->po = iterator_to_array($po,false); } else { throw new InvalidArgumentException('PO data must be array or iterator'); } $this->t = count($po); if( 0 === $this->t ){ throw new InvalidArgumentException('Empty PO data'); } $h = $po[0]; if( '' !== $h['source'] || ( isset($h['context']) && '' !== $h['context'] ) || ( isset($po[1]['parent']) && 0 === $po[1]['parent'] ) ){ $this->z = -1; } } public function push( LocoPoMessage $p ){ $raw = $p->export(); $plurals = $p->plurals; unset($raw['plurals']); $i = count($this->po); $this->po[$i] = $raw; $this->t++; if( is_array($plurals) ) { $j = 0; foreach( $plurals as $p ) { $raw = $p->export(); $raw['parent'] = $i; $raw['plural'] = ++$j; $this->po[] = $raw; $this->t++; } } } public function __clone(){ if( $this->headers ){ $this->headers = new LocoPoHeaders( $this->headers->getArrayCopy() ); } } public function count(){ return $this->t - ( $this->z + 1 ); } public function wrap( $width ){ $width = (int) $width; if( $width > 0 ){ $this->w = max( 15, $width ); } else { $this->w = 0; } return $this; } public function rewind(){ $this->i = $this->z; $this->j = -1; $this->next(); } public function key(){ return $this->j; } public function valid(){ return is_int($this->i); } public function next(){ $i = $this->i; while( ++$i < $this->t ){ if( array_key_exists('parent',$this->po[$i]) ){ continue; } $this->j++; $this->i = $i; return; } $this->i = null; $this->j = null; } public function current(){ $i = $this->i; $po = $this->po; $parent = new LocoPoMessage( $po[$i] ); $plurals = array(); $nonseq = $parent->offsetExists('child'); $j = $nonseq ? $parent['child'] : $i+1; while( isset($po[$j]['parent']) && $i === $po[$j]['parent'] ){ $plurals[] = new LocoPoMessage($po[$j++]); } if( $plurals ){ $parent['plurals'] = $plurals; } return $parent; } public function getArrayCopy(){ $po = $this->po; if( 0 === $this->z ){ $po[0]['target'] = (string) $this->getHeaders(); } return $po; } public function clear(){ if( 0 === $this->z ){ $this->po = array( $this->po[0] ); $this->t = 1; } else { $this->po = array(); $this->t = 0; } } public function getHeaders(){ if( is_null($this->headers) ){ $header = $this->po[0]; if( 0 === $this->z ){ $this->headers = LocoPoHeaders::fromMsgstr( $header['target'] ); } else { $this->headers = new LocoPoHeaders; } } return $this->headers; } public function initPo(){ if( 0 === $this->z ){ unset( $this->po[0]['flag'] ); } return $this; } public function initPot(){ if( 0 === $this->z ){ $this->po[0]['flag'] = 4; } return $this; } public function strip(){ $po = $this->po; $i = count($po); $z = $this->z; while( --$i > $z ){ $po[$i]['target'] = ''; } $this->po = $po; return $this; } public function __toString(){ try { return $this->render(); } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); return ''; } } public function render( $sorter = null ){ $width = $this->w; $ref_width = max( 0, $width - 3 );
|
20 |
class LocoMoTable { private $size = 0; private $bin = ''; private $map; public function __construct( $data = null ){ if( is_array($data) ){ $this->compile( $data ); } else if( $data ){ $this->parse( $data ); } } public function count(){ if( ! isset($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } return $this->size; } public function bytes(){ return $this->count() * 4; } public function __toString(){ return $this->bin; } public function export(){ if( ! is_array($this->map) ){ $this->parse( $this->bin ); } return $this->map; } private function reset( $length ){ $this->size = max( 3, self::next_prime ( $length * 4 / 3 ) ); $this->bin = null; $this->map = array(); return $this->size; } public function compile( array $msgids ){ $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } return $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } public function parse( $bin ){ $this->bin = (string) $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = array(); $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } return $this->map; } public static function hashpjw( $str ){ $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( substr($str,$i,1) ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ){ $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if ($num === 1 ){ return false; } if( $num === 2 ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } }
|
21 |
class LocoMo { private $bin; private $msgs; private $head; private $hash; private $use_fuzzy = false; private $cs; public function __construct( Iterator $export, LocoPoHeaders $head = null ){ if( $head ){ $this->head = $head; } else { $this->head = new LocoPoHeaders; $this->setHeader('Project-Id-Version','Loco'); } $this->msgs = $export; $this->bin = ''; } public function setCharset( $cs ){ $cs = $this->head->setCharset($cs); $this->cs = 'UTF-8' === $cs ? null : $cs; } public function enableHash(){ return $this->hash = new LocoMoTable; } public function useFuzzy(){ $this->use_fuzzy = true; } public function setHeader( $key, $val ){ $this->head->add($key, $val); return $this; } private function str( $s ){ $s = (string) $s; if( $cs = $this->cs ){ $s = mb_convert_encoding($s,$cs,array('UTF-8')); } return $s; } public function compile(){ $table = array(''); $sources = array(''); $targets = array( (string) $this->head ); $fuzzy_flag = 4; $skip_fuzzy = ! $this->use_fuzzy; foreach( $this->msgs as $r ){ if( $skip_fuzzy && isset($r['flag']) && $fuzzy_flag === $r['flag'] ){ continue; } $msgid = $this->str( $r['key'] ); if( isset($r['context']) ){ $msgctxt = $this->str( $r['context'] ); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( '' === $msgid ){ continue; } $msgstr = $this->str( $r['target'] ); if( '' === $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$p['key']; } $msgstr .= "\0".$p['target']; } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = "\xDE\x12\x04\x95\x00\x00\x00\x00"; $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $i => $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ){ $this->bin .= pack( 'V', $num ); return $this; } }
|
22 |
interface LocoTokensInterface extends Iterator { public function advance(); public function ignore( array $a ); }
|
15 |
class LocoMoParser extends LocoGettextParser { private $bin; private $be; private $n; private $o; private $t; private $v; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse( $limit = -1 ){ $i = -1; $r = array(); $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $soffset = $sourceOffset; $toffset = $targetOffset; while( $soffset < $targetOffset ){ $len = $this->integerAt( $soffset ); $idx = $this->integerAt( $soffset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false === $eot ){ $context = null; } else { $context = $this->str( substr($src, 0, $eot ) ); $src = substr( $src, $eot+1 ); } $sources = explode( "\0", $src, 2 ); $len = $this->integerAt( $toffset ); $idx = $this->integerAt( $toffset + 4 ); $targets = explode( "\0", $this->bytes( $idx, $len ) ); if( -1 === $i && '' === $sources[0] && is_null($context) ){ $this->setHeader( LocoPoHeaders::fromMsgstr($targets[0]) ); } if( ++$i === $limit ){ break; } $r[$i] = array( 'source' => $this->str( $sources[0] ), 'target' => $this->str( $targets[0] ), 'context' => $context, ); if( isset($sources[1]) ){ $p = count($r) - 1; $nforms = max( 2, count($targets) ); for( $i = 1; $i < $nforms; $i++ ){ $r[] = array( 'source' => isset($sources[$i]) ? $this->str( $sources[$i] ) : sprintf('%s (plural %u)',$r[$p]['source'],$i), 'target' => isset($targets[$i]) ? $this->str( $targets[$i] ) : '', 'parent' => $p, 'plural' => $i, ); } } $soffset += 8; $toffset += 8; } return $r; } public function isBigendian(){ if( is_null($this->be) ){ $str = $this->words( 0, 1 ); if( "\xDE\x12\x04\x95" === $str ){ $this->be = false; } else if( "\x95\x04\x12\xDE" === $str ){ $this->be = true; } else { throw new Loco_error_ParseException('Invalid MO format'); } } return $this->be; } public function version(){ if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } public function count(){ if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset(){ if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset(){ if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable(){ $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ){ $s = substr( $this->bin, $offset, $length ); if( strlen($s) !== $length ){ throw new Loco_error_ParseException('Failed to read '.$length.' bytes at ['.$offset.']' ); } return $s; } private function words( $offset, $length ){ return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ){ return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ){ $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Loco_error_ParseException('Failed to read integer at byte '.$offset); } return $arr[1]; } }
|
16 |
abstract class LocoPo { public static function pair( $key, $text, $width = 79, $eol = "\n", $esc = '\\n' ){ if( '' === $text ){ return $key.' ""'; } $text = addcslashes( $text, "\t\x0B\x0C\x07\x08\\\"" ); if( $esc ) { $text = preg_replace('/(?:\\r\\n?|\\n)/', $esc.$eol, $text, -1, $nbr ); } else { $eol = "\n"; $text = preg_replace_callback('/(?:\\r\\n?|\\n)/',array(__CLASS__,'replace_br'), $text, -1, $nbr ); } if( $nbr ){ } else if( $width && $width < mb_strlen($text,'UTF-8') + strlen($key) + 3 ){ } else { return $key.' "'.$text.'"'; } $lines = array( $key.' "' ); if( $width ){ $width -= 2; $a = '/^.{0,'.($width-1).'}[-– \\.,:;\\?!\\)\\]\\}\\>]/u'; $b = '/^[^-– \\.,:;\\?!\\)\\]\\}\\>]+/u'; foreach( explode($eol,$text) as $unwrapped ){ $length = mb_strlen( $unwrapped, 'UTF-8' ); while( $length > $width ){ if( preg_match( $a, $unwrapped, $r ) ){ $line = $r[0]; } else if( preg_match( $b, $unwrapped, $r ) ){ $line = $r[0]; } else { throw new Exception('Wrapping error'); } $lines[] = $line; $trunc = mb_strlen($line,'UTF-8'); $length -= $trunc; $unwrapped = (string) substr( $unwrapped, strlen($line) ); if( ( '' === $unwrapped && 0 !== $length ) || ( 0 === $length && '' !== $unwrapped ) ){ throw new Exception('Truncation error'); } } if( 0 !== $length ){ $lines[] = $unwrapped; } } } else { foreach( explode($eol,$text) as $unwrapped ){ $lines[] = $unwrapped; } } return implode('"'.$eol.'"',$lines).'"'; } private static function replace_br( array $r ){ return addcslashes($r[0],"\r\n")."\n"; } public static function refs( $text, $width = 76, $eol = "\n" ){ $text = preg_replace('/\\s+/u', ' ', $text ); if( $width ){ $text = wordwrap( $text, $width, $eol.'#: ', false ); } return '#: '.$text; } public static function prefix( $text, $prefix, $eol = "\n" ){ return $prefix . implode($eol.$prefix, self::split($text) ); } public static function split( $text ){ $lines = preg_split('/\\R/u', $text ); if( false === $lines ){ if( false === preg_match('//u',$text) ){ $text = mb_convert_encoding( $text, 'UTF-8', 'cp1252' ); } $lines = preg_split('/\\r?\\n+/', $text ); } return $lines; } public static function trim( $text ){ $lines = array(); $deferred = null; foreach( explode("\n",$text) as $line ){ if( '' === $line ){ continue; } if( preg_match('/^msg[a-z]+(?:\\[\\d+])? ""/',$line) ){ $deferred = $line; continue; } if( $deferred && '"' === $line[0] ){ $lines[] = $deferred; $deferred = null; } $lines[] = $line; } return implode("\n",$lines); } }
|
17 |
class LocoPoIndex extends ArrayIterator { public function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); if( ! isset($this[$h]) ){ return 1; } $j = $b->getHash(); if( ! isset($this[$j]) ){ return -1; } return $this[$h] > $this[$j] ? 1 : -1; } }
|
18 |
+
class LocoPoMessage extends ArrayObject { public function __construct( array $r ){ $r['key'] = $r['source']; parent::__construct($r); } public function __get( $prop ){ return $this->offsetExists($prop) ? $this->offsetGet($prop) : null; } private function _getFlags(){ $flags = array(); $plurals = $this->__get('plurals'); if( 4 === $this->__get('flag') ){ $flags[] = 'fuzzy'; } else if( $plurals ){ foreach( $plurals as $child ){ if( 4 === $child->__get('flag') ){ $flags[] = 'fuzzy'; break; } } } if( $f = $this->__get('format') ){ $flags[] = $f.'-format'; } else if( isset($plurals[0]) && ( $f = $plurals[0]->format ) ){ $flags[] = $f.'-format'; } return $flags; } public function getHash(){ $hash = $this->getKey(); if( $this->offsetExists('plurals') ){ foreach( $this['plurals'] as $p ){ $hash .= "\0".$p->getHash(); break; } } return $hash; } public function getKey(){ $msgid = (string) $this['source']; $msgctxt = (string) $this->__get('context'); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\4".$msgid; } return $msgid; } public function exportSerial(){ $a = array( $this['target'] ); if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); if( is_array($plurals) ){ foreach( $plurals as $i => $p ){ $a[] = $p['target']; } } } return $a; } public function __toString(){ return $this->render( 79, 76 ); } public function render( $width, $ref_width ){ $s = array(); try { if( $text = $this->__get('comment') ) { $s[] = LocoPo::prefix( $text, '# '); } if( $text = $this->__get('notes') ) { $s[] = LocoPo::prefix( $text, '#. '); } if( $text = $this->__get('refs') ){ $s[] = LocoPo::refs( $text, $ref_width ); } if( $texts = $this->_getFlags() ){ $s[] = '#, '.implode(', ',$texts); } $prev = $this->__get('prev'); if( is_array($prev) && $prev ){ foreach( new LocoPoIterator($prev) as $p ){ $text = $p->render( max(0,$width-3), 0 ); $s[] = LocoPo::prefix( LocoPo::trim($text),'#| '); break; } } $text = $this->__get('context'); if( is_string($text) && '' !== $text ){ $s[] = LocoPo::pair('msgctxt', $text, $width ); } $s[] = LocoPo::pair( 'msgid', $this['source'], $width ); $target = $this['target']; $plurals = $this->__get('plurals'); if( is_array($plurals) ){ if( $plurals ){ foreach( $plurals as $i => $p ){ if( 0 === $i ){ $s[] = LocoPo::pair('msgid_plural', $p['source'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); } $s[] = LocoPo::pair('msgstr['.(++$i).']', $p['target'], $width ); } } else if( isset($this['plural_key']) ){ $s[] = LocoPo::pair('msgid_plural', $this['plural_key'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); } else { trigger_error('Missing plural_key in zero plural export'); $s[] = LocoPo::pair('msgstr', $target, $width ); } } else { $s[] = LocoPo::pair('msgstr', $target, $width ); } } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); } return implode("\n",$s)."\n"; } public function merge( LocoPoMessage $def, $translate = false ){ if( $def->getHash() !== $this->getHash() ){ $prev = array( 'source' => '', 'target' => '' ); $prev = $this->diff('source',$def,$prev); $prev = $this->diff('context',$def,$prev); $this['flag'] = 4; $this['prev'] = array( $prev ); $defPlural = $def->getPlural(0); $ourPlural = $this->getPlural(0); if( $defPlural && $ourPlural ) { $ourPlural->merge($defPlural); if( $ourPlural->offsetExists('prev') ) { $this['prev'][] = $ourPlural->prev[0]+array('parent'=>0,'plural'=>1); $ourPlural->offsetUnset('prev'); } } else if( $defPlural ){ $this['plurals'] = array( clone $defPlural ); } else if( $ourPlural ){ $this['prev'][] = $ourPlural->exportBasic() + array('parent'=>0,'plural'=>1); $this->offsetUnset('plurals'); } } foreach( array('notes','refs') as $f ){ if( $def->offsetExists($f) ){ $this->offsetSet($f,$def->offsetGet($f)); } else if( $this->offsetExists($f) ){ $this->offsetUnset($f); } } if( $translate && '' === $this['target'] && '' !== $def['target'] ){ $this['target'] = $def['target']; if( $def->offsetExists('comment') ) { $this['comment'] = $def['comment']; } if( $this->offsetExists('plurals') ){ foreach( $this['plurals'] as $i => $ourPlural ){ if( '' === $ourPlural['target'] ){ $defPlural = $def->getPlural($i); if( $defPlural ){ $ourPlural['target'] = $defPlural['target']; } } } } } } private function diff( $key, LocoPoMessage $def, array $prev ){ $old = $this->__get($key); $new = $def->__get($key); if( $new !== $old ){ $this->offsetSet($key,$new); if( is_string($old) && '' !== $old ){ $prev[$key] = $old; } } return $prev; } private function getPlural( $i ){ if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); if( is_array($plurals) && array_key_exists($i,$plurals) ){ return $plurals[$i]; } } return null; } private function exportBasic(){ return array( 'source' => $this['source'], 'context' => $this->context, 'target' => '', ); } public function export(){ $a = $this->getArrayCopy(); unset($a['key']); return $a; } public function countForms(){ $len = 1; if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); $len += count($plurals); } return $len; } public function strip(){ $this['target'] = ''; $plurals = $this->plurals; if( is_array($plurals) ){ foreach( $plurals as $p ){ $p->strip(); } } return $this; } public function translated(){ return '' !== (string) $this['target']; } }
|
19 |
+
class LocoPoIterator implements Iterator, Countable { private $po; private $headers = null; private $i; private $t; private $j; private $z = 0; private $w = 79; public function __construct( $po ){ if( is_array($po) ){ $this->po = $po; } else if( $po instanceof Traversable ){ $this->po = iterator_to_array($po,false); } else { throw new InvalidArgumentException('PO data must be array or iterator'); } $this->t = count($po); if( 0 === $this->t ){ throw new InvalidArgumentException('Empty PO data'); } $h = $po[0]; if( '' !== $h['source'] || ( isset($h['context']) && '' !== $h['context'] ) || ( isset($po[1]['parent']) && 0 === $po[1]['parent'] ) ){ $this->z = -1; } } public function push( LocoPoMessage $p ){ $raw = $p->export(); $plurals = $p->plurals; unset($raw['plurals']); $i = count($this->po); $this->po[$i] = $raw; $this->t++; if( is_array($plurals) ) { $j = 0; foreach( $plurals as $p ) { $raw = $p->export(); $raw['parent'] = $i; $raw['plural'] = ++$j; $this->po[] = $raw; $this->t++; } } } public function __clone(){ if( $this->headers ){ $this->headers = new LocoPoHeaders( $this->headers->getArrayCopy() ); } } public function count(){ return $this->t - ( $this->z + 1 ); } public function wrap( $width ){ $width = (int) $width; if( $width > 0 ){ $this->w = max( 15, $width ); } else { $this->w = 0; } return $this; } public function rewind(){ $this->i = $this->z; $this->j = -1; $this->next(); } public function key(){ return $this->j; } public function valid(){ return is_int($this->i); } public function next(){ $i = $this->i; while( ++$i < $this->t ){ if( array_key_exists('parent',$this->po[$i]) ){ continue; } $this->j++; $this->i = $i; return; } $this->i = null; $this->j = null; } public function current(){ $i = $this->i; $po = $this->po; $parent = new LocoPoMessage( $po[$i] ); $plurals = array(); $nonseq = $parent->offsetExists('child'); $j = $nonseq ? $parent['child'] : $i+1; while( isset($po[$j]['parent']) && $i === $po[$j]['parent'] ){ $plurals[] = new LocoPoMessage($po[$j++]); } if( $plurals ){ $parent['plurals'] = $plurals; } return $parent; } public function getArrayCopy(){ $po = $this->po; if( 0 === $this->z ){ $po[0]['target'] = (string) $this->getHeaders(); } return $po; } public function clear(){ if( 0 === $this->z ){ $this->po = array( $this->po[0] ); $this->t = 1; } else { $this->po = array(); $this->t = 0; } } public function getHeaders(){ if( is_null($this->headers) ){ $header = $this->po[0]; if( 0 === $this->z ){ $this->headers = LocoPoHeaders::fromMsgstr( $header['target'] ); } else { $this->headers = new LocoPoHeaders; } } return $this->headers; } public function initPo(){ if( 0 === $this->z ){ unset( $this->po[0]['flag'] ); } return $this; } public function initPot(){ if( 0 === $this->z ){ $this->po[0]['flag'] = 4; } return $this; } public function strip(){ $po = $this->po; $i = count($po); $z = $this->z; while( --$i > $z ){ $po[$i]['target'] = ''; } $this->po = $po; return $this; } public function __toString(){ try { return $this->render(); } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); return ''; } } public function render( $sorter = null ){ $width = $this->w; $ref_width = max( 0, $width - 3 ); $h = $this->exportHeader(); $msg = new LocoPoMessage( $h ); $s = $msg->render( $width, $ref_width ); if( $sorter ){ if( ! is_callable($sorter) ){ throw new InvalidArgumentException('Bad callback'); } $msgs = array(); foreach( $this as $msg ){ $msgs[] = $msg; } usort( $msgs, $sorter ); } else { $msgs = $this; } foreach( $msgs as $msg ){ $s .= "\n".$msg->render( $width, $ref_width ); } return $s; } public function exportJed(){ $head = $this->getHeaders(); $a = array( '' => array( 'domain' => $head['domain'], 'lang' => $head['language'], 'plural-forms' => $head['plural-forms'], ) ); foreach( $this as $message ){ if( $message->translated() ){ $a[ $message->getKey() ] = $message->exportSerial(); } } return $a; } private function exportHeader(){ if( 0 === $this->z ){ $h = $this->po[0]; } else { $h = array( 'source' => '', 'target' => '' ); } if( $this->headers ){ $h['target'] = (string) $this->headers; } return $h; } public function exportRefs( $grep = '' ){ $a = array(); if( '' === $grep ) { $grep = '/(\\S+):\\d+/'; } else { $grep = '/(\\S*'.$grep.'):\\d+/'; } $self = get_class($this); $base = array( $this->exportHeader() ); foreach( $this as $message ){ if( preg_match_all( $grep, (string) $message->refs, $r ) ){ foreach( $r[1] as $ref ) { if( array_key_exists($ref,$a) ){ $po = $a[$ref]; } else { $po = new $self($base); $a[$ref] = $po; } $po->push($message); } } } return $a; } public function splitRefs( array $map = null ){ $a = array(); foreach( $this as $message ){ $refs = ltrim( (string) $message->refs ); if( '' !== $refs ){ if( preg_match_all('/\\S+\\.([a-z]+):\\d+/', $refs, $r, PREG_SET_ORDER ) ){ $tmp = array(); foreach( $r as $rr ) { list( $ref, $ext ) = $rr; $tmp[$ext][$ref] = true; } foreach( $tmp as $ext => $refs ){ if( is_array($map) ){ if( isset($map[$ext]) ){ $ext = $map[$ext]; } else { continue; } } $message = clone $message; $message['refs'] = implode(' ',array_keys($refs) ); $a[$ext][] = $message; } } } } return $a; } public function getHashes(){ $a = array(); foreach( $this as $msg ){ $a[] = $msg->getHash(); } sort( $a, SORT_STRING ); return $a; } public function equalSource( LocoPoIterator $that ){ $a = $this->getHashes(); $b = $that->getHashes(); if( count($a) !== count($b) ){ return false; } foreach( $a as $i => $hash ){ if( $hash !== $b[$i] ){ return false; } } return true; } public function equal( LocoPoIterator $that ){ if( $this->t !== $that->t ){ return false; } $i = $this->z; $fields = array( 'source', 'context', 'notes', 'refs', 'target', 'comment', 'flag', 'parent', 'plural' ); while( ++$i < $this->t ){ $a = $this->po[$i]; $b = $that->po[$i]; foreach( $fields as $f ){ $af = isset($a[$f]) ? $a[$f] : ''; $bf = isset($b[$f]) ? $b[$f] : ''; if( $af !== $bf ){ return false; } } } return true; } public function sort( $func = null ){ $order = array(); foreach( $this as $msg ){ $order[] = $msg; } if( is_null($func) ){ $func = array( __CLASS__, 'compare' ); } else if( ! is_callable($func) ){ throw new InvalidArgumentException('Bad callback'); } usort( $order, $func ); $this->clear(); foreach( $order as $p ){ $this->push($p); } return $this; } public static function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); $j = $b->getHash(); $n = strcasecmp( $h, $j ); if( 0 === $n ){ $n = strcmp( $h, $j ); if( 0 === $n ){ return 0; } } return $n > 0 ? 1 : -1; } public function createSorter(){ $index = array(); foreach( $this as $i => $msg ){ $index[ $msg->getHash() ] = $i; } $obj = new LocoPoIndex( $index ); return array( $obj, 'compare' ); } }
|
20 |
class LocoMoTable { private $size = 0; private $bin = ''; private $map; public function __construct( $data = null ){ if( is_array($data) ){ $this->compile( $data ); } else if( $data ){ $this->parse( $data ); } } public function count(){ if( ! isset($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } return $this->size; } public function bytes(){ return $this->count() * 4; } public function __toString(){ return $this->bin; } public function export(){ if( ! is_array($this->map) ){ $this->parse( $this->bin ); } return $this->map; } private function reset( $length ){ $this->size = max( 3, self::next_prime ( $length * 4 / 3 ) ); $this->bin = null; $this->map = array(); return $this->size; } public function compile( array $msgids ){ $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } return $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } public function parse( $bin ){ $this->bin = (string) $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = array(); $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } return $this->map; } public static function hashpjw( $str ){ $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( substr($str,$i,1) ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ){ $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if ($num === 1 ){ return false; } if( $num === 2 ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } }
|
21 |
class LocoMo { private $bin; private $msgs; private $head; private $hash; private $use_fuzzy = false; private $cs; public function __construct( Iterator $export, LocoPoHeaders $head = null ){ if( $head ){ $this->head = $head; } else { $this->head = new LocoPoHeaders; $this->setHeader('Project-Id-Version','Loco'); } $this->msgs = $export; $this->bin = ''; } public function setCharset( $cs ){ $cs = $this->head->setCharset($cs); $this->cs = 'UTF-8' === $cs ? null : $cs; } public function enableHash(){ return $this->hash = new LocoMoTable; } public function useFuzzy(){ $this->use_fuzzy = true; } public function setHeader( $key, $val ){ $this->head->add($key, $val); return $this; } private function str( $s ){ $s = (string) $s; if( $cs = $this->cs ){ $s = mb_convert_encoding($s,$cs,array('UTF-8')); } return $s; } public function compile(){ $table = array(''); $sources = array(''); $targets = array( (string) $this->head ); $fuzzy_flag = 4; $skip_fuzzy = ! $this->use_fuzzy; foreach( $this->msgs as $r ){ if( $skip_fuzzy && isset($r['flag']) && $fuzzy_flag === $r['flag'] ){ continue; } $msgid = $this->str( $r['key'] ); if( isset($r['context']) ){ $msgctxt = $this->str( $r['context'] ); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( '' === $msgid ){ continue; } $msgstr = $this->str( $r['target'] ); if( '' === $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$p['key']; } $msgstr .= "\0".$p['target']; } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = "\xDE\x12\x04\x95\x00\x00\x00\x00"; $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $i => $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ){ $this->bin .= pack( 'V', $num ); return $this; } }
|
22 |
interface LocoTokensInterface extends Iterator { public function advance(); public function ignore( array $a ); }
|
lib/data/locales.php
CHANGED
@@ -2,4 +2,4 @@
|
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
-
return array('af'=>array(0=>'Afrikaans',1=>'Afrikaans'),'ar'=>array(0=>'Arabic',1=>'العربية'),'ary'=>array(0=>'Moroccan Arabic',1=>'العربية المغربية'),'as'=>array(0=>'Assamese',1=>'অসমীয়া'),'
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
+
return array('af'=>array(0=>'Afrikaans',1=>'Afrikaans'),'ar'=>array(0=>'Arabic',1=>'العربية'),'ary'=>array(0=>'Moroccan Arabic',1=>'العربية المغربية'),'as'=>array(0=>'Assamese',1=>'অসমীয়া'),'azb'=>array(0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'),'az'=>array(0=>'Azerbaijani',1=>'Azərbaycan dili'),'bel'=>array(0=>'Belarusian',1=>'Беларуская мова'),'bg_BG'=>array(0=>'Bulgarian',1=>'Български'),'bn_BD'=>array(0=>'Bengali (Bangladesh)',1=>'বাংলা'),'bo'=>array(0=>'Tibetan',1=>'བོད་ཡིག'),'bs_BA'=>array(0=>'Bosnian',1=>'Bosanski'),'ca'=>array(0=>'Catalan',1=>'Català'),'ceb'=>array(0=>'Cebuano',1=>'Cebuano'),'cs_CZ'=>array(0=>'Czech',1=>'Čeština'),'cy'=>array(0=>'Welsh',1=>'Cymraeg'),'da_DK'=>array(0=>'Danish',1=>'Dansk'),'de_CH'=>array(0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'),'de_CH_informal'=>array(0=>'German (Switzerland, Informal)',1=>'Deutsch (Schweiz, Du)'),'de_DE_formal'=>array(0=>'German (Formal)',1=>'Deutsch (Sie)'),'de_DE'=>array(0=>'German',1=>'Deutsch'),'dzo'=>array(0=>'Dzongkha',1=>'རྫོང་ཁ'),'el'=>array(0=>'Greek',1=>'Ελληνικά'),'en_CA'=>array(0=>'English (Canada)',1=>'English (Canada)'),'en_NZ'=>array(0=>'English (New Zealand)',1=>'English (New Zealand)'),'en_GB'=>array(0=>'English (UK)',1=>'English (UK)'),'en_ZA'=>array(0=>'English (South Africa)',1=>'English (South Africa)'),'en_AU'=>array(0=>'English (Australia)',1=>'English (Australia)'),'eo'=>array(0=>'Esperanto',1=>'Esperanto'),'es_GT'=>array(0=>'Spanish (Guatemala)',1=>'Español de Guatemala'),'es_ES'=>array(0=>'Spanish (Spain)',1=>'Español'),'es_VE'=>array(0=>'Spanish (Venezuela)',1=>'Español de Venezuela'),'es_MX'=>array(0=>'Spanish (Mexico)',1=>'Español de México'),'es_CL'=>array(0=>'Spanish (Chile)',1=>'Español de Chile'),'es_CR'=>array(0=>'Spanish (Costa Rica)',1=>'Español de Costa Rica'),'es_PE'=>array(0=>'Spanish (Peru)',1=>'Español de Perú'),'es_CO'=>array(0=>'Spanish (Colombia)',1=>'Español de Colombia'),'es_AR'=>array(0=>'Spanish (Argentina)',1=>'Español de Argentina'),'et'=>array(0=>'Estonian',1=>'Eesti'),'eu'=>array(0=>'Basque',1=>'Euskara'),'fa_IR'=>array(0=>'Persian',1=>'فارسی'),'fi'=>array(0=>'Finnish',1=>'Suomi'),'fr_CA'=>array(0=>'French (Canada)',1=>'Français du Canada'),'fr_FR'=>array(0=>'French (France)',1=>'Français'),'fr_BE'=>array(0=>'French (Belgium)',1=>'Français de Belgique'),'fur'=>array(0=>'Friulian',1=>'Friulian'),'gd'=>array(0=>'Scottish Gaelic',1=>'Gàidhlig'),'gl_ES'=>array(0=>'Galician',1=>'Galego'),'gu'=>array(0=>'Gujarati',1=>'ગુજરાતી'),'haz'=>array(0=>'Hazaragi',1=>'هزاره گی'),'he_IL'=>array(0=>'Hebrew',1=>'עִבְרִית'),'hi_IN'=>array(0=>'Hindi',1=>'हिन्दी'),'hr'=>array(0=>'Croatian',1=>'Hrvatski'),'hu_HU'=>array(0=>'Hungarian',1=>'Magyar'),'hy'=>array(0=>'Armenian',1=>'Հայերեն'),'id_ID'=>array(0=>'Indonesian',1=>'Bahasa Indonesia'),'is_IS'=>array(0=>'Icelandic',1=>'Íslenska'),'it_IT'=>array(0=>'Italian',1=>'Italiano'),'ja'=>array(0=>'Japanese',1=>'日本語'),'jv_ID'=>array(0=>'Javanese',1=>'Basa Jawa'),'ka_GE'=>array(0=>'Georgian',1=>'ქართული'),'kab'=>array(0=>'Kabyle',1=>'Taqbaylit'),'kk'=>array(0=>'Kazakh',1=>'Қазақ тілі'),'km'=>array(0=>'Khmer',1=>'ភាសាខ្មែរ'),'ko_KR'=>array(0=>'Korean',1=>'한국어'),'ckb'=>array(0=>'Kurdish (Sorani)',1=>'كوردی'),'lo'=>array(0=>'Lao',1=>'ພາສາລາວ'),'lt_LT'=>array(0=>'Lithuanian',1=>'Lietuvių kalba'),'lv'=>array(0=>'Latvian',1=>'Latviešu valoda'),'mk_MK'=>array(0=>'Macedonian',1=>'Македонски јазик'),'ml_IN'=>array(0=>'Malayalam',1=>'മലയാളം'),'mn'=>array(0=>'Mongolian',1=>'Монгол'),'mr'=>array(0=>'Marathi',1=>'मराठी'),'ms_MY'=>array(0=>'Malay',1=>'Bahasa Melayu'),'my_MM'=>array(0=>'Myanmar (Burmese)',1=>'ဗမာစာ'),'nb_NO'=>array(0=>'Norwegian (Bokmål)',1=>'Norsk bokmål'),'ne_NP'=>array(0=>'Nepali',1=>'नेपाली'),'nl_NL_formal'=>array(0=>'Dutch (Formal)',1=>'Nederlands (Formeel)'),'nl_NL'=>array(0=>'Dutch',1=>'Nederlands'),'nl_BE'=>array(0=>'Dutch (Belgium)',1=>'Nederlands (België)'),'nn_NO'=>array(0=>'Norwegian (Nynorsk)',1=>'Norsk nynorsk'),'oci'=>array(0=>'Occitan',1=>'Occitan'),'pa_IN'=>array(0=>'Punjabi',1=>'ਪੰਜਾਬੀ'),'pl_PL'=>array(0=>'Polish',1=>'Polski'),'ps'=>array(0=>'Pashto',1=>'پښتو'),'pt_PT'=>array(0=>'Portuguese (Portugal)',1=>'Português'),'pt_PT_ao90'=>array(0=>'Portuguese (Portugal, AO90)',1=>'Português (AO90)'),'pt_BR'=>array(0=>'Portuguese (Brazil)',1=>'Português do Brasil'),'rhg'=>array(0=>'Rohingya',1=>'Ruáinga'),'ro_RO'=>array(0=>'Romanian',1=>'Română'),'ru_RU'=>array(0=>'Russian',1=>'Русский'),'sah'=>array(0=>'Sakha',1=>'Сахалыы'),'si_LK'=>array(0=>'Sinhala',1=>'සිංහල'),'sk_SK'=>array(0=>'Slovak',1=>'Slovenčina'),'sl_SI'=>array(0=>'Slovenian',1=>'Slovenščina'),'sq'=>array(0=>'Albanian',1=>'Shqip'),'sr_RS'=>array(0=>'Serbian',1=>'Српски језик'),'sv_SE'=>array(0=>'Swedish',1=>'Svenska'),'szl'=>array(0=>'Silesian',1=>'Ślōnskŏ gŏdka'),'ta_IN'=>array(0=>'Tamil',1=>'தமிழ்'),'te'=>array(0=>'Telugu',1=>'తెలుగు'),'th'=>array(0=>'Thai',1=>'ไทย'),'tl'=>array(0=>'Tagalog',1=>'Tagalog'),'tr_TR'=>array(0=>'Turkish',1=>'Türkçe'),'tt_RU'=>array(0=>'Tatar',1=>'Татар теле'),'tah'=>array(0=>'Tahitian',1=>'Reo Tahiti'),'ug_CN'=>array(0=>'Uighur',1=>'ئۇيغۇرچە'),'uk'=>array(0=>'Ukrainian',1=>'Українська'),'ur'=>array(0=>'Urdu',1=>'اردو'),'uz_UZ'=>array(0=>'Uzbek',1=>'O‘zbekcha'),'vi'=>array(0=>'Vietnamese',1=>'Tiếng Việt'),'zh_TW'=>array(0=>'Chinese (Taiwan)',1=>'繁體中文'),'zh_HK'=>array(0=>'Chinese (Hong Kong)',1=>'香港中文版 '),'zh_CN'=>array(0=>'Chinese (China)',1=>'简体中文'));
|
loco.php
CHANGED
@@ -4,7 +4,9 @@ Plugin Name: Loco Translate
|
|
4 |
Plugin URI: https://wordpress.org/plugins/loco-translate/
|
5 |
Description: Translate themes and plugins directly in WordPress
|
6 |
Author: Tim Whitlock
|
7 |
-
Version: 2.
|
|
|
|
|
8 |
Author URI: https://localise.biz/wordpress/plugin
|
9 |
Text Domain: loco-translate
|
10 |
Domain Path: /languages/
|
@@ -30,7 +32,7 @@ function loco_plugin_file(){
|
|
30 |
* @return string
|
31 |
*/
|
32 |
function loco_plugin_version(){
|
33 |
-
return '2.
|
34 |
}
|
35 |
|
36 |
|
@@ -185,7 +187,7 @@ function loco_class_exists( $class ){
|
|
185 |
|
186 |
// Startup errors will raise notices. Check your error logs if error reporting is quiet
|
187 |
try {
|
188 |
-
spl_autoload_register(
|
189 |
|
190 |
// provide safe directory for custom translations that won't be deleted during auto-updates
|
191 |
if ( ! defined( 'LOCO_LANG_DIR' ) ) {
|
4 |
Plugin URI: https://wordpress.org/plugins/loco-translate/
|
5 |
Description: Translate themes and plugins directly in WordPress
|
6 |
Author: Tim Whitlock
|
7 |
+
Version: 2.5.0
|
8 |
+
Requires at least: 4.1
|
9 |
+
Requires PHP: 5.2.4
|
10 |
Author URI: https://localise.biz/wordpress/plugin
|
11 |
Text Domain: loco-translate
|
12 |
Domain Path: /languages/
|
32 |
* @return string
|
33 |
*/
|
34 |
function loco_plugin_version(){
|
35 |
+
return '2.5.0';
|
36 |
}
|
37 |
|
38 |
|
187 |
|
188 |
// Startup errors will raise notices. Check your error logs if error reporting is quiet
|
189 |
try {
|
190 |
+
spl_autoload_register('loco_autoload');
|
191 |
|
192 |
// provide safe directory for custom translations that won't be deleted during auto-updates
|
193 |
if ( ! defined( 'LOCO_LANG_DIR' ) ) {
|
pub/css/admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.4.6) 0 0 no-repeat;min-height:75px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.4.6);background-size:16px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.4.6);background-size:16px}}._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}.loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:"loco";src:url("../font/loco.eot?v=2.4.6");src:url("../font/loco.eot?v=2.4.6?#iefix") format("embedded-opentype"),url("../font/loco.woff?v=2.4.6") format("woff"),url("../font/loco.ttf?v=2.4.6") format("truetype"),url("../font/loco.svg?v=2.4.6#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#fff;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco-admin.wrap .selector li,#loco-admin.wrap .selector .handle,#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selectorsep:before,#loco-admin.wrap .selectorsep span{padding:.3em .75em}#loco-admin.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco-admin.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco-admin.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco-admin.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco-admin.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco-admin.wrap .selector .handle .prefix{padding-right:.6ex}#loco-admin.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:.25em;right:.6em;content:"▼"}#loco-admin.wrap .selector .handle:focus:after,#loco-admin.wrap .selector .handle:hover:after{color:#666}#loco-admin.wrap .selector.no-caret .handle{padding-right:.75em}#loco-admin.wrap .selector.no-caret .handle:after{display:none}#loco-admin.wrap .selector.no-title .handle{padding-left:.5em;padding-right:.5em}#loco-admin.wrap .selector.no-title .handle .label{display:none}#loco-admin.wrap .selector.no-title .handle .icon{margin-right:0px}#loco-admin.wrap .selector.dummy .handle{border-color:transparent}#loco-admin.wrap .selector.dummy .handle:after{display:none}#loco-admin.wrap .selectoradd{position:relative}#loco-admin.wrap .selectoradd>*{display:block;float:left;clear:none}#loco-admin.wrap .selectoradd>a.has-icon{width:1.3em}#loco-admin.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco-admin.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco-admin.wrap .selectorsep{display:inline-block}#loco-admin.wrap .selectorsep span{color:#666;height:1.3em}#loco-admin.wrap .selector ul{padding:0}#loco-admin.wrap .selector ul,#loco-admin.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco-admin.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,.2);border:solid 1px #ccc;overflow:auto}#loco-admin.wrap .selector.up ul{margin-top:0}#loco-admin.wrap .selector.multi li input{display:none}#loco-admin.wrap .selector.multi li.checked{background:#e5e5e5}#loco-admin.wrap .selector li.active{background:#e5e5e5 !important}#loco-admin.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco-admin.wrap .selector li.over .label{color:#fff}#loco-admin.wrap .selector .label{font:inherit;color:inherit}#loco-admin.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco-admin.wrap .selector .icon.no-icon{display:none}#loco-admin.wrap .selector .icon:before{color:#666}#loco-admin.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco-admin.wrap .selector .label{line-height:1}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .icon-16{vertical-align:bottom}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .lang,#loco-admin.wrap .selector .icon-16{margin-right:5px}#loco-admin.wrap .selector .region,#loco-admin.wrap .selector .variant-wales,#loco-admin.wrap .selector .region-gb.lang-cy,#loco-admin.wrap .selector .variant-scotland,#loco-admin.wrap .selector .region-gb.lang-gd,#loco-admin.wrap .selector .variant-valencia,#loco-admin.wrap .selector .region-es.variant-valencia,#loco-admin.wrap .selector .lang-ca,#loco-admin.wrap .selector .region-es.lang-ca,#loco-admin.wrap .selector .lang-eo,#loco-admin.wrap .selector .lang-eu{margin-left:2px;margin-right:7px}#loco-admin.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco-admin.wrap .selector.ticked .active .icon.no-icon:before{content:"✓"}#loco-admin.wrap .selectoradd a:hover,#loco-admin.wrap .selector a.handle:focus,#loco-admin.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco-admin.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco-admin.wrap .selector.active .handle:after{color:#999;content:"▲"}#loco-admin.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco-admin.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#999;padding-right:1em}#loco-admin.wrap .selector.disabled .handle:after{display:none}#loco-admin.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco-admin.wrap .selector li.disabled,#loco-admin.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco-admin.wrap .selector li.disabled *{cursor:text}#loco-admin.wrap .selector li.disabled .icon:before{color:#aaa}#loco-admin.wrap .selector li.disabled .flag,#loco-admin.wrap .selector li.disabled .icon-16{opacity:.4}#loco-admin.wrap .selector.lefty ul{left:auto;right:0}#loco-admin.wrap .selector.lefty ul .icon,#loco-admin.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco-admin.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco-admin.wrap .selector ul>form{margin:0;display:block}#loco-admin.wrap .selector ul>form input{margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-admin.wrap .selector ul>form input:focus{-webkit-box-shadow:inset 0 0 5px 0 #3db63d;-moz-box-shadow:inset 0 0 5px 0 #3db63d;box-shadow:inset 0 0 5px 0 #3db63d}#loco-admin.wrap .selector ul>form input.error{border-color:#c00;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5)}#loco-admin.wrap .selector ul>form a.clear{margin:0;border:none}#loco-admin.wrap .selector ul>form ::placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form ::-webkit-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form :-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form ::-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form :-ms-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form .ielt10 .placeheld{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap div.auto-comp-wrap{width:100%}#loco-admin.wrap div.auto-comp-wrap input{display:inline-block}#loco-admin.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.4.6) right 2px no-repeat}#loco-admin.wrap div.auto-comp-drop{color:#333;background:#fff;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,.4);box-shadow:0 5px 5px rgba(0,0,0,.4)}#loco-admin.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#f0f0f0;border-top:solid 1px #fff;border-bottom:solid 1px #ddd;white-space:nowrap}#loco-admin.wrap div.auto-comp-result:first-child{border-top:solid 1px #ddd}#loco-admin.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco-admin.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco-admin.wrap div.auto-comp-result:hover{background:#a8a8a8;color:#fff;border-top-color:#a8a8a8;border-bottom-color:#999}#loco-admin.wrap div.auto-comp-result.selected{background:#666 !important;color:#fff;border-top-color:#666;border-bottom-color:#666}#loco-admin.wrap div.auto-comp-result .lang,#loco-admin.wrap div.auto-comp-result .region,#loco-admin.wrap div.auto-comp-result .variant-wales,#loco-admin.wrap div.auto-comp-result .region-gb.lang-cy,#loco-admin.wrap div.auto-comp-result .variant-scotland,#loco-admin.wrap div.auto-comp-result .region-gb.lang-gd,#loco-admin.wrap div.auto-comp-result .variant-valencia,#loco-admin.wrap div.auto-comp-result .region-es.variant-valencia,#loco-admin.wrap div.auto-comp-result .lang-ca,#loco-admin.wrap div.auto-comp-result .region-es.lang-ca,#loco-admin.wrap div.auto-comp-result .lang-eo,#loco-admin.wrap div.auto-comp-result .lang-eu,#loco-admin.wrap div.auto-comp-result .avtr{margin-right:5px}#loco-admin.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#c00;opacity:1}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]{border-color:#c00;color:#c00}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]:focus{-webkit-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);-moz-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);box-shadow:0 0 .5em 0 rgba(153,0,0,.5)}#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}#loco-admin.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.4.6) 0 0 no-repeat;min-height:75px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.4.6);background-size:16px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.4.6);background-size:16px}}#loco-admin.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-admin.wrap ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-admin.wrap .loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .has-icon:before{display:inline-block;padding-right:.3em}#loco-admin.wrap a.icon-help{cursor:help}#loco-admin.wrap a.icon-help span{display:none}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-share:before{content:""}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon-status.is-translated:before,#loco-admin.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco-admin.wrap .icon-status.is-untranslated:before,#loco-admin.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco-admin.wrap .icon-status.is-flagged:before,#loco-admin.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco-admin.wrap .icon-status.is-translated.is-blank:before,#loco-admin.wrap .icon-status.is-translated.is-inherit:before,#loco-admin.wrap .is-translated.is-blank>header>.icon-status:before,#loco-admin.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco-admin.wrap .icon-status.is-fuzzy:before,#loco-admin.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco-admin.wrap .lang,#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco-admin.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco-admin.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco-admin.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco-admin.wrap .lang-el{background-color:#1d48a3}#loco-admin.wrap .lang-el:before{content:"Ελ"}#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.4.6);background-repeat:no-repeat;background-color:transparent}#loco-admin.wrap .region:before,#loco-admin.wrap .variant-wales:before,#loco-admin.wrap .region-gb.lang-cy:before,#loco-admin.wrap .variant-scotland:before,#loco-admin.wrap .region-gb.lang-gd:before,#loco-admin.wrap .variant-valencia:before,#loco-admin.wrap .region-es.variant-valencia:before,#loco-admin.wrap .lang-ca:before,#loco-admin.wrap .region-es.lang-ca:before,#loco-admin.wrap .lang-eo:before,#loco-admin.wrap .lang-eu:before{visibility:hidden}#loco-admin.wrap .lang-zh{background-color:#b90000}#loco-admin.wrap .lang-zh.script-hans:before{content:"中国"}#loco-admin.wrap .lang-zh.script-hant:before{content:"中國"}#loco-admin.wrap .__{background-position:0 0}#loco-admin.wrap .lang-eo{background-position:0 -12px}#loco-admin.wrap .lang-eu{background-position:0 -24px}#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca{background-position:0 -36px}#loco-admin.wrap .region-tg{background-position:0 -48px}#loco-admin.wrap .region-me{background-position:0 -60px}#loco-admin.wrap .region-la{background-position:0 -73px}#loco-admin.wrap .region-mr{background-position:0 -85px}#loco-admin.wrap .region-ni{background-position:0 -97px}#loco-admin.wrap .region-lv{background-position:0 -109px}#loco-admin.wrap .region-om{background-position:0 -121px}#loco-admin.wrap .region-af{background-position:0 -133px}#loco-admin.wrap .region-cy{background-position:0 -145px}#loco-admin.wrap .region-bj{background-position:0 -157px}#loco-admin.wrap .region-aq{background-position:0 -169px}#loco-admin.wrap .region-cn{background-position:0 -186px}#loco-admin.wrap .region-co{background-position:0 -198px}#loco-admin.wrap .region-cx{background-position:0 -210px}#loco-admin.wrap .region-ag{background-position:0 -222px}#loco-admin.wrap .region-ms{background-position:0 -234px}#loco-admin.wrap .region-md{background-position:0 -246px}#loco-admin.wrap .region-zm{background-position:0 -258px}#loco-admin.wrap .region-vn{background-position:0 -270px}#loco-admin.wrap .region-tf{background-position:0 -282px}#loco-admin.wrap .region-td{background-position:0 -294px}#loco-admin.wrap .region-yt{background-position:0 -306px}#loco-admin.wrap .region-lb{background-position:0 -318px}#loco-admin.wrap .region-mf{background-position:0 -330px}#loco-admin.wrap .region-lu{background-position:0 -347px}#loco-admin.wrap .region-mq{background-position:0 -359px}#loco-admin.wrap .region-cz{background-position:0 -371px}#loco-admin.wrap .region-ae{background-position:0 -383px}#loco-admin.wrap .region-cm{background-position:0 -395px}#loco-admin.wrap .region-bi{background-position:0 -407px}#loco-admin.wrap .region-ar{background-position:0 -419px}#loco-admin.wrap .region-as{background-position:0 -431px}#loco-admin.wrap .region-bh{background-position:0 -443px}#loco-admin.wrap .region-cl{background-position:0 -455px}#loco-admin.wrap .region-ad{background-position:0 -467px}#loco-admin.wrap .region-mp{background-position:0 -479px}#loco-admin.wrap .region-lt{background-position:0 -491px}#loco-admin.wrap .region-mg{background-position:0 -503px}#loco-admin.wrap .region-lc{background-position:0 -515px}#loco-admin.wrap .region-tr{background-position:0 -527px}#loco-admin.wrap .region-ua{background-position:0 -539px}#loco-admin.wrap .region-tv{background-position:0 -551px}#loco-admin.wrap .region-vi{background-position:0 -563px}#loco-admin.wrap .region-mt{background-position:0 -575px}#loco-admin.wrap .region-no{background-position:0 -587px}#loco-admin.wrap .region-mc{background-position:0 -599px}#loco-admin.wrap .region-ch{background-position:0 -611px}#loco-admin.wrap .region-bl{background-position:0 -623px}#loco-admin.wrap .region-aw{background-position:0 -640px}#loco-admin.wrap .region-bz{background-position:0 -652px}#loco-admin.wrap .region-bm{background-position:0 -664px}#loco-admin.wrap .region-ci{background-position:0 -676px}#loco-admin.wrap .region-mu{background-position:0 -688px}#loco-admin.wrap .region-us{background-position:0 -700px}#loco-admin.wrap .region-tw{background-position:0 -712px}#loco-admin.wrap .region-ye{background-position:0 -724px}#loco-admin.wrap .region-mw{background-position:0 -736px}#loco-admin.wrap .region-nl{background-position:0 -748px}#loco-admin.wrap .region-ls{background-position:0 -760px}#loco-admin.wrap .region-bo{background-position:0 -772px}#loco-admin.wrap .region-at{background-position:0 -784px}#loco-admin.wrap .region-ck{background-position:0 -796px}#loco-admin.wrap .region-by{background-position:0 -808px}#loco-admin.wrap .region-au{background-position:0 -820px}#loco-admin.wrap .region-bn{background-position:0 -832px}#loco-admin.wrap .region-ma{background-position:0 -844px}#loco-admin.wrap .region-nz{background-position:0 -856px}#loco-admin.wrap .region-lr{background-position:0 -868px}#loco-admin.wrap .region-mv{background-position:0 -880px}#loco-admin.wrap .region-tc{background-position:0 -892px}#loco-admin.wrap .region-ug{background-position:0 -904px}#loco-admin.wrap .region-tt{background-position:0 -916px}#loco-admin.wrap .region-pl{background-position:0 -928px}#loco-admin.wrap .region-rs{background-position:0 -940px}#loco-admin.wrap .region-in{background-position:0 -952px}#loco-admin.wrap .region-ge{background-position:0 -964px}#loco-admin.wrap .region-gr{background-position:0 -976px}#loco-admin.wrap .region-gs{background-position:0 -988px}#loco-admin.wrap .region-gd{background-position:0 -1000px}#loco-admin.wrap .region-io{background-position:0 -1012px}#loco-admin.wrap .region-hk{background-position:0 -1024px}#loco-admin.wrap .region-kp{background-position:0 -1036px}#loco-admin.wrap .region-kg{background-position:0 -1048px}#loco-admin.wrap .region-pm{background-position:0 -1060px}#loco-admin.wrap .region-sv{background-position:0 -1072px}#loco-admin.wrap .region-re{background-position:0 -1084px}#loco-admin.wrap .region-sa{background-position:0 -1096px}#loco-admin.wrap .region-sc{background-position:0 -1108px}#loco-admin.wrap .region-st{background-position:0 -1120px}#loco-admin.wrap .region-ke{background-position:0 -1132px}#loco-admin.wrap .region-im{background-position:0 -1144px}#loco-admin.wrap .region-kr{background-position:0 -1161px}#loco-admin.wrap .region-gf{background-position:0 -1173px}#loco-admin.wrap .region-dj{background-position:0 -1185px}#loco-admin.wrap .region-gq{background-position:0 -1197px}#loco-admin.wrap .region-gp{background-position:0 -1209px}#loco-admin.wrap .region-dk{background-position:0 -1221px}#loco-admin.wrap .region-gg{background-position:0 -1233px}#loco-admin.wrap .region-il{background-position:0 -1250px}#loco-admin.wrap .region-pn{background-position:0 -1262px}#loco-admin.wrap .region-sb{background-position:0 -1274px}#loco-admin.wrap .region-py{background-position:0 -1286px}#loco-admin.wrap .region-ru{background-position:0 -1298px}#loco-admin.wrap .region-kw{background-position:0 -1310px}#loco-admin.wrap .region-do{background-position:0 -1322px}#loco-admin.wrap .region-gt{background-position:0 -1334px}#loco-admin.wrap .region-gb{background-position:0 -1346px}#loco-admin.wrap .region-gu{background-position:0 -1358px}#loco-admin.wrap .region-je{background-position:0 -1370px}#loco-admin.wrap .region-hm{background-position:0 -1387px}#loco-admin.wrap .region-sg{background-position:0 -1399px}#loco-admin.wrap .region-pk{background-position:0 -1411px}#loco-admin.wrap .region-sr{background-position:0 -1423px}#loco-admin.wrap .region-se{background-position:0 -1435px}#loco-admin.wrap .region-jp{background-position:0 -1447px}#loco-admin.wrap .region-gw{background-position:0 -1459px}#loco-admin.wrap .region-eh{background-position:0 -1471px}#loco-admin.wrap .region-dz{background-position:0 -1483px}#loco-admin.wrap .region-ga{background-position:0 -1495px}#loco-admin.wrap .region-fr{background-position:0 -1507px}#loco-admin.wrap .region-dm{background-position:0 -1519px}#loco-admin.wrap .region-hn{background-position:0 -1531px}#loco-admin.wrap .region-sd{background-position:0 -1543px}#loco-admin.wrap .region-rw{background-position:0 -1555px}#loco-admin.wrap .region-ph{background-position:0 -1567px}#loco-admin.wrap .region-ss{background-position:0 -1579px}#loco-admin.wrap .region-qa{background-position:0 -1596px}#loco-admin.wrap .region-pe{background-position:0 -1608px}#loco-admin.wrap .region-pr{background-position:0 -1620px}#loco-admin.wrap .region-si{background-position:0 -1632px}#loco-admin.wrap .region-ht{background-position:0 -1644px}#loco-admin.wrap .region-es{background-position:0 -1656px}#loco-admin.wrap .region-gl{background-position:0 -1668px}#loco-admin.wrap .region-gm{background-position:0 -1680px}#loco-admin.wrap .region-er{background-position:0 -1692px}#loco-admin.wrap .region-fi{background-position:0 -1704px}#loco-admin.wrap .region-ee{background-position:0 -1716px}#loco-admin.wrap .region-kn{background-position:0 -1728px}#loco-admin.wrap .region-hu{background-position:0 -1740px}#loco-admin.wrap .region-iq{background-position:0 -1752px}#loco-admin.wrap .region-ky{background-position:0 -1764px}#loco-admin.wrap .region-sh{background-position:0 -1776px}#loco-admin.wrap .region-ps{background-position:0 -1788px}#loco-admin.wrap .region-pf{background-position:0 -1800px}#loco-admin.wrap .region-sj{background-position:0 -1812px}#loco-admin.wrap .region-id{background-position:0 -1824px}#loco-admin.wrap .region-is{background-position:0 -1836px}#loco-admin.wrap .region-eg{background-position:0 -1848px}#loco-admin.wrap .region-fk{background-position:0 -1860px}#loco-admin.wrap .region-fj{background-position:0 -1872px}#loco-admin.wrap .region-gn{background-position:0 -1884px}#loco-admin.wrap .region-gy{background-position:0 -1896px}#loco-admin.wrap .region-ir{background-position:0 -1908px}#loco-admin.wrap .region-km{background-position:0 -1920px}#loco-admin.wrap .region-ie{background-position:0 -1932px}#loco-admin.wrap .region-kz{background-position:0 -1944px}#loco-admin.wrap .region-ro{background-position:0 -1956px}#loco-admin.wrap .region-sk{background-position:0 -1968px}#loco-admin.wrap .region-pg{background-position:0 -1980px}#loco-admin.wrap .region-pt{background-position:0 -1992px}#loco-admin.wrap .region-so{background-position:0 -2004px}#loco-admin.wrap .region-sx{background-position:0 -2016px}#loco-admin.wrap .region-hr{background-position:0 -2033px}#loco-admin.wrap .region-ki{background-position:0 -2045px}#loco-admin.wrap .region-jm{background-position:0 -2057px}#loco-admin.wrap .region-ec{background-position:0 -2069px}#loco-admin.wrap .region-et{background-position:0 -2081px}#loco-admin.wrap .region-fo{background-position:0 -2093px}#loco-admin.wrap .region-kh{background-position:0 -2105px}#loco-admin.wrap .region-sy{background-position:0 -2117px}#loco-admin.wrap .region-sn{background-position:0 -2129px}#loco-admin.wrap .region-pw{background-position:0 -2141px}#loco-admin.wrap .region-sl{background-position:0 -2153px}#loco-admin.wrap .region-fm{background-position:0 -2165px}#loco-admin.wrap .region-gi{background-position:0 -2177px}#loco-admin.wrap .region-de{background-position:0 -2189px}#loco-admin.wrap .region-gh{background-position:0 -2201px}#loco-admin.wrap .region-jo{background-position:0 -2213px}#loco-admin.wrap .region-it{background-position:0 -2225px}#loco-admin.wrap .region-pa{background-position:0 -2237px}#loco-admin.wrap .region-sz{background-position:0 -2249px}#loco-admin.wrap .region-sm{background-position:0 -2261px}#loco-admin.wrap .region-tn{background-position:0 -2273px}#loco-admin.wrap .region-ml{background-position:0 -2285px}#loco-admin.wrap .region-cg{background-position:0 -2297px}#loco-admin.wrap .region-ax{background-position:0 -2309px}#loco-admin.wrap .region-ao{background-position:0 -2321px}#loco-admin.wrap .region-bt{background-position:0 -2333px}#loco-admin.wrap .region-an{background-position:0 -2345px}#loco-admin.wrap .region-bb{background-position:0 -2357px}#loco-admin.wrap .region-cf{background-position:0 -2369px}#loco-admin.wrap .region-mm{background-position:0 -2381px}#loco-admin.wrap .region-li{background-position:0 -2393px}#loco-admin.wrap .region-na{background-position:0 -2405px}#loco-admin.wrap .region-mz{background-position:0 -2417px}#loco-admin.wrap .region-to{background-position:0 -2429px}#loco-admin.wrap .region-vg{background-position:0 -2441px}#loco-admin.wrap .region-ve{background-position:0 -2453px}#loco-admin.wrap .region-tz{background-position:0 -2465px}#loco-admin.wrap .region-tm{background-position:0 -2477px}#loco-admin.wrap .region-mx{background-position:0 -2489px}#loco-admin.wrap .region-nc{background-position:0 -2501px}#loco-admin.wrap .region-mo{background-position:0 -2513px}#loco-admin.wrap .region-lk{background-position:0 -2525px}#loco-admin.wrap .region-cd{background-position:0 -2537px}#loco-admin.wrap .region-al{background-position:0 -2549px}#loco-admin.wrap .region-bw{background-position:0 -2561px}#loco-admin.wrap .region-cs{background-position:0 -2573px}#loco-admin.wrap .region-cr{background-position:0 -2585px}#loco-admin.wrap .region-bv{background-position:0 -2597px}#loco-admin.wrap .region-am{background-position:0 -2609px}#loco-admin.wrap .region-az{background-position:0 -2621px}#loco-admin.wrap .region-ba{background-position:0 -2633px}#loco-admin.wrap .region-mn{background-position:0 -2645px}#loco-admin.wrap .region-nu{background-position:0 -2657px}#loco-admin.wrap .region-my{background-position:0 -2669px}#loco-admin.wrap .region-tl{background-position:0 -2681px}#loco-admin.wrap .region-ws{background-position:0 -2693px}#loco-admin.wrap .region-th{background-position:0 -2705px}#loco-admin.wrap .region-nf{background-position:0 -2717px}#loco-admin.wrap .region-ly{background-position:0 -2729px}#loco-admin.wrap .region-ai{background-position:0 -2741px}#loco-admin.wrap .region-br{background-position:0 -2753px}#loco-admin.wrap .region-cv{background-position:0 -2765px}#loco-admin.wrap .region-be{background-position:0 -2777px}#loco-admin.wrap .region-ca{background-position:0 -2789px}#loco-admin.wrap .region-bd{background-position:0 -2801px}#loco-admin.wrap .region-cw{background-position:0 -2813px}#loco-admin.wrap .region-bs{background-position:0 -2830px}#loco-admin.wrap .region-ng{background-position:0 -2842px}#loco-admin.wrap .region-mk{background-position:0 -2854px}#loco-admin.wrap .region-np{background-position:0 -2866px}#loco-admin.wrap .region-va{background-position:0 -2878px}#loco-admin.wrap .region-uz{background-position:0 -2890px}#loco-admin.wrap .region-um{background-position:0 -2902px}#loco-admin.wrap .region-tk{background-position:0 -2914px}#loco-admin.wrap .region-vc{background-position:0 -2926px}#loco-admin.wrap .region-zw{background-position:0 -2938px}#loco-admin.wrap .region-nr{background-position:0 -2950px}#loco-admin.wrap .region-ne{background-position:0 -2962px}#loco-admin.wrap .region-cu{background-position:0 -2974px}#loco-admin.wrap .region-bq{background-position:0 -2986px}#loco-admin.wrap .region-bf{background-position:0 -2998px}#loco-admin.wrap .region-bg{background-position:0 -3010px}#loco-admin.wrap .region-cc{background-position:0 -3022px}#loco-admin.wrap .region-mh{background-position:0 -3034px}#loco-admin.wrap .region-za{background-position:0 -3046px}#loco-admin.wrap .region-uy{background-position:0 -3058px}#loco-admin.wrap .region-wf{background-position:0 -3070px}#loco-admin.wrap .region-vu{background-position:0 -3082px}#loco-admin.wrap .region-tj{background-position:0 -3094px}#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia{background-position:0 -3118px}#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco-admin.wrap .x-eu{background-position:0 -3142px}#loco-admin.wrap span.lang code{display:none}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-share:before{content:""}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco"}#loco-admin.wrap .has-dashicon:before{font-family:"dashicons";font-size:1.4em}#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before,#loco-admin.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco-admin.wrap .only-icon{text-align:center}#loco-admin.wrap .only-icon:before{text-align:center;padding:0}#loco-admin.wrap .only-icon span{display:none}#loco-admin.wrap a,#loco-admin.wrap .wp-core-ui .button-link{text-decoration:none}#loco-admin.wrap h3:hover>a.loco-anchor{color:#ccc}#loco-admin.wrap h3:hover>a.loco-anchor:before{content:"¶"}#loco-admin.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco-admin.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco-admin.wrap h1 ul,#loco-admin.wrap h1 li{margin:0;padding:0}#loco-admin.wrap h1 li{display:inline-block}#loco-admin.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco-admin.wrap h1 li:last-child:after{content:""}#loco-admin.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco-admin.wrap h2 span{color:#999;font-weight:normal}#loco-admin.wrap h2 .loco-meta,#loco-admin.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco-admin.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco-admin.wrap .wp-list-table td{white-space:nowrap}#loco-admin.wrap .wp-list-table td>a,#loco-admin.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco-admin.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco-admin.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"▼"}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"▲"}#loco-admin.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco-admin.wrap form.loco-filter{display:block;margin-bottom:5px}#loco-admin.wrap form.loco-filter .icon-filter{color:#999}#loco-admin.wrap nav.above-list-table{margin-bottom:1em}#loco-admin.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco-admin.wrap .wp-core-ui button.inverted,#loco-admin.wrap .wp-core-ui button.inverted:hover,#loco-admin.wrap .po-fuzzy button.icon-cloud{background:-moz-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:-webkit-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:linear-gradient(to bottom, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:gray}#loco-admin.wrap .wp-core-ui button:active,#loco-admin.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco-admin.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco-admin.wrap .loco-clearable a.clear,#loco-admin.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:normal}#loco-admin.wrap .loco-clearable a.clear:before,#loco-admin.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco-admin.wrap .loco-clearable a.clear:hover:before,#loco-admin.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco-admin.wrap .loco-clearable a.clear span,#loco-admin.wrap .auto-comp-wrap a.clear span{display:none}#loco-admin.wrap .loco-clearable ::-ms-clear,#loco-admin.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco-admin.wrap div.progress{color:#000;background:transparent !important}#loco-admin.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco-admin.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco-admin.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco-admin.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco-admin.wrap div.progress .l{display:block}#loco-admin.wrap td div.progress .t{border:none}#loco-admin.wrap td div.progress .l{display:none}#loco-admin.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco-admin.wrap .loco-danger{color:#d54e21}#loco-admin.wrap .notice,#loco-admin.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco-admin.wrap .notice-generic{border-color:#ddd}#loco-admin.wrap .notice-success>.has-icon,#loco-admin.wrap .notice-success p>strong.has-icon{color:#000}#loco-admin.wrap .notice-warning{border-color:orange}#loco-admin.wrap .notice-error{border-color:#dc3232}#loco-admin.wrap .notice-debug{border-color:#00a0d2}#loco-admin.wrap .notice-danger{border-color:#dc3232}#loco-admin.wrap .notice-locked{border-color:orange}#loco-admin.wrap .notice>.has-icon:before,#loco-admin.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco-admin.wrap .notice>p>a.button.has-icon:before{width:1.2em}#loco-admin.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco-admin.wrap .notice>p>em a{color:inherit}#loco-admin.wrap .notice>p a:hover,#loco-admin.wrap .notice>nav a:hover{text-decoration:underline}#loco-admin.wrap .notice>p a.button,#loco-admin.wrap .notice>nav a.button{text-decoration:inherit}#loco-admin.wrap .notice.has-nav{display:flex;flex-direction:row}#loco-admin.wrap .notice.has-nav p,#loco-admin.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco-admin.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco-admin.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco-admin.wrap .notice.has-nav a{white-space:nowrap}#loco-admin.wrap .notice.has-nav nav>span{color:#666}#loco-admin.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco-admin.wrap ul.problems li{font-style:italic}#loco-admin.wrap label{position:relative}#loco-admin.wrap label.for-disabled,#loco-admin.wrap label.for-disabled>input{cursor:default !important}#loco-admin.wrap input.regular-text,#loco-admin.wrap textarea.regular-text{width:25em}#loco-admin.wrap .button-link{padding:0 10px 1px}#loco-admin.wrap .button-danger{background:#ba0000;border-color:#900 #600 #600;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #600,1px 0 1px #600,0 1px 1px #600,-1px 0 1px #600}#loco-admin.wrap .button-success{background:#00b500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco-admin.wrap .button-success:hover{background:#3db63d}#loco-admin.wrap .button-danger[disabled],#loco-admin.wrap .button-success[disabled]{text-shadow:none !important}#loco-admin.wrap form button.loco-loading.button-large{padding-left:0}#loco-admin.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco-admin.wrap ::placeholder{color:#ccc}#loco-admin.wrap ::-webkit-input-placeholder{color:#ccc}#loco-admin.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap :-ms-input-placeholder{color:#ccc}#loco-admin.wrap .ielt10 .placeheld{color:#ccc}#loco-admin.wrap a.has-raquo:after{content:" »"}#loco-admin.wrap a.has-laquo:before{content:"« "}#loco-admin.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.4.6) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco-admin.wrap .jshide,.no-js #loco-admin.wrap .jsonly{display:none !important}#loco-admin.wrap .invis{visibility:hidden}.form-table tr{vertical-align:top}.form-table tr.compact td{padding-top:0}.loco-modal{min-width:50%;min-height:100px}.loco-modal-wide{min-width:90% !important}.loco-modal-no-close .ui-dialog-titlebar-close{display:none}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif?v=2.4.6) center 20px no-repeat}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #eee}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#c931c7}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.4.6) 0 0 no-repeat;height:30px;width:100px;text-indent:200px;-webkit-transition-duration:0s;transition-duration:0s}#loco-credit>a:hover{background-position:0 -35px}#loco-content{position:relative}#footer-upgrade span:before{color:#ccc;content:" | ";display:inline;padding-left:.5em;padding-right:.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa;foo:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#66c6e4 !important;background:#008ec2 !important;border-color:#008ec2 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.4.6) 0 0 no-repeat !important}
|
1 |
+
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.0) 0 0 no-repeat;min-height:75px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.5.0);background-size:16px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.0);background-size:16px}}._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}.loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:"loco";src:url("../font/loco.eot?v=2.5.0");src:url("../font/loco.eot?v=2.5.0?#iefix") format("embedded-opentype"),url("../font/loco.woff?v=2.5.0") format("woff"),url("../font/loco.ttf?v=2.5.0") format("truetype"),url("../font/loco.svg?v=2.5.0#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#fff;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco-admin.wrap .selector li,#loco-admin.wrap .selector .handle,#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selectorsep:before,#loco-admin.wrap .selectorsep span{padding:.3em .75em}#loco-admin.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco-admin.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco-admin.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco-admin.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco-admin.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco-admin.wrap .selector .handle .prefix{padding-right:.6ex}#loco-admin.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:.25em;right:.6em;content:"▼"}#loco-admin.wrap .selector .handle:focus:after,#loco-admin.wrap .selector .handle:hover:after{color:#666}#loco-admin.wrap .selector.no-caret .handle{padding-right:.75em}#loco-admin.wrap .selector.no-caret .handle:after{display:none}#loco-admin.wrap .selector.no-title .handle{padding-left:.5em;padding-right:.5em}#loco-admin.wrap .selector.no-title .handle .label{display:none}#loco-admin.wrap .selector.no-title .handle .icon{margin-right:0px}#loco-admin.wrap .selector.dummy .handle{border-color:transparent}#loco-admin.wrap .selector.dummy .handle:after{display:none}#loco-admin.wrap .selectoradd{position:relative}#loco-admin.wrap .selectoradd>*{display:block;float:left;clear:none}#loco-admin.wrap .selectoradd>a.has-icon{width:1.3em}#loco-admin.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco-admin.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco-admin.wrap .selectorsep{display:inline-block}#loco-admin.wrap .selectorsep span{color:#666;height:1.3em}#loco-admin.wrap .selector ul{padding:0}#loco-admin.wrap .selector ul,#loco-admin.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco-admin.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,.2);border:solid 1px #ccc;overflow:auto}#loco-admin.wrap .selector.up ul{margin-top:0}#loco-admin.wrap .selector.multi li input{display:none}#loco-admin.wrap .selector.multi li.checked{background:#e5e5e5}#loco-admin.wrap .selector li.active{background:#e5e5e5 !important}#loco-admin.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco-admin.wrap .selector li.over .label{color:#fff}#loco-admin.wrap .selector .label{font:inherit;color:inherit}#loco-admin.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco-admin.wrap .selector .icon.no-icon{display:none}#loco-admin.wrap .selector .icon:before{color:#666}#loco-admin.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco-admin.wrap .selector .label{line-height:1}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .icon-16{vertical-align:bottom}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .lang,#loco-admin.wrap .selector .icon-16{margin-right:5px}#loco-admin.wrap .selector .region,#loco-admin.wrap .selector .variant-wales,#loco-admin.wrap .selector .region-gb.lang-cy,#loco-admin.wrap .selector .variant-scotland,#loco-admin.wrap .selector .region-gb.lang-gd,#loco-admin.wrap .selector .variant-valencia,#loco-admin.wrap .selector .region-es.variant-valencia,#loco-admin.wrap .selector .lang-ca,#loco-admin.wrap .selector .region-es.lang-ca,#loco-admin.wrap .selector .lang-eo,#loco-admin.wrap .selector .lang-eu{margin-left:2px;margin-right:7px}#loco-admin.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco-admin.wrap .selector.ticked .active .icon.no-icon:before{content:"✓"}#loco-admin.wrap .selectoradd a:hover,#loco-admin.wrap .selector a.handle:focus,#loco-admin.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco-admin.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco-admin.wrap .selector.active .handle:after{color:#999;content:"▲"}#loco-admin.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco-admin.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#999;padding-right:1em}#loco-admin.wrap .selector.disabled .handle:after{display:none}#loco-admin.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco-admin.wrap .selector li.disabled,#loco-admin.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco-admin.wrap .selector li.disabled *{cursor:text}#loco-admin.wrap .selector li.disabled .icon:before{color:#aaa}#loco-admin.wrap .selector li.disabled .flag,#loco-admin.wrap .selector li.disabled .icon-16{opacity:.4}#loco-admin.wrap .selector.lefty ul{left:auto;right:0}#loco-admin.wrap .selector.lefty ul .icon,#loco-admin.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco-admin.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco-admin.wrap .selector ul>form{margin:0;display:block}#loco-admin.wrap .selector ul>form input{margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-admin.wrap .selector ul>form input:focus{-webkit-box-shadow:inset 0 0 5px 0 #3db63d;-moz-box-shadow:inset 0 0 5px 0 #3db63d;box-shadow:inset 0 0 5px 0 #3db63d}#loco-admin.wrap .selector ul>form input.error{border-color:#c00;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5)}#loco-admin.wrap .selector ul>form a.clear{margin:0;border:none}#loco-admin.wrap .selector ul>form ::placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form ::-webkit-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form :-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form ::-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form :-ms-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form .ielt10 .placeheld{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap div.auto-comp-wrap{width:100%}#loco-admin.wrap div.auto-comp-wrap input{display:inline-block}#loco-admin.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.5.0) right 2px no-repeat}#loco-admin.wrap div.auto-comp-drop{color:#333;background:#fff;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,.4);box-shadow:0 5px 5px rgba(0,0,0,.4)}#loco-admin.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#f0f0f0;border-top:solid 1px #fff;border-bottom:solid 1px #ddd;white-space:nowrap}#loco-admin.wrap div.auto-comp-result:first-child{border-top:solid 1px #ddd}#loco-admin.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco-admin.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco-admin.wrap div.auto-comp-result:hover{background:#a8a8a8;color:#fff;border-top-color:#a8a8a8;border-bottom-color:#999}#loco-admin.wrap div.auto-comp-result.selected{background:#666 !important;color:#fff;border-top-color:#666;border-bottom-color:#666}#loco-admin.wrap div.auto-comp-result .lang,#loco-admin.wrap div.auto-comp-result .region,#loco-admin.wrap div.auto-comp-result .variant-wales,#loco-admin.wrap div.auto-comp-result .region-gb.lang-cy,#loco-admin.wrap div.auto-comp-result .variant-scotland,#loco-admin.wrap div.auto-comp-result .region-gb.lang-gd,#loco-admin.wrap div.auto-comp-result .variant-valencia,#loco-admin.wrap div.auto-comp-result .region-es.variant-valencia,#loco-admin.wrap div.auto-comp-result .lang-ca,#loco-admin.wrap div.auto-comp-result .region-es.lang-ca,#loco-admin.wrap div.auto-comp-result .lang-eo,#loco-admin.wrap div.auto-comp-result .lang-eu,#loco-admin.wrap div.auto-comp-result .avtr{margin-right:5px}#loco-admin.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#c00;opacity:1}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]{border-color:#c00;color:#c00}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]:focus{-webkit-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);-moz-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);box-shadow:0 0 .5em 0 rgba(153,0,0,.5)}#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}#loco-admin.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.0) 0 0 no-repeat;min-height:75px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.5.0);background-size:16px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.0);background-size:16px}}#loco-admin.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-admin.wrap ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-admin.wrap .loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .has-icon:before{display:inline-block;padding-right:.3em}#loco-admin.wrap a.icon-help{cursor:help}#loco-admin.wrap a.icon-help span{display:none}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-share:before{content:""}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon-status.is-translated:before,#loco-admin.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco-admin.wrap .icon-status.is-untranslated:before,#loco-admin.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco-admin.wrap .icon-status.is-flagged:before,#loco-admin.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco-admin.wrap .icon-status.is-translated.is-blank:before,#loco-admin.wrap .icon-status.is-translated.is-inherit:before,#loco-admin.wrap .is-translated.is-blank>header>.icon-status:before,#loco-admin.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco-admin.wrap .icon-status.is-fuzzy:before,#loco-admin.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco-admin.wrap .lang,#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco-admin.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco-admin.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco-admin.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco-admin.wrap .lang-el{background-color:#1d48a3}#loco-admin.wrap .lang-el:before{content:"Ελ"}#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.5.0);background-repeat:no-repeat;background-color:transparent}#loco-admin.wrap .region:before,#loco-admin.wrap .variant-wales:before,#loco-admin.wrap .region-gb.lang-cy:before,#loco-admin.wrap .variant-scotland:before,#loco-admin.wrap .region-gb.lang-gd:before,#loco-admin.wrap .variant-valencia:before,#loco-admin.wrap .region-es.variant-valencia:before,#loco-admin.wrap .lang-ca:before,#loco-admin.wrap .region-es.lang-ca:before,#loco-admin.wrap .lang-eo:before,#loco-admin.wrap .lang-eu:before{visibility:hidden}#loco-admin.wrap .lang-zh{background-color:#b90000}#loco-admin.wrap .lang-zh.script-hans:before{content:"中国"}#loco-admin.wrap .lang-zh.script-hant:before{content:"中國"}#loco-admin.wrap .__{background-position:0 0}#loco-admin.wrap .lang-eo{background-position:0 -12px}#loco-admin.wrap .lang-eu{background-position:0 -24px}#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca{background-position:0 -36px}#loco-admin.wrap .region-tg{background-position:0 -48px}#loco-admin.wrap .region-me{background-position:0 -60px}#loco-admin.wrap .region-la{background-position:0 -73px}#loco-admin.wrap .region-mr{background-position:0 -85px}#loco-admin.wrap .region-ni{background-position:0 -97px}#loco-admin.wrap .region-lv{background-position:0 -109px}#loco-admin.wrap .region-om{background-position:0 -121px}#loco-admin.wrap .region-af{background-position:0 -133px}#loco-admin.wrap .region-cy{background-position:0 -145px}#loco-admin.wrap .region-bj{background-position:0 -157px}#loco-admin.wrap .region-aq{background-position:0 -169px}#loco-admin.wrap .region-cn{background-position:0 -186px}#loco-admin.wrap .region-co{background-position:0 -198px}#loco-admin.wrap .region-cx{background-position:0 -210px}#loco-admin.wrap .region-ag{background-position:0 -222px}#loco-admin.wrap .region-ms{background-position:0 -234px}#loco-admin.wrap .region-md{background-position:0 -246px}#loco-admin.wrap .region-zm{background-position:0 -258px}#loco-admin.wrap .region-vn{background-position:0 -270px}#loco-admin.wrap .region-tf{background-position:0 -282px}#loco-admin.wrap .region-td{background-position:0 -294px}#loco-admin.wrap .region-yt{background-position:0 -306px}#loco-admin.wrap .region-lb{background-position:0 -318px}#loco-admin.wrap .region-mf{background-position:0 -330px}#loco-admin.wrap .region-lu{background-position:0 -347px}#loco-admin.wrap .region-mq{background-position:0 -359px}#loco-admin.wrap .region-cz{background-position:0 -371px}#loco-admin.wrap .region-ae{background-position:0 -383px}#loco-admin.wrap .region-cm{background-position:0 -395px}#loco-admin.wrap .region-bi{background-position:0 -407px}#loco-admin.wrap .region-ar{background-position:0 -419px}#loco-admin.wrap .region-as{background-position:0 -431px}#loco-admin.wrap .region-bh{background-position:0 -443px}#loco-admin.wrap .region-cl{background-position:0 -455px}#loco-admin.wrap .region-ad{background-position:0 -467px}#loco-admin.wrap .region-mp{background-position:0 -479px}#loco-admin.wrap .region-lt{background-position:0 -491px}#loco-admin.wrap .region-mg{background-position:0 -503px}#loco-admin.wrap .region-lc{background-position:0 -515px}#loco-admin.wrap .region-tr{background-position:0 -527px}#loco-admin.wrap .region-ua{background-position:0 -539px}#loco-admin.wrap .region-tv{background-position:0 -551px}#loco-admin.wrap .region-vi{background-position:0 -563px}#loco-admin.wrap .region-mt{background-position:0 -575px}#loco-admin.wrap .region-no{background-position:0 -587px}#loco-admin.wrap .region-mc{background-position:0 -599px}#loco-admin.wrap .region-ch{background-position:0 -611px}#loco-admin.wrap .region-bl{background-position:0 -623px}#loco-admin.wrap .region-aw{background-position:0 -640px}#loco-admin.wrap .region-bz{background-position:0 -652px}#loco-admin.wrap .region-bm{background-position:0 -664px}#loco-admin.wrap .region-ci{background-position:0 -676px}#loco-admin.wrap .region-mu{background-position:0 -688px}#loco-admin.wrap .region-us{background-position:0 -700px}#loco-admin.wrap .region-tw{background-position:0 -712px}#loco-admin.wrap .region-ye{background-position:0 -724px}#loco-admin.wrap .region-mw{background-position:0 -736px}#loco-admin.wrap .region-nl{background-position:0 -748px}#loco-admin.wrap .region-ls{background-position:0 -760px}#loco-admin.wrap .region-bo{background-position:0 -772px}#loco-admin.wrap .region-at{background-position:0 -784px}#loco-admin.wrap .region-ck{background-position:0 -796px}#loco-admin.wrap .region-by{background-position:0 -808px}#loco-admin.wrap .region-au{background-position:0 -820px}#loco-admin.wrap .region-bn{background-position:0 -832px}#loco-admin.wrap .region-ma{background-position:0 -844px}#loco-admin.wrap .region-nz{background-position:0 -856px}#loco-admin.wrap .region-lr{background-position:0 -868px}#loco-admin.wrap .region-mv{background-position:0 -880px}#loco-admin.wrap .region-tc{background-position:0 -892px}#loco-admin.wrap .region-ug{background-position:0 -904px}#loco-admin.wrap .region-tt{background-position:0 -916px}#loco-admin.wrap .region-pl{background-position:0 -928px}#loco-admin.wrap .region-rs{background-position:0 -940px}#loco-admin.wrap .region-in{background-position:0 -952px}#loco-admin.wrap .region-ge{background-position:0 -964px}#loco-admin.wrap .region-gr{background-position:0 -976px}#loco-admin.wrap .region-gs{background-position:0 -988px}#loco-admin.wrap .region-gd{background-position:0 -1000px}#loco-admin.wrap .region-io{background-position:0 -1012px}#loco-admin.wrap .region-hk{background-position:0 -1024px}#loco-admin.wrap .region-kp{background-position:0 -1036px}#loco-admin.wrap .region-kg{background-position:0 -1048px}#loco-admin.wrap .region-pm{background-position:0 -1060px}#loco-admin.wrap .region-sv{background-position:0 -1072px}#loco-admin.wrap .region-re{background-position:0 -1084px}#loco-admin.wrap .region-sa{background-position:0 -1096px}#loco-admin.wrap .region-sc{background-position:0 -1108px}#loco-admin.wrap .region-st{background-position:0 -1120px}#loco-admin.wrap .region-ke{background-position:0 -1132px}#loco-admin.wrap .region-im{background-position:0 -1144px}#loco-admin.wrap .region-kr{background-position:0 -1161px}#loco-admin.wrap .region-gf{background-position:0 -1173px}#loco-admin.wrap .region-dj{background-position:0 -1185px}#loco-admin.wrap .region-gq{background-position:0 -1197px}#loco-admin.wrap .region-gp{background-position:0 -1209px}#loco-admin.wrap .region-dk{background-position:0 -1221px}#loco-admin.wrap .region-gg{background-position:0 -1233px}#loco-admin.wrap .region-il{background-position:0 -1250px}#loco-admin.wrap .region-pn{background-position:0 -1262px}#loco-admin.wrap .region-sb{background-position:0 -1274px}#loco-admin.wrap .region-py{background-position:0 -1286px}#loco-admin.wrap .region-ru{background-position:0 -1298px}#loco-admin.wrap .region-kw{background-position:0 -1310px}#loco-admin.wrap .region-do{background-position:0 -1322px}#loco-admin.wrap .region-gt{background-position:0 -1334px}#loco-admin.wrap .region-gb{background-position:0 -1346px}#loco-admin.wrap .region-gu{background-position:0 -1358px}#loco-admin.wrap .region-je{background-position:0 -1370px}#loco-admin.wrap .region-hm{background-position:0 -1387px}#loco-admin.wrap .region-sg{background-position:0 -1399px}#loco-admin.wrap .region-pk{background-position:0 -1411px}#loco-admin.wrap .region-sr{background-position:0 -1423px}#loco-admin.wrap .region-se{background-position:0 -1435px}#loco-admin.wrap .region-jp{background-position:0 -1447px}#loco-admin.wrap .region-gw{background-position:0 -1459px}#loco-admin.wrap .region-eh{background-position:0 -1471px}#loco-admin.wrap .region-dz{background-position:0 -1483px}#loco-admin.wrap .region-ga{background-position:0 -1495px}#loco-admin.wrap .region-fr{background-position:0 -1507px}#loco-admin.wrap .region-dm{background-position:0 -1519px}#loco-admin.wrap .region-hn{background-position:0 -1531px}#loco-admin.wrap .region-sd{background-position:0 -1543px}#loco-admin.wrap .region-rw{background-position:0 -1555px}#loco-admin.wrap .region-ph{background-position:0 -1567px}#loco-admin.wrap .region-ss{background-position:0 -1579px}#loco-admin.wrap .region-qa{background-position:0 -1596px}#loco-admin.wrap .region-pe{background-position:0 -1608px}#loco-admin.wrap .region-pr{background-position:0 -1620px}#loco-admin.wrap .region-si{background-position:0 -1632px}#loco-admin.wrap .region-ht{background-position:0 -1644px}#loco-admin.wrap .region-es{background-position:0 -1656px}#loco-admin.wrap .region-gl{background-position:0 -1668px}#loco-admin.wrap .region-gm{background-position:0 -1680px}#loco-admin.wrap .region-er{background-position:0 -1692px}#loco-admin.wrap .region-fi{background-position:0 -1704px}#loco-admin.wrap .region-ee{background-position:0 -1716px}#loco-admin.wrap .region-kn{background-position:0 -1728px}#loco-admin.wrap .region-hu{background-position:0 -1740px}#loco-admin.wrap .region-iq{background-position:0 -1752px}#loco-admin.wrap .region-ky{background-position:0 -1764px}#loco-admin.wrap .region-sh{background-position:0 -1776px}#loco-admin.wrap .region-ps{background-position:0 -1788px}#loco-admin.wrap .region-pf{background-position:0 -1800px}#loco-admin.wrap .region-sj{background-position:0 -1812px}#loco-admin.wrap .region-id{background-position:0 -1824px}#loco-admin.wrap .region-is{background-position:0 -1836px}#loco-admin.wrap .region-eg{background-position:0 -1848px}#loco-admin.wrap .region-fk{background-position:0 -1860px}#loco-admin.wrap .region-fj{background-position:0 -1872px}#loco-admin.wrap .region-gn{background-position:0 -1884px}#loco-admin.wrap .region-gy{background-position:0 -1896px}#loco-admin.wrap .region-ir{background-position:0 -1908px}#loco-admin.wrap .region-km{background-position:0 -1920px}#loco-admin.wrap .region-ie{background-position:0 -1932px}#loco-admin.wrap .region-kz{background-position:0 -1944px}#loco-admin.wrap .region-ro{background-position:0 -1956px}#loco-admin.wrap .region-sk{background-position:0 -1968px}#loco-admin.wrap .region-pg{background-position:0 -1980px}#loco-admin.wrap .region-pt{background-position:0 -1992px}#loco-admin.wrap .region-so{background-position:0 -2004px}#loco-admin.wrap .region-sx{background-position:0 -2016px}#loco-admin.wrap .region-hr{background-position:0 -2033px}#loco-admin.wrap .region-ki{background-position:0 -2045px}#loco-admin.wrap .region-jm{background-position:0 -2057px}#loco-admin.wrap .region-ec{background-position:0 -2069px}#loco-admin.wrap .region-et{background-position:0 -2081px}#loco-admin.wrap .region-fo{background-position:0 -2093px}#loco-admin.wrap .region-kh{background-position:0 -2105px}#loco-admin.wrap .region-sy{background-position:0 -2117px}#loco-admin.wrap .region-sn{background-position:0 -2129px}#loco-admin.wrap .region-pw{background-position:0 -2141px}#loco-admin.wrap .region-sl{background-position:0 -2153px}#loco-admin.wrap .region-fm{background-position:0 -2165px}#loco-admin.wrap .region-gi{background-position:0 -2177px}#loco-admin.wrap .region-de{background-position:0 -2189px}#loco-admin.wrap .region-gh{background-position:0 -2201px}#loco-admin.wrap .region-jo{background-position:0 -2213px}#loco-admin.wrap .region-it{background-position:0 -2225px}#loco-admin.wrap .region-pa{background-position:0 -2237px}#loco-admin.wrap .region-sz{background-position:0 -2249px}#loco-admin.wrap .region-sm{background-position:0 -2261px}#loco-admin.wrap .region-tn{background-position:0 -2273px}#loco-admin.wrap .region-ml{background-position:0 -2285px}#loco-admin.wrap .region-cg{background-position:0 -2297px}#loco-admin.wrap .region-ax{background-position:0 -2309px}#loco-admin.wrap .region-ao{background-position:0 -2321px}#loco-admin.wrap .region-bt{background-position:0 -2333px}#loco-admin.wrap .region-an{background-position:0 -2345px}#loco-admin.wrap .region-bb{background-position:0 -2357px}#loco-admin.wrap .region-cf{background-position:0 -2369px}#loco-admin.wrap .region-mm{background-position:0 -2381px}#loco-admin.wrap .region-li{background-position:0 -2393px}#loco-admin.wrap .region-na{background-position:0 -2405px}#loco-admin.wrap .region-mz{background-position:0 -2417px}#loco-admin.wrap .region-to{background-position:0 -2429px}#loco-admin.wrap .region-vg{background-position:0 -2441px}#loco-admin.wrap .region-ve{background-position:0 -2453px}#loco-admin.wrap .region-tz{background-position:0 -2465px}#loco-admin.wrap .region-tm{background-position:0 -2477px}#loco-admin.wrap .region-mx{background-position:0 -2489px}#loco-admin.wrap .region-nc{background-position:0 -2501px}#loco-admin.wrap .region-mo{background-position:0 -2513px}#loco-admin.wrap .region-lk{background-position:0 -2525px}#loco-admin.wrap .region-cd{background-position:0 -2537px}#loco-admin.wrap .region-al{background-position:0 -2549px}#loco-admin.wrap .region-bw{background-position:0 -2561px}#loco-admin.wrap .region-cs{background-position:0 -2573px}#loco-admin.wrap .region-cr{background-position:0 -2585px}#loco-admin.wrap .region-bv{background-position:0 -2597px}#loco-admin.wrap .region-am{background-position:0 -2609px}#loco-admin.wrap .region-az{background-position:0 -2621px}#loco-admin.wrap .region-ba{background-position:0 -2633px}#loco-admin.wrap .region-mn{background-position:0 -2645px}#loco-admin.wrap .region-nu{background-position:0 -2657px}#loco-admin.wrap .region-my{background-position:0 -2669px}#loco-admin.wrap .region-tl{background-position:0 -2681px}#loco-admin.wrap .region-ws{background-position:0 -2693px}#loco-admin.wrap .region-th{background-position:0 -2705px}#loco-admin.wrap .region-nf{background-position:0 -2717px}#loco-admin.wrap .region-ly{background-position:0 -2729px}#loco-admin.wrap .region-ai{background-position:0 -2741px}#loco-admin.wrap .region-br{background-position:0 -2753px}#loco-admin.wrap .region-cv{background-position:0 -2765px}#loco-admin.wrap .region-be{background-position:0 -2777px}#loco-admin.wrap .region-ca{background-position:0 -2789px}#loco-admin.wrap .region-bd{background-position:0 -2801px}#loco-admin.wrap .region-cw{background-position:0 -2813px}#loco-admin.wrap .region-bs{background-position:0 -2830px}#loco-admin.wrap .region-ng{background-position:0 -2842px}#loco-admin.wrap .region-mk{background-position:0 -2854px}#loco-admin.wrap .region-np{background-position:0 -2866px}#loco-admin.wrap .region-va{background-position:0 -2878px}#loco-admin.wrap .region-uz{background-position:0 -2890px}#loco-admin.wrap .region-um{background-position:0 -2902px}#loco-admin.wrap .region-tk{background-position:0 -2914px}#loco-admin.wrap .region-vc{background-position:0 -2926px}#loco-admin.wrap .region-zw{background-position:0 -2938px}#loco-admin.wrap .region-nr{background-position:0 -2950px}#loco-admin.wrap .region-ne{background-position:0 -2962px}#loco-admin.wrap .region-cu{background-position:0 -2974px}#loco-admin.wrap .region-bq{background-position:0 -2986px}#loco-admin.wrap .region-bf{background-position:0 -2998px}#loco-admin.wrap .region-bg{background-position:0 -3010px}#loco-admin.wrap .region-cc{background-position:0 -3022px}#loco-admin.wrap .region-mh{background-position:0 -3034px}#loco-admin.wrap .region-za{background-position:0 -3046px}#loco-admin.wrap .region-uy{background-position:0 -3058px}#loco-admin.wrap .region-wf{background-position:0 -3070px}#loco-admin.wrap .region-vu{background-position:0 -3082px}#loco-admin.wrap .region-tj{background-position:0 -3094px}#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia{background-position:0 -3118px}#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco-admin.wrap .x-eu{background-position:0 -3142px}#loco-admin.wrap span.lang code{display:none}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-share:before{content:""}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco"}#loco-admin.wrap .has-dashicon:before{font-family:"dashicons";font-size:1.4em}#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before,#loco-admin.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco-admin.wrap .only-icon{text-align:center}#loco-admin.wrap .only-icon:before{text-align:center;padding:0}#loco-admin.wrap .only-icon span{display:none}#loco-admin.wrap a,#loco-admin.wrap .wp-core-ui .button-link{text-decoration:none}#loco-admin.wrap h3:hover>a.loco-anchor{color:#ccc}#loco-admin.wrap h3:hover>a.loco-anchor:before{content:"¶"}#loco-admin.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco-admin.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco-admin.wrap h1 ul,#loco-admin.wrap h1 li{margin:0;padding:0}#loco-admin.wrap h1 li{display:inline-block}#loco-admin.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco-admin.wrap h1 li:last-child:after{content:""}#loco-admin.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco-admin.wrap h2 span{color:#999;font-weight:normal}#loco-admin.wrap h2 .loco-meta,#loco-admin.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco-admin.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco-admin.wrap .wp-list-table td{white-space:nowrap}#loco-admin.wrap .wp-list-table td>a,#loco-admin.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco-admin.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco-admin.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"▼"}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"▲"}#loco-admin.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco-admin.wrap form.loco-filter{display:block;margin-bottom:5px}#loco-admin.wrap form.loco-filter .icon-filter{color:#999}#loco-admin.wrap nav.above-list-table{margin-bottom:1em}#loco-admin.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco-admin.wrap .wp-core-ui button.inverted,#loco-admin.wrap .wp-core-ui button.inverted:hover,#loco-admin.wrap .po-fuzzy button.icon-cloud{background:-moz-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:-webkit-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:linear-gradient(to bottom, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:gray}#loco-admin.wrap .wp-core-ui button:active,#loco-admin.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco-admin.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco-admin.wrap .loco-clearable a.clear,#loco-admin.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:normal}#loco-admin.wrap .loco-clearable a.clear:before,#loco-admin.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco-admin.wrap .loco-clearable a.clear:hover:before,#loco-admin.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco-admin.wrap .loco-clearable a.clear span,#loco-admin.wrap .auto-comp-wrap a.clear span{display:none}#loco-admin.wrap .loco-clearable ::-ms-clear,#loco-admin.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco-admin.wrap div.progress{color:#000;background:transparent !important}#loco-admin.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco-admin.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco-admin.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco-admin.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco-admin.wrap div.progress .l{display:block}#loco-admin.wrap td div.progress .t{border:none}#loco-admin.wrap td div.progress .l{display:none}#loco-admin.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco-admin.wrap .loco-danger{color:#d54e21}#loco-admin.wrap .notice,#loco-admin.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco-admin.wrap .notice-generic{border-color:#ddd}#loco-admin.wrap .notice-success>.has-icon,#loco-admin.wrap .notice-success p>strong.has-icon{color:#000}#loco-admin.wrap .notice-warning{border-color:orange}#loco-admin.wrap .notice-error{border-color:#dc3232}#loco-admin.wrap .notice-debug{border-color:#00a0d2}#loco-admin.wrap .notice-danger{border-color:#dc3232}#loco-admin.wrap .notice-locked{border-color:orange}#loco-admin.wrap .notice>.has-icon:before,#loco-admin.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco-admin.wrap .notice>p>a.button.has-icon:before{width:1.2em}#loco-admin.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco-admin.wrap .notice>p>em a{color:inherit}#loco-admin.wrap .notice>p a:hover,#loco-admin.wrap .notice>nav a:hover{text-decoration:underline}#loco-admin.wrap .notice>p a.button,#loco-admin.wrap .notice>nav a.button{text-decoration:inherit}#loco-admin.wrap .notice.has-nav{display:flex;flex-direction:row}#loco-admin.wrap .notice.has-nav p,#loco-admin.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco-admin.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco-admin.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco-admin.wrap .notice.has-nav a{white-space:nowrap}#loco-admin.wrap .notice.has-nav nav>span{color:#666}#loco-admin.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco-admin.wrap ul.problems li{font-style:italic}#loco-admin.wrap label{position:relative}#loco-admin.wrap label.for-disabled,#loco-admin.wrap label.for-disabled>input{cursor:default !important}#loco-admin.wrap input.regular-text,#loco-admin.wrap textarea.regular-text{width:25em}#loco-admin.wrap .button-link{padding:0 10px 1px}#loco-admin.wrap .button-danger{background:#ba0000;border-color:#900 #600 #600;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #600,1px 0 1px #600,0 1px 1px #600,-1px 0 1px #600}#loco-admin.wrap .button-success{background:#00b500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco-admin.wrap .button-success:hover{background:#3db63d}#loco-admin.wrap .button-danger[disabled],#loco-admin.wrap .button-success[disabled]{text-shadow:none !important}#loco-admin.wrap form button.loco-loading.button-large{padding-left:0}#loco-admin.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco-admin.wrap ::placeholder{color:#ccc}#loco-admin.wrap ::-webkit-input-placeholder{color:#ccc}#loco-admin.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap :-ms-input-placeholder{color:#ccc}#loco-admin.wrap .ielt10 .placeheld{color:#ccc}#loco-admin.wrap a.has-raquo:after{content:" »"}#loco-admin.wrap a.has-laquo:before{content:"« "}#loco-admin.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.5.0) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco-admin.wrap .jshide,.no-js #loco-admin.wrap .jsonly{display:none !important}#loco-admin.wrap .invis{visibility:hidden}.form-table tr td{vertical-align:top}.form-table tr.compact td{padding-top:0}.form-table tr th a.icon-help{display:none}.loco-modal{min-width:50%;min-height:100px}.loco-modal-wide{min-width:90% !important}.loco-modal-no-close .ui-dialog-titlebar-close{display:none}.loco-modal .ui-dialog-titlebar-close{overflow:hidden}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif?v=2.5.0) center 20px no-repeat}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #eee}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#c931c7}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.5.0) 0 0 no-repeat;height:30px;width:100px;text-indent:200px;-webkit-transition-duration:0s;transition-duration:0s}#loco-credit>a:hover{background-position:0 -35px}#loco-content{position:relative}#footer-upgrade span:before{color:#ccc;content:" | ";display:inline;padding-left:.5em;padding-right:.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa;foo:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#66c6e4 !important;background:#008ec2 !important;border-color:#008ec2 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/editor.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.4.6) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.4.6);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.4.6);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:.4em .6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"¬"}#loco-editor div.ta-mirror .eof:after{content:"¶"}#loco-editor div.ta-mirror .x20:after{content:"·";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"⟶"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::placeholder{color:transparent}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:.2em}#loco-editor [dir=RTL] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir=RTL] div.ta-mirror span:after{right:0}#loco-editor [dir=RTL] div.ta-mirror .eol:after{padding-left:0;padding-right:.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:gray}#loco-editor .ace_icu-quoted{color:gray}#loco-editor .ace_icu{color:#697eb9}#loco-editor .ace_icu.ace_name{color:#b90600}#loco-editor .resizer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0 6px 0;background:#f0f0f0 url(../img/wg/splity.png?v=2.4.6) center bottom no-repeat;border:1px solid #ddd;overflow:hidden;cursor:move;cursor:row-resize;cursor:s-resize}#loco-editor .resizer>*{height:100%;border:none}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.4.6) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.4.6);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.4.6);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.4.6);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png?v=2.4.6) center center no-repeat}#loco-editor .wg-split-y>div{cursor:move;cursor:ns-resize;cursor:row-resize}#loco-editor .wg-split-y>div>.not-first:before{height:6px;width:100%;background:transparent url(../img/wg/splity.png?v=2.4.6) center center no-repeat}#loco-editor .wg-split>div.locked{cursor:default}#loco-editor .wg-split-x>div.locked>.not-first>*{margin-left:0px}#loco-editor .wg-split-y>div.locked>.not-first>*{margin-top:0px}#loco-editor .wg-split>div.locked>.not-first:before{display:none}#loco-editor .has-title>header{background:#e2e2e2;cursor:default !important;margin:0;white-space:nowrap}#loco-editor .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-editor .wg-toolbar{top:0;right:0;margin-top:6px;position:absolute}#loco-editor .wg-toolbar>span{color:#fff;background:#000;display:block;padding:0 6px;cursor:default !important}#loco-editor .wg-toolbar>span:active{color:#000;background-color:#fff}#loco-editor .wg-content,#loco-editor .wg-tbody>div{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-table{background-color:#fff}#loco-editor .is-table .wg-thead .has-title>header{font-weight:normal;background:transparent;padding:4px 0;margin:0 0 0 10px}#loco-editor .is-table .wg-thead>div>.not-first:before{background-position:center center}#loco-editor .is-table .wg-thead{background:#e2e2e2;border-bottom:solid 1px #ccc}#loco-editor .is-table .wg-tbody{background-image:url(data:image/gif;base64,R0lGODlhAQAsAIABAPz8/P///yH5BAEAAAEALAAAAAABACwAAAIIjI+pAe0PIygAOw==);position:relative}#loco-editor .is-table .wg-cols>div{float:left;clear:none}#loco-editor .is-table .wg-cols>div>div{white-space:nowrap;line-height:1.7em;padding-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#fff}#loco-editor .is-table .wg-cols>div>div:nth-child(even){background-color:#f7f7f7}#loco-editor .is-table .wg-cols>div>div.selected{background-color:#3db63d;color:#fff}#loco-editor .is-table .wg-cols>div>div.selected::selection{background-color:#fff;color:#000}#loco-editor .is-table .wg-cols>div:first-child>div{padding-left:4px}#loco-editor .is-table .wg-dead{clear:both}#loco-editor .is-table .wg-thead .wg-sortable>header{cursor:pointer !important}#loco-editor .is-table .wg-thead .wg-sortable>header:after{padding:0 0 0 5px;color:#999}#loco-editor .is-table .wg-thead .wg-sortable.wg-asc>header:after{content:"▲"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"▼"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-readonly>.wg-content>textarea[readonly]{cursor:default}#loco-editor .is-editable>.wg-content[dir=RTL] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:.5em 1em;margin-top:.2em;color:#000;text-decoration:none;-webkit-border-radius:.2em .2em 0 0;-moz-border-radius:.2em .2em 0 0;-ms-border-radius:.2em .2em 0 0;-o-border-radius:.2em .2em 0 0;border-radius:.2em .2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell>.meta{color:#333;margin:0 !important;padding:6px 10px;font-weight:normal;font-size:13px;line-height:1.4em;cursor:default !important}#loco-editor .wg-cell>.meta>*{display:inline-block;margin-top:3px;margin-bottom:3px}#loco-editor .wg-cell>.meta>span{border:1px solid transparent;border-left:none}#loco-editor .wg-cell>.meta>mark{color:#fff;border-radius:2px;background-color:silver;border:1px solid silver;padding:0 .3em}#loco-editor .wg-cell>.meta>mark.tag{color:#999;background-color:#eee}#loco-editor .wg-cell>.meta>p{display:block;white-space:pre-line}#loco-editor .wg-cell>.meta .icon-warn{color:#c00}#loco-editor .wg-cell>.meta .has-icon:before{padding-right:0;width:17px}#loco-editor .wg-cell>.meta code{font-size:12px}#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;font-weight:normal;color:#fff;border-radius:2px;font-size:90%;line-height:1;padding:.2em .3em;background-color:rgba(0,0,0,.25)}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-target header nav{display:block;position:absolute;right:0px;top:0px;padding:2px}#loco-editor #po-target header nav button{margin-left:5px}#loco-editor #po-target header nav.po-empty .icon-cloud{display:none !important}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .has-title>header{line-height:normal;padding:6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for=po-list-col-target]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for=po-list-col-source]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor header,#loco-editor nav{display:block;position:relative}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif?v=2.4.6) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco-editor-inner .wg-cell>.meta code{padding:0;color:#0073aa;background:inherit;cursor:pointer}#loco-editor-inner .wg-cell>.meta code:hover{text-decoration:underline}#loco-admin.wrap #loco-editor>nav{font-size:14px;height:50px}#loco-admin.wrap #loco-editor>nav form{display:block;float:left;clear:none;padding:0;margin:0}#loco-admin.wrap #loco-editor>nav form.aux{float:right;margin-right:5px}#loco-admin.wrap #loco-editor>nav fieldset{display:block;position:relative;float:left;clear:none}#loco-admin.wrap #loco-editor>nav button,#loco-admin.wrap #loco-editor>nav input[type=text]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-admin.wrap #loco-editor>nav input[type=text]{padding:0 10px;font-size:14px;line-height:normal}#loco-admin.wrap #loco-editor>nav .invalid input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap #loco-editor>nav .loco-clearable{padding:0 20px}#loco-admin.wrap #loco-editor>nav .loco-clearable.invalid a.clear:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear{right:25px;line-height:2}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:hover:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:active:before{color:#000}#loco-admin.wrap #loco-editor>nav button.only-icon{width:40px}#loco-admin.wrap button.has-icon:before{width:16px;padding:0}#loco-admin.wrap button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.4.6) 0 0 no-repeat}#loco-admin.wrap .button,#loco-admin.wrap .button-link,#loco-admin.wrap input[type=text]{border-color:#aaa;color:#444}#loco-admin.wrap .button:hover,#loco-admin.wrap .button-link:hover{color:#000}#loco-admin.wrap .button-primary,#loco-admin.wrap .button-primary:hover{color:#fff}#loco-admin.wrap button.icon-translate:before{font-size:16px}.loco-modal .loco-api{position:relative;padding:10px;background:#f7f7f7;border:solid 1px #eee;font-size:14px;margin-bottom:16px}.loco-modal .loco-api p{padding:0;margin:0;font-size:inherit}.loco-modal .loco-api blockquote{font-weight:bold;margin:0;padding:10px 0}.loco-modal .loco-api a.loco-api-credit{padding:0;display:block;position:absolute;right:10px;bottom:10px;text-decoration:none;white-space:nowrap;overflow:hidden;font-size:12px}.loco-modal .loco-api a.loco-api-credit:hover{text-decoration:underline}.loco-modal .loco-api-loading{text-indent:20px;background:transparent url(../img/spin-modal.gif?v=2.4.6) 10px center no-repeat}.loco-modal .loco-alert p{margin-bottom:2em;font-size:14px}.loco-modal .loco-alert nav{display:block;position:relative;margin:1em 0}.loco-modal .loco-alert nav a{display:inline-block;margin-right:1em;padding:10px}#loco-auto{display:none;min-width:50%;min-height:300px;position:relative}#loco-auto form blockquote{margin:0;padding:1em 0;font-size:14px}.loco-api a.loco-api-credit{color:inherit}.loco-api-yandex a.loco-api-credit:before{content:"Powered by "}.loco-api-google a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/google.png?v=2.4.6) 0 0 no-repeat}.loco-api-microsoft a.loco-api-credit{text-indent:200px;width:152px;height:16px;background:transparent url(../img/api/microsoft.png?v=2.4.6) 0 0 no-repeat}.loco-api-deepl a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/deepl.png?v=2.4.6) 0 0 no-repeat}
|
1 |
+
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.0) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.5.0);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.0);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:.4em .6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"¬"}#loco-editor div.ta-mirror .eof:after{content:"¶"}#loco-editor div.ta-mirror .x20:after{content:"·";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"⟶"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::placeholder{color:transparent}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:.2em}#loco-editor [dir=RTL] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir=RTL] div.ta-mirror span:after{right:0}#loco-editor [dir=RTL] div.ta-mirror .eol:after{padding-left:0;padding-right:.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:gray}#loco-editor .ace_icu-quoted{color:gray}#loco-editor .ace_icu{color:#697eb9}#loco-editor .ace_icu.ace_name{color:#b90600}#loco-editor .resizer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0 6px 0;background:#f0f0f0 url(../img/wg/splity.png?v=2.5.0) center bottom no-repeat;border:1px solid #ddd;overflow:hidden;cursor:move;cursor:row-resize;cursor:s-resize}#loco-editor .resizer>*{height:100%;border:none}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.0) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.0);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.5.0);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.0);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png?v=2.5.0) center center no-repeat}#loco-editor .wg-split-y>div{cursor:move;cursor:ns-resize;cursor:row-resize}#loco-editor .wg-split-y>div>.not-first:before{height:6px;width:100%;background:transparent url(../img/wg/splity.png?v=2.5.0) center center no-repeat}#loco-editor .wg-split>div.locked{cursor:default}#loco-editor .wg-split-x>div.locked>.not-first>*{margin-left:0px}#loco-editor .wg-split-y>div.locked>.not-first>*{margin-top:0px}#loco-editor .wg-split>div.locked>.not-first:before{display:none}#loco-editor .has-title>header{background:#e2e2e2;cursor:default !important;margin:0;white-space:nowrap}#loco-editor .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-editor .wg-toolbar{top:0;right:0;margin-top:6px;position:absolute}#loco-editor .wg-toolbar>span{color:#fff;background:#000;display:block;padding:0 6px;cursor:default !important}#loco-editor .wg-toolbar>span:active{color:#000;background-color:#fff}#loco-editor .wg-content,#loco-editor .wg-tbody>div{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-table{background-color:#fff}#loco-editor .is-table .wg-thead .has-title>header{font-weight:normal;background:transparent;padding:4px 0;margin:0 0 0 10px}#loco-editor .is-table .wg-thead>div>.not-first:before{background-position:center center}#loco-editor .is-table .wg-thead{background:#e2e2e2;border-bottom:solid 1px #ccc}#loco-editor .is-table .wg-tbody{background-image:url(data:image/gif;base64,R0lGODlhAQAsAIABAPz8/P///yH5BAEAAAEALAAAAAABACwAAAIIjI+pAe0PIygAOw==);position:relative}#loco-editor .is-table .wg-cols>div{float:left;clear:none}#loco-editor .is-table .wg-cols>div>div{white-space:nowrap;line-height:1.7em;padding-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#fff}#loco-editor .is-table .wg-cols>div>div:nth-child(even){background-color:#f7f7f7}#loco-editor .is-table .wg-cols>div>div.selected{background-color:#3db63d;color:#fff}#loco-editor .is-table .wg-cols>div>div.selected::selection{background-color:#fff;color:#000}#loco-editor .is-table .wg-cols>div:first-child>div{padding-left:4px}#loco-editor .is-table .wg-dead{clear:both}#loco-editor .is-table .wg-thead .wg-sortable>header{cursor:pointer !important}#loco-editor .is-table .wg-thead .wg-sortable>header:after{padding:0 0 0 5px;color:#999}#loco-editor .is-table .wg-thead .wg-sortable.wg-asc>header:after{content:"▲"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"▼"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-readonly>.wg-content>textarea[readonly]{cursor:default}#loco-editor .is-editable>.wg-content[dir=RTL] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:.5em 1em;margin-top:.2em;color:#000;text-decoration:none;-webkit-border-radius:.2em .2em 0 0;-moz-border-radius:.2em .2em 0 0;-ms-border-radius:.2em .2em 0 0;-o-border-radius:.2em .2em 0 0;border-radius:.2em .2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell>.meta{color:#333;margin:0 !important;padding:6px 10px;font-weight:normal;font-size:13px;line-height:1.4em;cursor:default !important}#loco-editor .wg-cell>.meta>*{display:inline-block;margin-top:3px;margin-bottom:3px}#loco-editor .wg-cell>.meta>span{border:1px solid transparent;border-left:none}#loco-editor .wg-cell>.meta>mark{color:#fff;border-radius:2px;background-color:silver;border:1px solid silver;padding:0 .3em}#loco-editor .wg-cell>.meta>mark.tag{color:#999;background-color:#eee}#loco-editor .wg-cell>.meta>p{display:block;white-space:pre-line}#loco-editor .wg-cell>.meta .icon-warn{color:#c00}#loco-editor .wg-cell>.meta .has-icon:before{padding-right:0;width:17px}#loco-editor .wg-cell>.meta code{font-size:12px}#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;font-weight:normal;color:#fff;border-radius:2px;font-size:90%;line-height:1;padding:.2em .3em;background-color:rgba(0,0,0,.25)}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-target header nav{display:block;position:absolute;right:0px;top:0px;padding:2px}#loco-editor #po-target header nav button{margin-left:5px}#loco-editor #po-target header nav.po-empty .icon-cloud{display:none !important}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .has-title>header{line-height:normal;padding:6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for=po-list-col-target]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for=po-list-col-source]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor header,#loco-editor nav{display:block;position:relative}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif?v=2.5.0) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco-editor-inner .wg-cell>.meta code{padding:0;color:#0073aa;background:inherit;cursor:pointer}#loco-editor-inner .wg-cell>.meta code:hover{text-decoration:underline}#loco-admin.wrap #loco-editor>nav{font-size:14px;height:50px}#loco-admin.wrap #loco-editor>nav form{display:block;float:left;clear:none;padding:0;margin:0}#loco-admin.wrap #loco-editor>nav form.aux{float:right;margin-right:5px}#loco-admin.wrap #loco-editor>nav fieldset{display:block;position:relative;float:left;clear:none}#loco-admin.wrap #loco-editor>nav button,#loco-admin.wrap #loco-editor>nav input[type=text]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-admin.wrap #loco-editor>nav input[type=text]{padding:0 10px;font-size:14px;line-height:normal}#loco-admin.wrap #loco-editor>nav .invalid input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap #loco-editor>nav .loco-clearable{padding:0 20px}#loco-admin.wrap #loco-editor>nav .loco-clearable.invalid a.clear:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear{right:25px;line-height:2}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:hover:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:active:before{color:#000}#loco-admin.wrap #loco-editor>nav button.only-icon{width:40px}#loco-admin.wrap button.has-icon:before{width:16px;padding:0}#loco-admin.wrap button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.5.0) 0 0 no-repeat}#loco-admin.wrap .button,#loco-admin.wrap .button-link,#loco-admin.wrap input[type=text]{border-color:#aaa;color:#444}#loco-admin.wrap .button:hover,#loco-admin.wrap .button-link:hover{color:#000}#loco-admin.wrap .button-primary,#loco-admin.wrap .button-primary:hover{color:#fff}#loco-admin.wrap button.icon-translate:before{font-size:16px}.loco-modal .loco-api{position:relative;padding:10px;background:#f7f7f7;border:solid 1px #eee;font-size:14px;margin-bottom:16px}.loco-modal .loco-api p{padding:0;margin:0;font-size:inherit}.loco-modal .loco-api blockquote{font-weight:bold;margin:0;padding:10px 0}.loco-modal .loco-api a.loco-api-credit{padding:0;display:block;position:absolute;right:10px;bottom:10px;text-decoration:none;white-space:nowrap;overflow:hidden;font-size:12px}.loco-modal .loco-api a.loco-api-credit:hover{text-decoration:underline}.loco-modal .loco-api-loading{text-indent:20px;background:transparent url(../img/spin-modal.gif?v=2.5.0) 10px center no-repeat}.loco-modal .loco-alert p{margin-bottom:2em;font-size:14px}.loco-modal .loco-alert nav{display:block;position:relative;margin:1em 0}.loco-modal .loco-alert nav a{display:inline-block;margin-right:1em;padding:10px}#loco-auto{display:none;min-width:50%;min-height:300px;position:relative}#loco-auto form blockquote{margin:0;padding:1em 0;font-size:14px}.loco-api a.loco-api-credit{color:inherit}.loco-api-yandex a.loco-api-credit:before{content:"Powered by "}.loco-api-google a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/google.png?v=2.5.0) 0 0 no-repeat}.loco-api-microsoft a.loco-api-credit{text-indent:200px;width:152px;height:16px;background:transparent url(../img/api/microsoft.png?v=2.5.0) 0 0 no-repeat}.loco-api-deepl a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/deepl.png?v=2.5.0) 0 0 no-repeat}
|
pub/css/podiff.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco-admin.wrap .revisions-diff{padding:10px;min-height:20px}#loco-admin.wrap table.diff{border-collapse:collapse}#loco-admin.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;padding:2px}#loco-admin.wrap table.diff td>span{color:#aaa}#loco-admin.wrap table.diff td>span:after{content:". "}#loco-admin.wrap table.diff tbody{border-top:1px dashed #ccc}#loco-admin.wrap table.diff tbody:first-child{border-top:none}#loco-admin.wrap .revisions.loading .diff-meta{color:#eee}#loco-admin.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.
|
1 |
+
#loco-admin.wrap .revisions-diff{padding:10px;min-height:20px}#loco-admin.wrap table.diff{border-collapse:collapse}#loco-admin.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;padding:2px}#loco-admin.wrap table.diff td>span{color:#aaa}#loco-admin.wrap table.diff td>span:after{content:". "}#loco-admin.wrap table.diff tbody{border-top:1px dashed #ccc}#loco-admin.wrap table.diff tbody:first-child{border-top:none}#loco-admin.wrap .revisions.loading .diff-meta{color:#eee}#loco-admin.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.5.0) center center no-repeat}#loco-admin.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco-admin.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco-admin.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco-admin.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco-admin.wrap .revisions-meta time{color:#72777c}#loco-admin.wrap .revisions-control-frame{margin:10px 0}#loco-admin.wrap .revisions-diff-frame{margin-top:20px}
|
pub/css/poview.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.js #loco-admin.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.
|
1 |
+
.js #loco-admin.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.5.0) center center no-repeat}.js #loco-admin.wrap .loco-loading ol.msgcat{display:none}#loco-admin.wrap #loco-po{padding-right:0;overflow:auto}#loco-admin.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco-admin.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco-admin.wrap ol.msgcat li{color:#aaa;margin:0;padding:0 0 0 1em;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;border-left:1px solid #eee}#loco-admin.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco-admin.wrap ol.msgcat li>.po-comment{color:#3cc200}#loco-admin.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco-admin.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco-admin.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco-admin.wrap ol.msgcat li>.po-flags{color:#77904a}#loco-admin.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco-admin.wrap ol.msgcat li>.po-word{color:#000}#loco-admin.wrap ol.msgcat li>.po-junk{font-style:italic;color:#ccc}#loco-admin.wrap ol.msgcat li>.po-string>span{color:#c931c7}#loco-admin.wrap form.loco-filter{top:0;right:0;position:absolute}#loco-admin.wrap .loco-invalid form.loco-filter input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco-admin.wrap .loco-invalid ol.msgcat li{color:#000}
|
pub/css/skins/blue.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(9,100,132,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#096484;foo:#096484}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cdc7 !important;background:#db9925 !important;border-color:#db9925 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(9,100,132,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#096484;foo:#096484}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cdc7 !important;background:#db9925 !important;border-color:#db9925 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/coffee.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#c7a589;foo:#c7a589}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1ccc7 !important;background:#ba906d !important;border-color:#ba906d !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#c7a589;foo:#c7a589}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1ccc7 !important;background:#ba906d !important;border-color:#ba906d !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/ectoplasm.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#a3b745;foo:#a3b745}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#cfd1c7 !important;background:#89993a !important;border-color:#89993a !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#a3b745;foo:#a3b745}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#cfd1c7 !important;background:#89993a !important;border-color:#89993a !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/light.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#888;foo:#04a4cc}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7cfd1 !important;background:#0384a4 !important;border-color:#0384a4 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#888;foo:#04a4cc}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7cfd1 !important;background:#0384a4 !important;border-color:#0384a4 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/midnight.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#e14d43;foo:#e14d43}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1c8c7 !important;background:#d92e23 !important;border-color:#d92e23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#e14d43;foo:#e14d43}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1c8c7 !important;background:#d92e23 !important;border-color:#d92e23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/modern.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(56,88,233,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#3858e9;foo:#3858e9}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7c9d1 !important;background:#193ddf !important;border-color:#193ddf !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/modern/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(56,88,233,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#3858e9;foo:#3858e9}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7c9d1 !important;background:#193ddf !important;border-color:#193ddf !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/modern/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/ocean.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#9ebaa0;foo:#9ebaa0}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7d1c8 !important;background:#86a989 !important;border-color:#86a989 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#9ebaa0;foo:#9ebaa0}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7d1c8 !important;background:#86a989 !important;border-color:#86a989 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/css/skins/sunrise.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#dd823b;foo:#dd823b}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cbc7 !important;background:#cc6d23 !important;border-color:#cc6d23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#dd823b;foo:#dd823b}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cbc7 !important;background:#cc6d23 !important;border-color:#cc6d23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.5.0) 0 0 no-repeat !important}
|
pub/font/loco.eot
CHANGED
Binary file
|
pub/font/loco.svg
CHANGED
@@ -105,6 +105,7 @@
|
|
105 |
<glyph unicode="" glyph-name="translate" d="M628.217 728.84h-81.381q-24.792 0-48.236-10.509t-37.457-27.217l-48.505 145.516h-154.678l-128.808-377.263h91.082l39.882 107.789h152.522v-215.579h-269.474q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798h377.263q44.194 0 75.992-31.798t31.798-75.992v-107.789zM386.23 621.051h-108.867l53.895 157.912zM574.322 674.945h377.263q44.194 0 75.992-31.798t31.798-75.992v-377.263q0-44.194-31.798-75.992t-75.992-31.798h-377.263q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798zM965.059 405.472v58.206h-170.846v116.952h-62.518v-116.952h-170.846v-58.206h68.985q4.851-35.571 22.636-73.297t46.349-67.907q-34.493-14.013-70.872-23.714t-53.625-9.701l2.695-14.013q2.695-14.013 5.659-33.415t2.425-31.259q33.415 0 82.998 17.516t93.777 44.463q44.733-26.947 95.394-44.463t84.615-17.516q-0.539 7.545 0.539 18.055t2.695 20.749 3.234 19.133 3.234 14.821l1.078 5.928q-17.785 0-55.512 9.971t-72.758 23.983q27.486 30.181 45.002 67.907t22.366 72.758h73.297zM759.72 301.455q-40.96 37.726-54.434 104.017h112.64q-14.013-66.829-53.895-104.017l-2.156-1.617q-1.617 1.078-2.156 1.617z" />
|
106 |
<glyph unicode="🐍" glyph-name="python" horiz-adv-x="896" d="M879.6 559c-15.4 61.8-44.6 108.4-106.8 108.4h-80.2v-94.8c0-73.6-62.4-135.6-133.6-135.6h-213.6c-58.4 0-106.8-50-106.8-108.6v-203.6c0-58 50.4-92 106.8-108.6 67.6-19.8 132.6-23.4 213.6 0 53.8 15.6 106.8 47 106.8 108.6v81.4h-213.4v27.2h320.4c62.2 0 85.2 43.4 106.8 108.4 22.4 67 21.4 131.4 0 217.2zM572.4 152c22.2 0 40.2-18.2 40.2-40.6 0-22.6-18-40.8-40.2-40.8-22 0-40.2 18.4-40.2 40.8 0.2 22.6 18.2 40.6 40.2 40.6zM335.6 463.8h213.6c59.4 0 106.8 49 106.8 108.6v203.8c0 58-48.8 101.4-106.8 111.2-71.6 11.8-149.4 11.2-213.6-0.2-90.4-16-106.8-49.4-106.8-111.2v-81.4h213.8v-27.2h-294c-62.2 0-116.6-37.4-133.6-108.4-19.6-81.4-20.4-132.2 0-217.2 15.2-63.2 51.4-108.4 113.6-108.4h73.4v97.6c0 70.6 61 132.8 133.6 132.8zM322.2 749c-22.2 0-40.2 18.2-40.2 40.6 0.2 22.6 18 40.8 40.2 40.8 22 0 40.2-18.4 40.2-40.8s-18-40.6-40.2-40.6z" />
|
107 |
<glyph unicode="🐦" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" />
|
|
|
108 |
<glyph unicode="🗌" glyph-name="ok-empty" d="M397.434 42.304l-397.868 391.6 197.378 194.27 200.49-197.332 429.62 422.852 197.378-194.27-626.998-617.12zM107.912 433.904l289.524-284.962 518.656 510.482-89.036 87.632-429.62-422.852-200.49 197.334-89.034-87.634z" />
|
109 |
<glyph unicode="🛡" glyph-name="privacy" horiz-adv-x="731" d="M0 402.286v438.857q0 14.857 10.857 25.714t25.714 10.857h658.286q14.857 0 25.714-10.857t10.857-25.714v-438.857q0-49.143-19.143-97.429t-47.429-85.714-67.429-72.857-72.286-58.857-69.143-44.286-51.143-28.286-24.286-11.429q-6.857-3.429-14.857-3.429t-14.857 3.429q-9.143 4-24.286 11.429t-51.143 28.286-69.143 44.286-72.286 58.857-67.429 72.857-47.429 85.714-19.143 97.429zM365.714 118.286q68 36 121.714 78.286 134.286 105.143 134.286 205.714v365.714h-256v-649.714z" />
|
110 |
<glyph unicode="🤖" glyph-name="robot" horiz-adv-x="1280" d="M64 502.857h64v-384h-64c-0.023 0-0.050 0-0.077 0-35.304 0-63.923 28.619-63.923 63.923 0 0.027 0 0.054 0 0.081v-0.004 256c0 0.023 0 0.050 0 0.077 0 35.304 28.619 63.923 63.923 63.923 0.027 0 0.054 0 0.081 0h-0.004zM1088 598.857v-544c-0.072-70.664-57.337-127.928-127.993-128h-640.007c-70.664 0.072-127.928 57.337-128 127.993v544.007c0 0.015 0 0.034 0 0.052 0 88.337 71.611 159.948 159.948 159.948 0.018 0 0.037 0 0.055 0h223.997v128c0 35.346 28.654 64 64 64s64-28.654 64-64v0-128h224c0.015 0 0.034 0 0.052 0 88.337 0 159.948-71.611 159.948-159.948 0-0.018 0-0.037 0-0.055v0.003zM528 438.857c0 44.183-35.817 80-80 80s-80-35.817-80-80c0-44.183 35.817-80 80-80v0c0.002 0 0.004 0 0.006 0 44.179 0 79.994 35.815 79.994 79.994 0 0.002 0 0.004 0 0.006v0zM512 182.857h-128v-64h128zM704 182.857h-128v-64h128zM912 438.857c0 44.183-35.817 80-80 80s-80-35.817-80-80c0-44.183 35.817-80 80-80v0c0.002 0 0.004 0 0.006 0 44.179 0 79.994 35.815 79.994 79.994 0 0.002 0 0.004 0 0.006v0zM896 182.857h-128v-64h128zM1280 438.857v-256c0-0.023 0-0.050 0-0.077 0-35.304-28.619-63.923-63.923-63.923-0.027 0-0.054 0-0.081 0h-63.996v384h64c0.023 0 0.050 0 0.077 0 35.304 0 63.923-28.619 63.923-63.923 0-0.027 0-0.054 0-0.081v0.004z" />
|
105 |
<glyph unicode="" glyph-name="translate" d="M628.217 728.84h-81.381q-24.792 0-48.236-10.509t-37.457-27.217l-48.505 145.516h-154.678l-128.808-377.263h91.082l39.882 107.789h152.522v-215.579h-269.474q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798h377.263q44.194 0 75.992-31.798t31.798-75.992v-107.789zM386.23 621.051h-108.867l53.895 157.912zM574.322 674.945h377.263q44.194 0 75.992-31.798t31.798-75.992v-377.263q0-44.194-31.798-75.992t-75.992-31.798h-377.263q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798zM965.059 405.472v58.206h-170.846v116.952h-62.518v-116.952h-170.846v-58.206h68.985q4.851-35.571 22.636-73.297t46.349-67.907q-34.493-14.013-70.872-23.714t-53.625-9.701l2.695-14.013q2.695-14.013 5.659-33.415t2.425-31.259q33.415 0 82.998 17.516t93.777 44.463q44.733-26.947 95.394-44.463t84.615-17.516q-0.539 7.545 0.539 18.055t2.695 20.749 3.234 19.133 3.234 14.821l1.078 5.928q-17.785 0-55.512 9.971t-72.758 23.983q27.486 30.181 45.002 67.907t22.366 72.758h73.297zM759.72 301.455q-40.96 37.726-54.434 104.017h112.64q-14.013-66.829-53.895-104.017l-2.156-1.617q-1.617 1.078-2.156 1.617z" />
|
106 |
<glyph unicode="🐍" glyph-name="python" horiz-adv-x="896" d="M879.6 559c-15.4 61.8-44.6 108.4-106.8 108.4h-80.2v-94.8c0-73.6-62.4-135.6-133.6-135.6h-213.6c-58.4 0-106.8-50-106.8-108.6v-203.6c0-58 50.4-92 106.8-108.6 67.6-19.8 132.6-23.4 213.6 0 53.8 15.6 106.8 47 106.8 108.6v81.4h-213.4v27.2h320.4c62.2 0 85.2 43.4 106.8 108.4 22.4 67 21.4 131.4 0 217.2zM572.4 152c22.2 0 40.2-18.2 40.2-40.6 0-22.6-18-40.8-40.2-40.8-22 0-40.2 18.4-40.2 40.8 0.2 22.6 18.2 40.6 40.2 40.6zM335.6 463.8h213.6c59.4 0 106.8 49 106.8 108.6v203.8c0 58-48.8 101.4-106.8 111.2-71.6 11.8-149.4 11.2-213.6-0.2-90.4-16-106.8-49.4-106.8-111.2v-81.4h213.8v-27.2h-294c-62.2 0-116.6-37.4-133.6-108.4-19.6-81.4-20.4-132.2 0-217.2 15.2-63.2 51.4-108.4 113.6-108.4h73.4v97.6c0 70.6 61 132.8 133.6 132.8zM322.2 749c-22.2 0-40.2 18.2-40.2 40.6 0.2 22.6 18 40.8 40.2 40.8 22 0 40.2-18.4 40.2-40.8s-18-40.6-40.2-40.6z" />
|
107 |
<glyph unicode="🐦" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" />
|
108 |
+
<glyph unicode="🔍" glyph-name="magnify" d="M898.304 180.89l-193.485 193.485c29.184 47.872 45.978 104.192 45.978 164.352 0 174.95-151.603 326.502-326.554 326.502-174.95 0.051-316.723-141.773-316.723-316.723 0-174.899 151.603-326.502 326.502-326.502 58.214 0 112.64 15.821 159.488 43.213l194.509-194.611c19.046-18.995 49.92-18.995 68.915 0l48.282 48.282c18.995 18.995 12.083 43.008-6.912 62.003zM205.005 548.506c0 121.139 98.15 219.29 219.238 219.29 121.139 0 229.069-107.878 229.069-229.069 0-121.088-98.202-219.29-219.29-219.29-121.139 0.051-229.018 107.981-229.018 229.069z" />
|
109 |
<glyph unicode="🗌" glyph-name="ok-empty" d="M397.434 42.304l-397.868 391.6 197.378 194.27 200.49-197.332 429.62 422.852 197.378-194.27-626.998-617.12zM107.912 433.904l289.524-284.962 518.656 510.482-89.036 87.632-429.62-422.852-200.49 197.334-89.034-87.634z" />
|
110 |
<glyph unicode="🛡" glyph-name="privacy" horiz-adv-x="731" d="M0 402.286v438.857q0 14.857 10.857 25.714t25.714 10.857h658.286q14.857 0 25.714-10.857t10.857-25.714v-438.857q0-49.143-19.143-97.429t-47.429-85.714-67.429-72.857-72.286-58.857-69.143-44.286-51.143-28.286-24.286-11.429q-6.857-3.429-14.857-3.429t-14.857 3.429q-9.143 4-24.286 11.429t-51.143 28.286-69.143 44.286-72.286 58.857-67.429 72.857-47.429 85.714-19.143 97.429zM365.714 118.286q68 36 121.714 78.286 134.286 105.143 134.286 205.714v365.714h-256v-649.714z" />
|
111 |
<glyph unicode="🤖" glyph-name="robot" horiz-adv-x="1280" d="M64 502.857h64v-384h-64c-0.023 0-0.050 0-0.077 0-35.304 0-63.923 28.619-63.923 63.923 0 0.027 0 0.054 0 0.081v-0.004 256c0 0.023 0 0.050 0 0.077 0 35.304 28.619 63.923 63.923 63.923 0.027 0 0.054 0 0.081 0h-0.004zM1088 598.857v-544c-0.072-70.664-57.337-127.928-127.993-128h-640.007c-70.664 0.072-127.928 57.337-128 127.993v544.007c0 0.015 0 0.034 0 0.052 0 88.337 71.611 159.948 159.948 159.948 0.018 0 0.037 0 0.055 0h223.997v128c0 35.346 28.654 64 64 64s64-28.654 64-64v0-128h224c0.015 0 0.034 0 0.052 0 88.337 0 159.948-71.611 159.948-159.948 0-0.018 0-0.037 0-0.055v0.003zM528 438.857c0 44.183-35.817 80-80 80s-80-35.817-80-80c0-44.183 35.817-80 80-80v0c0.002 0 0.004 0 0.006 0 44.179 0 79.994 35.815 79.994 79.994 0 0.002 0 0.004 0 0.006v0zM512 182.857h-128v-64h128zM704 182.857h-128v-64h128zM912 438.857c0 44.183-35.817 80-80 80s-80-35.817-80-80c0-44.183 35.817-80 80-80v0c0.002 0 0.004 0 0.006 0 44.179 0 79.994 35.815 79.994 79.994 0 0.002 0 0.004 0 0.006v0zM896 182.857h-128v-64h128zM1280 438.857v-256c0-0.023 0-0.050 0-0.077 0-35.304-28.619-63.923-63.923-63.923-0.027 0-0.054 0-0.081 0h-63.996v384h64c0.023 0 0.050 0 0.077 0 35.304 0 63.923-28.619 63.923-63.923 0-0.027 0-0.054 0-0.081v0.004z" />
|
pub/font/loco.ttf
CHANGED
Binary file
|
pub/font/loco.woff
CHANGED
Binary file
|
pub/js/min/admin.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
(function(v,x,h,J){var m=function(){function
|
2 |
-
|
3 |
-
|
4 |
-
if(99<c)c=Math.min(c,99.9),
|
5 |
-
for(
|
6 |
-
|
7 |
-
clearTimeout(w);w=null}var w;s();h(a).mouseenter
|
8 |
-
q.off("click").click
|
9 |
-
a+' loco-notice inline"></div>').prependTo(h("#loco-notices"));var c=h(s("p"));
|
10 |
-
|
11 |
-
|
12 |
-
"")):t._("Server returned invalid data")}function c(a){
|
13 |
-
".\n"+s._("Check console output for debugging information")),
|
14 |
-
k=a&&a.notices,
|
15 |
-
a.find("button").each(k);a.find("input").each(k);a.find("select").each(k);a.find("textarea").each(k);a.removeClass("disabled loading")}var
|
16 |
-
!0,G=s||{},C=
|
17 |
-
hebr:1,nkoo:1,syrc:1,syrn:1,syrj:1,syre:1,samr:1,mand:1,mend:1,thaa:1,adlm:1,cprt:1,phnx:1,armi:1,prti:1,phli:1,phlp:1,phlv:1,avst:1,mani:1,khar:1,orkh:1,ital:1,lydi:1,ar:1,ary:1,ckb:1,dv:1,fa:1,he:1,nqo:1,ps:1,ur:1,yi:1});m.register("$9",function(
|
18 |
-
(
|
19 |
-
"region","lang"],
|
20 |
"\u1ea3":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1eb7":"a","\u1ead":"a","\u1e01":"a","\u01fd":"\u00e6","\u01e3":"\u00e6","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0107":"c","\u0109":"c","\u010d":"c","\u010b":"c","\u00e7":"c","\u1e09":"c","\u010f":"d","\u1e0b":"d","\u1e11":"d","\u0111":"d","\u1e0d":"d","\u1e13":"d","\u1e0f":"d","\u00f0":"d","\ua77a":"d","\u01c6":"\u01f3","\u00e9":"e","\u00e8":"e","\u0115":"e","\u00ea":"e","\u1ebf":"e","\u1ec1":"e","\u1ec5":"e","\u1ec3":"e","\u011b":"e","\u00eb":"e",
|
21 |
"\u1ebd":"e","\u0117":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u0113":"e","\u1e17":"e","\u1e15":"e","\u1ebb":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u1e19":"e","\u1e1b":"e","\u1e1f":"f","\ua77c":"f","\u01f5":"g","\u011f":"g","\u011d":"g","\u01e7":"g","\u0121":"g","\u0123":"g","\u1e21":"g","\ua7a1":"g","\u1d79":"g","\u0125":"h","\u021f":"h","\u1e27":"h","\u1e23":"h","\u1e29":"h","\u0127":"h","\u210f":"h","\u1e25":"h","\u1e2b":"h","\u1e96":"h","\u00ed":"i","\u00ec":"i","\u012d":"i",
|
22 |
"\u00ee":"i","\u01d0":"i","\u00ef":"i","\u1e2f":"i","\u0129":"i","\u012f":"i","\u012b":"i","\u1ec9":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u1e2d":"i","\u0135":"j","\u01f0":"j","\u1e31":"k","\u01e9":"k","\u0137":"k","\ua7a3":"k","\u1e33":"k","\u1e35":"k","\u013a":"l","\u013e":"l","\u013c":"l","\u0142":"l","\u1e37":"l","\u1e39":"l","\u1e3d":"l","\u1e3b":"l","\u0140":"l","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0144":"n","\u01f9":"n","\u0148":"n","\u00f1":"n","\u1e45":"n","\u0146":"n","\ua7a5":"n",
|
@@ -28,168 +28,169 @@ hebr:1,nkoo:1,syrc:1,syrn:1,syrj:1,syre:1,samr:1,mand:1,mend:1,thaa:1,adlm:1,cpr
|
|
28 |
"\u1f25":"\u03b7","\u1f95":"\u03b7","\u1f23":"\u03b7","\u1f93":"\u03b7","\u1f27":"\u03b7","\u1f97":"\u03b7","\u1f91":"\u03b7","\u03ae":"\u03b7","\u1f75":"\u03b7","\u1fc4":"\u03b7","\u1f74":"\u03b7","\u1fc2":"\u03b7","\u1fc6":"\u03b7","\u1fc7":"\u03b7","\u1fc3":"\u03b7","\u1f30":"\u03b9","\u1f34":"\u03b9","\u1f32":"\u03b9","\u1f36":"\u03b9","\u1f31":"\u03b9","\u1f35":"\u03b9","\u1f33":"\u03b9","\u1f37":"\u03b9","\u03af":"\u03b9","\u1f77":"\u03b9","\u1f76":"\u03b9","\u1fd0":"\u03b9","\u1fd6":"\u03b9",
|
29 |
"\u03ca":"\u03b9","\u0390":"\u03b9","\u1fd3":"\u03b9","\u1fd2":"\u03b9","\u1fd7":"\u03b9","\u1fd1":"\u03b9","\u1f40":"\u03bf","\u1f44":"\u03bf","\u1f42":"\u03bf","\u1f41":"\u03bf","\u1f45":"\u03bf","\u1f43":"\u03bf","\u03cc":"\u03bf","\u1f79":"\u03bf","\u1f78":"\u03bf","\u1fe4":"\u03c1","\u1fe5":"\u03c1","\u1f50":"\u03c5","\u1f54":"\u03c5","\u1f52":"\u03c5","\u1f56":"\u03c5","\u1f51":"\u03c5","\u1f55":"\u03c5","\u1f53":"\u03c5","\u1f57":"\u03c5","\u03cd":"\u03c5","\u1f7b":"\u03c5","\u1f7a":"\u03c5",
|
30 |
"\u1fe0":"\u03c5","\u1fe6":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u1fe3":"\u03c5","\u1fe2":"\u03c5","\u1fe7":"\u03c5","\u1fe1":"\u03c5","\u1f60":"\u03c9","\u1f64":"\u03c9","\u1fa4":"\u03c9","\u1f62":"\u03c9","\u1fa2":"\u03c9","\u1f66":"\u03c9","\u1fa6":"\u03c9","\u1fa0":"\u03c9","\u1f61":"\u03c9","\u1f65":"\u03c9","\u1fa5":"\u03c9","\u1f63":"\u03c9","\u1fa3":"\u03c9","\u1f67":"\u03c9","\u1fa7":"\u03c9","\u1fa1":"\u03c9","\u03ce":"\u03c9","\u1f7d":"\u03c9","\u1ff4":"\u03c9","\u1f7c":"\u03c9",
|
31 |
-
"\u1ff2":"\u03c9","\u1ff6":"\u03c9","\u1ff7":"\u03c9","\u1ff3":"\u03c9","\u0491":"\u0433","\u0450":"\u0435","\u0451":"\u0435","\u04c2":"\u0436","\u045d":"\u0438","\u04e3":"\u0438","\u04ef":"\u0443"});m.register("$10",function(
|
32 |
-
|
33 |
-
pull:function(b,
|
34 |
-
(
|
35 |
-
a)return n
|
36 |
-
function(){h("div.tipsy").remove()};
|
37 |
-
height:b[0].offsetHeight}),
|
38 |
-
|
39 |
-
b.attr("original-title",a).removeAttr("title")},getTitle:function(){var b,a=this.$element,
|
40 |
-
"html":"text"](b)},tip:function(){this.$tip||(this.$tip=h('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'),this.$tip.data("tipsy-pointee",this.$element[0]));return this.$tip},validate:function(){this.$element[0].parentNode||(this.hide(),this.options=this.$element=null)},enable:function(){this.enabled=!0},disable:function(){this.hide();this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled}};h.fn.tipsy=function(b){function a(a){var
|
41 |
-
h.data(a,"tipsy");
|
42 |
-
"live":"bind",k="hover"==b.trigger?"mouseleave":"blur";this[
|
43 |
-
function(){return h(this).offset().left>h(m).scrollLeft()+h(
|
44 |
-
function(){return 0});"".trim||(String.prototype.trim=function(){return m.require("$6","string.js").trim(this," \n\r\t")});
|
45 |
-
v,x));m.register("$37",function(
|
46 |
-
RegExp.$1.toLowerCase();if(a=RegExp.$2)b.script=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();if(a=RegExp.$3)b.region=a.toUpperCase();if(a=RegExp.$4)b.variant=a.toLowerCase();if(a=RegExp.$5)b.extension=a;return b};
|
47 |
-
|
48 |
-
function(){return"[Undefined]"};b.prototype._validate=function(a){var b,n
|
49 |
-
|
50 |
-
l(c,b);a(k++)}var k=0,
|
51 |
-
"touchend";
|
52 |
-
s(
|
53 |
-
F[a]-c.clientX;
|
54 |
-
1:-1,
|
55 |
-
return
|
56 |
-
h(a).addClass("has-mirror");
|
57 |
-
|
58 |
-
|
59 |
-
function c(a){
|
60 |
-
regex:/<!\[CDATA\[/},{token:"constant.language",regex:/\]\]>/},{token:"locked",regex:/<(?:xliff:)?(?:g|ph)[^>]*>[^<]*<\/(?:xliff:)?(?:g|ph)>/},{token:"locked",regex:/<(?:xliff:)?(bx|ex|x)[^\/>]*\/>/},{token:"constant.language",regex:/<\/?[:a-z]+[^>]*>/}]},c=
|
61 |
{token:"icu",regex:/{/,next:"icuName"},{token:"icu",regex:/}/,next:"icuType"}]),icuName:[{token:"icu",regex:"[\\s\\u0085\\u200E\\u200F\\u2028\\u2029]+"},{token:"icu.name",regex:"[^\\s\\u0085\\u200E\\u200F\\u2028\\u2029!-/:-@\\[-^{-~\u00a1\u00a2\u00a3\u00a4\u00a5\u00a6\u00a7\u00a9\u00ab\u00ac\u00ae\u00b0\u00b1\u00b6\u00bb\u00bf\u00d7\u00f7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]+",
|
62 |
-
next:"icuType"},{defaultToken:"icu",next:"icuType"}],icuType:[{token:"icu",regex:/[{}]/,next:"start"},{defaultToken:"icu"}]}:c&&b.start.push({token:"printf",regex:c});this.$rules=b}}function
|
63 |
-
case "python":return/%(?:\([a-z]+\))?[-+0# ]*(?:\d+|\*)?(?:\.\d+|\.\*)?(?:[hlL])?[sdiouxXeEfFgGcra%]/;case "javascript":return/%(?:[1-9]\d*\$)?\+?(?:0|'[^$])?-?\d*(?:\.\d+)?[b-gijostTuvxX%]/;case "auto":return/%(?:\d+\$|\([a-z]+\))?(?:[-+0]?\d*(\.\d+)?[duxoefgaDUXOEFGA]|[@scSC%])/;case
|
64 |
-
function(
|
65 |
-
y=null);return this},disable:function(){
|
66 |
-
|
67 |
-
"</p>"===a.substr(-4);return a.replace(/(<\/?)script/ig,"$1loco:script")}function
|
68 |
-
s=a.parentNode,B=s.parentNode,
|
69 |
block_formats:"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h4;Heading 4=h4;Heading 5=h5;Heading 6=h6;",forced_root_block:"p",relative_urls:!1,convert_urls:!1,remove_script_host:!1,document_base_url:"",allow_script_urls:!1,formats:{alignleft:{classes:"alignleft"},alignright:{selector:"p,h1,h2,h3,h4,span,strong,em,a",classes:"alignright"},aligncenter:{selector:"p,h1,h2,h3,h4,span,strong,em,a",classes:"aligncenter"},strikethrough:{inline:"del"}},fix_list_elements:!0,extended_valid_elements:"span,b,i,u,loco:script",
|
70 |
-
entities:"38,amp,60,lt,62,gt,160,nbsp",entity_encoding:"named",keep_styles:!1,init_instance_callback:
|
71 |
-
focus:function(){k&&
|
72 |
-
l.trigger("editBlur");q.removeClass("has-focus");
|
73 |
-
b.readOnly?a.disable():a.enable();return a};TextAreaPrototype=
|
74 |
-
TextAreaPrototype.fire=function(){this.l&&this.l.fire();return this};TextAreaPrototype.ping=function(){this.l&&this.l.ping();return this};TextAreaPrototype.focus=function(){var b=this.p;b?b.focus():h(this.e).focus()};TextAreaPrototype.focused=function(){return c&&c===this.el};TextAreaPrototype.parent=function(){return this.e.parentNode};TextAreaPrototype.attr=function(b,a){var c=this.e;if(1===arguments.length)return c.getAttribute(b);null==a?c.removeAttribute(b):c.setAttribute(b,a);return this};
|
75 |
-
function(){return!!this.l};TextAreaPrototype.enable=function(){var b=this.p;this.e.removeAttribute("readonly");this.listen();b&&b.enable&&b.enable(this.l);return this};TextAreaPrototype.disable=function(){var b=this.p;this.e.setAttribute("readonly",!0);this.unlisten();b&&b.disable&&b.disable();return this};TextAreaPrototype.listen=function(){var b=this.l;b&&b.kill();this.l=l(this.e);return this};TextAreaPrototype.unlisten=function(){var b=this.l;b&&(b.kill(),this.l=null);
|
76 |
-
function(b,a){var c=this.i||!1;if(a||c!==b)this._i&&(this._i.kill(),delete this._i),(c=this.p)?c.invs&&c.invs(b):b&&(this._i=m.require("$50","mirror.js").init(this.e)),this.i=b;return this};TextAreaPrototype.getInvs=function(){return this.i||!1};TextAreaPrototype.setMode=function(b){var a=this.p,
|
77 |
-
|
78 |
-
function
|
79 |
-
b.ctrlKey||b.metaKey||b.altKey)return!0;a.selectNext(c);b.stopPropagation();b.preventDefault();return!1}}function
|
80 |
-
a||0;this.length=b.length}function A(a){this.live=a;this.rows=[]}
|
81 |
-
m.appendChild(N.cloneNode(!1)).setAttribute("for",w[q]);
|
82 |
-
[],b=a.length;0!==b--;)a[b].destroy();this.pages=[];this.sy=this.mx=this.mn=this.vh=null;void 0;return this};q.render=function(){for(var a,b,c=[],
|
83 |
-
this.redrawDirty();this.redraw();null==
|
84 |
-
b.scrollTop,b=b.clientHeight;this.sy!==c&&(a=!0,this.sy=c);this.vh!==b&&(a=!0,this.vh=b);return a};q.redraw=function(){for(var a=0,b=-1,c=null,
|
85 |
-
k.rendered&&k.sleep();this.mx=
|
86 |
-
(l("Bad next: ["+
|
87 |
-
this.w.cells[1];
|
88 |
-
function(a){this._idxs||(this._idxs=this.idxs);this.idxs=this._sort(a);return this.clear().render()};q.each=function(a){for(var b,c=-1,
|
89 |
-
function(a,b){b?(this.s=b,b(a)):(b=this.s)&&b(a);return a};q.sort=function(a,b){this._sort(this.idxs,
|
90 |
-
return this};q.activate=function(a,b){var c,
|
91 |
-
this.rendered=!0;return this};q.update=function(a,b){var c=b||this.c[a]||{},
|
92 |
-
q.insert=function(a){var b=this.h,c=
|
93 |
-
d;c++)w[c].style.width=a[c];
|
94 |
-
q.destroy=function(){var a=this.rendered?this.live:this.dead,b=this.rows,c=b.length;for(a.parentNode.removeChild(a);0!==c--;)b[c].destroy()};q=null;return
|
95 |
-
f);return!0}}}function
|
96 |
-
h(c).on("editFocus",function(){
|
97 |
-
return b};
|
98 |
-
return this};
|
99 |
-
this.rtl);
|
100 |
-
(
|
101 |
-
function(a){for(var b=-1,c=0,
|
102 |
-
this.field.editable()?a.push("is-editable"):a.push("is-readonly"));a=a.join(" ");a!==this._css&&(this._css=a,this.el.className=a);return this};
|
103 |
-
(
|
104 |
-
b);d!==b&&this.restyle()}else this.length&&this.clear(),d=k.el("textarea"),d.setAttribute("wrap","virtual"),d.value=a,this.contents(d),c=m.require("$47","field.js")._new(d)[b?"enable":"disable"](),
|
105 |
-
b,
|
106 |
-
this.body;if(a.nodeType){var c=b.firstChild;
|
107 |
-
a||"",b;this.header(a);return this.t};
|
108 |
-
|
109 |
-
k.removeClass("active")}
|
110 |
-
b.push("po-empty"),a.comment()&&b.push("po-comment"));return b.join(" ")}function
|
111 |
-
"number.js");var a="poUpdate",
|
112 |
-
u.init=function(){this.localise();this.editable={source:!0,target:!0};this.mode="";this.html=!1;return this};u.localise=function(a){a||(a=
|
113 |
-
a._x("Suggest translation","Editor");this.labels=b;this.t=a;return this};u.setRootCell=function(a){function b(a){c.redraw(!0,a);return!0}var c=m.require("$39","wingrid.js").init(a);h(
|
114 |
-
return!0}).on("wgRowDeselect",function(a,c,
|
115 |
-
return this};u.getTargetOffset=function(){if(this.active)return this.targetCell&&this.targetCell.navigated()||0};u.getTargetEditable=function(){return this.editable.target&&this.targetCell&&this.targetCell.editable()};u.getSourceEditable=function(){return this.editable.source&&this.sourceCell&&this.sourceCell.editable()};u.getContextEditable=function(){return this.editable.context&&this.contextCell&&this.contextCell.editable()};
|
116 |
-
this.getContextEditable()};u.searchable=function(a){a&&(this.dict=a,this.po&&this.rebuildSearch());return this.dict&&!0};u.rebuildSearch=function(){var a=-1,b=this.po.rows,c=b.length,
|
117 |
-
this.po.length;c?
|
118 |
-
this.po;if(this.dirty||a)b.each(function(a,b){b.save()}),this.listCell.find("div.po-unsaved").removeClass("po-unsaved"),this.dirty=0,this.fire("poSave");return b};u.fire=function(a,b){var c=this.handle;if(c&&c[a]&&(c=c[a].apply(this,b||[]),!1===c))return!1;c=h.Event(a);this.$().trigger(c,b);return!c.isDefaultPrevented()};u.on=function(a,b){this.$().on(a,b);return this};u.getSorter=function(){return null};
|
119 |
-
|
120 |
-
b&&
|
121 |
-
this.updateListCell(a,"source");this.updateListCell(a,"target");return this};u.reloadMessage=function(a){var b=this.sourceCell,c=this.targetCell,
|
122 |
-
|
123 |
-
c(this,k,"poMeta"),this.$smeta=k),k.html(
|
124 |
-
function(b){function c(a,b){var
|
125 |
-
c(m[h])+":";else q=[s+"-0",s+"-1"],l=[L[k],L[z]];a.splity.apply(a,q);a.each(function(a,c){a.header(l[c]).textarea(b.source(null,c),
|
126 |
-
a.eachTextarea(function(a){a.ping()});a.off();var k=
|
127 |
-
|
128 |
-
(
|
129 |
-
|
130 |
-
E.focus());x!==D&&(this.fmt=D);I||
|
131 |
-
a.textarea("",!1);if(a=this.sourceCell)a.textarea("",!1).setStrf(d).setMode(c).setInvs(
|
132 |
-
|
133 |
-
[b,d,c,
|
134 |
-
this.rebuildSearch(),this.active&&this.active.equals(b)&&this.unloadActive(),this.po.length&&(c&&this.filter(c),this.active||(
|
135 |
-
u.setInvs=function(a){(this.inv||!1)!==a&&(this.inv=a,this.callTextareas(function(b){b.setInvs(a)}),this.fire("poInvs",[a]));return this};u.getInvs=function(){return this.inv||!1};u.callTextareas=function(a){var b=this.targetCell;b&&b.eachTextarea(a);(b=this.contextCell)&&b.eachTextarea(a);(b=this.sourceCell)&&b.eachTextarea(a);return this};u.focus=function(){var a=this.getTargetEditable();
|
136 |
-
this.sourceLocale={lang:"en",label:"English",plurals:["One","Other"]}}function
|
137 |
-
"base.js");
|
138 |
-
b=[a._x("Source text","Editor")];this.targetLocale&&(b[1]=a._x("Translation","Editor"));return b};
|
139 |
-
function(){var a=this.po,b=a.length,c=0,d=0,
|
140 |
-
a&&(this.targetLocale=a,delete this._unlocked,this.po&&this.po.lock(a),this.editable={source:!1,context:!1,target:!0},this.targetCell=this.contextCell,delete this.contextCell,this.reload(),this.fire("poLock",[!0,a]),this.active&&this.loadMessage(this.active))};
|
141 |
-
[];a.translated()?a.fuzzy()&&d.push("po-fuzzy"):d.push("po-empty");
|
142 |
-
40:!0,73:!0},c={66:function(b,a){var c=a.current();c&&(c.normalize(),a.focus().pasteMessage(c))},75:function(b,a){var c=a.current();c&&(c.untranslate(),a.focus().pasteMessage(c))},85:function(b,a){a.focus().fuzzy(!a.fuzzy())},13:function(b,a){a.getFirstEditable()&&a.next(1,!0,!0)},40:function(b,a){var c=b.shiftKey;a.next(1,c,c)},38:function(b,a){var c=b.shiftKey;a.next(-1,c,c)},73:function(b,a){if(!b.shiftKey)return!1;
|
143 |
-
!a.metaKey&&!a.ctrlKey)return!0;var
|
144 |
-
|
145 |
-
this.length++);this[b]=c;return b};
|
146 |
-
b){return d(a[0],b[0])});for(c=0;c<b;c++)a=
|
147 |
-
a,
|
148 |
-
|
149 |
-
m.register("$27",function(
|
150 |
-
|
151 |
-
b?b:-1!==
|
152 |
-
|
153 |
-
c)return!0;return!1};
|
154 |
-
function(){return Math.max(this.src.length,this.msg.length)};
|
155 |
-
for(c=0;c<a;c++)if(!b[c])return!1;return!0};
|
156 |
-
|
157 |
-
return!0};
|
158 |
-
"Language-Team":"",Language:"","Plural-Forms":"","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit"}}function
|
159 |
-
"messages.js").extend(a);h.clear=function(){this.rows=m.require("$25","collection.js").init();this.length=0;return this};h.now=function(){function a(b,c){for(var
|
160 |
-
function(a){var b,c=this.now(),
|
161 |
-
"Loco https://localise.biz/";return a};h.get=function(a,b){var c=
|
162 |
-
h&&l.context(h),d.flag&&l.flag(d.flag,0),d.comment&&l.comment(d.comment),d.notes&&l.notes(d.notes),d.refs&&l.refs(d.refs),l.format(d.format),d.message=l,this.add(l),d.prev&&d.prev[0]&&(l.prev(d.prev[0].source,d.prev[0].context),d.prev[1]&&l._src.push(d.prev[1].source||""))):0===b&&"object"===typeof
|
163 |
-
m&&l.plural(
|
164 |
-
b){a&&(d.push(b.cat(m,h,l)),d.push(""))});return d.join("\n")};h=m.require("$28","message.js").extend(
|
165 |
-
|
166 |
-
h.compare=function(a,b){var c=this.weight(),d=a.weight();if(c>d)return 1;if(c<d)return-1;if(b){c=this.hash().toLowerCase();d=a.hash().toLowerCase();if(c<d)return 1;if(c>d)return-1}return 0};h.copy=function(){var a=new
|
167 |
-
modal:!0,autoOpen:!1,closeOnEscape:!0,resizable:!1,height:500}))}function b(a,b,d){a=h("<p></p>").text(d);c().dialog("close").html("").dialog("option","title","Error").append(a).dialog("open")}function a(a){var b=a&&a.code;if(b){for(var d=-1,
|
168 |
-
a.target;var b=h(a).find("li.highlighted")[0],b=Math.max(0,(b&&b.offsetTop||0)-Math.floor(a.clientHeight/2));a.scrollTop=b}var
|
169 |
-
l.prototype;
|
170 |
-
|
171 |
-
s,b.html,d).fail(a).always(
|
172 |
-
v,0)},did:function(){return v}}}}};return
|
173 |
-
"",b););}var
|
174 |
-
|
175 |
-
var
|
176 |
-
"tlh-Piqd"],zh:["zh-Hans","zh-Hant"],zh_CN:["zh-Hans"],zh_HK:["zh-Hans"],zh_SG:["zh-Hans"],zh_TW:["zh-Hant"]});m.register("$33",function(
|
177 |
-
a[g]||{},k=k.translations||[],k=k[0]||{},!1!==d(c[g],k.text||"",b)););}var g=this,k=[],h=c.length,l=-1;a=a?"html":"plain";for(var q=g.mapLang(b,m.require("$43","ms.json"));++l<h;)k.push({text:c[l]});return g._call({url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to="+q+"&textType="+a,method:"POST",data:JSON.stringify(k),headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":this.key(),
|
178 |
-
"global"}}).done(function(a,b,c){a&&a.length?
|
179 |
-
c.length,h=-1,l;++h<g&&(l=a[h]||{},!1!==d(c[h],l.text||"",b)););}var g=this;a=g.mapLang(b,m.require("$44","deepl.json"));return g._call({url:"https://api.deepl.com/v2/translate",method:"POST",traditional:!0,data:{source_lang:"EN",target_lang:a.toUpperCase(),preserve_formatting:"1",auth_key:g.key(),text:c}}).done(function(a,b,c){a.translations?
|
180 |
-
|
181 |
-
b=/&(#\d+|#x[0-9a-f]|[a-z]+);/i,c=/<[a-z]+\s/i,d,
|
182 |
-
(
|
183 |
-
c)};c.batch=function(){return{always:function(a){a()}}};c._call=function(a){var b=this;b.state=null;a.cache=!0;a.dataType="json";a.error=function(a,c,d){try{var
|
184 |
-
c.createJob=function(){return m.require("$30","job.js").create(this)};
|
185 |
-
function(
|
186 |
-
|
187 |
-
b).appendTo(a).val(c))}function
|
188 |
-
a();else if(b.reason)u.notices.info(b.reason);else if(b=b.prompt){var c=
|
189 |
-
|
190 |
-
F=
|
191 |
-
c){return-1*a(b,c)}}
|
192 |
-
e[c],g=
|
193 |
-
switch(e
|
194 |
-
m.require("$5","json.js");D.l10n=v;v.load(I.wpl10n);x&&v.pluraleq(x.pluraleq);D.string=m.require("$6","string.js");D.notices=m.require("$7","notices.js").init(v);D.ajax=m.require("$8","ajax.js").init(I).localise(v);D.locale=m.require("$9","wplocale.js");D.fulltext=m.require("$10","fulltext.js");D.watchtext=m.require("$11","LocoTextListener.js").listen;D.tooltip=m.require("$12","tooltip.js");D.po={ed:m.require("$13","poedit.js"),kbd:m.require("$14","hotkeys.js"),
|
195 |
-
ace:m.require("$16","ace.js").strf("php"),ref:m.require("$17","refs.js")};D.apis=m.require("$18","apis.js");D.fs=m.require("$19","fsconn.js");h("#loco-admin.wrap table.wp-list-table").each(function(
|
|
1 |
+
(function(v,x,h,J){var m=function(){function f(d){throw Error("Failed to require "+d);}var d={};return{register:function(f,l){d[f]=l},require:function(h,l){return d[h]||f(l)},include:function(h,l,g){return d[h]||(g?f(l):null)}}}();m.register("$1",function(f,d,h){function l(g){var c=typeof g;if("string"===c)if(/[^ <>!=()%^&|?:n0-9]/.test(g))console.error("Invalid plural: "+g);else return new Function("n","return "+g);"function"!==c&&(g=function(b){return 1!=b});return g}f.init=function(g){function c(a,
|
2 |
+
e,c){return(a=b[a])&&a[c]?a[c]:e||""}g=l(g);var b={};return{_:function(a){return c(a,a,0)},_x:function(a,b){return c(b+"\u0004"+a,a,0)},_n:function(a,b,p){p=Number(g(p));isNaN(p)&&(p=0);return c(a,p?b:a,p)},load:function(a){b=a||{};return this},pluraleq:function(a){g=l(a);return this}}};return f}({},v,x));m.register("$2",function(f,d,h){f.ie=function(){var l=!1,g=0;d.attachEvent&&d.navigator&&/MSIE (\d+)\./.exec(String(navigator.appVersion))&&(g=Number(RegExp.$1),l=11>g);return function(){return l}}();
|
3 |
+
f.init=function(){return f};return f}({},v,x));m.register("$3",function(f,d,h){Number.prototype.format=function(d){d=Math.pow(10,d||0);var g=Math.round(d*this)/d;d=[];var g=String(g),c=g.split("."),g=c[0],c=c[1],b=g.length;do d.unshift(g.substring(b-3,b));while(0<(b-=3));g=d.join(",");if(d=c){d=c;for(var a,c=d.length;"0"===d.charAt(--c);)a=c;a&&(d=d.substring(0,a));d=c=d}d&&(g+="."+c);return g};Number.prototype.percent=function(d){var g=0,c=this&&d?100*(this/d):0;if(0===c)return"0";if(100===c)return"100";
|
4 |
+
if(99<c)c=Math.min(c,99.9),d=c.format(++g);else if(0.5>c){c=Math.max(c,1E-4);do d=c.format(++g);while("0"===d&&4>g);d=d.substr(1)}else d=c.format(0);return d};return f}({},v,x));m.register("$4",function(f,d,h){Array.prototype.indexOf||(Array.prototype.indexOf=function(d){if(null==this)throw new TypeError;var g,c=Object(this),b=c.length>>>0;if(0===b)return-1;g=0;1<arguments.length&&(g=Number(arguments[1]),g!=g?g=0:0!=g&&Infinity!=g&&-Infinity!=g&&(g=(0<g||-1)*Math.floor(Math.abs(g))));if(g>=b)return-1;
|
5 |
+
for(g=0<=g?g:Math.max(b-Math.abs(g),0);g<b;g++)if(g in c&&c[g]===d)return g;return-1});return f}({},v,x));m.register("$5",function(f,d,m){d.JSON||(d.JSON={parse:h.parseJSON,stringify:null});return f=d.JSON}({},v,x));m.register("$6",function(f,d,h){f.trim=function(d,g){for(g||(g=" \n");d&&-1!==g.indexOf(d.substr(0,1));)d=d.substr(1);for(;d&&-1!==g.indexOf(d.substr(-1));)d=d.substr(0,d.length-1);return d};f.sprintf=function(d){var g=0,c,b=[].slice.call(arguments,1);return d.replace(/%([sud%])/g,function(a,
|
6 |
+
e){if("%"===e)return"%";c=b[g++];return String(c)||""})};return f}({},v,x));m.register("$21",function(f,d,h){function l(g){return function(c,b){for(var a=c[g]||0;(c=c.offsetParent)&&c!==(b||h.body);)a+=c[g]||0;return a}}f.top=l("offsetTop");f.left=l("offsetLeft");f.el=function(g,c){var b=h.createElement(g||"div");c&&(b.className=c);return b};f.txt=function(g){return h.createTextNode(g||"")};return f}({},v,x));m.register("$7",function(f,d,E){function l(a,b,c){function s(){e();w=setTimeout(b,c)}function e(){w&&
|
7 |
+
clearTimeout(w);w=null}var w;s();h(a).on("mouseenter",e).on("mouseleave",s);return{die:function(){e();h(a).off("mouseenter mouseleave")}}}function g(a,b){a.fadeTo(b,0,function(){a.slideUp(b,function(){a.remove();h(d).triggerHandler("resize")})});return a}function c(a,b){function c(b){n[w]=null;g(h(a),250);e&&e.die();var s;if(s=b)b.stopPropagation(),b.preventDefault(),s=!1;return s}function s(b){e&&e.die();return e=l(a,c,b)}var e,w,p,k=h(a),q=k.find("button");0===q.length&&(k.addClass("is-dismissible"),
|
8 |
+
q=h('<button type="button" class="notice-dismiss"> </a>').appendTo(k));q.off("click").on("click",c);h(d).triggerHandler("resize");z();w=n.length;n.push(c);b&&(e=s(b));return{link:function(b,w){var e=w||b,s=h(a).find("nav"),e=h("<nav></nav>").append(h("<a></a>").attr("href",b).text(e));p?(p.push(e.html()),s.html(p.join("<span> | </span>"))):(p=[e.html()],h(a).addClass("has-nav").append(e));return this},stick:function(){e&&e.die();e=null;n[w]=null;return this},slow:function(a){s(a||1E4);return this}}}
|
9 |
+
function b(a,b,e){var s=m.require("$21","dom.js").el;a=h('<div class="notice notice-'+a+' loco-notice inline"></div>').prependTo(h("#loco-notices"));var c=h(s("p"));e=h(s("span")).text(e);b=h(s("strong","has-icon")).text(b+": ");c.append(b).append(e).appendTo(a);return a}function a(a,e,s,p){a=b(s,e,a).css("opacity","0").fadeTo(500,1);h(d).triggerHandler("resize");return c(a,p)}function e(b){return a(b,q,"warning")}function p(){h("#loco-notices").find("div.notice").each(function(a,b){if(-1===b.className.indexOf("jshide")){var e=
|
10 |
+
-1===b.className.indexOf("notice-success")?null:5E3;c(b,e)}})}var n=[],k=d.console||{log:function(){}},z=Date.now||function(){return(new Date).getTime()},A,q,s,B;f.error=function(b){return a(b,A,"error")};f.warn=e;f.info=function(b){return a(b,s,"info")};f.success=function(b){return a(b,B,"success",5E3)};f.warning=e;f.log=function(){k.log.apply(k,arguments)};f.debug=function(){(k.debug||k.log).apply(k,arguments)};f.clear=function(){for(var a=-1,b,e=n,s=e.length;++a<s;)(b=e[a])&&b.call&&b();n=[];return f};
|
11 |
+
f.create=b;f.raise=function(a){(f[a.type]||f.error).call(f,a.message)};f.convert=c;f.init=function(a){A=a._("Error");q=a._("Warning");s=a._("Notice");B=a._("OK");setTimeout(p,1E3);return f};return f}({},v,x));m.register("$8",function(f,d,E){function l(a){var b=h("<pre>"+a+"</pre>").text();b&&(b=b.replace(/[\r\n]+/g,"\n").replace(/(^|\n)\s+/g,"$1").replace(/\s+$/,""));b||(b=a)||(b="Blank response from server");return b}function g(a){return(a=a.split(/[\r\n]/)[0])?(a=a.replace(/ +in +\S+ on line \d+/,
|
12 |
+
""),a=a.replace(/^[()! ]+Fatal error:\s*/,"")):t._("Server returned invalid data")}function c(a){d.console&&console.error&&console.error('No nonce for "'+a+'"');return""}function b(a,b,e){a[b]=e}function a(a,b,e){a.push({name:b,value:e})}function e(a,b,e){a.append(b,e)}function p(a,b,e,c){function p(b,c,w){if("abort"!==c){var s=k||{_:function(a){return a}},y=b.status||0,d=b.responseText,r=l(d),f=b.getResponseHeader("Content-Type")||"Unknown type",A=b.getResponseHeader("Content-Length")||d.length;
|
13 |
+
"success"===c&&w?n.error(w):(n.error(g(r)+".\n"+s._("Check console output for debugging information")),n.log("Ajax failure for "+a,{status:y,error:c,message:w,output:d}),"parsererror"===c&&(w="Response not JSON"),n.log([s._("Provide the following text when reporting a problem")+":","----","Status "+y+' "'+(w||s._("Unknown error"))+'" ('+f+" "+A+" bytes)",r,"===="].join("\n")));e&&e.call&&e(b,c,w);z=b}}c.url=A;c.dataType="json";var n=m.require("$7","notices.js").clear();z=null;return h.ajax(c).fail(p).done(function(a,
|
14 |
+
e,w){var c=a&&a.data,k=a&&a.notices,g=k&&k.length,z=-1;for(!c||a.error?p(w,e,a&&a.error&&a.error.message):b&&b(c,e,w);++z<g;)n.raise(k[z])})}var n={},k,z,A=d.ajaxurl||"/wp-admin/admin-ajax.php";f.init=function(a){n=a.nonces||n;return f};f.localise=function(a){k=a;return f};f.xhr=function(){return z};f.strip=l;f.parse=g;f.submit=function(a,b,e){function c(a,b){b.disabled?b.setAttribute("data-was-disabled","true"):b.disabled=!0}function k(a,b){b.getAttribute("data-was-disabled")||(b.disabled=!1)}function n(a){a.find(".button-primary").removeClass("loading");
|
15 |
+
a.find("button").each(k);a.find("input").each(k);a.find("select").each(k);a.find("textarea").each(k);a.removeClass("disabled loading")}var g=h(a),z=g.serialize();(function(a){a.find(".button-primary").addClass("loading");a.find("button").each(c);a.find("input").each(c);a.find("select").each(c);a.find("textarea").each(c);a.addClass("disabled loading")})(g);return p(a.route.value,function(a,e,c){n(g);b&&b(a,e,c)},function(a,b,c){n(g);e&&e(a,b,c)},{type:a.method,data:z})};f.post=function(k,s,g,z){var y=
|
16 |
+
!0,G=s||{},C=n[k]||c(k);d.FormData&&G instanceof FormData?(y=!1,s=e):s=Array.isArray(G)?a:b;s(G,"action","loco_json");s(G,"route",k);s(G,"loco-nonce",C);return p(k,g,z,{type:"post",data:G,processData:y,contentType:y?"application/x-www-form-urlencoded; charset=UTF-8":!1})};f.get=function(a,b,e,k){b=b||{};var g=n[a]||c(a);b.action="loco_json";b.route=a;b["loco-nonce"]=g;return p(a,e,k,{type:"get",data:b})};f.setNonce=function(a,b){n[a]=b;return f};return f}({},v,x));m.register("$22",{arab:1,aran:1,
|
17 |
+
hebr:1,nkoo:1,syrc:1,syrn:1,syrj:1,syre:1,samr:1,mand:1,mend:1,thaa:1,adlm:1,cprt:1,phnx:1,armi:1,prti:1,phli:1,phlp:1,phlv:1,avst:1,mani:1,khar:1,orkh:1,ital:1,lydi:1,ar:1,ary:1,ckb:1,dv:1,fa:1,he:1,nqo:1,ps:1,ur:1,yi:1});m.register("$9",function(f,d,h){function l(){}var g,c=m.require("$22","rtl.json");f.init=function(){return new l};f.cast=function(b){return b instanceof l?b:"string"===typeof b?f.parse(b):f.clone(b)};f.clone=function(b){var a,e=new l;for(a in b)e[a]=b[a];return e};f.parse=function(b){if(!(g||
|
18 |
+
(g=/^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z0-9]{3,8}))?$/i)).exec(b))return null;var a=new l;a.lang=RegExp.$1.toLowerCase();if(b=RegExp.$2)a.region=b.toUpperCase();if(b=RegExp.$3)a.variant=b.toLowerCase();return a};d=l.prototype;d.isValid=function(){return!!this.lang};d.isKnown=function(){var b=this.lang;return!(!b||"zxx"===b)};d.toString=function(b){b=b||"_";var a,e=this.lang||"zxx";if(a=this.region)e+=b+a;if(a=this.variant)e+=b+a;return e};d.getIcon=function(){for(var b=3,a,e,c=["variant",
|
19 |
+
"region","lang"],n=[];0!==b--;)if(a=c[b],e=this[a])n.push(a),n.push(a+"-"+e.toLowerCase());return n.join(" ")};d.isRTL=function(){return!!c[String(this.lang).toLowerCase()]};d=null;return f}({},v,x));m.register("$23",{"\u00e1":"a","\u00e0":"a","\u0103":"a","\u1eaf":"a","\u1eb1":"a","\u1eb5":"a","\u1eb3":"a","\u00e2":"a","\u1ea5":"a","\u1ea7":"a","\u1eab":"a","\u1ea9":"a","\u01ce":"a","\u00e5":"a","\u01fb":"a","\u00e4":"a","\u01df":"a","\u00e3":"a","\u0227":"a","\u01e1":"a","\u0105":"a","\u0101":"a",
|
20 |
"\u1ea3":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1eb7":"a","\u1ead":"a","\u1e01":"a","\u01fd":"\u00e6","\u01e3":"\u00e6","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0107":"c","\u0109":"c","\u010d":"c","\u010b":"c","\u00e7":"c","\u1e09":"c","\u010f":"d","\u1e0b":"d","\u1e11":"d","\u0111":"d","\u1e0d":"d","\u1e13":"d","\u1e0f":"d","\u00f0":"d","\ua77a":"d","\u01c6":"\u01f3","\u00e9":"e","\u00e8":"e","\u0115":"e","\u00ea":"e","\u1ebf":"e","\u1ec1":"e","\u1ec5":"e","\u1ec3":"e","\u011b":"e","\u00eb":"e",
|
21 |
"\u1ebd":"e","\u0117":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u0113":"e","\u1e17":"e","\u1e15":"e","\u1ebb":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u1e19":"e","\u1e1b":"e","\u1e1f":"f","\ua77c":"f","\u01f5":"g","\u011f":"g","\u011d":"g","\u01e7":"g","\u0121":"g","\u0123":"g","\u1e21":"g","\ua7a1":"g","\u1d79":"g","\u0125":"h","\u021f":"h","\u1e27":"h","\u1e23":"h","\u1e29":"h","\u0127":"h","\u210f":"h","\u1e25":"h","\u1e2b":"h","\u1e96":"h","\u00ed":"i","\u00ec":"i","\u012d":"i",
|
22 |
"\u00ee":"i","\u01d0":"i","\u00ef":"i","\u1e2f":"i","\u0129":"i","\u012f":"i","\u012b":"i","\u1ec9":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u1e2d":"i","\u0135":"j","\u01f0":"j","\u1e31":"k","\u01e9":"k","\u0137":"k","\ua7a3":"k","\u1e33":"k","\u1e35":"k","\u013a":"l","\u013e":"l","\u013c":"l","\u0142":"l","\u1e37":"l","\u1e39":"l","\u1e3d":"l","\u1e3b":"l","\u0140":"l","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0144":"n","\u01f9":"n","\u0148":"n","\u00f1":"n","\u1e45":"n","\u0146":"n","\ua7a5":"n",
|
28 |
"\u1f25":"\u03b7","\u1f95":"\u03b7","\u1f23":"\u03b7","\u1f93":"\u03b7","\u1f27":"\u03b7","\u1f97":"\u03b7","\u1f91":"\u03b7","\u03ae":"\u03b7","\u1f75":"\u03b7","\u1fc4":"\u03b7","\u1f74":"\u03b7","\u1fc2":"\u03b7","\u1fc6":"\u03b7","\u1fc7":"\u03b7","\u1fc3":"\u03b7","\u1f30":"\u03b9","\u1f34":"\u03b9","\u1f32":"\u03b9","\u1f36":"\u03b9","\u1f31":"\u03b9","\u1f35":"\u03b9","\u1f33":"\u03b9","\u1f37":"\u03b9","\u03af":"\u03b9","\u1f77":"\u03b9","\u1f76":"\u03b9","\u1fd0":"\u03b9","\u1fd6":"\u03b9",
|
29 |
"\u03ca":"\u03b9","\u0390":"\u03b9","\u1fd3":"\u03b9","\u1fd2":"\u03b9","\u1fd7":"\u03b9","\u1fd1":"\u03b9","\u1f40":"\u03bf","\u1f44":"\u03bf","\u1f42":"\u03bf","\u1f41":"\u03bf","\u1f45":"\u03bf","\u1f43":"\u03bf","\u03cc":"\u03bf","\u1f79":"\u03bf","\u1f78":"\u03bf","\u1fe4":"\u03c1","\u1fe5":"\u03c1","\u1f50":"\u03c5","\u1f54":"\u03c5","\u1f52":"\u03c5","\u1f56":"\u03c5","\u1f51":"\u03c5","\u1f55":"\u03c5","\u1f53":"\u03c5","\u1f57":"\u03c5","\u03cd":"\u03c5","\u1f7b":"\u03c5","\u1f7a":"\u03c5",
|
30 |
"\u1fe0":"\u03c5","\u1fe6":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u1fe3":"\u03c5","\u1fe2":"\u03c5","\u1fe7":"\u03c5","\u1fe1":"\u03c5","\u1f60":"\u03c9","\u1f64":"\u03c9","\u1fa4":"\u03c9","\u1f62":"\u03c9","\u1fa2":"\u03c9","\u1f66":"\u03c9","\u1fa6":"\u03c9","\u1fa0":"\u03c9","\u1f61":"\u03c9","\u1f65":"\u03c9","\u1fa5":"\u03c9","\u1f63":"\u03c9","\u1fa3":"\u03c9","\u1f67":"\u03c9","\u1fa7":"\u03c9","\u1fa1":"\u03c9","\u03ce":"\u03c9","\u1f7d":"\u03c9","\u1ff4":"\u03c9","\u1f7c":"\u03c9",
|
31 |
+
"\u1ff2":"\u03c9","\u1ff6":"\u03c9","\u1ff7":"\u03c9","\u1ff3":"\u03c9","\u0491":"\u0433","\u0450":"\u0435","\u0451":"\u0435","\u04c2":"\u0436","\u045d":"\u0438","\u04e3":"\u0438","\u04ef":"\u0443"});m.register("$10",function(f,d,h){f.init=function(){function d(a){return k[a]||a}function g(a,b,e,c){b=a.split(b);for(var p=b.length;0!==p--;)(a=b[p])&&null==c[a]&&(e.push(a),c[a]=!0);return e}function c(a){return g(String(a||"").toLowerCase().replace(p,d),n,[],{})}function b(a,b){for(var c=[],s={},k,
|
32 |
+
r=b.length,y=n;0!==r--;)(k=b[r])&&g(String(k||"").toLowerCase().replace(p,d),y,c,s);e[a]=c}function a(a,b){var c=[],s=-1,p=e,k=p.length,n,g,d,u,w,F,f=a.length,l=b?!0:!1;a:for(;++s<k;)if(d=p[s],null!=d&&(u=d.length)){w=0;b:for(;w<f;w++){F=a[w];for(n=0;n<u;n++)if(g=d[n],0===g.indexOf(F))continue b;continue a}c.push(l?b[s]:s)}return c}var e=[],p=/[^a-z0-9]/g,n=/[\-_\s.?!;:,*^+=~`"(){}<>\[\]\/\\\u00a0\u1680\u180e\u2000-\u206f\u2e00-\u2e7f\u3000-\u303f]+/,k=m.require("$23","flatten.json");return{split:c,
|
33 |
+
pull:function(b,e){return a(b,e)},find:function(b,e){return a(c(b),e)},add:function(a,b){e[a]=c(b)},push:function(a){b(e.length,a)},index:function(a,e){b(a,e)},size:function(){return e.length},clear:function(){e=[]},remove:function(a){e[a]=null}}};return f}({},v,x));m.register("$11",function(f,d,m){f.listen=function(f,g){function c(){q[p?"show":"hide"]()}function b(a){A&&f.setAttribute("size",2+a.length);p=a;c();return a}function a(){n=null;g(p)}function e(){var e=f.value;z&&e===z&&(e="");e!==p&&
|
34 |
+
(n&&clearTimeout(n),b(e),k?n=setTimeout(a,k):a())}f instanceof jQuery&&(f=f[0]);var p,n,k=150,z=d.attachEvent&&f.getAttribute("placeholder"),A=1===Number(f.size),q=h('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').on("click",function(){f.value="";e();return!1});b(f.value);h(f).on("input blur focus",function(){e();return!0}).after(q);c();return{delay:function(a){k=a},ping:function(c){c?(n&&clearTimeout(n),c=f.value,z&&c===z&&(c=""),b(c),a(),c=void 0):c=e();return c},val:function(a){if(null==
|
35 |
+
a)return p;n&&clearTimeout(n);f.value=b(a);c()},el:function(){return f},blur:function(a){return h(f).on("blur",a)},destroy:function(){n&&clearTimeout(n)}}};return f}({},v,x));m.register("$12",function(f,d,m){function l(b,a){this.$element=h(b);this.options=a;this.enabled=!0;this.fixTitle()}f.init=function(b,a){var e={fade:!0,offset:5,delayIn:g,delayOut:c,anchor:b.attr("data-anchor"),gravity:b.attr("data-gravity")||"s"};a&&(e=h.extend({},e,a));b.tipsy(e)};f.delays=function(b,a){g=b||150;c=a||100};f.kill=
|
36 |
+
function(){h("div.tipsy").remove()};f.text=function(b,a){a.data("tipsy").setTitle(b)};var g,c;f.delays();h(m.body).on("overlayOpened overlayClosing",function(b){f.kill();return!0});l.prototype={show:function(){var b=this.getTitle();if(b&&this.enabled){var a=this.tip();a.find(".tipsy-inner")[this.options.html?"html":"text"](b);a[0].className="tipsy";a.remove().css({top:0,left:0}).prependTo(m.body);var b=(b=this.options.anchor)?this.$element.find(b):this.$element,b=h.extend({},b.offset(),{width:b[0].offsetWidth,
|
37 |
+
height:b[0].offsetHeight}),e=a[0].offsetWidth,c=a[0].offsetHeight,n="function"==typeof this.options.gravity?this.options.gravity.call(this.$element[0]):this.options.gravity,k;switch(n.charAt(0)){case "n":k={top:b.top+b.height+this.options.offset,left:b.left+b.width/2-e/2};break;case "s":k={top:b.top-c-this.options.offset,left:b.left+b.width/2-e/2};break;case "e":k={top:b.top+b.height/2-c/2,left:b.left-e-this.options.offset};break;case "w":k={top:b.top+b.height/2-c/2,left:b.left+b.width+this.options.offset}}2==
|
38 |
+
n.length&&("w"==n.charAt(1)?k.left=b.left+b.width/2-15:k.left=b.left+b.width/2-e+15);a.css(k).addClass("tipsy-"+n);a.find(".tipsy-arrow")[0].className="tipsy-arrow tipsy-arrow-"+n.charAt(0);this.options.className&&a.addClass("function"==typeof this.options.className?this.options.className.call(this.$element[0]):this.options.className);a.addClass("in")}},hide:function(){this.tip().remove()},fixTitle:function(){var b=this.$element,a=b.attr("title")||"";(a||"string"!==typeof b.attr("original-title"))&&
|
39 |
+
b.attr("original-title",a).removeAttr("title")},getTitle:function(){var b,a=this.$element,e=this.options;this.fixTitle();"string"==typeof e.title?b=a.attr("title"==e.title?"original-title":e.title):"function"==typeof e.title&&(b=e.title.call(a[0]));return(b=(""+b).replace(/(^\s*|\s*$)/,""))||e.fallback},setTitle:function(b){var a=this.$element;a.attr("default-title")||a.attr("default-title",this.getTitle());null==b&&(b=a.attr("default-title")||this.getTitle());a.attr("original-title",b);if(this.$tip)this.$tip.find(".tipsy-inner")[this.options.html?
|
40 |
+
"html":"text"](b)},tip:function(){this.$tip||(this.$tip=h('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'),this.$tip.data("tipsy-pointee",this.$element[0]));return this.$tip},validate:function(){this.$element[0].parentNode||(this.hide(),this.options=this.$element=null)},enable:function(){this.enabled=!0},disable:function(){this.hide();this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled}};h.fn.tipsy=function(b){function a(a){var e=
|
41 |
+
h.data(a,"tipsy");e||(e=new l(a,h.fn.tipsy.elementOptions(a,b)),h.data(a,"tipsy",e));return e}function e(){var e=a(this),c=b.delayIn;e.hoverState="in";0==c?e.show():(e.fixTitle(),setTimeout(function(){"in"==e.hoverState&&e.show()},c))}function c(){var e=a(this),p=b.delayOut;e.hoverState="out";0==p?e.hide():(e.tip().removeClass("in"),setTimeout(function(){"out"==e.hoverState&&e.hide()},p))}b=h.extend({},h.fn.tipsy.defaults,b);b.live||this.each(function(){a(this)});if("manual"!=b.trigger){var n=b.live?
|
42 |
+
"live":"bind",k="hover"==b.trigger?"mouseleave":"blur";this[n]("hover"==b.trigger?"mouseenter":"focus",e)[n](k,c)}return this};h.fn.tipsy.defaults={className:null,delayIn:0,delayOut:0,fade:!1,fallback:"",gravity:"n",html:!1,live:!1,offset:0,opacity:0.8,title:"title",trigger:"hover",anchor:null};h.fn.tipsy.elementOptions=function(b,a){return h.metadata?h.extend({},a,h(b).metadata()):a};h.fn.tipsy.autoNS=function(){return h(this).offset().top>h(m).scrollTop()+h(d).height()/2?"s":"n"};h.fn.tipsy.autoWE=
|
43 |
+
function(){return h(this).offset().left>h(m).scrollLeft()+h(d).width()/2?"e":"w"};h.fn.tipsy.autoBounds=function(b,a){return function(){var e=a[0],c=1<a.length?a[1]:!1,n=h(m).scrollTop()+b,k=h(m).scrollLeft()+b,g=h(this);g.offset().top<n&&(e="n");g.offset().left<k&&(c="w");h(d).width()+h(m).scrollLeft()-g.offset().left<b&&(c="e");h(d).height()+h(m).scrollTop()-g.offset().top<b&&(e="s");return e+(c?c:"")}};return f}({},v,x));m.register("$36",function(f,d,h){"".localeCompare||(String.prototype.localeCompare=
|
44 |
+
function(){return 0});"".trim||(String.prototype.trim=function(){return m.require("$6","string.js").trim(this," \n\r\t")});f.html=function(){function d(){b=/[<>&]/g;a=/(\r\n|\n|\r)/g;e=/(?:https?):\/\/(\S+)/ig;p=location.hostname;d=null}function g(a){return"&#"+a.charCodeAt(0)+";"}function c(a,b){return'<a href="'+a+'" target="'+(b.indexOf(p)?"_blank":"_top")+'">'+b+"</a>"}var b,a,e,p;return function(p,k){d&&d();var z=p.replace(b,g);k&&(z=z.replace(e,c).replace(a,"<br />"));return z}}();return f}({},
|
45 |
+
v,x));m.register("$37",function(f,d,h){function l(){}var g,c,b=m.require("$22","rtl.json");f.init=function(){return new l};f.cast=function(a){return a instanceof l?a:"string"===typeof a?f.parse(a):f.clone(a)};f.clone=function(a){var b,c=new l;for(b in a)c[b]=a[b];return c};f.parse=function(a){g||(c=/[-_+]/,g=/^([a-z]{2,3})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?(?:-([0-9][a-z0-9]{3,8}|[a-z0-9]{5,8}))?(?:-([a-z]-[-a-z]+))?$/i);a=String(a).split(c).join("-");if(!g.exec(a))return null;var b=new l;b.lang=
|
46 |
+
RegExp.$1.toLowerCase();if(a=RegExp.$2)b.script=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();if(a=RegExp.$3)b.region=a.toUpperCase();if(a=RegExp.$4)b.variant=a.toLowerCase();if(a=RegExp.$5)b.extension=a;return b};d=l.prototype;d.isValid=function(){return!!this.lang};d.isKnown=function(){var a=this.lang;return!(!a||"zxx"===a)};d.toString=function(a){a=a||"-";var b,c=this.lang||"zxx";if(b=this.script)c+=a+b;if(b=this.region)c+=a+b;if(b=this.variant)c+=a+b;if(b=this.extension)c+=a+b;return c};
|
47 |
+
d.getIcon=function(){for(var a=4,b,c,g=["variant","region","script","lang"],k=[];0!==a--;)if(b=g[a],c=this[b])c.join&&(c=c.join("-")),1===a&&3===c.length?k.push("region-m49"):k=k.concat([b,b+"-"+c.toLowerCase()]);return k.join(" ")};d.isRTL=function(){return!!b[String(this.script||this.lang).toLowerCase()]};d=null;return f}({},v,x));m.register("$38",function(f,d,h){function l(a){d.console&&console.error&&console.error(a)}function g(){l("Method not implemented")}function c(){}function b(a){}c.prototype.toString=
|
48 |
+
function(){return"[Undefined]"};b.prototype._validate=function(a){var b,p,n=!0;for(b in this)p=this[b],p===g?(l(a+"."+b+"() must be implemented"),n=!1):p instanceof c&&(l(a+"."+b+" must be defined"),n=!1);return n};f.init=function(a,e){var p,n=new b;if(a)for(p=a.length;0!==p--;)n[a[p]]=g;if(e)for(p=e.length;0!==p--;)n[e[p]]=new c;return n};f.validate=function(a){var b=/function (\w+)\(/.exec(a.toString())?RegExp.$1:"";a.prototype._validate(b||"Object")};return f}({},v,x));m.register("$49",function(f,
|
49 |
+
d,h){var l=d.requestAnimationFrame,g=d.cancelAnimationFrame,c=0;if(!l||!g)for(var b in{ms:1,moz:1,webkit:1,o:1})if(l=d[b+"RequestAnimationFrame"])if(g=d[b+"CancelAnimationFrame"]||d[b+"CancelRequestAnimationFrame"])break;l&&g||(l=function(b){var g=a();timeToCall=Math.max(0,16-(g-c));nextTime=g+timeToCall;timerId=d.setTimeout(function(){b(nextTime)},timeToCall);c=nextTime;return timerId},g=function(a){clearTimeout(a)});var a=Date.now||function(){return(new Date).getTime()};f.loop=function(a,b){function c(){d=
|
50 |
+
l(c,b);a(k++)}var k=0,d;c();return{stop:function(){d&&g(d);d=null}}};return f}({},v,x));m.register("$46",function(f,d,h){function l(a,c,e,k){if(b){var g=e;e=function(a){if((a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType)return g(a)}}a.addEventListener(c,e,k);return{unbind:function(){a.removeEventListener(c,e,k)}}}function g(a){a.preventDefault();a.stopPropagation();return!1}var c,b=!!d.navigator.msPointerEnabled,a=b?"MSPointerDown":"touchstart",e=b?"MSPointerMove":"touchmove",p=b?"MSPointerUp":
|
51 |
+
"touchend";f.ok=function(a){null==c&&(c="function"===typeof h.body.addEventListener);c&&a&&a(f);return c};f.ms=function(){return b};f.dragger=function(b,c){function k(a){b.addEventListener(a,d[a],!1)}function s(a){b.removeEventListener(a,d[a],!1)}var d={};d[a]=function(b){n(b,function(e,k){k.type=a;c(b,k,f)});k(e);k(p);return!0};d[p]=function(a){s(e);s(p);n(a,function(b,e){e.type=p;c(a,e,f)});return!0};d[e]=function(a){n(a,function(b,k){k.type=e;c(a,k,f)});return g(a)};k(a);var f={kill:function(){s(a);
|
52 |
+
s(e);s(p);b=f=c=null}};return f};f.swiper=function(c,d,f){function s(a){c.addEventListener(a,u[a],!1)}function B(a){c.removeEventListener(a,u[a],!1)}function r(){y&&y.stop();y=null}var y,G,C,u={},w=[],F=[],h=[];u[a]=function(a){G=!1;r();var b=k();n(a,function(a,c){w[a]=b;F[a]=c.clientX;h[a]=c.clientY});C=c.scrollLeft;return!0};u[p]=function(a){n(a,function(a,b){var c=k()-w[a],e=F[a]-b.clientX,c=Math.abs(e)/c;d(c,e?0>e?-1:1:0)});C=null;return!0};u[e]=function(a){var b,e;null==C||n(a,function(a,c){b=
|
53 |
+
F[a]-c.clientX;e=h[a]-c.clientY});if(e&&Math.abs(e)>Math.abs(b))return G=!0;b&&(G=!0,c.scrollLeft=Math.max(0,C+b));return g(a)};if(!b||f)s(a),s(e),s(p),b&&(c.className+=" mstouch");return{kill:function(){B(a);B(e);B(p);r()},swiped:function(){return G},ms:function(){return b},snap:function(a){b&&!f&&(c.style["-ms-scroll-snap-points-x"]="snapInterval(0px,"+a+"px)",c.style["-ms-scroll-snap-type"]="mandatory",c.style["-ms-scroll-chaining"]="none")},scroll:function(a,b,e){r();var w=c.scrollLeft,k=a>w?
|
54 |
+
1:-1,g=Math[1===k?"min":"max"],s=Math.round(16*b*k);return y=m.require("$49","fps.js").loop(function(b){b&&(w=Math.max(0,g(a,w+s)),c.scrollLeft=w,a===w&&(r(),e&&e(w)))},c)}}};f.start=function(b,c){return l(b,a,c,!1)};f.move=function(a,b){return l(a,e,b,!1)};f.end=function(a,b){return l(a,p,b,!1)};var n=f.each=function(a,c){if(b)(a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType&&c(0,a);else for(var e=-1,k=(a.originalEvent||a).changedTouches||[];++e<k.length;)c(e,k[e])},k=Date.now||function(){return(new Date).getTime()};
|
55 |
+
return f}({},v,x));m.register("$50",function(f,d,m){f.init=function(d){function g(){e.style.top=String(-d.scrollTop)+"px";return!0}function c(){var a=e;a.textContent=d.value;a.innerHTML=a.innerHTML.replace(/[ \t]/g,b).split(/(?:\n|\r\n?)/).join('<span class="eol crlf"></span>\r\n')+'<span class="eol eof"></span>';return!0}function b(a){return'<span class="x'+a.charCodeAt(0).toString(16)+'">'+a+"</span>"}var a=d.parentNode,e=a.insertBefore(m.createElement("div"),d);h(d).on("input",c).on("scroll",g);
|
56 |
+
h(a).addClass("has-mirror");e.className="ta-mirror";var p=d.offsetWidth-d.clientWidth;2<p&&(e.style.marginRight=String(p-2)+"px");c();g();return{kill:function(){h(d).off("input",c).off("scroll",g);a.removeChild(e);e=null;h(a).removeClass("has-mirror")}}};return f}({},v,x));m.register("$29",function(f,d,h){function l(b,a){for(var c=0,p=-1,n=a&&d[a],k=g[b]||[],f=k.length;++p<f;)callback=k[p],"function"===typeof callback&&(callback(n),c++);return c}var g={},c;f.load=function(b,a,c){function p(){f&&(clearTimeout(f),
|
57 |
+
f=null);A&&(A.onreadystatechange=null,A=A=A.onload=null);b&&(delete g[b],b=null)}function n(a,k){var g=A&&A.readyState;if(k||!g||"loaded"===g||"complete"===g)k||l(b,c),p()}function k(){if(0===l(b))throw Error('Failed to load "'+(c||b)+'"');p()}if(c&&d[c])"function"===typeof a&&a(d[c]);else if(null!=g[b])g[b].push(a);else{g[b]=[a];var f=setTimeout(k,4E3),A=h.createElement("script");A.setAttribute("src",b);A.setAttribute("async","true");A.onreadystatechange=n;A.onload=n;A.onerror=k;A.onabort=p;h.getElementsByTagName("head")[0].appendChild(A)}};
|
58 |
+
f.stat=function(b){var a;if(!(a=c)){for(var e,g,d=h.getElementsByTagName("script"),k=-1,f=d.length;++k<f;)if(a=d[k].getAttribute("src"))if(e=a.indexOf("/lib/vendor"),-1!==e){g=a.substr(0,e);break}a=c=g||"/static"}return a+b};return f}({},v,x));m.register("$16",function(f,d,E){function l(a,b){a.setReadOnly(!1);a.on("change",function(a,c){return b.val(c.getValue())});a.on("focus",function(){return b.focus()});a.on("blur",function(){return b.blur()})}function g(a){a.off("change");a.off("focus");a.off("blur")}
|
59 |
+
function c(a){g(a);a.setReadOnly(!0);a.setHighlightGutterLine(!1);a.setHighlightActiveLine(!1)}function b(b,c){function e(){this.HighlightRules=g}var g=a(c),d=b.require,p=d("ace/lib/oop");p.inherits(g,d("ace/mode/text_highlight_rules").TextHighlightRules);p.inherits(e,d("ace/mode/text").Mode);return new e}function a(a){return function(){var b={start:[{token:"empty_line",regex:/^$/},{token:"constant.language",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"constant.language",
|
60 |
+
regex:/<!\[CDATA\[/},{token:"constant.language",regex:/\]\]>/},{token:"locked",regex:/<(?:xliff:)?(?:g|ph)[^>]*>[^<]*<\/(?:xliff:)?(?:g|ph)>/},{token:"locked",regex:/<(?:xliff:)?(bx|ex|x)[^\/>]*\/>/},{token:"constant.language",regex:/<\/?[:a-z]+[^>]*>/}]},c=e(a);"icu"===a?b={start:b.start.concat([{token:"icu-quoted",regex:/'([{}][^']*)?'/},{token:"printf",regex:"{[^!-/:-@\\[-^{-~\u00a1\u00a2\u00a3\u00a4\u00a5\u00a6\u00a7\u00a9\u00ab\u00ac\u00ae\u00b0\u00b1\u00b6\u00bb\u00bf\u00d7\u00f7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]+(,[\\s\\u0085\\u200E\\u200F\\u2028\\u2029]*(?:number|date|time|spellout|ordinal|duration)[\\s\\u0085\\u200E\\u200F\\u2028\\u2029]*(,[\\s\\u0085\\u200E\\u200F\\u2028\\u2029]*[^{}]+)?)?}"},
|
61 |
{token:"icu",regex:/{/,next:"icuName"},{token:"icu",regex:/}/,next:"icuType"}]),icuName:[{token:"icu",regex:"[\\s\\u0085\\u200E\\u200F\\u2028\\u2029]+"},{token:"icu.name",regex:"[^\\s\\u0085\\u200E\\u200F\\u2028\\u2029!-/:-@\\[-^{-~\u00a1\u00a2\u00a3\u00a4\u00a5\u00a6\u00a7\u00a9\u00ab\u00ac\u00ae\u00b0\u00b1\u00b6\u00bb\u00bf\u00d7\u00f7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]+",
|
62 |
+
next:"icuType"},{defaultToken:"icu",next:"icuType"}],icuType:[{token:"icu",regex:/[{}]/,next:"start"},{defaultToken:"icu"}]}:c&&b.start.push({token:"printf",regex:c});this.$rules=b}}function e(a){switch(a){case "objc":return/%(?:\d+\$)?[-+'0# ]*\d*(?:\.\d+|\.\*(?:\d+\$)?)?(?:hh?|ll?|[qjzTL])?[sScCdDioOuUxXfFeEgGaAp%@]/;case "java":return/%(?:\d+\$)?[-+,(0# ]*\d*(?:\.\d+)?(?:[bBhHsScCdoxXeEfgGaA%n]|[tT][HIklMSLNpzZsQBbhAaCYyjmdeRTrDFc])/;case "php":return/%(?:\d+\$)?(?:'.|[-+0 ])*\d*(?:\.\d+)?[suxXbcdeEfFgGo%]/;
|
63 |
+
case "python":return/%(?:\([a-z]+\))?[-+0# ]*(?:\d+|\*)?(?:\.\d+|\.\*)?(?:[hlL])?[sdiouxXeEfFgGcra%]/;case "javascript":return/%(?:[1-9]\d*\$)?\+?(?:0|'[^$])?-?\d*(?:\.\d+)?[b-gijostTuvxX%]/;case "auto":return/%(?:\d+\$|\([a-z]+\))?(?:[-+0]?\d*(\.\d+)?[duxoefgaDUXOEFGA]|[@scSC%])/;case n:return p||"%%"}}var p,n="auto";f.init=function(a,e,p){var f,s=!1,B=p||n,r=a.parentNode,y=r.appendChild(E.createElement("div"));h(r).addClass("has-proxy has-ace");m.require("$29","remote.js").load("https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js",
|
64 |
+
function(g){if(y){if(!g)throw Error("Failed to load code editor");f=g.edit(y);var d=f.session,p=f.renderer;f.$blockScrolling=Infinity;f.setShowInvisibles(s);f.setWrapBehavioursEnabled(!1);f.setBehavioursEnabled(!1);f.setHighlightActiveLine(!1);d.setUseSoftTabs(!1);p.setShowGutter(!0);p.setPadding(10);p.setScrollMargin(8);d.setMode(b(g,B));f.setValue(a.value,-1);d.setUseWrapMode(!0);e?l(f,e):c(f)}},"ace");return{kill:function(){f&&(g(f),f.destroy(),f=null);y&&(r.removeChild(y),h(r).removeClass("has-proxy has-ace"),
|
65 |
+
y=null);return this},disable:function(){f&&c(f);e=null;return this},enable:function(a){e=a;f&&l(f,a);return this},resize:function(){f&&f.resize();return this},val:function(a){f&&a!==f.getValue()&&f.setValue(a,-1);return this},invs:function(a){a=a||!1;s!==a&&(s=a,f&&f.setShowInvisibles(a));return this},strf:function(a){a=a||n;a!==B&&(B=a,f&&f.session.setMode(b(d.ace,a)));return this},focus:function(){return this}}};f.strf=function(a,b){n=a;p=b;return f};return f}({},v,x));m.register("$51",function(f,
|
66 |
+
d,E){function l(a,b){function c(){return b.val(a.getContent())}a.on("input",c);a.on("change",c);a.on("focus",function(){return b.focus()});a.on("blur",function(){return b.blur()});a.setMode("design")}function g(a){a.off("input");a.off("change");a.off("focus");a.off("blur")}function c(a){g(a);a.setMode("readonly")}var b=0;f.load=function(a){var b=m.require("$29","remote.js");b.load(b.stat("/lib/tinymce.min.js"),a,"tinymce");return f};f.init=function(a,e){function d(a){A=a;q="<p>"===a.substr(0,3)&&
|
67 |
+
"</p>"===a.substr(-4);return a.replace(/(<\/?)script/ig,"$1loco:script")}function n(a){k=a;a._getContent=a.getContent;a.getContent=function(a){a=this._getContent(a);a=a.replace(/(<\/?)loco:script/ig,"$1script");if(!q&&"<p>"===a.substr(0,3)&&"</p>"===a.substr(-4)){var b=a.substr(3,a.length-7);if(b===A||-1===b.indexOf("</p>"))a=b}return a};a._setContent=a.setContent;a.setContent=function(a,b){return this._setContent(d(a),b)};e?(l(a,e),e.reset()):c(a);h(r).removeClass("loading")}var k,z=!1,A="",q=!1,
|
68 |
+
s=a.parentNode,B=s.parentNode,r=s.appendChild(E.createElement("div")),y=B.insertBefore(E.createElement("nav"),s);y.id="_tb"+String(++b);h(s).addClass("has-proxy has-mce");h(r).addClass("mce-content-body loading").html(d(a.value));f.load(function(a){if(!a)throw Error("Failed to load HTML editor");r&&a.init({inline:!0,target:r,hidden_input:!1,theme:"modern",skin:!1,plugins:"link lists",browser_spellcheck:!0,menubar:!1,fixed_toolbar_container:"#"+y.id,toolbar:"formatselect | bold italic link unlink | bullist numlist outdent indent",
|
69 |
block_formats:"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h4;Heading 4=h4;Heading 5=h5;Heading 6=h6;",forced_root_block:"p",relative_urls:!1,convert_urls:!1,remove_script_host:!1,document_base_url:"",allow_script_urls:!1,formats:{alignleft:{classes:"alignleft"},alignright:{selector:"p,h1,h2,h3,h4,span,strong,em,a",classes:"alignright"},aligncenter:{selector:"p,h1,h2,h3,h4,span,strong,em,a",classes:"aligncenter"},strikethrough:{inline:"del"}},fix_list_elements:!0,extended_valid_elements:"span,b,i,u,loco:script",
|
70 |
+
entities:"38,amp,60,lt,62,gt,160,nbsp",entity_encoding:"named",keep_styles:!1,init_instance_callback:n})});return{val:function(b){b=d(b);null==k?(a.value=b,h(r).html(b)):k.getContent()!==b&&k.setContent(b);e&&e.val(b);return this},kill:function(){k&&(e&&e.val(k.getContent()),g(k),k.destroy(),k=null);r&&(s.removeChild(r),h(s).removeClass("has-proxy has-mce"),r=null);y&&(B.removeChild(y),y=null);return this},enable:function(a){e=a;k&&l(k,a);return this},disable:function(){k&&c(k);e=null;return this},
|
71 |
+
focus:function(){k&&e&&k.focus();return this},invs:function(a){a=a||!1;z!==a&&(z=a,h(s)[a?"addClass":"removeClass"]("show-invs"));return this}}};return f}({},v,x));m.register("$47",function(f,d,E){function l(b){function a(){f&&(l.off("input",e),f=!1)}function e(){var a=b.value;a!==s&&(l.trigger("changing",[a,s]),s=a)}function g(){e();f&&B!==s&&l.trigger("changed",[s])}function d(){c=b;B=s;f||(l.on("input",e),f=!0);l.trigger("editFocus");q.addClass("has-focus");return!0}function k(){c===b&&(c=null);
|
72 |
+
l.trigger("editBlur");q.removeClass("has-focus");f&&(g(),a());return!0}var f=!1,l=h(b),q=h(b.parentNode),s=b.value,B;l.on("blur",k).on("focus",d);return{val:function(a){s!==a&&(b.value=a,l.triggerHandler("input"),s=a);return!0},kill:function(){a();l.off("blur",k).off("focus",d)},fire:function(){s=null;e()},ping:g,blur:k,focus:d,reset:function(){B=s=b.value}}}function g(b){this.e=b}var c;f._new=function(b){return new g(b)};f.init=function(b){var a=new g(b);b.disabled?(b.removeAttribute("disabled"),
|
73 |
+
a.disable()):b.readOnly?a.disable():a.enable();return a};TextAreaPrototype=g.prototype;TextAreaPrototype.destroy=function(){this.unlisten();var b=this.p;b&&(b.kill(),this.p=null);this.e=null};TextAreaPrototype.reload=function(b,a){var c=this.l;c&&!a&&(this.disable(),c=null);this.val(b||"");a&&!c&&this.enable();return this};TextAreaPrototype.val=function(b){var a=this.e;if(null==b)return a.value;var c=this.l,g=this.p;g&&g.val(b);c&&c.val(b);c||a.value===b||(a.value=b,h(a).triggerHandler("input"));
|
74 |
+
return this};TextAreaPrototype.fire=function(){this.l&&this.l.fire();return this};TextAreaPrototype.ping=function(){this.l&&this.l.ping();return this};TextAreaPrototype.focus=function(){var b=this.p;b?b.focus():h(this.e).focus()};TextAreaPrototype.focused=function(){return c&&c===this.el};TextAreaPrototype.parent=function(){return this.e.parentNode};TextAreaPrototype.attr=function(b,a){var c=this.e;if(1===arguments.length)return c.getAttribute(b);null==a?c.removeAttribute(b):c.setAttribute(b,a);return this};
|
75 |
+
TextAreaPrototype.editable=function(){return!!this.l};TextAreaPrototype.enable=function(){var b=this.p;this.e.removeAttribute("readonly");this.listen();b&&b.enable&&b.enable(this.l);return this};TextAreaPrototype.disable=function(){var b=this.p;this.e.setAttribute("readonly",!0);this.unlisten();b&&b.disable&&b.disable();return this};TextAreaPrototype.listen=function(){var b=this.l;b&&b.kill();this.l=l(this.e);return this};TextAreaPrototype.unlisten=function(){var b=this.l;b&&(b.kill(),this.l=null);
|
76 |
+
return this};TextAreaPrototype.setInvs=function(b,a){var c=this.i||!1;if(a||c!==b)this._i&&(this._i.kill(),delete this._i),(c=this.p)?c.invs&&c.invs(b):b&&(this._i=m.require("$50","mirror.js").init(this.e)),this.i=b;return this};TextAreaPrototype.getInvs=function(){return this.i||!1};TextAreaPrototype.setMode=function(b){var a=this.p,e=this.i||!1;b!==(this.m||"")&&(this.m=b,a&&a.kill(),this.p=a="code"===b?m.require("$16","ace.js").init(this.e,this.l,this["%"]):"html"===b?m.require("$51","mce.js").init(this.e,
|
77 |
+
this.l):null,this.setInvs(e,!0),c&&this.focus());return this};TextAreaPrototype.setStrf=function(b){this["%"]=b;"code"===this.m&&this.p.strf(b);return this};TextAreaPrototype.name=function(b){this.e.setAttribute("name",b);return this};TextAreaPrototype.placeholder=function(b){this.e.setAttribute("placeholder",b);return this};TextAreaPrototype.redraw=function(){var b=this.p;b&&b.resize&&b.resize()};TextAreaPrototype=null;return f}({},v,x));m.register("$48",function(f,d,m){function l(a){var b=d.console;
|
78 |
+
b&&b.error&&b.error(a)}function g(a){var b=m.createElement("div");a&&b.setAttribute("class",a);return b}function c(a){return function(){a.resize();return this}}function b(a){return function(b){for(var c=b.target,e=c.$index;null==e&&"DIV"!==c.nodeName&&(c=c.parentElement);)e=c.$index;null!=e&&(b.stopImmediatePropagation(),a.select(e));return!0}}function a(a){return function(){a.redrawDirty()&&a.redraw();return!0}}function e(a){return function(b){var c;c=b.keyCode;if(40===c)c=1;else if(38===c)c=-1;
|
79 |
+
else return!0;if(b.shiftKey||b.ctrlKey||b.metaKey||b.altKey)return!0;a.selectNext(c);b.stopPropagation();b.preventDefault();return!1}}function p(a,b,c){function e(a){l("row["+a+"] disappeared");return{cellVal:function(){return""}}}return function(g){var d=b||0,k=c?-1:1,w=a.rows||[];g.sort(function(a,b){return k*(w[a]||e(a)).cellVal(d).localeCompare((w[b]||e(b)).cellVal(d))})}}function n(a){this.w=a}function k(a){this.t=a;this.length=0}function z(a,b,c){var e=m.createElement("div");e.className=c||
|
80 |
+
"";this._=e;this.d=b||[];this.i=a||0;this.length=b.length}function A(a){this.live=a;this.rows=[]}f.create=function(a){return new n(a)};var q=n.prototype;q.init=function(d){var k=this.w,p=k.id,n=k.splity(p+"-thead",p+"-tbody"),f=n[0],n=n[1],C=[],u=[],w=[],F=[];if(d)this.ds=d,this.idxs=u,this._idxs=null;else if(!(d=this.ds))throw Error("No datasource");f.css.push("wg-thead");n.css.push("wg-tbody");d.eachCol(function(a,b,c){w[a]=p+"-col-"+b;F[a]=c||b});for(var N=g(),q=-1,l=w.length,m=g("wg-cols"),A=
|
81 |
+
f.splitx.apply(f,w);++q<l;)A[q].header(F[q]),m.appendChild(N.cloneNode(!1)).setAttribute("for",w[q]);d.eachRow(function(a,b,c){C[a]=new z(a,b,c);u[a]=a});this.rows=C;this.cols=m;this.ww=null;this.root=N=n.body;this.head=f;f.redraw=c(this);f=n.fixed=A[0].bodyY()||20;k.lock().resize(f,n);k.css.push("is-table");k.restyle();this.sc?this._re_sort(l):d.sort&&d.sort(u);this.redrawDirty();this.render();h(N).attr("tabindex","-1").on("keydown",e(this)).on("mousedown",b(this)).on("scroll",a(this));return this};
|
82 |
+
q.clear=function(){for(var a=this.pages||[],b=a.length;0!==b--;)a[b].destroy();this.pages=[];this.sy=this.mx=this.mn=this.vh=null;void 0;return this};q.render=function(){for(var a,b,c=[],e=this.rows||[],d=-1,g,k=this.idxs,w=k.length,p=this.idxr={},n=this.r,f=this._r,h=this.root,z=this.cols;++d<w;){0===d%100&&(a=z.cloneNode(!0),b=new A(a),b.h=2200,b.insert(h),c.push(b));g=k[d];p[g]=d;a=e[g];if(null==a)throw Error("Render error, no data at ["+g+"]");a.page=b;b.rows.push(a)}b&&100!==b.size()&&b.sleepH(22);
|
83 |
+
this.pages=c;this.mx=this.mn=null;this.redrawDirty();this.redraw();null==n?null!=f&&(a=e[f])&&a.page&&(delete this._r,this.select(f,!0)):(a=e[n])&&a.page?this.select(n,!0):(this.deselect(),this._r=n);return this};q.resize=function(){var a=-1,b=this.ww||(this.ww=[]),c=this.w,e=c.cells[0],d=e.body.childNodes,g=d.length,k=this.pages||[],w=k.length;for(c.redraw.call(e);++a<g;)b[a]=d[a].style.width;if(w){c=this.mx;for(a=this.mn;a<=c;a++)k[a].widths(b);this.redrawDirty()&&this.redraw()}};q.redrawDirty=
|
84 |
+
function(){var a=!1,b=this.root,c=b.scrollTop,b=b.clientHeight;this.sy!==c&&(a=!0,this.sy=c);this.vh!==b&&(a=!0,this.vh=b);return a};q.redraw=function(){for(var a=0,b=-1,c=null,e=null,d=this.ww,g=this.sy,k=this.vh,w=this.mn,p=this.mx,n=Math.max(0,g-100),g=k+g+100,f=this.pages||[],h=f.length;++b<h&&!(a>g);)k=f[b],a+=k.height(),a<n||(null===c&&(c=b),e=b,k.rendered||k.render(d));if(w!==c){if(null!==w&&c>w)for(b=w;b<c;b++){k=f[b];if(!k)throw Error("Shit!");k.rendered&&k.sleep()}this.mn=c}if(p!==e){if(null!==
|
85 |
+
p&&e<p)for(b=p;b>e;b--)k=f[b],k.rendered&&k.sleep();this.mx=e}};q.selected=function(){return this.r};q.thead=function(){return this.w.cells[0]};q.tbody=function(){return this.w.cells[1]};q.tr=function(a){return(a=this.row(a))?a.cells():[]};q.row=function(a){return this.rows[a]};q.td=function(a,b){return this.tr(a)[b]};q.next=function(a,b,c){null==c&&(c=this.r||0);var e=this.idxs,g=e.length,d=(this.idxr||{})[c];for(c=d;c!==(d+=a)&&!(0<=d&&g>d);)if(b&&g)d=1===a?-1:g,b=!1;else return null;c=e[d];return null==
|
86 |
+
c||null==this.rows[c]?(l("Bad next: ["+d+"] does not map to data row"),null):c};q.selectNext=function(a,b,c){a=this.next(a,b);null!=a&&this.r!==a&&this.select(a,c);return this};q.deselect=function(a){var b=this.r;null!=b&&(this.r=null,h(this.tr(b)).removeClass("selected"),this.w.fire("wgRowDeselect",[b,a]));return this};q.selectRow=function(a,b){return this.select(this.idxs[a])};q.select=function(a,b){var c=this.rows[a],e=c&&c.page;if(!e)return this.deselect(!1),l("Row is filtered out"),this;this.deselect(!0);
|
87 |
+
var d,g=this.w.cells[1];e.rendered||(d=e.top(),g.scrollY(d),this.redrawDirty()&&this.redraw());if(!c.rendered)return e.rendered||l("Failed to render page"),l("Row ["+c.i+"] not rendered"),this;e=c.cells();h(e).addClass("selected");this.r=a;b||(d=g.scrollY(),h(this.root).focus(),d!==g.scrollY()&&g.scrollY(d));g.scrollTo(e[0],!0);this.w.fire("wgRowSelect",[a,c.data()]);return this};q.unfilter=function(){this._idxs&&(this.idxs=this._sort(this._idxs),this._idxs=null,this.clear().render());return this};
|
88 |
+
q.filter=function(a){this._idxs||(this._idxs=this.idxs);this.idxs=this._sort(a);return this.clear().render()};q.each=function(a){for(var b,c=-1,e=this.rows||[],d=this.idxs||[],g=d.length;++c<g;)b=d[c],a(e[b],c,b);return this};q.sortable=function(a){var b=this.sc||(this.sc=new k(this));b.has(a)||b.add(a);return this};q._re_sort=function(a){var b=-1,c=this.sc,e=c.active;for(this.sc=c=new k(this);++b<a;)c.add(b);e&&(b=this.head.indexOf(e.id),-1===b&&(b=Math.min(e.idx,a-1)),this.sort(b,e.desc));return this};
|
89 |
+
q._sort=function(a,b){b?(this.s=b,b(a)):(b=this.s)&&b(a);return a};q.sort=function(a,b){this._sort(this.idxs,p(this,a,b));this.sc.activate(a,b);return this};q=null;q=k.prototype;q.has=function(a){return null!=this[a]};q.add=function(a){var b=this,c=b.t.head.cells[a];b[a]={desc:null,idx:a,id:c.id};b.length++;c.addClass("wg-sortable").on("click",function(c){if("header"===c.target.nodeName.toLowerCase())return c.stopImmediatePropagation(),b.toggle(a),!1});return b};q.toggle=function(a){this.t.sort(a,
|
90 |
+
!this[a].desc).clear().render();return this};q.activate=function(a,b){var c,e;c=this.active;var d=this[a],g=this.t.head.cells;c&&(e=g[c.idx])&&(e.removeClass(c.css),c!==d&&e.restyle());(e=g[a])?(d.desc=b,this.active=d,c="wg-"+(b?"desc":"asc"),e.addClass(c).restyle(),d.css=c):this.active=null;return this};q=null;q=z.prototype;q.render=function(a){var b,c=[],e=this._,d=this.length;if(e){for(this.c=c;0!==d--;)b=e.cloneNode(!1),c[d]=this.update(d,b),b.$index=this.i,a[d].appendChild(b);this._=null}else for(c=
|
91 |
+
this.c;0!==d--;)a[d].appendChild(c[d]);this.rendered=!0;return this};q.update=function(a,b){var c=b||this.c[a]||{},e=(this.d[a]||function(){})()||"\u00a0";null==e.innerHTML?c.textContent=e:c.innerHTML=e.innerHTML;return c};q.cells=function(){return this.c||[this._]};q.data=function(){for(var a=-1,b=[],c=this.length;++a<c;)b[a]=this.cellVal(a);return b};q.destroy=function(){this.page=null;this.rendered=!1};q.cellVal=function(a){a=this.d[a]()||"";return String(a.textContent||a)};q=null;q=A.prototype;
|
92 |
+
q.size=function(){return this.rows.length};q.insert=function(a){var b=this.h,c=g("wg-dead");c.style.height=String(b)+"px";a.appendChild(c);return this.dead=c};q.top=function(){return(this.rendered?this.live:this.dead).offsetTop};q.height=function(){var a=this.h;null==a&&(this.h=a=this.rendered?this.live.firstChild.offsetHeight:this.dead.offsetHight);a||l("row has zero height");return a};q.render=function(a){for(var b,c=-1,e=this.rows,d=e.length,g=this.dead,k=this.live,w=k.childNodes;++c<d;)b=e[c],
|
93 |
+
b.rendered||b.render(w);d=a.length;for(c=0;c<d;c++)w[c].style.width=a[c];g.parentNode.replaceChild(k,g);this.rendered=!0;this.h=null;return this};q.sleep=function(){var a=this.height(),b=this.live,c=this.dead;c.style.height=String(a)+"px";b.parentNode.replaceChild(c,b);this.rendered=!1;this.h=a;return this};q.sleepH=function(a){a*=this.rows.length;var b=this.dead;b&&(b.style.height=String(a)+"px");this.rendered||(this.h=a);return this};q.widths=function(a){for(var b=this.live.childNodes,c=a.length;0!==
|
94 |
+
c--;)b[c].style.width=a[c];return this};q.destroy=function(){var a=this.rendered?this.live:this.dead,b=this.rows,c=b.length;for(a.parentNode.removeChild(a);0!==c--;)b[c].destroy()};q=null;return f}({},v,x));m.register("$39",function(f,d,E){function l(a,b){var c=a.id,e=c&&s[c],d=e&&e.parent();if(!e||!d)return null;var g=d.dir===q,c=g?"X":"Y",k="page"+c,g=g?A:z,p=g(d.el),c=b["offset"+c],n=d.el,f=n.className;null==c&&(c=b[k]-g(a));c&&(p+=c);n.className=f+" is-resizing";return{done:function(){n.className=
|
95 |
+
f},move:function(a){d.resize(a[k]-p,e);return!0}}}function g(a,c){function e(){h(E).off("mousemove",d);r&&(r.done(),r=null);return!0}function d(a){r?r.move(a):e();return!0}if(r)return!0;r=l(a.target,a);if(!r)return!0;h(E).one("mouseup",e).on("mousemove",d);return b(a)}function c(a,b){var c=b.type;"touchmove"===c?r&&r.move(b):"touchstart"===c?r=l(a.target,b):"touchend"===c&&r&&(r.done(),r=null)}function b(a){a.stopPropagation();a.preventDefault();return!1}function a(a){var b=B;b&&b.redraw();a&&a.redraw();
|
96 |
+
return B=a}function e(b,c){var e=h(c).on("editFocus",function(){e.trigger("wgFocus",[a(b)])}).on("editBlur",function(){e.trigger("wgBlur",[a(null)])})}function p(a){var b=a.id,c=a.className;this.id=b;this.el=a;this.pos=this.index=0;this.css=[c||"wg-root","wg-cell"];this._cn=c;s[b]=this;this.clear()}var n=m.include("$45","html.js")||m.include("$2","html.js",!0),k=m.require("$21","dom.js"),z=k.top,A=k.left,q=1,s={},B,r=!1;f.init=function(a){var b=new p(a);b.redraw();m.require("$46","touch.js").ok(function(b){b.dragger(a,
|
97 |
+
c)});h(a).on("mousedown",g);return b};d=p.prototype;d.fire=function(a,b){var c=h.Event(a);c.cell=this;h(this.el).trigger(c,b);return this};d.each=function(a){for(var b=-1,c=this.cells,e=c.length;++b<e;)a(c[b],b);return this};d.indexOf=function(a){return(a=s[a.id||String(a)])&&a.pid===this.id?a.index:-1};d.on=function(){return this.$("on",arguments)};d.off=function(){return this.$("off",arguments)};d.find=function(a){return h(this.el).find(a)};d.$=function(a,b){h.fn[a].apply(h(this.el),b);return this};
|
98 |
+
d.addClass=function(a){this.css.push(a);return this};d.removeClass=function(a){a=this.css.indexOf(a);-1!==a&&this.css.splice(a,1);return this};d.parent=function(){return this.pid&&s[this.pid]};d.splitx=function(){return this._split(q,arguments)};d.splity=function(){return this._split(2,arguments)};d._split=function(a,b){(this.length||this.field)&&this.clear();for(var c=-1,e,d=b.length,g=1/d,n=0;++c<d;){e=k.el();this.body.appendChild(e);for(var f=e,h=b[c],z=h,q=1;s[h];)h=z+"-"+ ++q;f.id=h;e=new p(e);
|
99 |
+
e.index=c;e.pid=this.id;e._locale(this.lang,this.rtl);e.pos=n;n+=g;this.cells.push(e);this.length++}this.dir=a;this.redraw();return this.cells};d.destroy=function(){this.clear();delete s[this.id];var a=this.el;a.innerHTML="";this.body=null;a.className=this._cn||"";h(a).off();return this};d.exists=function(){return this===s[this.id]};d.clear=function(){for(var a=this.el,b=this.cells,c=this.field,e=this.body,d=this.nav,g=this.length||0;0!==g--;)delete s[b[g].destroy().id];this.cells=[];this.length=
|
100 |
+
0;d&&(a.removeChild(d),this.nav=null);e&&(c&&(n.ie()&&h(e).triggerHandler("blur"),c.destroy(),this.field=null),this.table&&(this.table=null),a===e.parentNode&&a.removeChild(e));this.body=a.appendChild(k.el("","wg-body"));this._h=null;return this};d.resize=function(a,b){if(!b&&(b=this.cells[1],!b))return;var c=b.index,e=this.cells,d=h(this.el)[this.dir===q?"width":"height"](),g=e[c+1],c=e[c-1];pad=(b.body||b.el.firstChild).offsetTop||0;max=(g?g.pos*d:d)-pad;min=c?c.pos*d:0;b.pos=Math.min(max,Math.max(min,
|
101 |
+
a))/d;this.redraw();return this};d.distribute=function(a){for(var b=-1,c=0,e,d=this.cells,g=a.length;++b<g&&(e=d[++c]);)e.pos=Math.max(0,Math.min(1,a[b]));this.redraw();return this};d.distribution=function(){for(var a=[],b=0,c=this.cells,e=c.length-1;b<e;)a[b]=c[++b].pos;return a};d.restyle=function(){var a=this.css.concat();0===this.index?a.push("first"):a.push("not-first");this.dir&&(a.push("wg-split"),2===this.dir?a.push("wg-split-y"):a.push("wg-split-x"));this.t&&a.push("has-title");this.nav&&
|
102 |
+
a.push("has-nav");this.field&&(a.push("is-field"),this.field.editable()?a.push("is-editable"):a.push("is-readonly"));a=a.join(" ");a!==this._css&&(this._css=a,this.el.className=a);return this};d.redraw=function(a){this.restyle();var b=this.el,c=this.body,e=this.field;if(c){var d,g=b.clientWidth||0,k=b.clientHeight||0,p=c.offsetTop||0,k=p>k?0:k-p;this._h!==k&&(this._h=k,c.style.height=String(k)+"px",d=e);this._w!==g&&(this._w=g,d=e);d&&d.redraw()}c=this.length;g=1;k=this.nav;for(p=2===this.dir?"height":
|
103 |
+
"width";0!==c--;)e=this.cells[c],k?d=1:(e.fixed&&(e.pos=e.fixed/h(b)[p]()),d=g-e.pos,g=e.pos),e.el.style[p]=String(100*d)+"%",e.redraw(a);return this};d.contents=function(a,b){var c=this.el,e=this.body;if(null==a)return e.innerHTML;this.length?this.clear():e&&(c.removeChild(e),e=null);e||(this.body=e=c.appendChild(k.el("",b||"wg-content")),this._h=null,(c=this.lang)&&this._locale(c,this.rtl,!0));"string"===typeof a?h(e)._html(a):a&&this.append(a);this.redraw();return this};d.textarea=function(a,b){var c=
|
104 |
+
this.field;if(c){var d=c.editable();c.reload(a,b);d!==b&&this.restyle()}else this.length&&this.clear(),d=k.el("textarea"),d.setAttribute("wrap","virtual"),d.value=a,this.contents(d),c=m.require("$47","field.js")._new(d)[b?"enable":"disable"](),e(this,d),this.field=c,this.restyle();this.lang||this.locale("en");return c};d.locale=function(a){a=m.require("$37","locale.js").cast(a);return this._locale(String(a),a.isRTL())};d._locale=function(a,b,c){var e=this.body;if(c||a!==this.lang)this.lang=a,e&&e.setAttribute("lang",
|
105 |
+
a);if(c||b!==this.rtl)this.rtl=b,e&&e.setAttribute("dir",b?"RTL":"LTR");return this};d.editable=function(){var a=this.field;if(a)return a.editable()?a:null;var b=this.cells,c=b.length,e=this.navigated();if(null!=e)return b[e].editable();for(;++e<c;){for(e=0;e<c;c++);if(a=b[e].editable())return a}};d.eachTextarea=function(a){var b=this.field;b?a(b):this.each(function(b){b.eachTextarea(a)});return this};d.append=function(a){a&&(a.nodeType?n.init(this.body.appendChild(a)):n.init(h(a).appendTo(this.body)));
|
106 |
+
return this};d.prepend=function(a){var b=this.body;if(a.nodeType){var c=b.firstChild;n.init(c?b.insertBefore(a,c):b.appendChild(a))}else n.init(h(a).prependTo(b));return this};d.before=function(a){var b=this.body;a.nodeType?n.init(this.el.insertBefore(a,b)):n.init(h(a).insertBefore(b));return this};d.header=function(a,b){if(null==a&&null==b)return this.el.getElementsByTagName("header")[0];this.t=k.txt(a||"");this.el.insertBefore(k.el("header",b),this.body).appendChild(this.t);this.redraw();return this};
|
107 |
+
d.title=function(a){var b=this.t;if(b)return b.nodeValue=a||"",b;this.header(a);return this.t};d.titled=function(){var a=this.t;return a&&a.nodeValue};d.bodyY=function(){return z(this.body,this.el)};d.scrollY=function(a){if(J===a)return this.body.scrollTop;this.body.scrollTop=a};d.tabulate=function(a){var b=this.table;b?b.clear():b=m.require("$48","wgtable.js").create(this);b.init(a);return this.table=b};d.lock=function(){this.body.className+=" locked";return this};d.scrollTo=function(a,b){var c,
|
108 |
+
e=this.body;c=e.scrollTop;var d=z(a,e);if(c>d)c=d;else{var g=e.clientHeight,d=d+h(a).outerHeight();if(g+c<d)c=d-g;else return}b?e.scrollTop=c:h(e).stop(!0).animate({scrollTop:c},250)};d.navigize=function(a,c){function e(a){var b=g[a],c=f[a],d=h(b.el).show();c.addClass("active");n=a;z.data("idx",a);b.fire("wgTabSelect",[a]);return d}var d=this,g=d.cells,p=d.nav,n,f=[];p&&d.el.removeChild(p);var p=d.nav=d.el.insertBefore(k.el("nav","wg-tabs"),d.body),z=h(p).on("click",function(a){var c=h(a.target).data("idx");
|
109 |
+
if(null==c)return!0;if(null!=n){var k=f[n];h(g[n].el).hide();k.removeClass("active")}e(c);d.redraw();return b(a)});null==c&&(c=z.data("idx")||0);d.each(function(b,c){f[c]=h('<a href="#'+b.id+'"></a>').data("idx",c).text(a[c]).appendTo(z);b.pos=0;h(b.el).hide()});e(g[c]?c:0);d.lock();d.redraw();return d};d.navigated=function(){var a=this.nav;if(a)return h(a).data("idx")};d=null;return f}({},v,x));m.register("$24",function(f,d,E){function l(a){var b=[];a&&(a.saved()||b.push("po-unsaved"),a.fuzzy()?
|
110 |
+
b.push("po-fuzzy"):a.flagged()&&b.push("po-flagged"),a.translation()||b.push("po-empty"),a.comment()&&b.push("po-comment"));return b.join(" ")}function g(a,b,c){b=h(a.title(b).parentNode);var e=b.find("span.lang");c?(c=m.require("$37","locale.js").cast(c),e.length||(e=h("<span></span>").prependTo(b)),e.attr("lang",c.lang).attr("class",c.getIcon()||"lang region region-"+(c.region||"zz").toLowerCase())):(e.remove(),c="en");a.locale(c);return b}function c(a,b,c){b.on("click",function(b){var e=a.fire(c,
|
111 |
+
[b.target]);e||b.preventDefault();return e})}function b(){this.dirty=0}m.require("$3","number.js");var a="poUpdate",e="changing",p="changed",n=0,k=1,z=2,A=3,q=4,s=5,B,r,y=m.require("$36","string.js").html,v=m.require("$6","string.js").sprintf;f.extend=function(a){return a.prototype=new b};f.localise=function(a){r=a;return f};var C=function(){var a=E.createElement("p");return function(b){a.innerHTML=b.replace("src=","x=");return a.textContent.trim()||b.trim()}}(),u=b.prototype=m.require("$38","abstract.js").init(["getListColumns",
|
112 |
+
"getListHeadings","getListEntry"],["editable","t"]);u.init=function(){this.localise();this.editable={source:!0,target:!0};this.mode="";this.html=!1;return this};u.localise=function(a){a||(a=r||m.require("$1","t.js").init());var b=[];b[n]=a._x("Source text","Editor")+":";b[A]=a._x("%s translation","Editor")+":";b[q]=a._x("Context","Editor")+":";b[s]=a._x("Comments","Editor")+":";b[k]=a._x("Single","Editor")+":";b[z]=a._x("Plural","Editor")+":";b[6]=a._x("Untranslated","Editor");b[7]=a._x("Translated",
|
113 |
+
"Editor");b[8]=a._x("Toggle Fuzzy","Editor");b[9]=a._x("Suggest translation","Editor");this.labels=b;this.t=a;return this};u.setRootCell=function(a){function b(a){c.redraw(!0,a);return!0}var c=m.require("$39","wingrid.js").init(a);h(d).on("resize",b);this.redraw=b;h(a).on("wgFocus wgBlur",function(a,b){a.stopPropagation();B=b});this.destroy=function(){c.destroy();h(d).off("resize",b)};this.rootDiv=a;return c};u.$=function(){return h(this.rootDiv)};u.setListCell=function(a){var b=this;b.listCell=a;
|
114 |
+
a.on("wgRowSelect",function(a,c){b.loadMessage(b.po.row(c));return!0}).on("wgRowDeselect",function(a,c,e){e||b.loadNothing();return!0})};u.setSourceCell=function(a){this.sourceCell=a};u.setTargetCell=function(a){this.targetCell=a};u.next=function(a,b,c){for(var e=this.listTable,d=e.selected(),g=d,k,p=this.po;null!=(d=e.next(a,c,d));){if(g===d){d=null;break}if(b&&(k=p.row(d),k.translated(0)))continue;break}null!=d&&e.select(d,!0);return d};u.current=function(a){var b=this.active;if(null==a)return b;
|
115 |
+
a?a.is(b)?this.reloadMessage(a):this.loadMessage(a):this.unloadActive();return this};u.getTargetOffset=function(){if(this.active)return this.targetCell&&this.targetCell.navigated()||0};u.getTargetEditable=function(){return this.editable.target&&this.targetCell&&this.targetCell.editable()};u.getSourceEditable=function(){return this.editable.source&&this.sourceCell&&this.sourceCell.editable()};u.getContextEditable=function(){return this.editable.context&&this.contextCell&&this.contextCell.editable()};
|
116 |
+
u.getFirstEditable=function(){return this.getTargetEditable()||this.getSourceEditable()||this.getContextEditable()};u.searchable=function(a){a&&(this.dict=a,this.po&&this.rebuildSearch());return this.dict&&!0};u.rebuildSearch=function(){var a=-1,b=this.po.rows,c=b.length,e=this.dict;for(e.clear();++a<c;)e.add(a,b[a].toText())};u.filtered=function(){return this.lastSearch||""};u.filter=function(a,b){var c,e=this.listTable,d=this.lastFound,g=this.lastSearch;if(a){if(g===a)return d||0;if(g&&!d&&0===
|
117 |
+
a.indexOf(g))return 0;c=this.dict.find(a)}this.lastSearch=g=a;this.lastFound=d=c?c.length:this.po.length;c?e.filter(c):e.unfilter();b||this.fire("poFilter",[g,d]);return d};u.countFiltered=function(){return this.lastSearch?this.lastFound:this.po.length};u.unsave=function(a,b){var c=!1;if(a){if(c=a.saved(b))this.dirty++,a.unsave(b),this.fire("poUnsaved",[a,b]);this.markUnsaved(a)}return c};u.markUnsaved=function(a){var b=this.po.indexOf(a);if((b=this.listTable.tr(b))&&b.length){var c=b[0].className;
|
118 |
+
a=c.replace(/(?:^| +)po-[a-z]+/g,"")+" "+l(a);a!==c&&h(b).attr("class",a)}};u.save=function(a){var b=this.po;if(this.dirty||a)b.each(function(a,b){b.save()}),this.listCell.find("div.po-unsaved").removeClass("po-unsaved"),this.dirty=0,this.fire("poSave");return b};u.fire=function(a,b){var c=this.handle;if(c&&c[a]&&(c=c[a].apply(this,b||[]),!1===c))return!1;c=h.Event(a);this.$().trigger(c,b);return!c.isDefaultPrevented()};u.on=function(a,b){this.$().on(a,b);return this};u.getSorter=function(){return null};
|
119 |
+
u.reload=function(){var a=this,b,c=a.listCell,e=a.listTable,d=a.po,g=d&&d.locale(),k=g&&g.isRTL(),p=d&&d.length||0;if(!d||!d.row)return c&&c.clear().header("Error").contents("Invalid messages list"),!1;a.targetLocale=g;a.lastSearch&&(a.lastSearch="",a.lastFound=p,a.fire("poFilter",["",p]));e&&(b=e.thead().distribution());a.listTable=e=c.tabulate({eachCol:function(b){var c,e,d=a.getListColumns(),g=a.getListHeadings();for(e in d)c=d[e],b(c,e,g[c])},eachRow:function(b){d.each(function(c,e){b(e.idx,a.getListEntry(e),
|
120 |
+
l(e))})},sort:a.getSorter()});var n,c=a.getListColumns();for(n in c)e.sortable(c[n]);b&&e.thead().distribute(b);e.tbody().$(k?"addClass":"removeClass",["is-rtl"]);a.fire("poLoad");return!!p};u.load=function(a,b){this.po=a;this.dict&&this.rebuildSearch();this.reload()&&(-1!==b?this.listTable.selectRow(b||0):this.active&&this.unloadActive())};u.pasteMessage=function(a){var b,c=0;this.active===a&&((b=this.sourceCell)&&b.eachTextarea(function(b){b.val(a.source(null,c++))}),(b=this.contextCell)&&b.eachTextarea(function(b){b.val(a.context())}),
|
121 |
+
b=this.targetCell)&&(c=0,b.eachTextarea(function(b){b.val(a.translation(c++))}));this.updateListCell(a,"source");this.updateListCell(a,"target");return this};u.reloadMessage=function(a){var b=this.sourceCell,c=this.targetCell,e;this.pasteMessage(a);b&&this.setSrcMeta(a,b)&&b.redraw();c&&(e=c.navigated()||0,e=this.setTrgMeta(a,e,c),!b&&this.setSrcMeta(a,c)&&(e=!0),e&&c.redraw());return this};u.setStatus=function(){return null};u.setSrcMeta=function(a,b){var e=[],d,g=!1,k=this.$smeta,p=this.labels,
|
122 |
+
n=[],f=a.tags(),z=f&&f.length;if(d=a.context())n.push("<span>"+y(p[q])+"</span>"),n.push("<mark>"+y(d)+"</mark>");if(z&&this.getTag)for(n.push("<span>Tagged:</span>");0<=--z;)(d=this.getTag(f[z]))&&n.push('<mark class="tag">'+y(d.mod_name)+"</mark>");n.length&&e.push(n.join(" "));if(this.getMono()&&(d=a.refs())&&(f=d.split(/\s/),z=f.length)){for(n=[];0<=--z;)d=f[z],n.push("<code>"+y(d)+"</code>");e.push('<p class="has-icon icon-file">'+n.join(" ")+"</p>")}(d=a.notes())&&e.push('<p class="has-icon icon-info">'+
|
123 |
+
y(d,!0)+"</p>");e.length?(k||(k=b.find("div.meta"),k.length||(k=h('<div class="meta"></div>').insertAfter(b.header())),c(this,k,"poMeta"),this.$smeta=k),k.html(e.join("\n")).show(),g=!0):k&&k.text()&&(k.text("").hide(),g=!0);return g};u.setTrgMeta=function(a,b,c){var e=[],d=!1,g=this.$tmeta;b=(a=a.errors(b))&&a.length;var k;if(b)for(k=0;k<b;k++)e.push('<p class="has-icon icon-warn">'+y(a[k],!0)+".</p>");e.length?(g||(g=c.find("div.meta"),g.length||(g=h('<div class="meta"></div>').insertAfter(c.header())),
|
124 |
+
this.$tmeta=g),g.html(e.join("\n")).show(),d=!0):g&&g.text()&&(g.text("").hide(),d=!0);return d};u.loadMessage=function(b){function c(a,b){var e=b?a.split(" "):a.split(" ",1);a=e[0];"="===a.charAt(0)&&(a=a.substr(1),a=["zero","one","two"][Number(a)]||a);e[0]=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();return e.join(" ")}function d(a,e){var p=J,h=L[n];a.off();a.titled()!==h&&g(a,h,e||"en");h=!1;r.setSrcMeta(b,a)&&(h=!0);if(b.plural()){var h=-1,q=[],l=[],s=a.id+"-",m=b.sourceForms()||e&&e.plurals||
|
125 |
+
["One","Other"],A=m.length;if(2!==A||"="===m[0].charAt(0)&&"=1"!==m[0])for(;++h<A;)q[h]=s+String(h),l[h]=c(m[h])+":";else q=[s+"-0",s+"-1"],l=[L[k],L[z]];a.splity.apply(a,q);a.each(function(a,c){a.header(l[c]).textarea(b.source(null,c),p).setStrf(D).setMode(y).setInvs(C)});a.lock();p&&a.each(function(a,b){f(a,b)})}else h&&a.redraw(),a.textarea(b.source(),p).setStrf(D).setMode(y).setInvs(C),p&&f(a,0)}function f(c,d){c.on(e,function(a,c){b.source(c,d);0===d&&r.updateListCell(b,"source");r.unsave(b,
|
126 |
+
d)}).on(p,function(){0===d&&r.po.reIndex(b);r.dict&&r.rebuildSearch();r.fire(a,[b])})}function h(a,e,d){M&&a.eachTextarea(function(a){a.ping()});a.off();var k=e.isKnown()&&e.label||"Target",k=v(L[A],k);a.titled()!==k&&g(a,k,e);k=!1;!this.sourceCell&&r.setSrcMeta(b,a)&&(k=!0);r.setTrgMeta(b,d,a)&&(k=!0);r.setStatus(b,d);if(b.pluralized()){var p=[],n=[],f=a.id+"-",z=b.targetForms()||e.plurals||["One","Other"],k=z.length,q=function(a){var b=z[a];n.push(b?c(b,!0):"Form "+a);p.push(f+String(a))};for(b.each(q);(e=
|
127 |
+
p.length)<k;)q(e);a.splitx.apply(a,p);a.each(function(a,c){var e=M&&!b.disabled(c);a.textarea(b.translation(c),e).setStrf(D).setMode(y).setInvs(C);M&&l(a,c)});a.navigize(n,d||null).on("wgTabSelect",function(c,e){var d=M&&c.cell.editable();d&&d.focus();r.setTrgMeta(b,e,a);r.setStatus(b,e);r.fire("poTab",[e])})}else k&&a.redraw(),a.textarea(b.translation(),M&&!b.disabled(0)).setStrf(D).setMode(y).setInvs(C),M&&l(a,0)}function l(c,d){c.on(e,function(a,c,e){b.translate(c,d);0===d&&r.updateListCell(b,
|
128 |
+
"target");b.fuzzy(d)?r.fuzzy(!1,b,d):r.unsave(b,d);""===c?(r.fire("poEmpty",[!0,b,d]),r.setStatus(b,d)):""===e&&(r.fire("poEmpty",[!1,b,d]),r.setStatus(b,d))}).on(p,function(){r.dict&&r.rebuildSearch();r.fire(a,[b])})}function m(c){c.off();var d=L[q];c.titled()!==d&&(g(c,d),r.setStatus(null));c.textarea(b.context(),!0).setMode(y).setInvs(C);X&&c.on(e,function(a,c){b.context(c);r.updateListCell(b,"source");r.unsave(b,O)}).on(p,function(){r.po.reIndex(b);r.dict&&r.rebuildSearch();r.fire(a,[b])})}function u(a){var c=
|
129 |
+
L[s];a.titled()!==c&&g(a,c);a.off().on(e,function(a,c){b.comment(c);r.fire("poComment",[b,c]);r.unsave(b,O)}).textarea(b.comment(),!0)}var r=this,y=r.mode,E=b.isHTML(),C=r.inv||!1,x=this.fmt||null,D=b.format()||null,I=b.is(r.active),O=0,T=r.sourceCell,S=r.targetCell,U=r.contextCell,V=r.commentCell,M=r.editable.target,J=r.editable.source,X=r.editable.context,P=B,Y=r.sourceLocale,W=r.targetLocale,L=r.labels;r.html!==E&&(r.html=E,"code"!==r.mode&&(y=E?"html":"",r.setMode(y)));r.active=b;T&&d(T,Y);U&&
|
130 |
+
m(U);S&&W&&(O=S.navigated()||0,h(S,W,O));V&&u(V);P&&(P.exists()||(P=P.parent()),(E=P.editable())&&E.focus());x!==D&&(this.fmt=D);I||r.fire("poSelected",[b,O])};u.unloadActive=function(){function a(b){b&&b.text("").hide()}function b(a){a&&a.off().clear()}a(this.$smeta);a(this.$tmeta);b(this.sourceCell);b(this.contextCell);b(this.targetCell);this.commentCell&&this.commentCell.off();this.active&&(this.fire("poDeselected",[this.active]),this.active=null);return this};u.loadNothing=function(){var a,b=
|
131 |
+
this.t,c=this.mode||"",e=this.inv||!1,d=this.fmt;this.unloadActive();this.setStatus(null);(a=this.commentCell)&&a.textarea("",!1);if(a=this.sourceCell)a.textarea("",!1).setStrf(d).setMode(c).setInvs(e),a.title(b._x("Source text not loaded","Editor")+":");if(a=this.contextCell)a.textarea("",!1).setMode(c).setInvs(e),a.title(b._x("Context not loaded","Editor")+":");if(a=this.targetCell)a.textarea("",!1).setStrf(d).setMode(c).setInvs(e),a.title(b._x("Translation not loaded","Editor")+":");this.fire("poSelected",
|
132 |
+
[null])};u.updateListCell=function(a,b){var c=this.getListColumns()[b],e=this.po.indexOf(a);(e=this.listTable.row(e))&&e.rendered&&e.update(c)};u.cellText=function(a){return(a=-1!==a.indexOf("<")||-1!==a.indexOf("&")?C(a):a.trim())||"\u00a0"};u.fuzzy=function(a,b,c){b=b||this.active;var e=b.fuzzy(c);!0!==a||e?!1===a&&e&&this.flag(0,b,c)&&this.fire("poFuzzy",[b,!1,c]):this.flag(4,b,c)&&this.fire("poFuzzy",[b,!0,c]);return e};u.flag=function(b,c,e){if(!c){c=this.active;e=this.getTargetOffset();if(null==
|
133 |
+
e)return null;e&&c.targetForms()&&(e=0)}var d=c.flagged(e);if(null==b)return d;if(d===b||b&&!c.translated(e)||!this.fire("poFlag",[b,d,c,e]))return!1;c.flag(b,e);this.fire(a,[c])&&this.unsave(c,e);this.setStatus(c,e);return!0};u.add=function(b,c){var e,d=this.po.get(b,c);d?e=this.po.indexOf(d):(e=this.po.length,d=this.po.add(b,c),this.load(this.po,-1),this.fire("poAdd",[d]),this.fire(a,[d]));this.lastSearch&&this.filter("");this.listTable.select(e);return d};u.del=function(b){if(b=b||this.active){var c=
|
134 |
+
this.lastSearch,e=this.po.del(b);null!=e&&(this.unsave(b),this.fire("poDel",[b]),this.fire(a,[b]),this.reload(),this.dict&&this.rebuildSearch(),this.active&&this.active.equals(b)&&this.unloadActive(),this.po.length&&(c&&this.filter(c),this.active||(e=Math.min(e,this.po.length-1),this.listTable.select(e))))}};u.setMono=function(a){return this.setMode(a?"code":this.html?"html":"")};u.setMode=function(a){if(this.mode!==a){this.mode=a;this.callTextareas(function(b){b.setMode(a)});var b=this.active,c=
|
135 |
+
this.sourceCell;b&&b.refs()&&c&&this.setSrcMeta(b,c)&&c.redraw()}return this};u.getMono=function(){return"code"===this.mode};u.setInvs=function(a){(this.inv||!1)!==a&&(this.inv=a,this.callTextareas(function(b){b.setInvs(a)}),this.fire("poInvs",[a]));return this};u.getInvs=function(){return this.inv||!1};u.callTextareas=function(a){var b=this.targetCell;b&&b.eachTextarea(a);(b=this.contextCell)&&b.eachTextarea(a);(b=this.sourceCell)&&b.eachTextarea(a);return this};u.focus=function(){var a=this.getTargetEditable();
|
136 |
+
a&&a.focus();return this};u=null;return f}({},v,x));m.register("$13",function(f,d,E){function l(){this.init()._validate();this.sourceLocale={lang:"en",label:"English",plurals:["One","Other"]}}function g(a){a=h('<button type="button" class="button button-small icon icon-'+a+' hastip"></button>');m.require("$12","tooltip.js").init(a);return a}function c(a){return g("cloud").attr("title",a.labels[8]+" (Ctrl-U)").on("click",function(b){b.preventDefault();a.focus().fuzzy(!a.fuzzy())})}function b(a){return g("robot").attr("title",
|
137 |
+
a.labels[9]+" (Ctrl-J)").on("click",function(b){b.preventDefault();a.fire("poHint")})}d=m.require("$24","base.js");f.init=function(a){var b=new l;a=b.setRootCell(a);var c=a.splity("po-list","po-edit"),d=c[0],g=c[1],c=g.splitx("po-trans","po-comment"),f=c[0],h=c[1].header("Loading.."),c=f.splity("po-source","po-target"),f=c[0].header("Loading.."),c=c[1].header("Loading..");a.distribute([0.34]);g.distribute([0.8]);b.setListCell(d);b.setSourceCell(f);b.setTargetCell(c);b.commentCell=h;b.editable.source=
|
138 |
+
!1;return b};d=l.prototype=d.extend(l);d.getListHeadings=function(){var a=this.t||{_x:function(a){return a}},b=[a._x("Source text","Editor")];this.targetLocale&&(b[1]=a._x("Translation","Editor"));return b};d.getListColumns=function(){var a={source:0};this.targetLocale&&(a.target=1);return a};d.getListEntry=function(a){var b=this.cellText,c=[function(){var c,d=b(a.source()||""),g=a.context();return g?(c=E.createElement("p"),c.appendChild(E.createElement("mark")).innerText=g,c.appendChild(E.createTextNode("\u00a0"+
|
139 |
+
d)),c):d}];this.targetLocale&&(c[1]=function(){return b(a.translation()||"")});return c};d.stats=function(){var a=this.po,b=a.length,c=0,d=0,g=0;a.each(function(a,b){b.fuzzy()?g++:b.translated()?c++:d++});return{t:b,p:c.percent(b)+"%",f:g,u:d}};d.unlock=function(){var a=this.targetLocale;this._unlocked||(this.editable={source:!0,context:!0,target:!1},this.po&&this.po.unlock(),this.contextCell=this.targetCell,delete this.targetCell,a&&(this._unlocked=a,delete this.targetLocale,this.reload(),this.fire("poLock",
|
140 |
+
[!1])),this.active&&this.loadMessage(this.active))};d.lock=function(){var a=this._unlocked;a&&(this.targetLocale=a,delete this._unlocked,this.po&&this.po.lock(a),this.editable={source:!1,context:!1,target:!0},this.targetCell=this.contextCell,delete this.contextCell,this.reload(),this.fire("poLock",[!0,a]),this.active&&this.loadMessage(this.active))};d.locked=function(){return!this._unlocked};d.setStatus=function(a){var e=this.$tnav;if(null==a)e&&(e.remove(),this.$tnav=null);else{e||(this.$tnav=e=
|
141 |
+
h("<nav></nav>").append(c(this)).append(b(this)).appendTo(this.targetCell.header()));var d=[];a.translated()?a.fuzzy()&&d.push("po-fuzzy"):d.push("po-empty");e.attr("class",d.join(" "))}};d.getSorter=function(){function a(a,c){var d=a.weight(),g=c.weight();return d===g?b(a,c):d>g?-1:1}function b(a,c){return a.hash().localeCompare(c.hash())}var c=this;return function(d){var g=c.po,f=c.locked()?a:b;d.sort(function(a,b){return f(g.row(a),g.row(b))})}};return f}({},v,x));m.register("$14",function(f,d,
|
142 |
+
m){var l={copy:66,clear:75,save:83,fuzzy:85,next:40,prev:38,enter:13,invis:73,hint:74},g={38:!0,40:!0,73:!0},c={66:function(b,a){var c=a.current();c&&(c.normalize(),a.focus().pasteMessage(c))},75:function(b,a){var c=a.current();c&&(c.untranslate(),a.focus().pasteMessage(c))},85:function(b,a){a.focus().fuzzy(!a.fuzzy())},13:function(b,a){a.getFirstEditable()&&a.next(1,!0,!0)},40:function(b,a){var c=b.shiftKey;a.next(1,c,c)},38:function(b,a){var c=b.shiftKey;a.next(-1,c,c)},73:function(b,a){if(!b.shiftKey)return!1;
|
143 |
+
a.setInvs(!a.getInvs())}};f.init=function(b,a){function e(a){if(a.isDefaultPrevented()||!a.metaKey&&!a.ctrlKey)return!0;var e=a.which;if(!f[e])return!0;var d=c[e];if(!d)throw Error("command undefined #"+e);if(a.altKey||a.shiftKey&&!g[e]||!1===d(a,b))return!0;a.stopPropagation();a.preventDefault();return!1}var f={};h(a||d).on("keydown",e);return{add:function(a,b){c[l[a]]=b;return this},enable:function(){var a,b;for(b in arguments)a=l[arguments[b]],f[a]=!0;return this},disable:function(){h(a||d).off("keydown",
|
144 |
+
e);b=a=f=null}}};return f}({},v,x));m.register("$25",function(f,d,h){function l(){this.reIndex([])}f.init=function(){return new l};d=l.prototype;d.reIndex=function(d){for(var c={},b=-1,a=d.length;++b<a;)c[d[b]]=b;this.keys=d;this.length=b;this.ords=c};d.key=function(d,c){if(null==c)return this.keys[d];var b=this.keys[d],a=this.ords[c];if(c!==b){if(null!=a)throw Error("Clash with item at ["+a+"]");this.keys[d]=c;delete this.ords[b];this.ords[c]=d}return d};d.indexOf=function(d){d=this.ords[d];return null==
|
145 |
+
d?-1:d};d.add=function(d,c){var b=this.ords[d];null==b&&(this.keys[this.length]=d,b=this.ords[d]=this.length++);this[b]=c;return b};d.get=function(d){return this[this.ords[d]]};d.has=function(d){return null!=this.ords[d]};d.del=function(d){this.cut(this.ords[d],1)};d.cut=function(d,c){c=c||1;var b=[].splice.call(this,d,c);this.keys.splice(d,c);this.reIndex(this.keys);return b};d.each=function(d){for(var c=-1,b=this.keys,a=this.length;++c<a;)d(b[c],this[c],c);return this};d.sort=function(d){for(var c=
|
146 |
+
-1,b=this.length,a,e=this.keys,f=this.ords,n=[];++c<b;)n[c]=[this[c],e[c]];n.sort(function(a,b){return d(a[0],b[0])});for(c=0;c<b;c++)a=n[c],this[c]=a[0],a=a[1],e[c]=a,f[a]=c;return this};d.join=function(d){return[].join.call(this,d)};d=null;return f}({},v,x));m.register("$26",function(f,d,h){function l(d,c){var b=RegExp("^.{0,"+(d-1)+"}["+c+"]"),a=RegExp("^[^"+c+"]+");return function(c,f){for(var n=c.length,k;n>d;){k=b.exec(c)||a.exec(c);if(null==k)break;k=k[0];f.push(k);k=k.length;n-=k;c=c.substr(k)}0!==
|
147 |
+
n&&f.push(c);return f}}f.create=function(d){function c(a){return k[a]||"\\"+a}var b,a,e=/(?:\r\n|[\r\n\v\f\u2028\u2029])/g,f=/[ \r\n]+/g,n=/[\t\v\f\x07\x08\\\"]/g,k={"\t":"\\t","\v":"\\v","\f":"\\f","\u0007":"\\a","\b":"\\b"};if(null==d||isNaN(d=Number(d)))d=79;0<d&&(b=l(d-3," "),a=l(d-2,"-\u2013 \\.,:;\\?!\\)\\]\\}\\>"));return{pair:function(b,k){if(!k)return b+' ""';k=k.replace(n,c);var f=0;k=k.replace(e,function(){f++;return"\\n\n"});if(!(f||d&&d<k.length+b.length+3))return b+' "'+k+'"';var p=
|
148 |
+
[b+' "'],h=k.split("\n");if(a)for(var l=-1,m=h.length;++l<m;)a(h[l],p);else p=p.concat(h);return p.join('"\n"')+'"'},prefix:function(a,b){var c=a.split(e);return b+c.join("\n"+b)},refs:function(a){a=a.replace(f," ",a);b&&(a=b(a,[]).join("\n#: "));return"#: "+a}}};return f}({},v,x));m.register("$40",function(f,d,h){function l(){this.length=0}f.init=function(){return new l};d=l.prototype;d.push=function(d){this[this.length++]=d;return this};d.sort=function(d){[].sort.call(this,d);return this};d.each=
|
149 |
+
function(d){for(var c=-1,b=this.length;++c<b;)d(c,this[c]);return this};return f}({},v,x));m.register("$27",function(f,d,h){function l(){}f.extend=function(d){return d.prototype=new l};d=l.prototype=m.require("$38","abstract.js").init(["add","load"]);d.row=function(d){return this.rows[d]};d.lock=function(d){return this.locale(d||{lang:"zxx",label:"Unknown",nplurals:1,pluraleq:"n!=1"})};d.unlock=function(){var d=this.loc;this.loc=null;return d};d.locale=function(d){null==d?d=this.loc:this.loc=d=m.require("$37",
|
150 |
+
"locale.js").cast(d);return d};d.each=function(d){this.rows.each(d);return this};d.indexOf=function(d){"object"!==typeof d&&(d=this.get(d));if(!d)return-1;null==d.idx&&(d.idx=this.rows.indexOf(d.hash()));return d.idx};d.get=function(d){return this.rows&&this.rows.get(d)};d.has=function(d){return this.rows&&this.rows.has(d)};d.del=function(d){d=this.indexOf(d);if(-1!==d){var c=this.rows.cut(d,1);if(c&&c.length)return this.length=this.rows.length,this.rows.each(function(b,a,c){a.idx=c}),d}};d.reIndex=
|
151 |
+
function(d,c){var b=this.indexOf(d),a=d.hash(),e=this.rows.indexOf(a);return e===b?b:-1!==e?(c=(c||0)+1,d.source("Error, duplicate "+String(c)+": "+d.source()),this.reIndex(d,c)):this.rows.key(b,a)};d.sort=function(d){this.rows.sort(d);return this};d["export"]=function(){for(var d=-1,c=this.rows,b=c.length,a=m.require("$40","list.js").init();++d<b;)a.push(c[d]);return a};d=null;return f}({},v,x));m.register("$28",function(f,d,h){function l(c,b,a){if(null==a)return c[b]||"";c[b]=a||"";return c}function g(){this._id=
|
152 |
+
this.id=""}f.extend=function(c){return c.prototype=new g};d=g.prototype;d.flag=function(c,b){var a=this.flg||(this.flg=[]);if(null!=b)a[b]=c;else for(var d=Math.max(a.length,this.src.length,this.msg.length);0!==d--;)a[d]=c;return this};d.flagged=function(c){var b=this.flg||[];if(null!=c)return b[c]||0;for(c=b.length;0!==c--;)if(b[c])return!0;return!1};d.flags=function(){for(var c,b={},a=[],d=this.flg||[],g=d.length;0!==g--;)c=d[g],b[c]||(b[c]=!0,a.push(c));return a};d.flaggedAs=function(c,b){var a=
|
153 |
+
this.flg||[];if(null!=b)return c===a[b]||0;for(var d=a.length;0!==d--;)if(a[d]===c)return!0;return!1};d.fuzzy=function(c,b){var a=this.flaggedAs(4,c);null!=b&&this.flag(b?4:0,c);return a};d.source=function(c,b){if(null==c)return this.src[b||0]||"";this.src[b||0]=c;return this};d.plural=function(c,b){if(null==c)return this.src[b||1]||"";this.src[b||1]=c||"";return this};d.sourceForms=function(){return this.srcF};d.targetForms=function(){return this.msgF};d.each=function(c){for(var b=-1,a=this.src,
|
154 |
+
d=this.msg,g=Math.max(a.length,d.length);++b<g;)c(b,a[b],d[b]);return this};d.count=function(){return Math.max(this.src.length,this.msg.length)};d.pluralized=function(){return 1<this.src.length||1<this.msg.length};d.translate=function(c,b){this.msg[b||0]=c||"";return this};d.untranslate=function(c){if(null!=c)this.msg[c]="";else{var b=this.msg,a=b.length;for(c=0;c<a;c++)b[c]=""}return this};d.translation=function(c){return this.msg[c||0]||""};d.errors=function(c){return this.err&&this.err[c||0]||
|
155 |
+
[]};d.translated=function(c){if(null!=c)return!!this.msg[c];var b=this.msg,a=b.length;for(c=0;c<a;c++)if(!b[c])return!1;return!0};d.untranslated=function(c){if(null!=c)return!this.msg[c];var b=this.msg,a=b.length;for(c=0;c<a;c++)if(b[c])return!1;return!0};d.comment=function(c){return l(this,"cmt",c)};d.notes=function(c){return l(this,"xcmt",c)};d.refs=function(c){return l(this,"rf",c)};d.format=function(c){return l(this,"fmt",c)};d.context=function(c){return l(this,"ctx",c)};d.tags=function(){return this.tg};
|
156 |
+
d.toString=d.toText=function(){return this.src.concat(this.msg,this.id,this.ctx).join(" ")};d.weight=function(){var c=0;this.translation()||(c+=2);this.fuzzy()&&(c+=1);return c};d.equals=function(c){return this===c||this.hash()===c.hash()};d.hash=function(){return this.id};d.normalize=function(){for(var c=this.msg.length;0!==c--;)this.msg[c]=this.src[c]||""};d.disabled=function(c){return!!(this.lck||[])[c||0]};d.disable=function(c){(this.lck||(this.lck=[]))[c||0]=!0;return this};d.saved=function(c){var b=
|
157 |
+
this.drt;if(null==b)return!0;if(null!=c)return!b[c];for(c=b.length;0!==c--;)if(b[c])return!1;return!0};d.unsave=function(c){(this.drt||(this.drt=[]))[c||0]=!0;return this};d.save=function(c){null==c?this.drt=null:(this.drt||(this.drt=[]))[c]=!1;return this};d.is=function(c){return c&&(c===this||c.idx===this.idx)};d.isHTML=function(c){if(null==c)return this.htm||!1;this.htm=c};d=null;return f}({},v,x));m.register("$15",function(f,d,h){function l(a){return{"Project-Id-Version":"PACKAGE VERSION","Report-Msgid-Bugs-To":"",
|
158 |
+
"POT-Creation-Date":a||"","PO-Revision-Date":a||"","Last-Translator":"","Language-Team":"",Language:"","Plural-Forms":"","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit"}}function g(a,b){var c=a||"";b&&(c+="\x00"+b);return c}function c(a){var b=d.console;b&&b.error&&b.error(a.message||String(a))}function b(a){return m.require("$26","format.js").create(a)}function a(a){this.locale(a);this.clear();this.head=l(this.now())}function e(a,b){this.src=[a||
|
159 |
+
""];this.msg=[b||""]}f.create=function(b){return new a(b)};h=m.require("$27","messages.js").extend(a);h.clear=function(){this.rows=m.require("$25","collection.js").init();this.length=0;return this};h.now=function(){function a(b,c){for(var d=String(b);d.length<c;)d="0"+d;return d}var b=new Date,c=b.getUTCFullYear(),d=b.getUTCMonth()+1,e=b.getUTCDate(),g=b.getUTCHours(),b=b.getUTCMinutes();return a(c,4)+"-"+a(d,2)+"-"+a(e,2)+" "+a(g,2)+":"+a(b,2)+"+0000"};h.header=function(a,b){var c=this.head||(this.head=
|
160 |
+
{});if(null==b)return this.headers()[a]||"";c[a]=b||"";return this};h.headers=function(a){var b,c=this.now(),d=this.head||(this.head=l(c));if(null!=a){for(b in a)d[b]=a[b];return this}var e=this.locale();a={};for(b in d)a[b]=String(d[b]);e?(a.Language=String(e)||"zxx",a["Language-Team"]=e.label||a.Language,a["Plural-Forms"]="nplurals="+(e.nplurals||"2")+"; plural="+(e.pluraleq||"n!=1")+";",b="PO-Revision-Date"):(a.Language="",a["Plural-Forms"]="nplurals=INTEGER; plural=EXPRESSION;",a["PO-Revision-Date"]=
|
161 |
+
"YEAR-MO-DA HO:MI+ZONE",b="POT-Creation-Date");a[b]||(a[b]=c);a["X-Generator"]="Loco https://localise.biz/";return a};h.get=function(a,b){var c=g(a,b);return this.rows.get(c)};h.add=function(a,b){a instanceof e||(a=new e(a));b&&a.context(b);var d=a.hash();this.rows.get(d)?c("Duplicate message at index "+this.indexOf(a)):(a.idx=this.rows.add(d,a),this.length=this.rows.length);return a};h.load=function(a){for(var b=-1,d,g,f,h,l,m,r=(f=this.locale())&&f.nplurals||2,y=[];++b<a.length;)d=a[b],null==d.parent?
|
162 |
+
(g=d.source||d.id,f=d.target||"",h=d.context,g||h?(l=new e(g,f),l._id=d._id,h&&l.context(h),d.flag&&l.flag(d.flag,0),d.comment&&l.comment(d.comment),d.notes&&l.notes(d.notes),d.refs&&l.refs(d.refs),l.format(d.format),d.message=l,this.add(l),d.prev&&d.prev[0]&&(l.prev(d.prev[0].source,d.prev[0].context),d.prev[1]&&l._src.push(d.prev[1].source||""))):0===b&&"object"===typeof f&&(this.head=f,this.headcmt=d.comment)):y.push(d);for(b=-1;++b<y.length;)try{d=y[b];g=d.source||d.id;l=a[d.parent]&&a[d.parent].message;
|
163 |
+
if(!l)throw Error("parent missing for plural "+g);m=d.plural;1===m&&l.plural(g);m>=r||(d.flag&&l.flag(d.flag,m),l.translate(d.target||"",m),d.format&&!l.format()&&l.format(d.format))}catch(v){c(v)}return this};h.wrap=function(a){this.fmtr=b(a);return this};h.toString=function(){var a,c=this.locale(),d=[],g=[],f=this.headers(),h=!c,l=c&&c.nplurals||2,m=this.fmtr||b();f[c?"PO-Revision-Date":"POT-Creation-Date"]=this.now();for(a in f)g.push(a+": "+f[a]);g=new e("",g.join("\n"));g.comment(this.headcmt||
|
164 |
+
"");h&&g.fuzzy(0,!0);d.push(g.toString());d.push("");this.rows.each(function(a,b){a&&(d.push(b.cat(m,h,l)),d.push(""))});return d.join("\n")};h=m.require("$28","message.js").extend(e);h.prev=function(a,b){this._src=[a||""];this._ctx=b};h.hash=function(){return g(this.source(),this.context())};h.toString=function(){return this.cat(b())};h.cat=function(a,b,c){var d,e=[],g;(g=this.cmt)&&e.push(a.prefix(g,"# "));(g=this.xcmt)&&e.push(a.prefix(g,"#. "));d=this.rf;if(g=this._id)d+=(d?" ":"")+"loco:"+g;
|
165 |
+
d&&/\S/.test(d)&&e.push(a.refs(d));!b&&this.fuzzy()&&e.push("#, fuzzy");(g=this.fmt)&&e.push("#, "+g+"-format");(g=this._ctx)&&e.push(a.prefix(a.pair("msgctxt",g),"#| "));if(g=this._src)g[0]&&e.push(a.prefix(a.pair("msgid",g[0]),"#| ")),g[1]&&e.push(a.prefix(a.pair("msgid_plural",g[1]),"#| "));(g=this.ctx)&&e.push(a.pair("msgctxt",g));e.push(a.pair("msgid",this.src[0]));if(null==this.src[1])e.push(a.pair("msgstr",b?"":this.msg[0]));else for(d=-1,e.push(a.pair("msgid_plural",this.src[1])),g=this.msg||
|
166 |
+
["",""],c=c||g.length;++d<c;)e.push(a.pair("msgstr["+d+"]",b?"":g[d]||""));return e.join("\n")};h.compare=function(a,b){var c=this.weight(),d=a.weight();if(c>d)return 1;if(c<d)return-1;if(b){c=this.hash().toLowerCase();d=a.hash().toLowerCase();if(c<d)return 1;if(c>d)return-1}return 0};h.copy=function(){var a=new e,b,c;for(b in this)this.hasOwnProperty(b)&&((c=this[b])&&c.concat&&(c=c.concat()),a[b]=c);return a};h=h=null;return f}({},v,x));m.register("$17",function(f,d,m){f.init=function(d,g){function c(){return f||
|
167 |
+
(f=h('<div id="loco-po-ref"></div>').dialog({dialogClass:"loco-modal loco-modal-wide",modal:!0,autoOpen:!1,closeOnEscape:!0,resizable:!1,height:500}))}function b(a,b,d){a=h("<p></p>").text(d);c().dialog("close").html("").dialog("option","title","Error").append(a).dialog("open")}function a(a){var b=a&&a.code;if(b){for(var d=-1,e=b.length,g=h("<ol></ol>").attr("class",a.type);++d<e;)h("<li></li>").html(b[d]).appendTo(g);g.find("li").eq(a.line-1).attr("class","highlighted");c().dialog("close").html("").dialog("option",
|
168 |
+
"title",a.path+":"+a.line).append(g).dialog("open")}}function e(a){a=a.target;var b=h(a).find("li.highlighted")[0],b=Math.max(0,(b&&b.offsetTop||0)-Math.floor(a.clientHeight/2));a.scrollTop=b}var f;return{load:function(f){c().html('<div class="loco-loading"></div>').dialog("option","title","Loading..").off("dialogopen").dialog("open").on("dialogopen",e);f=h.extend({ref:f,path:g.popath},g.project||{});d.ajax.post("fsReference",f,a,b)}}};return f}({},v,x));m.register("$30",function(f,d,h){function l(d){this.api=
|
169 |
+
d;this.chars=0}f.create=function(d){return new l(d)};d=l.prototype;d.init=function(d,c){function b(a){var b={length:0,html:a.html,sources:[]};q.push(b);return s[a.html?1:0]=b}function a(a,d){var g=a.source(null,d);if(g&&(a.untranslated(d)||c)){var q=m[g];if(q)q.push(a);else{var q=g.length,v=e.isHtml(g),v=s[v?1:0],u=v.sources;if(v.length+q>l||u.length===k)v=b(v),u=v.sources;u.push(g);m[g]=[a];v.length+=q;f+=q;h+=1}}}var e=this.api,f=0,h=0,k=50,l=5E3,m={},q=[],s=[];b({html:!1});b({html:!0});d.each(function(b,
|
170 |
+
c){a(c,0);a(c,1)});s=null;this.map=m;this.chars=f;this.length=h;this.batches=q;this.locale=d.locale()};d.abort=function(){this.state="abort";return this};d.dispatch=function(){function d(a,b){function e(c,d,f){b!==f&&(a===d||1<c&&g.source(null,1)===a)&&(g.translate(b,c),l++,y++);return l}if(!c())return!1;if(!b)return!0;var g,f=m[a]||[],k=f.length,p=-1,l;for(v++;++p<k;)if(g=f[p])l=0,g.each(e),l&&h("each",[g]);return!0}function c(){return"abort"===k.state?(l&&(l.abort(),f()),!1):!0}function b(){var b=
|
171 |
+
q.shift(),c;b?(c=b.sources)&&c.length?l.batch(c,s,b.html,d).fail(a).always(e):e():f()}function a(){k.abort();f()}function e(){r++;h("prog",[r,C]);c()&&b()}function f(){l=q=null;h("done")}function h(a,b){for(var c=u[a]||[],d=c.length;0<=--d;)c[d].apply(null,b)}var k=this,l=k.api,m=k.map,q=k.batches||[],s=k.locale,v=0,r=0,y=0,x=k.length,C=q.length,u={done:[],each:[],prog:[]};k.state="";b();return{done:function(a){u.done.push(a);return this},each:function(a){u.each.push(a);return this},prog:function(a){u.prog.push(a);
|
172 |
+
return this},stat:function(){return{todo:function(){return Math.max(x-v,0)},did:function(){return v}}}}};return f}({},v,x));m.register("$41",{nn:["no"]});m.register("$31",function(f,d,h){function l(){}f.create=function(d){d=l.prototype=new d;d.toString=function(){return"Yandex.Translate"};d.getId=function(){return"yandex"};d.getUrl=function(){return"https://translate.yandex.com/"};d.parseError=function(c){return c&&c.code&&200!==c.code&&c.message?"Error "+c.code+": "+c.message:""};d.batch=function(c,
|
173 |
+
b,a,d){function g(a){for(var f=c.length,k=-1;++k<f&&!1!==d(c[k],a[k]||"",b););}var f=this;a=a?"html":"plain";var k=this.mapLang(b,m.require("$41","yandex.json"));return f._call({url:"https://translate.yandex.net/api/v1.5/tr.json/translate?format="+a+"&lang=en-"+k,method:"POST",traditional:!0,data:{key:f.key(),text:c}}).done(function(a,b,c){a&&200===a.code?g(a.text||[]):(f.stderr(f.parseError(a)||f.httpError(c)),g([]))}).fail(function(){g([])})};return new l};return f}({},v,x));m.register("$42",{zh:["zh",
|
174 |
+
"zh-CN","zh-TW"],he:["iw"],jv:["jw"]});m.register("$32",function(f,d,h){function l(){}f.create=function(d){d=l.prototype=new d;d.toString=function(){return"Google Translate"};d.getId=function(){return"google"};d.getUrl=function(){return"https://translate.google.com/"};d.parseError=function(c){if(c.error){for(var b=[],a=c.error.errors||[],d=a.length,g=-1;++g<d;)b.push(a[g].message||"");return"Error "+c.error.code+": "+b.join(";")}return""};d.batch=function(c,b,a,d){function g(a){for(var f=c.length,
|
175 |
+
k=-1,h;++k<f&&(h=a[k]||{},!1!==d(c[k],h.translatedText||"",b)););}var f=this;a=a?"html":"text";var k=f.mapLang(b,m.require("$42","google.json"));return f._call({url:"https://translation.googleapis.com/language/translate/v2?source=en&target="+k+"&format="+a,method:"POST",traditional:!0,data:{key:f.key(),q:c}}).done(function(a,b,c){a.data?g(a.data.translations||[]):(f.stderr(f.parseError(a)||f.httpError(c)),g([]))}).fail(function(){g([])})};return new l};return f}({},v,x));m.register("$43",{nn:["no"],
|
176 |
+
pt:["pt","pt-pt"],sr:["sr-Cyrl","sr-Latn"],sr_RS:["sr-Cyrl"],tlh:["tlh-Latn","tlh-Piqd"],zh:["zh-Hans","zh-Hant"],zh_CN:["zh-Hans"],zh_HK:["zh-Hans"],zh_SG:["zh-Hans"],zh_TW:["zh-Hant"]});m.register("$33",function(f,d,h){function l(){}f.create=function(d){d=l.prototype=new d;d.toString=function(){return"Microsoft Translator text API"};d.getId=function(){return"microsoft"};d.getUrl=function(){return"https://aka.ms/MicrosoftTranslatorAttribution"};d.parseError=function(c){return c&&c.error?c.error.message:
|
177 |
+
""};d.batch=function(c,b,a,d){function f(a){for(var g=-1,k;++g<h&&(k=a[g]||{},k=k.translations||[],k=k[0]||{},!1!==d(c[g],k.text||"",b)););}var g=this,k=[],h=c.length,l=-1;a=a?"html":"plain";for(var q=g.mapLang(b,m.require("$43","ms.json"));++l<h;)k.push({text:c[l]});return g._call({url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to="+q+"&textType="+a,method:"POST",data:JSON.stringify(k),headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":this.key(),
|
178 |
+
"Ocp-Apim-Subscription-Region":g.param("region")||"global"}}).done(function(a,b,c){a&&a.length?f(a):(g.stderr(g.parseError(a)||g.httpError(c)),f([]))}).fail(function(){f([])})};return new l};return f}({},v,x));m.register("$44",{pt:["pt-PT","pt-BR"]});m.register("$34",function(f,d,h){function l(){}f.create=function(d){d=l.prototype=new d;d.toString=function(){return"DeepL Translator"};d.getId=function(){return"deepl"};d.getUrl=function(){return"https://www.deepl.com/translator"};d.parseError=function(c){return c.message};
|
179 |
+
d.batch=function(c,b,a,d){function f(a){for(var g=c.length,h=-1,l;++h<g&&(l=a[h]||{},!1!==d(c[h],l.text||"",b)););}var g=this;a=g.mapLang(b,m.require("$44","deepl.json"));return g._call({url:"https://api.deepl.com/v2/translate",method:"POST",traditional:!0,data:{source_lang:"EN",target_lang:a.toUpperCase(),preserve_formatting:"1",auth_key:g.key(),text:c}}).done(function(a,b,c){a.translations?f(a.translations):(g.stderr(g.parseError(a)||g.httpError(c)),f([]))}).fail(function(){f([])})};return new l};
|
180 |
+
return f}({},v,x));m.register("$35",function(f,d,m){function l(){}f.create=function(g){(l.prototype=new g).batch=function(c,b,a,e){function g(a){for(var d=c.length,f=-1;++f<d&&!1!==e(c[f],a[f],b););}var f=d.loco.ajax;a={hook:this.getId(),type:a?"html":"text",locale:String(b),sources:c};var k=h.Deferred();this.abortable(f.post("apis",a,function(a){g(a&&a.targets||[]);k.resolve()},function(){g([]);k.reject()}));return k.promise()};return new l};return f}({},v,x));m.register("$18",function(f,d,v){function l(){this.inf=
|
181 |
+
{}}function g(){var a=v.createElement("p"),b=/&(#\d+|#x[0-9a-f]|[a-z]+);/i,c=/<[a-z]+\s/i,d,f;return{sniff:function(g){if(g===d)return f;d=g;if(b.test(g)||c.test(g))if(a.innerHTML=g,a.textContent!==g)return f=!0;return f=!1}}}var c=l.prototype;c.init=function(a){this.inf=a||{}};c.param=function(a){return this.inf[a]||""};c.key=function(){return this.param("key")};c.getId=function(){return this.param("id")||"none"};c.getUrl=function(){return this.param("url")||"#"};c.toString=function(){return this.param("name")||
|
182 |
+
this.getId()};c.stderr=function(a){var b=(d.loco||{}).notices||d.console;b&&b.error&&b.error(String(this)+": "+String(a))};c.httpError=function(a){return(a=a&&a.status)&&200!==a?"Responded status "+a:"Unknown error"};c.parseError=function(){return""};c.mapLang=function(a,b){var c=String(a).replace("-","_"),d=a.lang,g=b[c]||b[d]||[],f=g.length;if(0===f)return d;if(1<f)for(var c=c.toLowerCase(),d=-1,h;++d<f;)if(h=g[d],h.toLowerCase().replace("-","_")===c)return h;return g[0]};c.translate=function(a,
|
183 |
+
b,c){return this.batch([a],b,this.isHtml(a),c)};c.batch=function(){return{always:function(a){a()}}};c._call=function(a){var b=this;b.state=null;a.cache=!0;a.dataType="json";a.error=function(a,c,d){try{var g=a.responseText,f=g&&m.require("$5","json.js").parse(g);d=f&&b.parseError(f)||d}catch(h){}b.stderr(d||b.httpError(a))};return b.abortable(h.ajax(a))};c.abortable=function(a){var b=this;a.always(function(){b.$r===a&&(b.$r=null)});return b.$r=a};c.abort=function(){var a=this.$r;a&&a.abort()};c.isHtml=
|
184 |
+
function(a){return(b||(b=g())).sniff(a)};c.createJob=function(){return m.require("$30","job.js").create(this)};f.create=function(a){var b;b=a.id;b="yandex"===b?m.require("$31","yandex.js").create(l):"google"===b?m.require("$32","google.js").create(l):"microsoft"===b?m.require("$33","ms.js").create(l):"deepl"===b?m.require("$34","deepl.js").create(l):m.require("$35","custom.js").create(l);b.init(a);return b};f.suggest=function(a,b,c,d){var g,f,h=a.length;for(g=0;g<h;g++)f=a[g],f.translate(b,c,d)};
|
185 |
+
var b;return f}({},v,x));m.register("$19",function(f,d,m){f.init=function(f){function g(){H||(I.on("click",k),H=h('<div id="loco-fs-creds"></div>').dialog({dialogClass:"request-filesystem-credentials-dialog loco-modal",minWidth:580,modal:!0,autoOpen:!1,closeOnEscape:!0}).on("change",'input[name="connection_type"]',function(){this.checked&&h("#ssh-keys").toggleClass("hidden","ssh"!==h(this).val())}));return H}function c(){R&&(b(h(r)),R=!1);if(C&&J){var a=J,c=h(Q);c.find("span.loco-msg").text(a);K||
|
186 |
+
(c.removeClass("jshide").hide().fadeIn(500),K=!0)}else K&&(b(h(Q)),K=!1)}function b(a){a.slideUp(250).fadeOut(250,function(){h(this).addClass("jshide")})}function a(){if(C)return H&&H.dialog("close"),c(),h(f).find('button[type="submit"]').attr("disabled",!1),h(d).triggerHandler("resize"),B&&B(!0),!0;w&&H?(R||(h(r).removeClass("jshide").hide().fadeIn(500),R=!0),K&&(b(h(Q)),K=!1)):c();h(f).find('input[type="submit"]').attr("disabled",!0);B&&B(!1);return!1}function e(a){var b,c,d=s||{};for(b in d)d.hasOwnProperty(b)&&
|
187 |
+
(c=d[b],a[b]?a[b].value=c:h('<input type="hidden" />').attr("name",b).appendTo(a).val(c))}function p(a){a.preventDefault();a=h(a.target).serializeArray();q(a);D=!0;return!1}function n(a){a.preventDefault();H.dialog("close");return!1}function k(a){a.preventDefault();H.dialog("open").find('input[name="connection_type"]').change();return!1}function v(b){C=b.authed;y=b.method;h(r).find("span.loco-msg").text(b.message||"Something went wrong.");J=b.warning||"";b.notice&&u.notices.info(b.notice);if(C)"direct"!==
|
188 |
+
y&&(s=b.creds,e(f),D&&b.success&&u.notices.success(b.success)),a();else if(b.reason)u.notices.info(b.reason);else if(b=b.prompt){var c=g();c.html(b).find("form").on("submit",p);c.dialog("option","title",c.find("h2").remove().text());c.find("button.cancel-button").show().on("click",n);c.find('input[type="submit"]').addClass("button-primary");a();h(d).triggerHandler("resize")}else u.notices.error("Server didn't return credentials, nor a prompt for credentials")}function x(){a()}function q(a){D=!1;u.ajax.setNonce("fsConnect",
|
189 |
+
N).post("fsConnect",a,v,x);return a}var s,B,r=f,y=null,D=!1,C=!1,u=d.loco,w=f.path.value,F=f.auth.value,N=f["loco-nonce"].value,I=h(r).find("button.button-primary"),Q=m.getElementById(r.id+"-warn"),R=!1,K=!1,J="",H;u.notices.convert(Q).stick();f.connection_type?(s={},s.connection_type=f.connection_type.value,C=!0):w&&F&&q({path:w,auth:F});a();return{applyCreds:function(a){if(a.nodeType)e(a);else{var b,c=s||{};for(b in c)c.hasOwnProperty(b)&&(a[b]=c[b])}return this},setForm:function(b){f=b;a();e(b);
|
190 |
+
return this},connect:function(){w=f.path.value;F=f.auth.value;q(h(f).serializeArray());return this},listen:function(a){B=a;C&&a(!0);return this},authed:function(){return C}}};return f}({},v,x));m.register("$20",function(f,d,v){function l(d,f,h,k){f="n"===h?c(f):b(f);k&&(f=a(f));return g([].sort,[f])(d)}function g(a,b){return function(c){a.apply(c,b);return c}}function c(a){return function(b,c){var d=b&&b[a]||0,f=c&&c[a]||0;return d===f?0:d>f?1:-1}}function b(a){return function(b,c){return(b&&b[a]||
|
191 |
+
"").localeCompare(c&&c[a]||"")}}function a(a){return function(b,c){return-1*a(b,c)}}f.init=function(a){function b(a){var c=-1,d=a.length;for(h("tr",r).remove();++c<d;)r.appendChild(a[c].$)}function c(a){q=a?x.find(a,d):d.slice(0);v&&(a=f[v],q=l(q,v,a.type,a.desc));b(q)}var d=[],f=[],g=0,q,s,v,r=a.getElementsByTagName("tbody")[0],y=a.getElementsByTagName("thead")[0],x=m.require("$10","fulltext.js").init();y&&r&&(h("th",y).each(function(a,c){var e=c.getAttribute("data-sort-type");e&&(a=g,h(c).addClass("loco-sort").on("click",
|
192 |
+
function(c){c.preventDefault();c=a;var e=f[c],g=e.type,m=!(e.desc=!e.desc);q=l(q||d.slice(0),c,g,m);b(q);s&&s.removeClass("loco-desc loco-asc");s=h(e.$).addClass(m?"loco-desc":"loco-asc").removeClass(m?"loco-asc":"loco-desc");v=c;return!1}),f[g]={$:c,type:e});c.hasAttribute("colspan")?g+=Number(c.getAttribute("colspan")):g++}),h("tr",r).each(function(a,b){var c,e,g,h=[],l={_:a,$:b},m=b.getElementsByTagName("td");for(e in f){c=m[e];(g=c.textContent.replace(/(^\s+|\s+$)/g,""))&&h.push(g);c.hasAttribute("data-sort-value")&&
|
193 |
+
(g=c.getAttribute("data-sort-value"));switch(f[e].type){case "n":g=Number(g)}l[e]=g}d[a]=l;x.index(a,h)}),a=h('form.loco-filter input[type="text"]',a.parentNode),a.length&&(a=a[0],y=h(a.form),1<d.length?m.require("$11","LocoTextListener.js").listen(a,c):y.hide(),y.on("submit",function(a){a.preventDefault();return!1})))};return f}({},v,x));var D=v.loco||{},I=D.conf||{$v:[0,0]};v=m.require("$1","t.js").init();x=I.wplang;D.version=function(f){return I.$v[f||0]};m.require("$2","html.js");m.require("$3",
|
194 |
+
"number.js");m.require("$4","array.js");m.require("$5","json.js");D.l10n=v;v.load(I.wpl10n);x&&v.pluraleq(x.pluraleq);D.string=m.require("$6","string.js");D.notices=m.require("$7","notices.js").init(v);D.ajax=m.require("$8","ajax.js").init(I).localise(v);D.locale=m.require("$9","wplocale.js");D.fulltext=m.require("$10","fulltext.js");D.watchtext=m.require("$11","LocoTextListener.js").listen;D.tooltip=m.require("$12","tooltip.js");D.po={ed:m.require("$13","poedit.js"),kbd:m.require("$14","hotkeys.js"),
|
195 |
+
init:m.require("$15","po.js").create,ace:m.require("$16","ace.js").strf("php"),ref:m.require("$17","refs.js")};D.apis=m.require("$18","apis.js");D.fs=m.require("$19","fsconn.js");h("#loco-admin.wrap table.wp-list-table").each(function(f,d){m.require("$20","tables.js").init(d)});D.validate=function(f){return"2.5.0"!==(/^\d+\.\d+\.\d+/.exec(f&&f[0]||"")&&RegExp.lastMatch)?(D.notices.warn("admin.js is the wrong version (2.5.0). Please empty all relevant caches and reload this page."),!1):!0}})(window,
|
196 |
+
document,window.jQuery);
|
pub/js/min/config.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(n,
|
1 |
+
!function(n,o,c){function e(){var n=c("#loco-conf > div"),o=n.eq(0).clone(),e=n.length,t="["+e+"]";function i(n,o){var e=o.name.replace("[0]",t);c(o).attr("name",e).val("")}o.attr("id","loco-conf-"+e),o.find("input").each(i),o.find("textarea").each(i),o.find("h2").eq(0).html("New set <span>(untitled)</span>"),o.insertBefore("#loco-form-foot"),f(o.find("a.icon-del"),e),o.hide().slideDown(500),c("html, body").animate({scrollTop:function(n,o){for(var e=n.offsetTop;(n=n.offsetParent)&&n!==o;)e+=n.offsetTop;return e}(o[0])},500)}function f(n,o){return n.on("click",function(n){return n.preventDefault(),function(n){var o=c("#loco-conf-"+n);o.find('input[name="conf['+n+'][removed]"]').val("1"),o.slideUp(500,function(){c(this).hide().find("table").remove()})}(o),!1})}c("#loco-conf > div").each(function(n,o){f(c(o).find("a.icon-del"),n)}),c("#loco-add-butt").attr("disabled",!1).on("click",function(n){return n.preventDefault(),e(),!1})}(window,document,jQuery);
|
pub/js/min/debug.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(
|
1 |
+
!function(a,r){var e=a.conf,o=r("#loco-utf8-check")[0].textContent;function t(e,o,n){"success"!==o&&(n=a.ajax.parse(a.ajax.strip(e.responseText))),r("#loco-ajax-check").text("FAILED: "+n).addClass("loco-danger")}1===o.length&&10003===o.charCodeAt(0)||a.notices.warn("This page has a problem rendering UTF-8").stick(),window.ajaxurl&&r("#loco-ajax-url").text(window.ajaxurl),r("#loco-vers-jquery").text([r.fn&&r.fn.jquery||"unknown","ui/"+(r.ui&&r.ui.version||"none"),"migrate/"+(r.migrateVersion||"none")].join("; ")),a.ajax.post("ping",{echo:"ΟΚ ✓"},function(e,o,n){e&&e.ping?r("#loco-ajax-check").text(e.ping):t(n,o,e&&e.error&&e.error.message)},t);var n,i=e.apis,c=i.length,s=-1,l=a.locale.parse("fr");function u(e,o){return r("#loco-api-"+e).text(o)}function d(e){var n=e.getId();e.key()?e.translate("OK",l,function(e,o){o?u(n,"OK ✓"):u(n,"FAILED").addClass("loco-danger")}):u(n,"No API key")}if(a.apis)for(;++s<c;){n=i[s];try{d(a.apis.create(n))}catch(e){u(n.id,String(e))}}else a.notices.error("admin.js is out of date. Please empty your browser cache.")}(window.loco,window.jQuery,window.wp);
|
pub/js/min/editor.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(k,C){var _=k.loco,i=_&&_.conf,u=document.getElementById("loco-editor-inner");if(_&&i&&u){var D,r,t,z,m,l,d=!!i.WP_DEBUG,s=_.po.ref&&_.po.ref.init(_,i),p=null,a=null,o=i.multipart,T=_.l10n,b=_.string.sprintf,I=i.locale,y=_.po.init(I).wrap(i.powrap),c=!I,n=document.getElementById("loco-actions"),f=i.popath,g=i.potpath,v=String(i.syncmode).toLowerCase(),e=document.getElementById("loco-fs"),h=e&&_.fs.init(e),w=i.readonly,x=!w,j={},S=0,M={my:"top",at:"top",of:"#loco-content"};!o||k.FormData&&k.Blob||(o=!1,_.notices.warn("Your browser doesn't support Ajax file uploads. Falling back to standard postdata")),s||_.notices.warn("admin.js is out of date. Please empty your browser cache and reload the page.");var L,E,U=(E=parseInt(C(u).css("min-height")||0),function(){var t=function(t,n){for(var o=t.offsetTop||0;(t=t.offsetParent)&&t!==n;)o+=t.offsetTop||0;return o}(u,document.body),n=k.innerHeight,o=Math.max(E,n-t-20);L!==o&&(u.style.height=String(o)+"px",L=o)});U(),C(k).resize(U),u.innerHTML="",D=_.po.ed.init(u).localise(T),_.po.kbd.init(D).add("save",x?function(){D.dirty&&H()}:Y).add("hint",I&&x&&F||Y).enable("copy","clear","enter","next","prev","fuzzy","save","invis","hint");var P={save:x&&function(n){function o(){n.disabled=!0}function t(){n.disabled=!1}function e(){t(),C(n).removeClass("loco-loading")}return n,D.on("poUnsaved",function(){t(),C(n).addClass("button-primary")}).on("poSave",function(){o(),C(n).removeClass("button-primary")}),a=C.extend({path:f},i.project||{}),C(n).click(function(t){return t.preventDefault(),o(),C(n).addClass("loco-loading"),H(e),!1}),!0},sync:x&&function(n){var t=i.project;if(t){function o(){n.disabled=!0}function e(){n.disabled=!1}function a(){e(),C(n).removeClass("loco-loading")}D.on("poUnsaved",function(){o()}).on("poSave",function(){e()}),p={bundle:t.bundle,domain:t.domain,type:c?"pot":"po",path:f||"",sync:g||"",strip:"pot"===v?"1":""},C(n).click(function(t){return t.preventDefault(),o(),C(n).addClass("loco-loading"),q(a),!1}),e()}return!0},revert:function(t){return D.on("poUnsaved",function(){t.disabled=!1}).on("poSave",function(){t.disabled=!0}),C(t).click(function(t){return t.preventDefault(),location.reload(),!1}),!0},invs:function(t){var o=C(t);return t.disabled=!1,D.on("poInvs",function(t,n){o[n?"addClass":"removeClass"]("inverted")}),o.click(function(t){return t.preventDefault(),D.setInvs(!D.getInvs()),!1}),_.tooltip.init(o),!0},code:function(t){var o=C(t);return t.disabled=!1,o.click(function(t){t.preventDefault();var n=!D.getMono();return o[n?"addClass":"removeClass"]("inverted"),D.setMono(n),!1}),_.tooltip.init(o),!0},source:W,binary:c?null:W};c?(P.add=x&&function(t){return t.disabled=!1,C(t).click(function(t){t.preventDefault();var n,o=1,e=/(\d+)$/;for(n="New message";y.get(n);)o=e.exec(n)?Math.max(o,RegExp.$1):o,n="New message "+ ++o;return D.add(n),!1}),!0},P.del=x&&function(t){return t.disabled=!1,C(t).click(function(t){return t.preventDefault(),D.del(),!1}),!0}):P.auto=function(t){function n(){t.disabled=!1}return D.on("poUnsaved",function(){t.disabled=!0}).on("poSave poAuto",function(){n()}),C(t).click(N),n(),!0},C("#loco-editor > nav .button").each(function(t,n){var o=n.getAttribute("data-loco"),e=P[o];e&&e(n,o)||C(n).addClass("loco-noop")}),C(n).submit(Y),function(n){function e(t){C(n.parentNode)[t||null==t?"removeClass":"addClass"]("invalid")}D.searchable(_.fulltext.init()),n.disabled=!1,n.value="";var a=_.watchtext(n,function(t){e(D.filter(t,!0))});D.on("poFilter",function(t,n,o){a.val(n||""),e(o)}).on("poMerge",function(t,n){var o=a.val();o&&D.filter(o)})}(document.getElementById("loco-search")),D.on("poUnsaved",function(){k.onbeforeunload=$}).on("poSave",function(){G(),k.onbeforeunload=null}).on("poHint",F).on("poUpdate",G).on("poMeta",function(t,n){var o,e,a=(e="CODE",(o=n).tagName===e?o:o.getElementsByTagName(e)[0]);return!a||!s||(s.load(a.textContent),t.preventDefault(),!1)}),y.load(i.podata),D.load(y),(I=D.targetLocale)?I.isRTL()&&C(u).addClass("trg-rtl"):D.unlock(),G(),delete _.conf,i=P=null}function q(c){_.ajax.post("sync",p,function(t){var n=[],o=t.pot,e=t.po,a=t.done||{add:[],del:[],fuz:[]},i=a.add.length,r=a.del.length,l=a.fuz.length,s=T;y.clear().load(e),D.load(y),i||r||l?(o?n.push(b(s._("Merged from %s"),o)):n.push(s._("Merged from source code")),i&&n.push(b(s._n("1 new string added","%s new strings added",i),i)),r&&n.push(b(s._n("1 obsolete string removed","%s obsolete strings removed",r),r)),l&&n.push(b(s._n("1 string marked Fuzzy","%s strings marked Fuzzy",l),l)),C(u).trigger("poUnsaved",[]),G(),d&&k.console&&function(t,n){var o=-1,e=n.add.length;for(;++o<e;)t.log(" + "+String(n.add[o]));for(e=n.del.length,o=0;o<e;o++)t.log(" - "+String(n.del[o]));for(e=n.fuz.length,o=0;o<e;o++)t.log(" ~ "+String(n.fuz[o]))}(console,a)):o?n.push(b(s._("Strings up to date with %s"),o)):n.push(s._("Strings up to date with source code")),_.notices.success(n.join(". ")),C(u).trigger("poMerge",[t]),c&&c()},c)}function B(){return t=t||function(){for(var t,n=-1,o=[],e=r,a=e.length;++n<a;)try{t=e[n],o.push(_.apis.create(t))}catch(t){_.notices.error(String(t))}return o}()}function O(e){var a;function i(){return(new Date).getTime()}c||w?_.notices.error("Logic error. APIs not available in current mode"):null==r||0===r.length||10<Math.round((i()-S)/1e3)?(l&&l.remove(),l=null,m&&m.remove(),m=null,z&&z.remove(),r=z=null,a=C('<div><div class="loco-loading"></div></div>').dialog({dialogClass:"loco-modal loco-modal-no-close",appendTo:"#loco-admin.wrap",title:"Loading..",modal:!0,autoOpen:!0,closeOnEscape:!1,resizable:!1,draggable:!1,position:M,height:200}),_.ajax.get("apis",{locale:String(I)},function(t,n,o){S=i(),0===(r=t&&t.apis||[]).length?l=A("loco-apis-empty",t.html):m=A("loco-apis-batch",t.html),a.remove(),e(r)})):(S=i(),e(r))}function A(t,n){var o=C(n);return o.attr("id",t),o.dialog({dialogClass:"loco-modal",appendTo:"#loco-admin.wrap",title:o.attr("title"),modal:!0,autoOpen:!1,closeOnEscape:!0,resizable:!1,draggable:!1,position:M}),o}function F(){O(function(t){t.length?function(){var p=T,t=D.current(),n=D.getTargetOffset(),o=t&&t.source(null,n),f='lang="'+String(I)+'" dir="'+(I.isRTL()?"RTL":"LTR")+'"',g=99;if(!o)return;function e(t){return!t.isDefaultPrevented()&&(!(0<=(n=t.which-49)&&n<10&&(o=h&&h.find("button.button-primary").eq(n))&&1===o.length)||(t.preventDefault(),t.stopPropagation(),o.click(),!1));var n,o}function a(t,n,o,e){var a=e.getId(),i=x[a],r=String(i+1),l=e.getUrl(),s=p._("Use this translation"),c=String(e),u=y&&y[a],d=C('<button class="button button-primary"></button>').attr("tabindex",String(1+g+i)).on("click",function(e,a){return function(t){t.preventDefault(),t.stopPropagation(),v();var n=D.current(),o=D.getTargetOffset();n&&n.source(null,o)===e?(n.translate(a,o),D.focus().reloadMessage(n)):_.notices.warn("Source changed since suggestion")}}(t,n));d.attr("accesskey",r),1<m.length&&(s+=" ("+r+")"),d.text(s),u&&u.replaceWith(C('<div class="loco-api loco-api-'+a+'"></div>').append(C('<a class="loco-api-credit" target="_blank" tabindex="-1"></a>').attr("href",l).text(c)).append(C("<blockquote "+f+"></blockquote>").text(n||"FAILED")).append(d)),++w===b&&(h&&h.dialog("option","title",p._("Suggested translations")+" — "+o.label),g+=w),0===i&&d.focus()}function v(t){h&&null==t&&h.dialog("close"),y=h=null,C(k).off("keydown",e)}function i(e){return function(t,n,o){a(t,u[e.getId()]=n,o,e)}}var h=(z=z||A("loco-apis-hint","<div></div>")).html("").append(C('<div class="loco-api"><p>Source text:</p></div>').append(C('<blockquote lang="en"></blockquote>').text(o))).dialog("option","title",p._("Loading suggestions")+"...").off("dialogclose").on("dialogclose",v).dialog("open"),r=t.translation(n);r&&C('<div class="loco-api"><p>Current translation:</p></div>').append(C("<blockquote "+f+"></blockquote>").text(r)).append(C('<button class="button"></button>').attr("tabindex",String(++g)).text(p._("Keep this translation")).on("click",function(t){t.preventDefault(),v()})).appendTo(h);var l,s,m=B(),b=m.length,c=-1,u=j[o]||(j[o]={}),y={},w=0,x={};for(;++c<b;)l=m[c],h.append((d=l,void 0,S=C('<div class="loco-api loco-api-loading"></div>').text("Calling "+d+" ..."),y[d.getId()]=S)),s=l.getId(),x[s]=c,u[s]?a(o,u[s],I,l):l.translate(o,I,i(l));var d,S;C(k).on("keydown",e)}():R()})}function N(t){return t.preventDefault(),O(function(t){t.length?function(){var e,a,i,r=0,l=T,n=!1,s=m.dialog("open"),t=s.find("form"),c=t.find("button.button-primary"),o=C("#loco-job-progress");function u(){c[0].disabled=!0}function d(){c.removeClass("loco-loading")}function p(t){o.text(t)}function f(t){var n=function(t){for(var n,o=B(),e=o.length,a=-1;++a<e;)if((n=o[a]).getId()===t)return n;_.notices.error("No "+t+" client")}(C(t.api).val()),o=t.existing.checked;p("Calculating...."),(e=n.createJob()).init(y,o),a=n.toString(),p(b(l._("%s unique source strings."),e.length.format(0))+" "+b(l._("%s characters will be sent for translation."),e.chars.format(0))),e.length?c[0].disabled=!1:u(),i=null}function g(t){e&&(n&&t.fuzzy(0,!0),D.pasteMessage(t),t===D.active&&D.setStatus(t),D.unsave(t,0),r++)}function v(t,n){var o=n?100*t/n:0;p(b(l._("Translation progress %s%%"),o.format(0)))}function h(){if(d(),e&&i){var t=i.todo();t&&_.notices.warn(b(l._n("Translation job aborted with one string remaining","Translation job aborted with %s strings remaining",t),t.format(0))).slow();var n=[],o=i.did();o&&n.push(b(l._n("%s string translated via %s","%s strings translated via %s",o),o.format(0),a)),r?n.push(b(l._n("%s string updated","%s strings updated",r),r.format(0))):n.push(l._("Nothing needed updating")),_.notices.success(n.join(". ")).slow(),i=e=null}r&&(G(),D.rebuildSearch()),s&&(s.off("dialogclose").dialog("close"),s=null),D.fire("poAuto")}d(),u(),_.notices.clear(),t.off("submit change"),f(t[0]),t.on("change",function(t){var n=t.target,o=n.name;return"api"!==o&&"existing"!==o||f(n.form),!0}).on("submit",function(t){t.preventDefault(),c.addClass("loco-loading"),u(),v(r=0),n=t.target.fuzzy.checked,i=e.dispatch().done(h).each(g).prog(v).stat()}),s.off("dialogclose").on("dialogclose",function(){e.abort(),s=null,h()})}():R()}),!1}function R(){l?l.dialog("open"):_.notices.error("Logic error. Unconfigured API modal missing")}function H(n){var t=C.extend({locale:String(y.locale()||"")},a||{});h&&h.applyCreds(t),o?(t=function(t){var n,o=new FormData;for(n in t)t.hasOwnProperty(n)&&o.append(n,t[n]);return o}(t)).append("po",new Blob([String(y)],{type:"application/x-gettext"}),String(t.path).split("/").pop()||"untitled.po"):t.data=String(y),_.ajax.post("save",t,function(t){n&&n(),D.save(!0),C("#loco-po-modified").text(t.datetime||"[datetime error]")},n)}function $(){return T._("Your changes will be lost if you continue without saving")}function W(e,a){return e.disabled=!1,C(e).click(function(t){var n=e.form,o=f;return"binary"===a&&(o=o.replace(/\.po$/,".mo")),n.path.value=o,n.source.value=y.toString(),!0}),!0}function Y(t){return t.preventDefault(),!1}function G(){var t=T,n=D.stats(),o=n.t,e=n.f,a=n.u,i=b(t._n("1 string","%s strings",o),o.format(0)),r=[];I&&(i=b(t._("%s%% translated"),n.p.replace("%",""))+", "+i,e&&r.push(b(t._("%s fuzzy"),e.format(0))),a&&r.push(b(t._("%s untranslated"),a.format(0))),r.length&&(i+=" ("+r.join(", ")+")")),C("#loco-po-status").text(i)}}(window,window.jQuery);
|
1 |
+
!function(k,C){var _=k.loco,i=_&&_.conf,u=document.getElementById("loco-editor-inner");if(_&&i&&u){var D,r,n,z,m,l,d=!!i.WP_DEBUG,s=_.po.ref&&_.po.ref.init(_,i),p=null,a=null,o=i.multipart,T=_.l10n,b=_.string.sprintf,I=i.locale,y=_.po.init(I).wrap(i.powrap),c=!I,t=document.getElementById("loco-actions"),f=i.popath,g=i.potpath,v=String(i.syncmode).toLowerCase(),e=document.getElementById("loco-fs"),h=e&&_.fs.init(e),w=i.readonly,x=!w,j={},S=0,M={my:"top",at:"top",of:"#loco-content"};!o||k.FormData&&k.Blob||(o=!1,_.notices.warn("Your browser doesn't support Ajax file uploads. Falling back to standard postdata")),s||_.notices.warn("admin.js is out of date. Please empty your browser cache and reload the page.");var L,E,U=(E=parseInt(C(u).css("min-height")||0),function(){var n=function(n,t){for(var o=n.offsetTop||0;(n=n.offsetParent)&&n!==t;)o+=n.offsetTop||0;return o}(u,document.body),t=k.innerHeight,o=Math.max(E,t-n-20);L!==o&&(u.style.height=String(o)+"px",L=o)});U(),C(k).resize(U),u.innerHTML="",D=_.po.ed.init(u).localise(T),_.po.kbd.init(D).add("save",x?function(){D.dirty&&H()}:Y).add("hint",I&&x&&F||Y).enable("copy","clear","enter","next","prev","fuzzy","save","invis","hint");var P={save:x&&function(t){function o(){t.disabled=!0}function n(){t.disabled=!1}function e(){n(),C(t).removeClass("loco-loading")}return t,D.on("poUnsaved",function(){n(),C(t).addClass("button-primary")}).on("poSave",function(){o(),C(t).removeClass("button-primary")}),a=C.extend({path:f},i.project||{}),C(t).on("click",function(n){return n.preventDefault(),o(),C(t).addClass("loco-loading"),H(e),!1}),!0},sync:x&&function(t){var n=i.project;if(n){function o(){t.disabled=!0}function e(){t.disabled=!1}function a(){e(),C(t).removeClass("loco-loading")}D.on("poUnsaved",function(){o()}).on("poSave",function(){e()}),p={bundle:n.bundle,domain:n.domain,type:c?"pot":"po",path:f||"",sync:g||"",strip:"pot"===v?"1":""},C(t).on("click",function(n){return n.preventDefault(),o(),C(t).addClass("loco-loading"),q(a),!1}),e()}return!0},revert:function(n){return D.on("poUnsaved",function(){n.disabled=!1}).on("poSave",function(){n.disabled=!0}),C(n).on("click",function(n){return n.preventDefault(),location.reload(),!1}),!0},invs:function(n){var o=C(n);return n.disabled=!1,D.on("poInvs",function(n,t){o[t?"addClass":"removeClass"]("inverted")}),o.on("click",function(n){return n.preventDefault(),D.setInvs(!D.getInvs()),!1}),_.tooltip.init(o),!0},code:function(n){var o=C(n);return n.disabled=!1,o.on("click",function(n){n.preventDefault();var t=!D.getMono();return o[t?"addClass":"removeClass"]("inverted"),D.setMono(t),!1}),_.tooltip.init(o),!0},source:W,binary:c?null:W};c?(P.add=x&&function(n){return n.disabled=!1,C(n).on("click",function(n){n.preventDefault();var t,o=1,e=/(\d+)$/;for(t="New message";y.get(t);)o=e.exec(t)?Math.max(o,RegExp.$1):o,t="New message "+ ++o;return D.add(t),!1}),!0},P.del=x&&function(n){return n.disabled=!1,C(n).on("click",function(n){return n.preventDefault(),D.del(),!1}),!0}):P.auto=function(n){function t(){n.disabled=!1}return D.on("poUnsaved",function(){n.disabled=!0}).on("poSave poAuto",function(){t()}),C(n).on("click",N),t(),!0},C("#loco-editor > nav .button").each(function(n,t){var o=t.getAttribute("data-loco"),e=P[o];e&&e(t,o)||C(t).addClass("loco-noop")}),C(t).on("submit",Y),function(t){function e(n){C(t.parentNode)[n||null==n?"removeClass":"addClass"]("invalid")}D.searchable(_.fulltext.init()),t.disabled=!1,t.value="";var a=_.watchtext(t,function(n){e(D.filter(n,!0))});D.on("poFilter",function(n,t,o){a.val(t||""),e(o)}).on("poMerge",function(n,t){var o=a.val();o&&D.filter(o)})}(document.getElementById("loco-search")),D.on("poUnsaved",function(){k.onbeforeunload=$}).on("poSave",function(){G(),k.onbeforeunload=null}).on("poHint",F).on("poUpdate",G).on("poMeta",function(n,t){var o,e,a=(e="CODE",(o=t).tagName===e?o:o.getElementsByTagName(e)[0]);return!a||!s||(s.load(a.textContent),n.preventDefault(),!1)}),y.load(i.podata),D.load(y),(I=D.targetLocale)?I.isRTL()&&C(u).addClass("trg-rtl"):D.unlock(),G(),delete _.conf,i=P=null}function q(c){_.ajax.post("sync",p,function(n){var t=[],o=n.pot,e=n.po,a=n.done||{add:[],del:[],fuz:[]},i=a.add.length,r=a.del.length,l=a.fuz.length,s=T;y.clear().load(e),D.load(y),i||r||l?(o?t.push(b(s._("Merged from %s"),o)):t.push(s._("Merged from source code")),i&&t.push(b(s._n("1 new string added","%s new strings added",i),i)),r&&t.push(b(s._n("1 obsolete string removed","%s obsolete strings removed",r),r)),l&&t.push(b(s._n("1 string marked Fuzzy","%s strings marked Fuzzy",l),l)),C(u).trigger("poUnsaved",[]),G(),d&&k.console&&function(n,t){var o=-1,e=t.add.length;for(;++o<e;)n.log(" + "+String(t.add[o]));for(e=t.del.length,o=0;o<e;o++)n.log(" - "+String(t.del[o]));for(e=t.fuz.length,o=0;o<e;o++)n.log(" ~ "+String(t.fuz[o]))}(console,a)):o?t.push(b(s._("Strings up to date with %s"),o)):t.push(s._("Strings up to date with source code")),_.notices.success(t.join(". ")),C(u).trigger("poMerge",[n]),c&&c()},c)}function B(){return n=n||function(){for(var n,t=-1,o=[],e=r,a=e.length;++t<a;)try{n=e[t],o.push(_.apis.create(n))}catch(n){_.notices.error(String(n))}return o}()}function O(e){var a;function i(){return(new Date).getTime()}c||w?_.notices.error("Logic error. APIs not available in current mode"):null==r||0===r.length||10<Math.round((i()-S)/1e3)?(l&&l.remove(),l=null,m&&m.remove(),m=null,z&&z.remove(),r=z=null,a=C('<div><div class="loco-loading"></div></div>').dialog({dialogClass:"loco-modal loco-modal-no-close",appendTo:"#loco-admin.wrap",title:"Loading..",modal:!0,autoOpen:!0,closeOnEscape:!1,resizable:!1,draggable:!1,position:M,height:200}),_.ajax.get("apis",{locale:String(I)},function(n,t,o){S=i(),0===(r=n&&n.apis||[]).length?l=A("loco-apis-empty",n.html):m=A("loco-apis-batch",n.html),a.remove(),e(r)})):(S=i(),e(r))}function A(n,t){var o=C(t);return o.attr("id",n),o.dialog({dialogClass:"loco-modal",appendTo:"#loco-admin.wrap",title:o.attr("title"),modal:!0,autoOpen:!1,closeOnEscape:!0,resizable:!1,draggable:!1,position:M}),o}function F(){O(function(n){n.length?function(){var p=T,n=D.current(),t=D.getTargetOffset(),o=n&&n.source(null,t),f='lang="'+String(I)+'" dir="'+(I.isRTL()?"RTL":"LTR")+'"',g=99;if(!o)return;function e(n){return!n.isDefaultPrevented()&&(!(0<=(t=n.which-49)&&t<10&&(o=h&&h.find("button.button-primary").eq(t))&&1===o.length)||(n.preventDefault(),n.stopPropagation(),o.click(),!1));var t,o}function a(n,t,o,e){var a=e.getId(),i=x[a],r=String(i+1),l=e.getUrl(),s=p._("Use this translation"),c=String(e),u=y&&y[a],d=C('<button class="button button-primary"></button>').attr("tabindex",String(1+g+i)).on("click",function(e,a){return function(n){n.preventDefault(),n.stopPropagation(),v();var t=D.current(),o=D.getTargetOffset();t&&t.source(null,o)===e?(t.translate(a,o),D.focus().reloadMessage(t)):_.notices.warn("Source changed since suggestion")}}(n,t));d.attr("accesskey",r),1<m.length&&(s+=" ("+r+")"),d.text(s),u&&u.replaceWith(C('<div class="loco-api loco-api-'+a+'"></div>').append(C('<a class="loco-api-credit" target="_blank" tabindex="-1"></a>').attr("href",l).text(c)).append(C("<blockquote "+f+"></blockquote>").text(t||"FAILED")).append(d)),++w===b&&(h&&h.dialog("option","title",p._("Suggested translations")+" — "+o.label),g+=w),0===i&&d.focus()}function v(n){h&&null==n&&h.dialog("close"),y=h=null,C(k).off("keydown",e)}function i(e){return function(n,t,o){a(n,u[e.getId()]=t,o,e)}}var h=(z=z||A("loco-apis-hint","<div></div>")).html("").append(C('<div class="loco-api"><p>Source text:</p></div>').append(C('<blockquote lang="en"></blockquote>').text(o))).dialog("option","title",p._("Loading suggestions")+"...").off("dialogclose").on("dialogclose",v).dialog("open"),r=n.translation(t);r&&C('<div class="loco-api"><p>Current translation:</p></div>').append(C("<blockquote "+f+"></blockquote>").text(r)).append(C('<button class="button"></button>').attr("tabindex",String(++g)).text(p._("Keep this translation")).on("click",function(n){n.preventDefault(),v()})).appendTo(h);var l,s,m=B(),b=m.length,c=-1,u=j[o]||(j[o]={}),y={},w=0,x={};for(;++c<b;)l=m[c],h.append((d=l,void 0,S=C('<div class="loco-api loco-api-loading"></div>').text("Calling "+d+" ..."),y[d.getId()]=S)),s=l.getId(),x[s]=c,u[s]?a(o,u[s],I,l):l.translate(o,I,i(l));var d,S;C(k).on("keydown",e)}():R()})}function N(n){return n.preventDefault(),O(function(n){n.length?function(){var e,a,i,r=0,l=T,t=!1,s=m.dialog("open"),n=s.find("form"),c=n.find("button.button-primary"),o=C("#loco-job-progress");function u(){c[0].disabled=!0}function d(){c.removeClass("loco-loading")}function p(n){o.text(n)}function f(n){var t=function(n){for(var t,o=B(),e=o.length,a=-1;++a<e;)if((t=o[a]).getId()===n)return t;_.notices.error("No "+n+" client")}(C(n.api).val()),o=n.existing.checked;p("Calculating...."),(e=t.createJob()).init(y,o),a=t.toString(),p(b(l._("%s unique source strings."),e.length.format(0))+" "+b(l._("%s characters will be sent for translation."),e.chars.format(0))),e.length?c[0].disabled=!1:u(),i=null}function g(n){e&&(t&&n.fuzzy(0,!0),D.pasteMessage(n),n===D.active&&D.setStatus(n),D.unsave(n,0),r++)}function v(n,t){var o=t?100*n/t:0;p(b(l._("Translation progress %s%%"),o.format(0)))}function h(){if(d(),e&&i){var n=i.todo();n&&_.notices.warn(b(l._n("Translation job aborted with one string remaining","Translation job aborted with %s strings remaining",n),n.format(0))).slow();var t=[],o=i.did();o&&t.push(b(l._n("%s string translated via %s","%s strings translated via %s",o),o.format(0),a)),r?t.push(b(l._n("%s string updated","%s strings updated",r),r.format(0))):t.push(l._("Nothing needed updating")),_.notices.success(t.join(". ")).slow(),i=e=null}r&&(G(),D.rebuildSearch()),s&&(s.off("dialogclose").dialog("close"),s=null),D.fire("poAuto")}d(),u(),_.notices.clear(),n.off("submit change"),f(n[0]),n.on("change",function(n){var t=n.target,o=t.name;return"api"!==o&&"existing"!==o||f(t.form),!0}).on("submit",function(n){n.preventDefault(),c.addClass("loco-loading"),u(),v(r=0),t=n.target.fuzzy.checked,i=e.dispatch().done(h).each(g).prog(v).stat()}),s.off("dialogclose").on("dialogclose",function(){e.abort(),s=null,h()})}():R()}),!1}function R(){l?l.dialog("open"):_.notices.error("Logic error. Unconfigured API modal missing")}function H(t){var n=C.extend({locale:String(y.locale()||"")},a||{});h&&h.applyCreds(n),o?(n=function(n){var t,o=new FormData;for(t in n)n.hasOwnProperty(t)&&o.append(t,n[t]);return o}(n)).append("po",new Blob([String(y)],{type:"application/x-gettext"}),String(n.path).split("/").pop()||"untitled.po"):n.data=String(y),_.ajax.post("save",n,function(n){t&&t(),D.save(!0),C("#loco-po-modified").text(n.datetime||"[datetime error]")},t)}function $(){return T._("Your changes will be lost if you continue without saving")}function W(e,a){return e.disabled=!1,C(e).on("click",function(n){var t=e.form,o=f;return"binary"===a&&(o=o.replace(/\.po$/,".mo")),t.path.value=o,t.source.value=y.toString(),!0}),!0}function Y(n){return n.preventDefault(),!1}function G(){var n=T,t=D.stats(),o=t.t,e=t.f,a=t.u,i=b(n._n("1 string","%s strings",o),o.format(0)),r=[];I&&(i=b(n._("%s%% translated"),t.p.replace("%",""))+", "+i,e&&r.push(b(n._("%s fuzzy"),e.format(0))),a&&r.push(b(n._("%s untranslated"),a.format(0))),r.length&&(i+=" ("+r.join(", ")+")")),C("#loco-po-status").text(i)}}(window,window.jQuery);
|
pub/js/min/podiff.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e,t,u){var i,o=[],n=e.loco,s=n.conf,a=0,r=s.paths.length-2,d=t.getElementById("loco-ui"),f=t.getElementById("loco-fs"),l=d.getElementsByTagName("form").item(0),m=d.getElementsByTagName("button"),c=u(d).find("div.diff-meta"),g=m.item(0),p=m.item(1);function h(){return u(d).removeClass("loading")}function v(e){return u(d).find("div.diff").html(e)}function C(e){return h(),u('<p class="error"></p>').text(e).appendTo(v(""))}function y(e,t){var n,a=t.getElementsByTagName("tr"),r=a.length,i=t.getAttribute("data-diff").split(/\D+/),o=i[0],s=i[1],d=i[2],f=i[3];function l(e,t,n){t<=n&&u("<span></span>").text(String(t)).prependTo(e)}for(e=0;e<r;e++)l((n=a[e].getElementsByTagName("td"))[0],o++,s),l(n[2],d++,f)}function j(a){i&&i.abort();var r=o[a];if(null!=r)return v(r),void h();v(""),u(d).addClass("loading"),i=n.ajax.post("diff",{lhs:s.paths[a],rhs:s.paths[a+1]},function(e,t,n){n===i&&((r=e&&e.html)?(v(o[a]=r).find("tbody").each(y),h()):C(e&&e.error||"Unknown error"))},function(e,t,n){e===i&&(i=null,C("Failed to generate diff"))})}function b(e){0<=e&&e<=r&&(j(a=e),function(){var e=a,t=e+1;g.disabled=r<=e,p.disabled=e<=0,c.addClass("jshide").removeClass("diff-meta-current"),c.eq(e).removeClass("jshide").addClass("diff-meta-current"),c.eq(t).removeClass("jshide")}())}f&&l&&n.fs.init(f).setForm(l),r&&(u(g).click
|
1 |
+
!function(e,t,u){var i,o=[],n=e.loco,s=n.conf,a=0,r=s.paths.length-2,d=t.getElementById("loco-ui"),f=t.getElementById("loco-fs"),l=d.getElementsByTagName("form").item(0),m=d.getElementsByTagName("button"),c=u(d).find("div.diff-meta"),g=m.item(0),p=m.item(1);function h(){return u(d).removeClass("loading")}function v(e){return u(d).find("div.diff").html(e)}function C(e){return h(),u('<p class="error"></p>').text(e).appendTo(v(""))}function y(e,t){var n,a=t.getElementsByTagName("tr"),r=a.length,i=t.getAttribute("data-diff").split(/\D+/),o=i[0],s=i[1],d=i[2],f=i[3];function l(e,t,n){t<=n&&u("<span></span>").text(String(t)).prependTo(e)}for(e=0;e<r;e++)l((n=a[e].getElementsByTagName("td"))[0],o++,s),l(n[2],d++,f)}function j(a){i&&i.abort();var r=o[a];if(null!=r)return v(r),void h();v(""),u(d).addClass("loading"),i=n.ajax.post("diff",{lhs:s.paths[a],rhs:s.paths[a+1]},function(e,t,n){n===i&&((r=e&&e.html)?(v(o[a]=r).find("tbody").each(y),h()):C(e&&e.error||"Unknown error"))},function(e,t,n){e===i&&(i=null,C("Failed to generate diff"))})}function b(e){0<=e&&e<=r&&(j(a=e),function(){var e=a,t=e+1;g.disabled=r<=e,p.disabled=e<=0,c.addClass("jshide").removeClass("diff-meta-current"),c.eq(e).removeClass("jshide").addClass("diff-meta-current"),c.eq(t).removeClass("jshide")}())}f&&l&&n.fs.init(f).setForm(l),r&&(u(g).on("click",function(e){return e.preventDefault(),b(a+1),!1}).parent().removeClass("jshide"),u(p).on("click",function(e){return e.preventDefault(),b(a-1),!1}).parent().removeClass("jshide")),b(0)}(window,document,jQuery);
|
pub/js/min/poinit.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(t,
|
1 |
+
!function(n,t,c){var i,e,a,l,o,r,u,s=n.loco,f=t.getElementById("loco-fs"),d=t.getElementById("loco-poinit"),v=f&&s.fs.init(f),g=(a=(e=d)["select-locale"],l=e["custom-locale"],o=e["use-selector"],r=c(a).on("focus",p).closest("fieldset").on("click",p)[0],u=c(l).on("focus",x).closest("fieldset").on("click",x)[0],c(o).change(m),m(),s.watchtext(l,function(n){c(l.form).triggerHandler("change")}),{val:function(){var n=b();return n?s.locale.parse(n):s.locale.clone({lang:"zxx"})}});function h(){return o[0].checked}function p(){y(o[0].checked=!0)}function x(){l.value||(l.value=b()),y(!(o[1].checked=!0))}function b(){var n=c(h()?a:l).serializeArray();return n[0]&&n[0].value||""}function m(){return y(h()),!0}function y(n){l.disabled=n,a.disabled=!n,u.className=n?"disabled":"active",r.className=n?"active":"disabled",I()}var z,A=(z=d["select-path"],{val:function(){var n=k("path");return n&&n.value},txt:function(){var n=k("path");return n&&c(n.parentNode).find("code.path").text()}});function k(n){var t=function(){var n=c(z).serializeArray()[0];return n&&n.value||null}();return t&&d[n+"["+t+"]"]}function w(e){c(d).find("button.button-primary").each(function(n,t){t.disabled=e})}function I(){var n=g&&g.val(),t=n&&n.isValid()&&"zxx"!==n.lang,e=A&&A.val(),a=t&&e;if(j(n),w(!0),a){var c=A.txt();c!==i?(i=c,f.path.value=i,v.listen(N).connect()):w(!1)}}function N(n){w(!n)}function j(e){var n=c(d),t=e&&e.toString("_")||"",a=t?"zxx"===t?"{locale}":t:"{invalid}";n.find("code.path span").each(function(n,t){t.textContent=a}),n.find("span.lang").each(function(n,t){!function(n,t){t&&"zxx"!==t.lang?(n.setAttribute("lang",t.lang),n.setAttribute("class",t.getIcon())):(n.setAttribute("lang",""),n.setAttribute("class","lang nolang"))}(t,e)})}function B(n){var t=n&&n.redirect;t&&location.assign(t)}c(d).on("change",I).on("submit",function(n){return n.preventDefault(),v.applyCreds(d),s.ajax.submit(n.target,B),!1}),j(g.val())}(window,document,jQuery);
|
pub/js/min/potinit.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(t,e
|
1 |
+
!function(t,n,e){var o=t.loco,i=n.getElementById("loco-fs"),r=n.getElementById("loco-potinit");function c(t){var n=t&&t.redirect;n&&location.assign(n)}e(r).on("submit",function(t){return t.preventDefault(),o.ajax.submit(t.target,c),!1}),i&&o.fs.init(i).setForm(r)}(window,document,jQuery);
|
pub/js/min/poview.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e,o,f){var a,c,i,l,r,p,n,s,u,d=e.loco,t=d.conf,h=d.po.ref.init(d,t),v=o.getElementById("loco-po");function g(){r.length&&(p.push([i,l]),c.push(r),r=[]),i=null}function m(t){return f('<ol class="msgcat"></ol>').attr("start",t).appendTo(a)}function x(t){n!==t&&(f("#loco-content")[t?"removeClass":"addClass"]("loco-invalid"),n=t)}a=v,c=d.fulltext.init(),r=[],p=[],s=!(n=!0),(u=f(a).find("li")).each(function(t,n){var e,o=f(n);o.find("span.po-none").length?g():(l=t,null==i&&(i=t),(e=o.find(".po-text").text())&&(r=r.concat(e.replace(/\\[ntvfab\\"]/g," ").split(" "))))}),g(),d.watchtext(f(a.parentNode).find("form.loco-filter")[0].q,function(t){t?function(t){var n,e,o,i=c.find(t),l=-1,r=i.length;if(f("ol",a).remove(),r){for(;++l<r;)for(o=m((n=(e=p[i[l]])[0])+1);n<=e[1];n++)o.append(u[n]);x(!0)}else x(!1),m(0).append(f("<li></li>").text(d.l10n._("Nothing matches the text filter")));s=!0,C()}(t):s&&(x(!0),s=!1,f("ol",a).remove(),m(1).append(u),C())}),f(v).removeClass("loco-loading");var w,y,C=(y=v.clientHeight-2,function(){var t=function(t,n){for(var e=t.offsetTop||0;(t=t.offsetParent)&&t!==n;)e+=t.offsetTop||0;return e}(v,o.body),n=e.innerHeight-t-20;w!==n&&(v.style.height=n<y?String(n)+"px":"",w=n)});C(),f(e).resize(C),f(v).click
|
1 |
+
!function(e,o,f){var a,c,i,l,r,p,n,s,u,d=e.loco,t=d.conf,h=d.po.ref.init(d,t),v=o.getElementById("loco-po");function g(){r.length&&(p.push([i,l]),c.push(r),r=[]),i=null}function m(t){return f('<ol class="msgcat"></ol>').attr("start",t).appendTo(a)}function x(t){n!==t&&(f("#loco-content")[t?"removeClass":"addClass"]("loco-invalid"),n=t)}a=v,c=d.fulltext.init(),r=[],p=[],s=!(n=!0),(u=f(a).find("li")).each(function(t,n){var e,o=f(n);o.find("span.po-none").length?g():(l=t,null==i&&(i=t),(e=o.find(".po-text").text())&&(r=r.concat(e.replace(/\\[ntvfab\\"]/g," ").split(" "))))}),g(),d.watchtext(f(a.parentNode).find("form.loco-filter")[0].q,function(t){t?function(t){var n,e,o,i=c.find(t),l=-1,r=i.length;if(f("ol",a).remove(),r){for(;++l<r;)for(o=m((n=(e=p[i[l]])[0])+1);n<=e[1];n++)o.append(u[n]);x(!0)}else x(!1),m(0).append(f("<li></li>").text(d.l10n._("Nothing matches the text filter")));s=!0,C()}(t):s&&(x(!0),s=!1,f("ol",a).remove(),m(1).append(u),C())}),f(v).removeClass("loco-loading");var w,y,C=(y=v.clientHeight-2,function(){var t=function(t,n){for(var e=t.offsetTop||0;(t=t.offsetParent)&&t!==n;)e+=t.offsetTop||0;return e}(v,o.body),n=e.innerHeight-t-20;w!==n&&(v.style.height=n<y?String(n)+"px":"",w=n)});C(),f(e).resize(C),f(v).on("click",function(t){var n=t.target;if(n.hasAttribute("href"))return t.preventDefault(),h.load(n.textContent),!1})}(window,document,window.jQuery);
|
pub/js/min/setup.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e,o,a){function n(e,o,n){function r(){i("Failed to contact remote API"),c=null}function u(){c&&(clearTimeout(c),c=null)}var c=setTimeout(r,3e3);return i(""),a.ajax({url:s.apiUrl+"/"+e+"/"+o+".jsonp?version="+encodeURIComponent(n),dataType:"jsonp",success:function(e,o,n){if(c){u();var t=e&&e.exact;o=e&&e.status;t?function(e){d["json-content"].value=e,a("#loco-remote-empty").hide(),a("#loco-remote-found").show()}(t):404===o?i("Sorry, we don't know a bundle by this name"):(l.notices.
|
1 |
+
!function(e,o,a){function n(e,o,n){function r(){i("Failed to contact remote API"),c=null}function u(){c&&(clearTimeout(c),c=null)}var c=setTimeout(r,3e3);return i(""),a.ajax({url:s.apiUrl+"/"+e+"/"+o+".jsonp?version="+encodeURIComponent(n),dataType:"jsonp",success:function(e,o,n){if(c){u();var t=e&&e.exact;o=e&&e.status;t?function(e){d["json-content"].value=e,a("#loco-remote-empty").hide(),a("#loco-remote-found").show()}(t):404===o?i("Sorry, we don't know a bundle by this name"):(l.notices.error(e.error||"Unknown server error"),r())}},error:function(){c&&(u(),r())},cache:!0}),{abort:u}}function i(e){d["json-content"].value="",a("#loco-remote-empty").show().find("span").text(e),a("#loco-remote-found").hide().removeClass("jshide")}var t,l=e.loco,s=l.conf||{},d=o.getElementById("loco-remote");a(d).find('button[type="button"]').on("click",function(e){return e.preventDefault(),t&&t.abort(),t=n(d.vendor.value,d.slug.value,d.version.value),!1}),a(d).find('input[type="reset"]').on("click",function(e){return e.preventDefault(),i(""),!1}),a.ajax({url:s.apiUrl+"/vendors.jsonp",dataType:"jsonp",success:function(e){for(var o,n,t=-1,r=e.length,u=a(d.vendor).html("");++t<r;)o=e[t][0],n=e[t][1],u.append(a("<option></option>").attr("value",o).text(n))},cache:!0})}(window,document,jQuery);
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: timwhitlock
|
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
|
4 |
Requires at least: 4.1
|
5 |
Requires PHP: 5.2.4
|
6 |
-
Tested up to: 5.
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -100,6 +100,13 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
100 |
|
101 |
== Changelog ==
|
102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
= 2.4.6 =
|
104 |
* Fixed critical bug syncing PO directly to source code
|
105 |
* Added plugin setting for allowing/disallowing missing POT
|
@@ -390,7 +397,7 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
390 |
|
391 |
== Upgrade Notice ==
|
392 |
|
393 |
-
= 2.
|
394 |
* Various improvements and bugfixes
|
395 |
|
396 |
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
|
4 |
Requires at least: 4.1
|
5 |
Requires PHP: 5.2.4
|
6 |
+
Tested up to: 5.6
|
7 |
+
Stable tag: 2.5.0
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
100 |
|
101 |
== Changelog ==
|
102 |
|
103 |
+
= 2.5.0 =
|
104 |
+
* PHP 8.0.0 compatibility
|
105 |
+
* Bumped WordPress version to 5.6.0
|
106 |
+
* Added JSON translation file generation
|
107 |
+
* Added custom JSON loading to LoadHelper
|
108 |
+
* Disabled emoji image replacement on our admin screens
|
109 |
+
|
110 |
= 2.4.6 =
|
111 |
* Fixed critical bug syncing PO directly to source code
|
112 |
* Added plugin setting for allowing/disallowing missing POT
|
397 |
|
398 |
== Upgrade Notice ==
|
399 |
|
400 |
+
= 2.5.0 =
|
401 |
* Various improvements and bugfixes
|
402 |
|
403 |
|
src/Locale.php
CHANGED
@@ -179,21 +179,24 @@ class Loco_Locale implements JsonSerializable {
|
|
179 |
|
180 |
|
181 |
/**
|
182 |
-
*
|
183 |
-
* Note that no dynamic translation of English name is performed, but can be altered with loco_parse_locale filter
|
184 |
* @return string | null
|
185 |
*/
|
186 |
-
public function getName(){
|
187 |
$name = $this->name;
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
$name = $_name;
|
195 |
-
}
|
196 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
return $name;
|
198 |
}
|
199 |
return null;
|
@@ -282,10 +285,11 @@ class Loco_Locale implements JsonSerializable {
|
|
282 |
public function fetchName( Loco_api_WordPressTranslations $api ){
|
283 |
$tag = (string) $this;
|
284 |
// pull from WordPress translations API if network allowed
|
285 |
-
|
286 |
-
|
|
|
287 |
}
|
288 |
-
return $this->getName();
|
289 |
}
|
290 |
|
291 |
|
179 |
|
180 |
|
181 |
/**
|
182 |
+
* @param bool whether to get name in current display language
|
|
|
183 |
* @return string | null
|
184 |
*/
|
185 |
+
public function getName( $translate = true ){
|
186 |
$name = $this->name;
|
187 |
+
// use canonical native name only when current language matches
|
188 |
+
// deliberately not matching whole tag such that fr_CA would show native name of fr_FR
|
189 |
+
if( $translate ){
|
190 |
+
$locale = self::parse( function_exists('get_user_locale') ? get_user_locale() : get_locale() );
|
191 |
+
if( $this->lang === $locale->lang && $this->_name ){
|
192 |
+
$name = $this->_name;
|
|
|
|
|
193 |
}
|
194 |
+
/*/ Note that no dynamic translation of English name is performed, but can be filtered with loco_parse_locale
|
195 |
+
else {
|
196 |
+
$name = __($name,'loco-translate-languages');
|
197 |
+
}*/
|
198 |
+
}
|
199 |
+
if( is_string($name) && '' !== $name ){
|
200 |
return $name;
|
201 |
}
|
202 |
return null;
|
285 |
public function fetchName( Loco_api_WordPressTranslations $api ){
|
286 |
$tag = (string) $this;
|
287 |
// pull from WordPress translations API if network allowed
|
288 |
+
$locale = $api->getLocale($tag);
|
289 |
+
if( $locale ){
|
290 |
+
$this->setName( $locale->getName(false), $locale->getNativeName() );
|
291 |
}
|
292 |
+
return $this->getName(false);
|
293 |
}
|
294 |
|
295 |
|
src/admin/DebugController.php
CHANGED
@@ -63,7 +63,8 @@ class Loco_admin_DebugController extends Loco_mvc_AdminController {
|
|
63 |
Loco_data_Session::close();*/
|
64 |
|
65 |
// try some notices
|
66 |
-
Loco_error_AdminNotices::add( new Loco_error_Success('This is a sample success message') );
|
|
|
67 |
Loco_error_AdminNotices::add( new Loco_error_Warning('This is a sample warning') );
|
68 |
Loco_error_AdminNotices::add( new Loco_error_Exception('This is a sample error') );
|
69 |
Loco_error_AdminNotices::add( new Loco_error_Debug('This is a sample debug message') );
|
63 |
Loco_data_Session::close();*/
|
64 |
|
65 |
// try some notices
|
66 |
+
Loco_error_AdminNotices::add( new Loco_error_Success('This is a sample success message. It should disappear in a moment') );
|
67 |
+
Loco_error_AdminNotices::add( new Loco_error_Notice('This is a sample info message') );
|
68 |
Loco_error_AdminNotices::add( new Loco_error_Warning('This is a sample warning') );
|
69 |
Loco_error_AdminNotices::add( new Loco_error_Exception('This is a sample error') );
|
70 |
Loco_error_AdminNotices::add( new Loco_error_Debug('This is a sample debug message') );
|
src/admin/RootController.php
CHANGED
@@ -83,8 +83,13 @@ class Loco_admin_RootController extends Loco_admin_list_BaseController {
|
|
83 |
|
84 |
$this->set('title', __('Welcome to Loco Translate','loco-translate') );
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
return $this->view('admin/root');
|
87 |
}
|
88 |
|
89 |
-
|
90 |
-
}
|
83 |
|
84 |
$this->set('title', __('Welcome to Loco Translate','loco-translate') );
|
85 |
|
86 |
+
// Deprecation warnings:
|
87 |
+
// At time of writing, WordPress below 5.2 accounts for about a quarter, whereas PHP below is 5.6 half of that.
|
88 |
+
/* if( version_compare(PHP_VERSION,'5.6.20','<') || version_compare($GLOBALS['wp_version'],'5.2','<') ){
|
89 |
+
Loco_error_AdminNotices::warn('The next release of Loco Translate will require at least WordPress 5.2 and PHP 5.6.20'); // @codeCoverageIgnore
|
90 |
+
}*/
|
91 |
+
|
92 |
return $this->view('admin/root');
|
93 |
}
|
94 |
|
95 |
+
}
|
|
src/admin/bundle/BaseController.php
CHANGED
@@ -61,7 +61,7 @@ abstract class Loco_admin_bundle_BaseController extends Loco_mvc_AdminController
|
|
61 |
/**
|
62 |
* @return Loco_package_Project
|
63 |
*/
|
64 |
-
|
65 |
if( ! $this->project ){
|
66 |
$bundle = $this->getBundle();
|
67 |
$domain = $this->get('domain');
|
@@ -78,6 +78,19 @@ abstract class Loco_admin_bundle_BaseController extends Loco_mvc_AdminController
|
|
78 |
}
|
79 |
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
/**
|
82 |
* @return Loco_admin_Navigation
|
83 |
*/
|
61 |
/**
|
62 |
* @return Loco_package_Project
|
63 |
*/
|
64 |
+
protected function getProject(){
|
65 |
if( ! $this->project ){
|
66 |
$bundle = $this->getBundle();
|
67 |
$domain = $this->get('domain');
|
78 |
}
|
79 |
|
80 |
|
81 |
+
/**
|
82 |
+
* @return Loco_package_Project|null
|
83 |
+
*/
|
84 |
+
protected function getOptionalProject(){
|
85 |
+
try {
|
86 |
+
return $this->getProject();
|
87 |
+
}
|
88 |
+
catch( Exception $e ){
|
89 |
+
return null;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
|
94 |
/**
|
95 |
* @return Loco_admin_Navigation
|
96 |
*/
|
src/admin/config/DebugController.php
CHANGED
@@ -152,14 +152,17 @@ class Loco_admin_config_DebugController extends Loco_admin_config_BaseController
|
|
152 |
// alert to known system setting problems:
|
153 |
if( version_compare(PHP_VERSION,'7.4','<') ){
|
154 |
if( get_magic_quotes_gpc() ){
|
155 |
-
Loco_error_AdminNotices::
|
156 |
}
|
157 |
if( get_magic_quotes_runtime() ){
|
158 |
-
Loco_error_AdminNotices::
|
|
|
|
|
|
|
159 |
}
|
160 |
}
|
161 |
|
162 |
return $this->view('admin/config/debug', compact('breadcrumb','versions','encoding','memory','fs','debug') );
|
163 |
}
|
164 |
-
|
165 |
-
}
|
152 |
// alert to known system setting problems:
|
153 |
if( version_compare(PHP_VERSION,'7.4','<') ){
|
154 |
if( get_magic_quotes_gpc() ){
|
155 |
+
Loco_error_AdminNotices::info('You have "magic_quotes_gpc" enabled. We recommend you disable this in PHP');
|
156 |
}
|
157 |
if( get_magic_quotes_runtime() ){
|
158 |
+
Loco_error_AdminNotices::info('You have "magic_quotes_runtime" enabled. We recommend you disable this in PHP');
|
159 |
+
}
|
160 |
+
if( version_compare(PHP_VERSION,'5.6.20','<') ){
|
161 |
+
Loco_error_AdminNotices::info('Your PHP version is very old. We recommend you upgrade');
|
162 |
}
|
163 |
}
|
164 |
|
165 |
return $this->view('admin/config/debug', compact('breadcrumb','versions','encoding','memory','fs','debug') );
|
166 |
}
|
167 |
+
|
168 |
+
}
|
src/admin/config/VersionController.php
CHANGED
@@ -25,41 +25,65 @@ class Loco_admin_config_VersionController extends Loco_admin_config_BaseControll
|
|
25 |
|
26 |
// current plugin version
|
27 |
$version = loco_plugin_version();
|
28 |
-
|
29 |
-
// check for auto-update availability
|
30 |
if( $updates = get_site_transient('update_plugins') ){
|
31 |
$key = loco_plugin_self();
|
32 |
if( isset($updates->response[$key]) ){
|
33 |
$latest = $updates->response[$key]->new_version;
|
34 |
// if current version is lower than latest, prompt update
|
35 |
if( version_compare($version,$latest,'<') ){
|
36 |
-
$this->
|
37 |
}
|
38 |
}
|
39 |
}
|
40 |
-
|
41 |
// notify if running a development snapshot, but only if ahead of latest stable
|
42 |
if( '-dev' === substr($version,-4) ){
|
43 |
$this->set( 'devel', true );
|
44 |
}
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
|
50 |
|
51 |
-
|
52 |
/**
|
53 |
* @param string version
|
54 |
-
* @return void
|
55 |
*/
|
56 |
-
private function
|
57 |
$action = 'upgrade-plugin_'.loco_plugin_self();
|
58 |
$link = admin_url( 'update.php?action=upgrade-plugin&plugin='.rawurlencode(loco_plugin_self()) );
|
59 |
-
|
60 |
$this->set('update', $version );
|
61 |
$this->set('update_href', wp_nonce_url( $link, $action ) );
|
62 |
}
|
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
|
65 |
}
|
25 |
|
26 |
// current plugin version
|
27 |
$version = loco_plugin_version();
|
|
|
|
|
28 |
if( $updates = get_site_transient('update_plugins') ){
|
29 |
$key = loco_plugin_self();
|
30 |
if( isset($updates->response[$key]) ){
|
31 |
$latest = $updates->response[$key]->new_version;
|
32 |
// if current version is lower than latest, prompt update
|
33 |
if( version_compare($version,$latest,'<') ){
|
34 |
+
$this->setLocoUpdate($latest);
|
35 |
}
|
36 |
}
|
37 |
}
|
|
|
38 |
// notify if running a development snapshot, but only if ahead of latest stable
|
39 |
if( '-dev' === substr($version,-4) ){
|
40 |
$this->set( 'devel', true );
|
41 |
}
|
42 |
+
|
43 |
+
|
44 |
+
// check PHP version, noting that we want to move to minimum version 5.6 as per latest WordPress
|
45 |
+
$phpversion = PHP_VERSION;
|
46 |
+
if( version_compare($phpversion,'5.6.20','<') ){
|
47 |
+
$this->setPhpUpdate('5.6.20');
|
48 |
+
}
|
49 |
+
|
50 |
+
|
51 |
+
// check WordPress version, noting that v5.2 bumped PHP min version to 5.6.20, as above
|
52 |
+
$wpversion = $GLOBALS['wp_version'];
|
53 |
+
if( version_compare($wpversion,'5.2','<') ){
|
54 |
+
$this->setWpUpdate('5.2');
|
55 |
+
}
|
56 |
+
|
57 |
+
return $this->view('admin/config/version', compact('breadcrumb','version','phpversion','wpversion') );
|
58 |
}
|
59 |
|
60 |
|
|
|
61 |
/**
|
62 |
* @param string version
|
|
|
63 |
*/
|
64 |
+
private function setLocoUpdate( $version ){
|
65 |
$action = 'upgrade-plugin_'.loco_plugin_self();
|
66 |
$link = admin_url( 'update.php?action=upgrade-plugin&plugin='.rawurlencode(loco_plugin_self()) );
|
|
|
67 |
$this->set('update', $version );
|
68 |
$this->set('update_href', wp_nonce_url( $link, $action ) );
|
69 |
}
|
70 |
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @param string minimum recommended version
|
74 |
+
*/
|
75 |
+
private function setPhpUpdate( $version ){
|
76 |
+
$this->set('phpupdate',$version);
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @param string minimum recommended version
|
82 |
+
*/
|
83 |
+
private function setWpUpdate( $version ){
|
84 |
+
$this->set('wpupdate',$version);
|
85 |
+
$this->set('wpupdate_href', admin_url('update-core.php') );
|
86 |
+
}
|
87 |
+
|
88 |
|
89 |
}
|
src/admin/file/BaseController.php
CHANGED
@@ -118,18 +118,15 @@ abstract class Loco_admin_file_BaseController extends Loco_admin_bundle_BaseCont
|
|
118 |
}
|
119 |
}
|
120 |
|
121 |
-
// Provide common language creation link if project scope is
|
122 |
-
|
123 |
-
|
124 |
$args = array( 'bundle' => $bundle->getHandle(), 'domain' => $project->getId() );
|
125 |
$this->set( 'msginit', new Loco_mvc_ViewParams( array (
|
126 |
'href' => Loco_mvc_AdminRouter::generate( $prefix.'-msginit', $args ),
|
127 |
'text' => __('New language','loco-translate'),
|
128 |
) ) );
|
129 |
}
|
130 |
-
catch( Exception $e ){
|
131 |
-
|
132 |
-
}
|
133 |
}
|
134 |
|
135 |
|
118 |
}
|
119 |
}
|
120 |
|
121 |
+
// Provide common language creation link if project scope is valid
|
122 |
+
$project = $this->getOptionalProject();
|
123 |
+
if( $project ){
|
124 |
$args = array( 'bundle' => $bundle->getHandle(), 'domain' => $project->getId() );
|
125 |
$this->set( 'msginit', new Loco_mvc_ViewParams( array (
|
126 |
'href' => Loco_mvc_AdminRouter::generate( $prefix.'-msginit', $args ),
|
127 |
'text' => __('New language','loco-translate'),
|
128 |
) ) );
|
129 |
}
|
|
|
|
|
|
|
130 |
}
|
131 |
|
132 |
|
src/admin/file/DiffController.php
CHANGED
@@ -4,7 +4,6 @@
|
|
4 |
*/
|
5 |
class Loco_admin_file_DiffController extends Loco_admin_file_BaseController {
|
6 |
|
7 |
-
|
8 |
/**
|
9 |
* {@inheritdoc}
|
10 |
*/
|
@@ -18,44 +17,29 @@ class Loco_admin_file_DiffController extends Loco_admin_file_BaseController {
|
|
18 |
$action = 'restore:'.$path;
|
19 |
// set up view now in case of late failure
|
20 |
$fields = new Loco_mvc_HiddenFields( array() );
|
21 |
-
$fields->setNonce(
|
22 |
$this->set( 'hidden', $fields );
|
23 |
// attempt rollback if valid nonce posted back with backup path
|
24 |
if( $this->checkNonce($action) ){
|
25 |
try {
|
26 |
$post = Loco_mvc_PostParams::get();
|
27 |
-
$api = new Loco_api_WordPressFileSystem;
|
28 |
// Restore
|
29 |
-
if( $
|
|
|
30 |
$target = new Loco_fs_File( $path );
|
31 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
32 |
-
//
|
33 |
-
$
|
34 |
-
$
|
35 |
-
|
36 |
-
$backups = new Loco_fs_Revisions($pofile);
|
37 |
-
if( $num_backups = Loco_data_Settings::get()->num_backups ){
|
38 |
-
$api->authorizeCopy($pofile);
|
39 |
-
$backups->create();
|
40 |
-
}
|
41 |
-
// authorize master for file modification
|
42 |
-
$api->authorizeUpdate($pofile);
|
43 |
-
// recompile binary if it exists
|
44 |
-
$mofile = $pofile->cloneExtension('mo');
|
45 |
-
if( $mofile->exists() ){
|
46 |
-
$mofile->putContents( $data->msgfmt() );
|
47 |
-
}
|
48 |
-
// replacing source file last in case of failures
|
49 |
-
$pofile->putContents( $source );
|
50 |
Loco_error_AdminNotices::success( __('File restored','loco-translate') );
|
51 |
-
// prune to configured level after success
|
52 |
-
$backups->prune( $num_backups );
|
53 |
-
$backups = null;
|
54 |
}
|
55 |
-
// Delete
|
56 |
-
else if( $
|
|
|
57 |
$target = new Loco_fs_File( $path );
|
58 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
|
|
59 |
$api->authorizeDelete( $target );
|
60 |
$target->unlink();
|
61 |
Loco_error_AdminNotices::success( __('File deleted','loco-translate') );
|
4 |
*/
|
5 |
class Loco_admin_file_DiffController extends Loco_admin_file_BaseController {
|
6 |
|
|
|
7 |
/**
|
8 |
* {@inheritdoc}
|
9 |
*/
|
17 |
$action = 'restore:'.$path;
|
18 |
// set up view now in case of late failure
|
19 |
$fields = new Loco_mvc_HiddenFields( array() );
|
20 |
+
$fields->setNonce($action);
|
21 |
$this->set( 'hidden', $fields );
|
22 |
// attempt rollback if valid nonce posted back with backup path
|
23 |
if( $this->checkNonce($action) ){
|
24 |
try {
|
25 |
$post = Loco_mvc_PostParams::get();
|
|
|
26 |
// Restore
|
27 |
+
if( $post->has('backup') ){
|
28 |
+
$path = $post->backup;
|
29 |
$target = new Loco_fs_File( $path );
|
30 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
31 |
+
// Recompile back to current version. Note that restoring a backup also backs up current file
|
32 |
+
$data = Loco_gettext_Data::fromSource( $target->getContents() );
|
33 |
+
$compiler = new Loco_gettext_Compiler($pofile);
|
34 |
+
$compiler->writeAll( $data, $this->getOptionalProject() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
Loco_error_AdminNotices::success( __('File restored','loco-translate') );
|
|
|
|
|
|
|
36 |
}
|
37 |
+
// Delete an old backup from revision list
|
38 |
+
else if( $post->has('delete') ){
|
39 |
+
$path = $post->delete;
|
40 |
$target = new Loco_fs_File( $path );
|
41 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
42 |
+
$api = new Loco_api_WordPressFileSystem;
|
43 |
$api->authorizeDelete( $target );
|
44 |
$target->unlink();
|
45 |
Loco_error_AdminNotices::success( __('File deleted','loco-translate') );
|
src/admin/file/MoveController.php
CHANGED
@@ -34,9 +34,14 @@ class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
|
|
34 |
}
|
35 |
$target = new Loco_fs_LocaleFile( $post->dest );
|
36 |
$ext = $target->extension();
|
|
|
|
|
|
|
|
|
|
|
37 |
// primary file extension should only be permitted to change between po and pot
|
38 |
if( $ext !== $file->extension() && 'po' !== $ext && 'pot' !== $ext ){
|
39 |
-
Loco_error_AdminNotices::err('Invalid file extension,
|
40 |
break;
|
41 |
}
|
42 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
34 |
}
|
35 |
$target = new Loco_fs_LocaleFile( $post->dest );
|
36 |
$ext = $target->extension();
|
37 |
+
// could be a directory when we wanted the full path to the file
|
38 |
+
if( $target->isDirectory() ){
|
39 |
+
Loco_error_AdminNotices::err('Enter the full path to the .'.$file->extension().' file, not the directory');
|
40 |
+
break;
|
41 |
+
}
|
42 |
// primary file extension should only be permitted to change between po and pot
|
43 |
if( $ext !== $file->extension() && 'po' !== $ext && 'pot' !== $ext ){
|
44 |
+
Loco_error_AdminNotices::err('Invalid file extension, .po or .pot only');
|
45 |
break;
|
46 |
}
|
47 |
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
src/admin/init/InitPoController.php
CHANGED
@@ -193,6 +193,7 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
|
|
193 |
if( $potfile && $potfile->exists() ){
|
194 |
$meta = Loco_gettext_Metadata::load($potfile);
|
195 |
$total = $meta->getTotal();
|
|
|
196 |
$summary = sprintf( _n('One string found in %2$s','%s strings found in %s',$total,'loco-translate'), number_format($total), $potfile->basename() );
|
197 |
$this->set( 'pot', new Loco_mvc_ViewParams( array(
|
198 |
'name' => $potfile->basename(),
|
193 |
if( $potfile && $potfile->exists() ){
|
194 |
$meta = Loco_gettext_Metadata::load($potfile);
|
195 |
$total = $meta->getTotal();
|
196 |
+
// translators: 1: Number of strings; 2: Name of POT file; e.g. "100 strings found in file.pot"
|
197 |
$summary = sprintf( _n('One string found in %2$s','%s strings found in %s',$total,'loco-translate'), number_format($total), $potfile->basename() );
|
198 |
$this->set( 'pot', new Loco_mvc_ViewParams( array(
|
199 |
'name' => $potfile->basename(),
|
src/ajax/MsginitController.php
CHANGED
@@ -111,24 +111,19 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
|
|
111 |
}
|
112 |
}
|
113 |
|
|
|
114 |
$data->localize( $locale, $headers );
|
115 |
|
116 |
-
$
|
117 |
-
$
|
118 |
-
//$jssize = $jsfile && ( $sub = $data->splitJs() ) ? $jsfile->putContents($data->jedize($domain,$sub)) : 0;
|
119 |
|
120 |
-
|
121 |
-
$this->set( 'debug', array (
|
122 |
'poname' => $pofile->basename(),
|
123 |
-
'posize' => $posize,
|
124 |
-
'mosize' => $mosize,
|
125 |
-
//'jssize' => $jssize,
|
126 |
'source' => $potfile ? $potfile->basename() : '',
|
127 |
-
) );
|
128 |
-
|
129 |
// push recent items on file creation
|
130 |
-
|
131 |
-
Loco_data_RecentItems::get()->pushBundle( $bundle )->persist();
|
132 |
|
133 |
// front end will redirect to the editor
|
134 |
$type = strtolower( $this->get('type') );
|
@@ -140,6 +135,5 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
|
|
140 |
|
141 |
return parent::render();
|
142 |
}
|
143 |
-
|
144 |
-
|
145 |
}
|
111 |
}
|
112 |
}
|
113 |
|
114 |
+
$locale->ensureName( new Loco_api_WordPressTranslations );
|
115 |
$data->localize( $locale, $headers );
|
116 |
|
117 |
+
$compiler = new Loco_gettext_Compiler($pofile);
|
118 |
+
$compiler->writeAll($data,$project);
|
|
|
119 |
|
120 |
+
$this->set('debug',new Loco_mvc_ViewParams( array(
|
|
|
121 |
'poname' => $pofile->basename(),
|
|
|
|
|
|
|
122 |
'source' => $potfile ? $potfile->basename() : '',
|
123 |
+
) ) );
|
124 |
+
|
125 |
// push recent items on file creation
|
126 |
+
Loco_data_RecentItems::get()->pushBundle($bundle)->persist();
|
|
|
127 |
|
128 |
// front end will redirect to the editor
|
129 |
$type = strtolower( $this->get('type') );
|
135 |
|
136 |
return parent::render();
|
137 |
}
|
138 |
+
|
|
|
139 |
}
|
src/ajax/SaveController.php
CHANGED
@@ -25,7 +25,6 @@ class Loco_ajax_SaveController extends Loco_ajax_common_BundleController {
|
|
25 |
|
26 |
$pofile = new Loco_fs_LocaleFile( $path );
|
27 |
$pofile->normalize( loco_constant('WP_CONTENT_DIR') );
|
28 |
-
$poexists = $pofile->exists();
|
29 |
|
30 |
// ensure we only deal with PO/POT source files.
|
31 |
// posting of MO file paths is permitted when PO is missing, but we're about to fix that
|
@@ -40,8 +39,8 @@ class Loco_ajax_SaveController extends Loco_ajax_common_BundleController {
|
|
40 |
throw new Loco_error_Exception('Invalid file path');
|
41 |
}
|
42 |
|
43 |
-
//
|
44 |
-
$
|
45 |
|
46 |
// data posted may be either 'multipart/form-data' (recommended for large files)
|
47 |
if( isset($_FILES['po']) ){
|
@@ -57,96 +56,44 @@ class Loco_ajax_SaveController extends Loco_ajax_common_BundleController {
|
|
57 |
$head = $data->getHeaders();
|
58 |
$head['Language'] = strtr( $locale, '-', '_' );
|
59 |
}
|
60 |
-
|
61 |
-
// backup existing file before overwriting, but continue if backups fails
|
62 |
-
if( $poexists ){
|
63 |
-
$backups = new Loco_fs_Revisions($pofile);
|
64 |
-
$backups->rotate($api);
|
65 |
-
}
|
66 |
|
67 |
-
// commit file directly to disk
|
68 |
-
$
|
69 |
-
$bytes = $pofile->putContents( $data->msgcat() );
|
70 |
$mtime = $pofile->modified();
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
// add bundle to recent items on file creation
|
|
|
73 |
try {
|
74 |
$bundle = $this->getBundle();
|
75 |
-
Loco_data_RecentItems::get()->pushBundle(
|
76 |
}
|
77 |
catch( Exception $e ){
|
78 |
-
// editor permitted to save files not in a bundle, so catching failures
|
79 |
$bundle = null;
|
80 |
}
|
81 |
-
|
82 |
-
// start success data with bytes written and timestamp
|
83 |
-
$this->set('locale', $locale );
|
84 |
-
$this->set('pobytes', $bytes );
|
85 |
-
$this->set('poname', $pofile->basename() );
|
86 |
-
$this->set('modified', $mtime);
|
87 |
-
$this->set('datetime', Loco_mvc_ViewParams::date_i18n($mtime) );
|
88 |
|
89 |
-
// Compile MO and JSON files
|
90 |
if( $locale ){
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
$this->
|
96 |
-
|
97 |
-
|
98 |
-
catch( Exception $e ){
|
99 |
-
Loco_error_AdminNotices::debug( $e->getMessage() );
|
100 |
-
Loco_error_AdminNotices::warn( __('PO file saved, but MO file compilation failed','loco-translate') );
|
101 |
-
$this->set( 'mobytes', 0 );
|
102 |
-
// prevent further compilation if MO failed
|
103 |
-
// $compile = false;
|
104 |
}
|
|
|
|
|
105 |
}
|
106 |
-
else {
|
107 |
-
Loco_error_AdminNotices::success( __('POT file saved','loco-translate') );
|
108 |
-
}
|
109 |
-
|
110 |
-
/*/ Compile JSON translations for WordPress >= 5
|
111 |
-
if( $compile && $bundle && function_exists('wp_set_script_translations') ){
|
112 |
-
$bytes = 0;
|
113 |
-
try {
|
114 |
-
list($domain) = Loco_package_Project::splitId( $this->get('domain') );
|
115 |
-
|
116 |
-
// hash file reference according to WordPress logic (see load_script_textdomain)
|
117 |
-
$base = $pofile->dirname().'/'.$pofile->filename();
|
118 |
-
foreach( $data->exportRefs('\\.jsx?') as $ref => $messages ){
|
119 |
-
if( '.min.js' === substr($ref,-7) ) {
|
120 |
-
$ref = substr($ref,0,-7).'.js';
|
121 |
-
}
|
122 |
-
// filter similarly to WP's `load_script_textdomain_relative_path` which is called from `load_script_textdomain`
|
123 |
-
$ref = apply_filters( 'loco_script_relative_path', $ref, $domain );
|
124 |
-
// referenced file must exist in bundle, or will never be loaded and so not require a .json file
|
125 |
-
$file = new Loco_fs_File( $bundle->getDirectoryPath().'/'.$ref );
|
126 |
-
if( $file->exists() && ! $file->isDirectory() ){
|
127 |
-
$file = new Loco_fs_File( $base.'-'.md5($ref).'.json' );
|
128 |
-
$api->authorizeSave( $file );
|
129 |
-
$bytes += $file->putContents( $data->jedize($domain,$messages) );
|
130 |
-
}
|
131 |
-
else {
|
132 |
-
Loco_error_AdminNotices::warn( sprintf('%s not found in bundle',$ref) );
|
133 |
-
}
|
134 |
-
}
|
135 |
|
136 |
-
|
137 |
-
|
138 |
-
$file = $pofile->cloneExtension('json');
|
139 |
-
$api->authorizeSave( $file );
|
140 |
-
$bytes = $file->putContents( $data->jedize($domain,$messages) );
|
141 |
-
}
|
142 |
-
}
|
143 |
-
catch( Exception $e ){
|
144 |
-
Loco_error_AdminNotices::debug( $e->getMessage() );
|
145 |
-
Loco_error_AdminNotices::warn( __('JSON compilation failed','loco-translate') );
|
146 |
-
}
|
147 |
-
$this->set( 'jsbytes', $bytes );
|
148 |
-
}*/
|
149 |
-
|
150 |
return parent::render();
|
151 |
}
|
152 |
|
25 |
|
26 |
$pofile = new Loco_fs_LocaleFile( $path );
|
27 |
$pofile->normalize( loco_constant('WP_CONTENT_DIR') );
|
|
|
28 |
|
29 |
// ensure we only deal with PO/POT source files.
|
30 |
// posting of MO file paths is permitted when PO is missing, but we're about to fix that
|
39 |
throw new Loco_error_Exception('Invalid file path');
|
40 |
}
|
41 |
|
42 |
+
// Prepare compiler for all save operations. PO/MO/JSON, or just POT
|
43 |
+
$compiler = new Loco_gettext_Compiler($pofile);
|
44 |
|
45 |
// data posted may be either 'multipart/form-data' (recommended for large files)
|
46 |
if( isset($_FILES['po']) ){
|
56 |
$head = $data->getHeaders();
|
57 |
$head['Language'] = strtr( $locale, '-', '_' );
|
58 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
+
// commit PO file directly to disk
|
61 |
+
$bytes = $compiler->writePo($data);
|
|
|
62 |
$mtime = $pofile->modified();
|
63 |
|
64 |
+
// start success data with bytes written and timestamp
|
65 |
+
$this->set('locale', $locale );
|
66 |
+
$this->set('pobytes', $bytes );
|
67 |
+
$this->set('poname', $pofile->basename() );
|
68 |
+
$this->set('modified', $mtime);
|
69 |
+
$this->set('datetime', Loco_mvc_ViewParams::date_i18n($mtime) );
|
70 |
+
|
71 |
// add bundle to recent items on file creation
|
72 |
+
// editor permitted to save files not in a bundle, so catching failures
|
73 |
try {
|
74 |
$bundle = $this->getBundle();
|
75 |
+
Loco_data_RecentItems::get()->pushBundle($bundle)->persist();
|
76 |
}
|
77 |
catch( Exception $e ){
|
|
|
78 |
$bundle = null;
|
79 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
|
81 |
+
// Compile MO and JSON files if PO is localised and not POT (template)
|
82 |
if( $locale ){
|
83 |
+
$mobytes = $compiler->writeMo($data);
|
84 |
+
$numjson = 0;
|
85 |
+
// Project required for JSON writes
|
86 |
+
if( $bundle ){
|
87 |
+
$project = $this->getProject($bundle);
|
88 |
+
$jsons = $compiler->writeJson($project,$data);
|
89 |
+
$numjson = $jsons->count();
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
}
|
91 |
+
$this->set( 'mobytes', $mobytes );
|
92 |
+
$this->set( 'numjson', $numjson );
|
93 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
+
// Final summary depending on whether MO and JSON compiled
|
96 |
+
$compiler->getSummary();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
return parent::render();
|
98 |
}
|
99 |
|
src/ajax/UploadController.php
CHANGED
@@ -65,35 +65,17 @@ class Loco_ajax_UploadController extends Loco_ajax_common_BundleController {
|
|
65 |
if( $pofile->filename() !== $dummy->filename() ){
|
66 |
throw new Loco_error_Exception( sprintf('File must be named %s', $pofile->filename().'.'.$ext ) );
|
67 |
}
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
if( 'po' === $ext && $pofile->md5() === $dummy->md5() ){
|
72 |
-
throw new Loco_error_Exception( __('Your file is identical to the existing one','loco-translate') );
|
73 |
-
}
|
74 |
-
// backup existing PO file before overwriting, but proceed on failure
|
75 |
-
$backups = new Loco_fs_Revisions($pofile);
|
76 |
-
$backups->rotate($api);
|
77 |
-
$api->authorizeUpdate($pofile);
|
78 |
-
}
|
79 |
-
else {
|
80 |
-
$api->authorizeCreate( $pofile );
|
81 |
-
}
|
82 |
-
// Putting file contents, because remote file system may not be able to read from tmp/upload location
|
83 |
-
if( 'mo' === $ext ){
|
84 |
-
$pofile->putContents( $pomo->msgcat() );
|
85 |
-
$bin = $dummy->getContents(); // <- use binary as-is.
|
86 |
-
}
|
87 |
-
else {
|
88 |
-
$pofile->putContents( $dummy->getContents() ); // <- use po source as is
|
89 |
-
$bin = $pomo->msgfmt(); // <- compile binary from PO
|
90 |
-
}
|
91 |
-
// should have binary data unless something went wrong
|
92 |
-
if( $bin ){
|
93 |
-
$mofile = $pofile->cloneExtension('mo');
|
94 |
-
$mofile->exists() ? $api->authorizeUpdate($mofile) : $api->authorizeCreate($mofile);
|
95 |
-
$mofile->putContents($bin);
|
96 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
// Redirect to edit this PO. Sync may be required and we're not doing automatically here.
|
98 |
$type = strtolower( $this->get('type') );
|
99 |
return Loco_mvc_AdminRouter::generate( sprintf('%s-file-edit',$type), array(
|
65 |
if( $pofile->filename() !== $dummy->filename() ){
|
66 |
throw new Loco_error_Exception( sprintf('File must be named %s', $pofile->filename().'.'.$ext ) );
|
67 |
}
|
68 |
+
// Avoid processing if uploaded PO file is identical to existing one
|
69 |
+
if( $pofile->exists() && 'po' === $ext && $pofile->md5() === $dummy->md5() ){
|
70 |
+
throw new Loco_error_Exception( __('Your file is identical to the existing one','loco-translate') );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
}
|
72 |
+
// recompile all files including uploaded one
|
73 |
+
$compiler = new Loco_gettext_Compiler($pofile);
|
74 |
+
$compiler->writeAll($pomo,$project);
|
75 |
+
|
76 |
+
// push recent items on file creation
|
77 |
+
Loco_data_RecentItems::get()->pushBundle($bundle)->persist();
|
78 |
+
|
79 |
// Redirect to edit this PO. Sync may be required and we're not doing automatically here.
|
80 |
$type = strtolower( $this->get('type') );
|
81 |
return Loco_mvc_AdminRouter::generate( sprintf('%s-file-edit',$type), array(
|
src/api/WordPressFileSystem.php
CHANGED
@@ -185,8 +185,8 @@ class Loco_api_WordPressFileSystem {
|
|
185 |
*/
|
186 |
private function authorize( Loco_fs_File $file ){
|
187 |
// may already have authorized successfully
|
188 |
-
if( $
|
189 |
-
$file->getWriteContext()->connect( $fs, false );
|
190 |
return true;
|
191 |
}
|
192 |
|
185 |
*/
|
186 |
private function authorize( Loco_fs_File $file ){
|
187 |
// may already have authorized successfully
|
188 |
+
if( $this->fs instanceof WP_Filesystem_Base ){
|
189 |
+
$file->getWriteContext()->connect( $this->fs, false );
|
190 |
return true;
|
191 |
}
|
192 |
|
src/cli/Commands.php
CHANGED
@@ -22,6 +22,9 @@ class Loco_cli_Commands {
|
|
22 |
* [--noop]
|
23 |
* : Specify dry run. Makes no changes on disk.
|
24 |
*
|
|
|
|
|
|
|
25 |
* ## EXAMPLES
|
26 |
*
|
27 |
* wp loco sync plugins
|
@@ -39,7 +42,8 @@ class Loco_cli_Commands {
|
|
39 |
Loco_cli_SyncCommand::run (
|
40 |
Loco_cli_Utils::collectProjects( isset($args[0]) ? $args[0] : '' ),
|
41 |
Loco_cli_Utils::collectLocales( isset($opts['locale']) ? $opts['locale'] : '' ),
|
42 |
-
Loco_cli_Utils::bool($opts,'noop')
|
|
|
43 |
);
|
44 |
}
|
45 |
catch( Loco_error_Exception $e ){
|
@@ -62,6 +66,9 @@ class Loco_cli_Commands {
|
|
62 |
* [--noop]
|
63 |
* : Specify dry run. Makes no changes on disk.
|
64 |
*
|
|
|
|
|
|
|
65 |
* ## EXAMPLES
|
66 |
*
|
67 |
* wp loco extract core --maxsize=400K
|
@@ -77,7 +84,8 @@ class Loco_cli_Commands {
|
|
77 |
}
|
78 |
Loco_cli_ExtractCommand::run (
|
79 |
Loco_cli_Utils::collectProjects( isset($args[0]) ? $args[0] : '' ),
|
80 |
-
Loco_cli_Utils::bool($opts,'noop')
|
|
|
81 |
);
|
82 |
}
|
83 |
catch( Loco_error_Exception $e ){
|
22 |
* [--noop]
|
23 |
* : Specify dry run. Makes no changes on disk.
|
24 |
*
|
25 |
+
* [--force]
|
26 |
+
* : Update even when nothing has changed. Useful for recompiling MO/JSON.
|
27 |
+
*
|
28 |
* ## EXAMPLES
|
29 |
*
|
30 |
* wp loco sync plugins
|
42 |
Loco_cli_SyncCommand::run (
|
43 |
Loco_cli_Utils::collectProjects( isset($args[0]) ? $args[0] : '' ),
|
44 |
Loco_cli_Utils::collectLocales( isset($opts['locale']) ? $opts['locale'] : '' ),
|
45 |
+
Loco_cli_Utils::bool($opts,'noop'),
|
46 |
+
Loco_cli_Utils::bool($opts,'force')
|
47 |
);
|
48 |
}
|
49 |
catch( Loco_error_Exception $e ){
|
66 |
* [--noop]
|
67 |
* : Specify dry run. Makes no changes on disk.
|
68 |
*
|
69 |
+
* [--force]
|
70 |
+
* : Update even when nothing has changed. Useful for updating meta properties.
|
71 |
+
*
|
72 |
* ## EXAMPLES
|
73 |
*
|
74 |
* wp loco extract core --maxsize=400K
|
84 |
}
|
85 |
Loco_cli_ExtractCommand::run (
|
86 |
Loco_cli_Utils::collectProjects( isset($args[0]) ? $args[0] : '' ),
|
87 |
+
Loco_cli_Utils::bool($opts,'noop'),
|
88 |
+
Loco_cli_Utils::bool($opts,'force')
|
89 |
);
|
90 |
}
|
91 |
catch( Loco_error_Exception $e ){
|
src/cli/ExtractCommand.php
CHANGED
@@ -7,8 +7,13 @@ abstract class Loco_cli_ExtractCommand {
|
|
7 |
/**
|
8 |
* @param Loco_package_Project[] project filter
|
9 |
* @param bool whether dry run
|
|
|
10 |
*/
|
11 |
-
public static function run( array $projects, $noop = true ){
|
|
|
|
|
|
|
|
|
12 |
|
13 |
// track total number of POT files synced
|
14 |
$updated = 0;
|
@@ -46,7 +51,7 @@ abstract class Loco_cli_ExtractCommand {
|
|
46 |
}
|
47 |
// if POT exists check if update is necessary.
|
48 |
$data->sort();
|
49 |
-
if( $potfile->exists() ){
|
50 |
try {
|
51 |
Loco_cli_Utils::debug('Checking if sources have changed since '.date('c',$potfile->modified()) );
|
52 |
$prev = Loco_gettext_Data::fromSource( $potfile->getContents() );
|
@@ -68,11 +73,12 @@ abstract class Loco_cli_ExtractCommand {
|
|
68 |
// additional headers to set in new POT file
|
69 |
$head = $data->getHeaders();
|
70 |
$head['Project-Id-Version'] = $project->getName();
|
|
|
71 |
|
72 |
// write POT file to disk returning byte length
|
73 |
Loco_cli_Utils::debug('Writing POT file...');
|
74 |
$bytes = $potfile->putContents( $data->msgcat(false) );
|
75 |
-
Loco_cli_Utils::debug('
|
76 |
WP_CLI::success( sprintf('Updated %s', $potfile->basename() ) );
|
77 |
$updated++;
|
78 |
}
|
7 |
/**
|
8 |
* @param Loco_package_Project[] project filter
|
9 |
* @param bool whether dry run
|
10 |
+
* @param bool whether to always update
|
11 |
*/
|
12 |
+
public static function run( array $projects, $noop = true, $force = false ){
|
13 |
+
|
14 |
+
if( $force && $noop ){
|
15 |
+
throw new Loco_error_Exception('--force makes no sense with --noop');
|
16 |
+
}
|
17 |
|
18 |
// track total number of POT files synced
|
19 |
$updated = 0;
|
51 |
}
|
52 |
// if POT exists check if update is necessary.
|
53 |
$data->sort();
|
54 |
+
if( $potfile->exists() && ! $force ){
|
55 |
try {
|
56 |
Loco_cli_Utils::debug('Checking if sources have changed since '.date('c',$potfile->modified()) );
|
57 |
$prev = Loco_gettext_Data::fromSource( $potfile->getContents() );
|
73 |
// additional headers to set in new POT file
|
74 |
$head = $data->getHeaders();
|
75 |
$head['Project-Id-Version'] = $project->getName();
|
76 |
+
$head['X-Domain'] = $domain;
|
77 |
|
78 |
// write POT file to disk returning byte length
|
79 |
Loco_cli_Utils::debug('Writing POT file...');
|
80 |
$bytes = $potfile->putContents( $data->msgcat(false) );
|
81 |
+
Loco_cli_Utils::debug('%u bytes written to %s',$bytes, $potfile->getRelativePath($content_dir) );
|
82 |
WP_CLI::success( sprintf('Updated %s', $potfile->basename() ) );
|
83 |
$updated++;
|
84 |
}
|
src/cli/SyncCommand.php
CHANGED
@@ -10,19 +10,25 @@ abstract class Loco_cli_SyncCommand {
|
|
10 |
* @param Loco_package_Project[] project filter
|
11 |
* @param Loco_Locale[] locale filter
|
12 |
* @param bool whether dry run
|
|
|
13 |
*/
|
14 |
-
public static function run( array $projects, array $locales, $noop = true ){
|
|
|
|
|
|
|
|
|
15 |
|
16 |
-
// CLI runs all disk operations directly. No remote authorization here currently.
|
17 |
-
$fs = new Loco_api_WordPressFileSystem;
|
18 |
$content_dir = loco_constant('WP_CONTENT_DIR');
|
|
|
19 |
|
20 |
-
// track total number of PO files synced
|
21 |
$updated = 0;
|
|
|
22 |
|
23 |
/* @var Loco_package_Project $project */
|
24 |
foreach( $projects as $project ){
|
25 |
$id = rtrim( $project->getId(), '.' );
|
|
|
26 |
WP_CLI::log( sprintf('Syncing "%s" (%s)',$project->getName(),$id) );
|
27 |
// Check if project has POT, which will be used as default template unless PO overrides
|
28 |
$pot = null;
|
@@ -68,7 +74,7 @@ abstract class Loco_cli_SyncCommand {
|
|
68 |
if( $head->has('X-Loco-Template') ){
|
69 |
$ref = null;
|
70 |
$potfile = new Loco_fs_File( $head['X-Loco-Template'] );
|
71 |
-
$potfile->normalize( $
|
72 |
if( $potfile->exists() ){
|
73 |
try {
|
74 |
Loco_cli_Utils::debug('> Parsing alternative template: %s',$potfile->getRelativePath($content_dir) );
|
@@ -97,7 +103,7 @@ abstract class Loco_cli_SyncCommand {
|
|
97 |
}
|
98 |
// File is synced, but may be identical
|
99 |
$po->sort();
|
100 |
-
if( $po->equal($def) ){
|
101 |
WP_CLI::log( sprintf('No update required for %s', $pofile->filename() ) );
|
102 |
continue;
|
103 |
}
|
@@ -106,20 +112,27 @@ abstract class Loco_cli_SyncCommand {
|
|
106 |
continue;
|
107 |
}
|
108 |
try {
|
109 |
-
|
110 |
-
$backups = new Loco_fs_Revisions($pofile);
|
111 |
-
if( $backups->rotate($fs) ){
|
112 |
-
Loco_cli_Utils::debug('+ saved backup file of %s',$pofile->basename() );
|
113 |
-
}
|
114 |
-
// write new PO
|
115 |
$po->localize($locale);
|
116 |
-
$
|
|
|
117 |
Loco_cli_Utils::debug('+ %u bytes written to %s',$bytes, $pofile->basename());
|
118 |
$updated++;
|
119 |
// compile MO
|
120 |
-
$bytes = $
|
121 |
-
|
122 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
WP_CLI::success( sprintf('Updated %s', $pofile->filename() ) );
|
124 |
}
|
125 |
catch( Loco_error_WriteException $e ){
|
@@ -132,7 +145,7 @@ abstract class Loco_cli_SyncCommand {
|
|
132 |
WP_CLI::log('Nothing updated');
|
133 |
}
|
134 |
else {
|
135 |
-
WP_CLI::success( sprintf('%u PO files synced',$updated) );
|
136 |
}
|
137 |
}
|
138 |
|
10 |
* @param Loco_package_Project[] project filter
|
11 |
* @param Loco_Locale[] locale filter
|
12 |
* @param bool whether dry run
|
13 |
+
* @param bool whether to always update
|
14 |
*/
|
15 |
+
public static function run( array $projects, array $locales, $noop = true, $force = false ){
|
16 |
+
|
17 |
+
if( $force && $noop ){
|
18 |
+
throw new Loco_error_Exception('--force makes no sense with --noop');
|
19 |
+
}
|
20 |
|
|
|
|
|
21 |
$content_dir = loco_constant('WP_CONTENT_DIR');
|
22 |
+
$wp_locales = new Loco_api_WordPressTranslations;
|
23 |
|
24 |
+
// track total number of PO files synced, plus MO and JSON files compiled
|
25 |
$updated = 0;
|
26 |
+
$compiled = 0;
|
27 |
|
28 |
/* @var Loco_package_Project $project */
|
29 |
foreach( $projects as $project ){
|
30 |
$id = rtrim( $project->getId(), '.' );
|
31 |
+
$base_dir = $project->getBundle()->getDirectoryPath();
|
32 |
WP_CLI::log( sprintf('Syncing "%s" (%s)',$project->getName(),$id) );
|
33 |
// Check if project has POT, which will be used as default template unless PO overrides
|
34 |
$pot = null;
|
74 |
if( $head->has('X-Loco-Template') ){
|
75 |
$ref = null;
|
76 |
$potfile = new Loco_fs_File( $head['X-Loco-Template'] );
|
77 |
+
$potfile->normalize( $base_dir );
|
78 |
if( $potfile->exists() ){
|
79 |
try {
|
80 |
Loco_cli_Utils::debug('> Parsing alternative template: %s',$potfile->getRelativePath($content_dir) );
|
103 |
}
|
104 |
// File is synced, but may be identical
|
105 |
$po->sort();
|
106 |
+
if( ! $force && $po->equal($def) ){
|
107 |
WP_CLI::log( sprintf('No update required for %s', $pofile->filename() ) );
|
108 |
continue;
|
109 |
}
|
112 |
continue;
|
113 |
}
|
114 |
try {
|
115 |
+
$locale->ensureName($wp_locales);
|
|
|
|
|
|
|
|
|
|
|
116 |
$po->localize($locale);
|
117 |
+
$compiler = new Loco_gettext_Compiler($pofile);
|
118 |
+
$bytes = $compiler->writePo($po);
|
119 |
Loco_cli_Utils::debug('+ %u bytes written to %s',$bytes, $pofile->basename());
|
120 |
$updated++;
|
121 |
// compile MO
|
122 |
+
$bytes = $compiler->writeMo($po);
|
123 |
+
if( $bytes ){
|
124 |
+
Loco_cli_Utils::debug('+ %u bytes written to %s',$bytes, $mofile->basename());
|
125 |
+
$compiled++;
|
126 |
+
}
|
127 |
+
// Done PO/MO pair, now generate JSON fragments as applicable
|
128 |
+
$jsons = $compiler->writeJson($project,$po);
|
129 |
+
foreach( $jsons as $file ){
|
130 |
+
$compiled++;
|
131 |
+
$param = new Loco_mvc_FileParams(array(),$file);
|
132 |
+
Loco_cli_Utils::debug('+ %u bytes written to %s',$param->size,$param->name);
|
133 |
+
}
|
134 |
+
// Done compile of this set
|
135 |
+
Loco_error_AdminNotices::get()->flush();
|
136 |
WP_CLI::success( sprintf('Updated %s', $pofile->filename() ) );
|
137 |
}
|
138 |
catch( Loco_error_WriteException $e ){
|
145 |
WP_CLI::log('Nothing updated');
|
146 |
}
|
147 |
else {
|
148 |
+
WP_CLI::success( sprintf('%u PO files synced, %u files compiled',$updated,$compiled) );
|
149 |
}
|
150 |
}
|
151 |
|
src/config/ArrayModel.php
CHANGED
@@ -87,6 +87,9 @@ class Loco_config_ArrayModel extends Loco_config_Model {
|
|
87 |
|
88 |
/**
|
89 |
* Node
|
|
|
|
|
|
|
90 |
*/
|
91 |
abstract class LocoConfigNode implements IteratorAggregate {
|
92 |
|
87 |
|
88 |
/**
|
89 |
* Node
|
90 |
+
* @property-read string $textContent
|
91 |
+
* @property-read string $nodeName
|
92 |
+
* @property-read LocoConfigNodeList $childNodes
|
93 |
*/
|
94 |
abstract class LocoConfigNode implements IteratorAggregate {
|
95 |
|
src/data/Settings.php
CHANGED
@@ -18,6 +18,7 @@
|
|
18 |
* @property bool $po_utf8_bom Whether to prepend PO and POT files with UTF-8 byte order mark
|
19 |
* @property string $po_width PO/POT file maximum line width (wrapping) zero to disable
|
20 |
* @property bool $jed_pretty Whether to pretty print JSON JED files
|
|
|
21 |
* @property bool $ajax_files Whether to submit PO data as concrete files (requires Blob support in Ajax)
|
22 |
*
|
23 |
* @property string $deepl_api_key API key for DeepL Translator
|
@@ -45,7 +46,7 @@ class Loco_data_Settings extends Loco_data_Serializable {
|
|
45 |
'gen_hash' => false,
|
46 |
'use_fuzzy' => true,
|
47 |
'fuzziness' => 20,
|
48 |
-
'num_backups' =>
|
49 |
'pot_alias' => array( 'default.po', 'en_US.po', 'en.po' ),
|
50 |
'php_alias' => array( 'php', 'twig' ),
|
51 |
'jsx_alias' => array(),
|
@@ -57,6 +58,7 @@ class Loco_data_Settings extends Loco_data_Serializable {
|
|
57 |
'po_utf8_bom' => false,
|
58 |
'po_width' => '79',
|
59 |
'jed_pretty' => false,
|
|
|
60 |
'ajax_files' => true,
|
61 |
'deepl_api_key' => '',
|
62 |
'google_api_key' => '',
|
@@ -169,10 +171,9 @@ class Loco_data_Settings extends Loco_data_Serializable {
|
|
169 |
$this->persist();
|
170 |
$updated = true;
|
171 |
// feature alerts:
|
172 |
-
if( '2.
|
173 |
-
Loco_error_AdminNotices::info( __('Loco Translate 2.
|
174 |
-
->addLink(
|
175 |
-
->addLink( apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/providers'), __('Documentation','loco-translate') );
|
176 |
}
|
177 |
}
|
178 |
return $updated;
|
18 |
* @property bool $po_utf8_bom Whether to prepend PO and POT files with UTF-8 byte order mark
|
19 |
* @property string $po_width PO/POT file maximum line width (wrapping) zero to disable
|
20 |
* @property bool $jed_pretty Whether to pretty print JSON JED files
|
21 |
+
* @property bool $jed_clean Whether to clean up redundant JSON files during compilation
|
22 |
* @property bool $ajax_files Whether to submit PO data as concrete files (requires Blob support in Ajax)
|
23 |
*
|
24 |
* @property string $deepl_api_key API key for DeepL Translator
|
46 |
'gen_hash' => false,
|
47 |
'use_fuzzy' => true,
|
48 |
'fuzziness' => 20,
|
49 |
+
'num_backups' => 5,
|
50 |
'pot_alias' => array( 'default.po', 'en_US.po', 'en.po' ),
|
51 |
'php_alias' => array( 'php', 'twig' ),
|
52 |
'jsx_alias' => array(),
|
58 |
'po_utf8_bom' => false,
|
59 |
'po_width' => '79',
|
60 |
'jed_pretty' => false,
|
61 |
+
'jed_clean' => false,
|
62 |
'ajax_files' => true,
|
63 |
'deepl_api_key' => '',
|
64 |
'google_api_key' => '',
|
171 |
$this->persist();
|
172 |
$updated = true;
|
173 |
// feature alerts:
|
174 |
+
if( '2.5.' === substr($new,0,4) && '2.5.' !== substr($old,0,4) ){
|
175 |
+
Loco_error_AdminNotices::info( __('Loco Translate 2.5 adds supports for JSON language pack generation.','loco-translate') )
|
176 |
+
->addLink( apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/json'), __('Documentation','loco-translate') );
|
|
|
177 |
}
|
178 |
}
|
179 |
return $updated;
|
src/error/AdminNotices.php
CHANGED
@@ -25,7 +25,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
25 |
public static function get(){
|
26 |
self::$singleton or self::$singleton = new Loco_error_AdminNotices;
|
27 |
return self::$singleton;
|
28 |
-
}
|
29 |
|
30 |
|
31 |
/**
|
@@ -223,12 +223,23 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
223 |
*/
|
224 |
public function __destruct(){
|
225 |
$this->inline = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
if( class_exists('WP_CLI',false) ){
|
227 |
$this->flushCli();
|
228 |
}
|
229 |
else if( ! loco_doing_ajax() ){
|
230 |
$this->flushHtml();
|
231 |
}
|
|
|
|
|
|
|
232 |
}
|
233 |
|
234 |
}
|
25 |
public static function get(){
|
26 |
self::$singleton or self::$singleton = new Loco_error_AdminNotices;
|
27 |
return self::$singleton;
|
28 |
+
}
|
29 |
|
30 |
|
31 |
/**
|
223 |
*/
|
224 |
public function __destruct(){
|
225 |
$this->inline = false;
|
226 |
+
$this->flush();
|
227 |
+
}
|
228 |
+
|
229 |
+
|
230 |
+
/**
|
231 |
+
* @internal
|
232 |
+
*/
|
233 |
+
public function flush(){
|
234 |
if( class_exists('WP_CLI',false) ){
|
235 |
$this->flushCli();
|
236 |
}
|
237 |
else if( ! loco_doing_ajax() ){
|
238 |
$this->flushHtml();
|
239 |
}
|
240 |
+
else {
|
241 |
+
$this->errors = array();
|
242 |
+
}
|
243 |
}
|
244 |
|
245 |
}
|
src/fs/File.php
CHANGED
@@ -109,7 +109,7 @@ class Loco_fs_File {
|
|
109 |
|
110 |
/**
|
111 |
* Copy write context with our file reference
|
112 |
-
* @param Loco_fs_FileWriter
|
113 |
* @return Loco_fs_File
|
114 |
*/
|
115 |
private function cloneWriteContext( Loco_fs_FileWriter $context = null ){
|
@@ -457,7 +457,7 @@ class Loco_fs_File {
|
|
457 |
if( file_exists($this->path) ){
|
458 |
return is_dir($this->path);
|
459 |
}
|
460 |
-
return
|
461 |
}
|
462 |
|
463 |
|
@@ -575,14 +575,19 @@ class Loco_fs_File {
|
|
575 |
* @return Loco_fs_File
|
576 |
*/
|
577 |
public function cloneExtension( $ext ){
|
578 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
579 |
$file = clone $this;
|
580 |
-
|
581 |
-
$file->path = substr_replace( $this->path, $ext, - $snip );
|
582 |
-
}
|
583 |
-
else {
|
584 |
-
$file->path .= '.'.$ext;
|
585 |
-
}
|
586 |
$file->info = null;
|
587 |
return $file;
|
588 |
}
|
109 |
|
110 |
/**
|
111 |
* Copy write context with our file reference
|
112 |
+
* @param Loco_fs_FileWriter|null
|
113 |
* @return Loco_fs_File
|
114 |
*/
|
115 |
private function cloneWriteContext( Loco_fs_FileWriter $context = null ){
|
457 |
if( file_exists($this->path) ){
|
458 |
return is_dir($this->path);
|
459 |
}
|
460 |
+
return '' === $this->extension();
|
461 |
}
|
462 |
|
463 |
|
575 |
* @return Loco_fs_File
|
576 |
*/
|
577 |
public function cloneExtension( $ext ){
|
578 |
+
$name = $this->filename().'.'.$ext;
|
579 |
+
return $this->cloneBasename($name);
|
580 |
+
}
|
581 |
+
|
582 |
+
|
583 |
+
/**
|
584 |
+
* Copy this object with an alternative name under the same directory
|
585 |
+
* @param string new name
|
586 |
+
* @return Loco_fs_File
|
587 |
+
*/
|
588 |
+
public function cloneBasename( $name ){
|
589 |
$file = clone $this;
|
590 |
+
$file->path = rtrim($file->dirname(),'/').'/'.$name;
|
|
|
|
|
|
|
|
|
|
|
591 |
$file->info = null;
|
592 |
return $file;
|
593 |
}
|
src/fs/Revisions.php
CHANGED
@@ -201,28 +201,34 @@ class Loco_fs_Revisions implements Countable/*, IteratorAggregate*/ {
|
|
201 |
|
202 |
|
203 |
/**
|
204 |
-
* Execute backup of current file.
|
205 |
* @param Loco_api_WordPressFileSystem Authorized file system
|
206 |
-
* @return
|
207 |
*/
|
208 |
public function rotate( Loco_api_WordPressFileSystem $api ){
|
|
|
209 |
$pofile = $this->master;
|
210 |
-
// backup existing file before overwriting, but still allow if backups fails
|
211 |
$num_backups = Loco_data_Settings::get()->num_backups;
|
212 |
if( $num_backups ){
|
|
|
213 |
try {
|
214 |
-
$api->authorizeCopy($
|
215 |
-
$this->create();
|
216 |
-
$this->prune($num_backups);
|
217 |
-
return true;
|
218 |
}
|
219 |
catch( Exception $e ){
|
220 |
Loco_error_AdminNotices::debug( $e->getMessage() );
|
221 |
$message = __('Failed to create backup file in "%s". Check file permissions or disable backups','loco-translate');
|
222 |
Loco_error_AdminNotices::warn( sprintf( $message, $pofile->getParent()->basename() ) );
|
223 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
}
|
225 |
-
return
|
226 |
}
|
227 |
|
228 |
}
|
201 |
|
202 |
|
203 |
/**
|
204 |
+
* Execute backup of current file if enabled in settings.
|
205 |
* @param Loco_api_WordPressFileSystem Authorized file system
|
206 |
+
* @return Loco_fs_File|null backup file if saved
|
207 |
*/
|
208 |
public function rotate( Loco_api_WordPressFileSystem $api ){
|
209 |
+
$backup = null;
|
210 |
$pofile = $this->master;
|
|
|
211 |
$num_backups = Loco_data_Settings::get()->num_backups;
|
212 |
if( $num_backups ){
|
213 |
+
// Attempt backup, but return null on failure
|
214 |
try {
|
215 |
+
$api->authorizeCopy($pofile);
|
216 |
+
$backup = $this->create();
|
|
|
|
|
217 |
}
|
218 |
catch( Exception $e ){
|
219 |
Loco_error_AdminNotices::debug( $e->getMessage() );
|
220 |
$message = __('Failed to create backup file in "%s". Check file permissions or disable backups','loco-translate');
|
221 |
Loco_error_AdminNotices::warn( sprintf( $message, $pofile->getParent()->basename() ) );
|
222 |
}
|
223 |
+
// prune operation in separate catch block as error would be misleading
|
224 |
+
try {
|
225 |
+
$this->prune($num_backups);
|
226 |
+
}
|
227 |
+
catch( Exception $e ){
|
228 |
+
Loco_error_AdminNotices::debug('Failed to prune backup files: '.$e->getMessage() );
|
229 |
+
}
|
230 |
}
|
231 |
+
return $backup;
|
232 |
}
|
233 |
|
234 |
}
|
src/fs/Siblings.php
CHANGED
@@ -53,18 +53,7 @@ class Loco_fs_Siblings {
|
|
53 |
}
|
54 |
// JSON exports, unless in POT mode:
|
55 |
if( 'po' === $this->po->extension() ){
|
56 |
-
$
|
57 |
-
$finder = new Loco_fs_FileFinder( $this->po->dirname() );
|
58 |
-
$regex = '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
|
59 |
-
/* @var $file Loco_fs_File */
|
60 |
-
foreach( $finder->group('json')->exportGroups() as $files ) {
|
61 |
-
foreach( $files as $file ){
|
62 |
-
$match = $file->filename();
|
63 |
-
if( $match === $name || preg_match($regex,$match) ) {
|
64 |
-
$siblings[] = $file;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
}
|
68 |
}
|
69 |
|
70 |
return $siblings;
|
@@ -86,4 +75,25 @@ class Loco_fs_Siblings {
|
|
86 |
return $this->mo;
|
87 |
}
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
53 |
}
|
54 |
// JSON exports, unless in POT mode:
|
55 |
if( 'po' === $this->po->extension() ){
|
56 |
+
$siblings = array_merge($siblings,$this->getJsons());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
}
|
58 |
|
59 |
return $siblings;
|
75 |
return $this->mo;
|
76 |
}
|
77 |
|
78 |
+
|
79 |
+
/**
|
80 |
+
* @return Loco_fs_File[]
|
81 |
+
*/
|
82 |
+
public function getJsons(){
|
83 |
+
$jsons = array();
|
84 |
+
$name = $this->po->filename();
|
85 |
+
$finder = new Loco_fs_FileFinder( $this->po->dirname() );
|
86 |
+
$regex = '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
|
87 |
+
/* @var $file Loco_fs_File */
|
88 |
+
foreach( $finder->group('json')->exportGroups() as $files ) {
|
89 |
+
foreach( $files as $file ){
|
90 |
+
$match = $file->filename();
|
91 |
+
if( $match === $name || preg_match($regex,$match) ) {
|
92 |
+
$jsons[] = $file;
|
93 |
+
}
|
94 |
+
}
|
95 |
+
}
|
96 |
+
return $jsons;
|
97 |
+
}
|
98 |
+
|
99 |
}
|
src/gettext/Compiler.php
ADDED
@@ -0,0 +1,199 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Utility for compiling PO data to MO AND JSON files
|
4 |
+
*/
|
5 |
+
class Loco_gettext_Compiler {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* @var Loco_api_WordPressFileSystem
|
9 |
+
*/
|
10 |
+
private $fs;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @var Loco_fs_Siblings
|
14 |
+
*/
|
15 |
+
private $files;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var Loco_mvc_ViewParams
|
19 |
+
*/
|
20 |
+
private $progress;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Construct with primary file (PO) being saved
|
24 |
+
* @param Loco_fs_LocaleFile Localised PO file which may or may not exist yet
|
25 |
+
*/
|
26 |
+
public function __construct( Loco_fs_LocaleFile $pofile ){
|
27 |
+
$this->fs = new Loco_api_WordPressFileSystem;
|
28 |
+
$this->files = new Loco_fs_Siblings($pofile);
|
29 |
+
$this->progress = new Loco_mvc_ViewParams( array(
|
30 |
+
'pobytes' => 0,
|
31 |
+
'mobytes' => 0,
|
32 |
+
'numjson' => 0,
|
33 |
+
) );
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @param Loco_gettext_Data
|
39 |
+
* @param Loco_package_Project|null
|
40 |
+
* @return self
|
41 |
+
*/
|
42 |
+
public function writeAll( Loco_gettext_Data $po, Loco_package_Project $project = null ){
|
43 |
+
$this->writePo($po);
|
44 |
+
$this->writeMo($po);
|
45 |
+
if( $project ){
|
46 |
+
$this->writeJson($project,$po);
|
47 |
+
}
|
48 |
+
return $this;
|
49 |
+
}
|
50 |
+
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @param Loco_gettext_Data PO data
|
54 |
+
* @return int bytes written to PO file
|
55 |
+
* @throws Loco_error_WriteException
|
56 |
+
*/
|
57 |
+
public function writePo( Loco_gettext_Data $po ){
|
58 |
+
$file = $this->files->getSource();
|
59 |
+
// Perform PO file backup before overwriting an existing PO
|
60 |
+
if( $file->exists() ){
|
61 |
+
$backups = new Loco_fs_Revisions($file);
|
62 |
+
$backup = $backups->rotate($this->fs);
|
63 |
+
// debug backup creation only under cli or ajax. too noisy printing on screen
|
64 |
+
if( $backup && ( loco_doing_ajax() || 'cli' === PHP_SAPI ) && $backup->exists() ){
|
65 |
+
Loco_error_AdminNotices::debug( sprintf('Wrote backup: %s -> %s',$file->basename(),$backup->basename() ) );
|
66 |
+
}
|
67 |
+
}
|
68 |
+
$this->fs->authorizeSave($file);
|
69 |
+
$bytes = $file->putContents( $po->msgcat() );
|
70 |
+
$this->progress['pobytes'] = $bytes;
|
71 |
+
return $bytes;
|
72 |
+
}
|
73 |
+
|
74 |
+
|
75 |
+
/**
|
76 |
+
* @param Loco_gettext_Data PO data
|
77 |
+
* @return int bytes written to MO file
|
78 |
+
*/
|
79 |
+
public function writeMo( Loco_gettext_Data $po ){
|
80 |
+
try {
|
81 |
+
$file = $this->files->getBinary();
|
82 |
+
$this->fs->authorizeSave($file);
|
83 |
+
$bytes = $file->putContents( $po->msgfmt() );
|
84 |
+
$this->progress['mobytes'] = $bytes;
|
85 |
+
}
|
86 |
+
catch( Exception $e ){
|
87 |
+
Loco_error_AdminNotices::debug( $e->getMessage() );
|
88 |
+
Loco_error_AdminNotices::warn( __('PO file saved, but MO file compilation failed','loco-translate') );
|
89 |
+
$bytes = 0;
|
90 |
+
}
|
91 |
+
return $bytes;
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
+
/**
|
96 |
+
* @param Loco_package_Project Translation set, required to resolve script paths
|
97 |
+
* @param Loco_gettext_Data PO data to export
|
98 |
+
* @return Loco_fs_FileList All json files created
|
99 |
+
*/
|
100 |
+
public function writeJson( Loco_package_Project $project, Loco_gettext_Data $po ){
|
101 |
+
$jsons = new Loco_fs_FileList;
|
102 |
+
$pofile = $this->files->getSource();
|
103 |
+
$base_dir = $project->getBundle()->getDirectoryPath();
|
104 |
+
$domain = $project->getDomain()->getName();
|
105 |
+
/* @var Loco_gettext_Data $fragment */
|
106 |
+
foreach( $po->exportRefs('\\.js') as $ref => $fragment ){
|
107 |
+
// Reference could be source js, or minified version.
|
108 |
+
// Some build systems may differ, but WordPress only supports this. See WP-CLI MakeJsonCommand.
|
109 |
+
if( substr($ref,-7) === '.min.js' ) {
|
110 |
+
$min = $ref;
|
111 |
+
$src = substr($ref,-7).'.js';
|
112 |
+
}
|
113 |
+
else {
|
114 |
+
$src = $ref;
|
115 |
+
$min = substr($ref,0,-3).'.min.js';
|
116 |
+
}
|
117 |
+
// Try both script paths to check whether deployed script actually exists
|
118 |
+
$jsonfile = null;
|
119 |
+
foreach( array($min,$src) as $relative ){
|
120 |
+
$file = new Loco_fs_File($relative);
|
121 |
+
$file->normalize($base_dir);
|
122 |
+
if( $file->exists() ){
|
123 |
+
// Hook into load_script_textdomain_relative_path like load_script_textdomain() does.
|
124 |
+
$url = $project->getBundle()->getDirectoryUrl().$relative;
|
125 |
+
$relative = apply_filters( 'load_script_textdomain_relative_path', $relative, $url );
|
126 |
+
if( ! is_string($relative) || '' === $relative ){
|
127 |
+
continue;
|
128 |
+
}
|
129 |
+
// Hashable reference is always finally unminified, as per load_script_textdomain()
|
130 |
+
if( substr($relative,-7) === '.min.js' ) {
|
131 |
+
$relative = substr($relative,0,-7).'.js';
|
132 |
+
}
|
133 |
+
$name = $pofile->filename().'-'.md5($relative).'.json';
|
134 |
+
$jsonfile = $pofile->cloneBasename($name);
|
135 |
+
$jsons->add( $jsonfile );
|
136 |
+
break;
|
137 |
+
}
|
138 |
+
}
|
139 |
+
// if neither exists in the bundle, this is a source path that will never be resolved at runtime
|
140 |
+
if( is_null($jsonfile) ){
|
141 |
+
Loco_error_AdminNotices::debug( sprintf('Skipping JSON for %s; script not found in bundle',$ref) );
|
142 |
+
continue;
|
143 |
+
}
|
144 |
+
// ok to write JED fragment to hashed JSON file
|
145 |
+
try {
|
146 |
+
$this->fs->authorizeSave($jsonfile);
|
147 |
+
$jsonfile->putContents( $fragment->msgjed($domain,$ref) );
|
148 |
+
}
|
149 |
+
catch( Loco_error_WriteException $e ){
|
150 |
+
Loco_error_AdminNotices::debug( $e->getMessage() );
|
151 |
+
Loco_error_AdminNotices::warn( sprintf(__('JSON compilation failed for %s','loco-translate'),$ref));
|
152 |
+
}
|
153 |
+
}
|
154 |
+
// clean up redundant JSONs including if no JSONs were compiled
|
155 |
+
if( Loco_data_Settings::get()->jed_clean ){
|
156 |
+
foreach( $this->files->getJsons() as $path ){
|
157 |
+
$jsonfile = new Loco_fs_File($path);
|
158 |
+
if( ! $jsons->has($jsonfile) ){
|
159 |
+
try {
|
160 |
+
$jsonfile->unlink();
|
161 |
+
}
|
162 |
+
catch( Loco_error_WriteException $e ){
|
163 |
+
Loco_error_AdminNotices::debug('Unable to remove redundant JSON: '.$e->getMessage() );
|
164 |
+
}
|
165 |
+
}
|
166 |
+
}
|
167 |
+
}
|
168 |
+
$this->progress['numjson'] = $jsons->count();
|
169 |
+
return $jsons;
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Fetch compilation summary and raise most relevant success message
|
175 |
+
* @return Loco_mvc_ViewParams
|
176 |
+
*/
|
177 |
+
public function getSummary(){
|
178 |
+
$pofile = $this->files->getSource();
|
179 |
+
// Avoid calling this unless the initial PO save was successful
|
180 |
+
if( ! $this->progress['pobytes'] || ! $pofile->exists() ){
|
181 |
+
throw new LogicException('PO not saved');
|
182 |
+
}
|
183 |
+
// Summary for localised file includes MO+JSONs
|
184 |
+
$mobytes = $this->progress['mobytes'];
|
185 |
+
$numjson = $this->progress['numjson'];
|
186 |
+
if( $mobytes && $numjson ){
|
187 |
+
Loco_error_AdminNotices::success( __('PO file saved and MO/JSON files compiled','loco-translate') );
|
188 |
+
}
|
189 |
+
else if( $mobytes ){
|
190 |
+
Loco_error_AdminNotices::success( __('PO file saved and MO file compiled','loco-translate') );
|
191 |
+
}
|
192 |
+
else {
|
193 |
+
// translators: Where %s is either PO or POT
|
194 |
+
Loco_error_AdminNotices::success( sprintf(__('%s file saved','loco-translate'),strtoupper($pofile->extension())) );
|
195 |
+
}
|
196 |
+
return $this->progress;
|
197 |
+
}
|
198 |
+
|
199 |
+
}
|
src/gettext/Data.php
CHANGED
@@ -151,50 +151,32 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
151 |
}
|
152 |
|
153 |
|
154 |
-
/**
|
155 |
-
* Split JavaScript messages out of document, based on file reference mapping
|
156 |
-
* @return array
|
157 |
-
*/
|
158 |
-
public function splitJs(){
|
159 |
-
// TODO take file extension from config
|
160 |
-
$messages = $this->splitRefs( array('js'=>'js','jsx'=>'js') );
|
161 |
-
return isset($messages['js']) ? $messages['js'] : array();
|
162 |
-
}
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
/**
|
167 |
* Compile JED flavour JSON
|
168 |
* @param string text domain for JED metadata
|
169 |
-
* @param
|
170 |
* @return string
|
171 |
-
|
172 |
-
public function
|
173 |
$head = $this->getHeaders();
|
174 |
-
|
175 |
-
$data =
|
176 |
-
|
177 |
-
'lang' => $head['language'],
|
178 |
-
'plural-forms' => $head['plural-forms'],
|
179 |
-
) );
|
180 |
-
// @var LocoPoMessage $msg
|
181 |
-
foreach( $po as $msg ){
|
182 |
-
$data[ $msg->getKey() ] = $msg->getMsgstrs();
|
183 |
-
}
|
184 |
-
// pretty formatting for debugging
|
185 |
$json_options = 0;
|
186 |
if( Loco_data_Settings::get()->jed_pretty ){
|
187 |
-
$json_options |= loco_constant('JSON_PRETTY_PRINT') | loco_constant('JSON_UNESCAPED_SLASHES') | loco_constant('JSON_UNESCAPED_UNICODE');
|
188 |
}
|
|
|
189 |
return json_encode( array (
|
190 |
-
'translation-revision-date' => $head['
|
191 |
-
'generator' => $head['
|
|
|
192 |
'domain' => $domain,
|
193 |
'locale_data' => array (
|
194 |
$domain => $data,
|
195 |
),
|
196 |
), $json_options );
|
197 |
-
}
|
198 |
|
199 |
|
200 |
/**
|
@@ -238,12 +220,11 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
238 |
|
239 |
/**
|
240 |
* @param Loco_Locale
|
241 |
-
* @param
|
242 |
* @return Loco_gettext_Data
|
243 |
*/
|
244 |
-
public function localize( Loco_Locale $locale, array $custom =
|
245 |
$date = gmdate('Y-m-d H:i').'+0000'; // <- forcing UCT
|
246 |
-
$headers = $this->getHeaders();
|
247 |
// headers that must always be set if absent
|
248 |
$defaults = array (
|
249 |
'Project-Id-Version' => '',
|
@@ -277,19 +258,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
277 |
$required['Last-Translator'] = $credit;
|
278 |
}
|
279 |
}
|
280 |
-
|
281 |
-
foreach( $defaults as $key => $value ){
|
282 |
-
if( ! $headers[$key] ){
|
283 |
-
$headers[$key] = $value;
|
284 |
-
}
|
285 |
-
}
|
286 |
-
// add required headers with custom ones overriding
|
287 |
-
if( is_array($custom) ){
|
288 |
-
$required = array_merge( $required, $custom );
|
289 |
-
}
|
290 |
-
foreach( $required as $key => $value ){
|
291 |
-
$headers[$key] = $value;
|
292 |
-
}
|
293 |
// avoid non-empty POT placeholders that won't have been set from $defaults
|
294 |
if( 'PACKAGE VERSION' === $headers['Project-Id-Version'] ){
|
295 |
$headers['Project-Id-Version'] = '';
|
@@ -300,14 +269,16 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
300 |
|
301 |
|
302 |
/**
|
|
|
303 |
* @return Loco_gettext_Data
|
304 |
*/
|
305 |
-
public function templatize(){
|
306 |
$date = gmdate('Y-m-d H:i').'+0000'; // <- forcing UCT
|
307 |
-
$
|
308 |
-
$required = array (
|
309 |
'Project-Id-Version' => 'PACKAGE VERSION',
|
310 |
'Report-Msgid-Bugs-To' => '',
|
|
|
|
|
311 |
'POT-Creation-Date' => $date,
|
312 |
'PO-Revision-Date' => 'YEAR-MO-DA HO:MI+ZONE',
|
313 |
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
|
@@ -319,12 +290,36 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
319 |
'Content-Transfer-Encoding' => '8bit',
|
320 |
'X-Generator' => 'Loco https://localise.biz/',
|
321 |
'X-Loco-Version' => sprintf('%s; wp-%s', loco_plugin_version(), $GLOBALS['wp_version'] ),
|
|
|
322 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
323 |
foreach( $required as $key => $value ){
|
324 |
$headers[$key] = $value;
|
325 |
}
|
326 |
-
|
327 |
-
return $this->initPot();
|
328 |
}
|
329 |
|
330 |
|
@@ -334,7 +329,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
334 |
* @param Loco_fs_File the file that was originally extracted to (POT)
|
335 |
* @param Loco_fs_File the file that must now target references relative to itself
|
336 |
* @param string vendor name used in header keys
|
337 |
-
* @return bool whether base header was
|
338 |
*/
|
339 |
public function rebaseHeader( Loco_fs_File $origin, Loco_fs_File $target, $vendor ){
|
340 |
$base = $target->getParent();
|
@@ -358,7 +353,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
358 |
* @return int
|
359 |
*/
|
360 |
public static function parseDate( $podate ){
|
361 |
-
if( method_exists('DateTime',
|
362 |
$objdate = DateTime::createFromFormat('Y-m-d H:iO', $podate);
|
363 |
if( $objdate instanceof DateTime ){
|
364 |
return $objdate->getTimestamp();
|
151 |
}
|
152 |
|
153 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
/**
|
155 |
* Compile JED flavour JSON
|
156 |
* @param string text domain for JED metadata
|
157 |
+
* @param string source file that uses included strings
|
158 |
* @return string
|
159 |
+
*/
|
160 |
+
public function msgjed( $domain = 'messages', $source = '' ){
|
161 |
$head = $this->getHeaders();
|
162 |
+
$head['domain'] = $domain;
|
163 |
+
$data = $this->exportJed();
|
164 |
+
// Pretty formatting for debugging. Doing as per WordPress and always escaping Unicode.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
$json_options = 0;
|
166 |
if( Loco_data_Settings::get()->jed_pretty ){
|
167 |
+
$json_options |= loco_constant('JSON_PRETTY_PRINT') | loco_constant('JSON_UNESCAPED_SLASHES'); // | loco_constant('JSON_UNESCAPED_UNICODE');
|
168 |
}
|
169 |
+
// PO should have a date if localised properly
|
170 |
return json_encode( array (
|
171 |
+
'translation-revision-date' => $head['PO-Revision-Date'],
|
172 |
+
'generator' => $head['X-Generator'],
|
173 |
+
'source' => $source,
|
174 |
'domain' => $domain,
|
175 |
'locale_data' => array (
|
176 |
$domain => $data,
|
177 |
),
|
178 |
), $json_options );
|
179 |
+
}
|
180 |
|
181 |
|
182 |
/**
|
220 |
|
221 |
/**
|
222 |
* @param Loco_Locale
|
223 |
+
* @param string[] custom headers
|
224 |
* @return Loco_gettext_Data
|
225 |
*/
|
226 |
+
public function localize( Loco_Locale $locale, array $custom = array() ){
|
227 |
$date = gmdate('Y-m-d H:i').'+0000'; // <- forcing UCT
|
|
|
228 |
// headers that must always be set if absent
|
229 |
$defaults = array (
|
230 |
'Project-Id-Version' => '',
|
258 |
$required['Last-Translator'] = $credit;
|
259 |
}
|
260 |
}
|
261 |
+
$headers = $this->applyHeaders($required,$defaults,$custom);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
// avoid non-empty POT placeholders that won't have been set from $defaults
|
263 |
if( 'PACKAGE VERSION' === $headers['Project-Id-Version'] ){
|
264 |
$headers['Project-Id-Version'] = '';
|
269 |
|
270 |
|
271 |
/**
|
272 |
+
* @param string
|
273 |
* @return Loco_gettext_Data
|
274 |
*/
|
275 |
+
public function templatize( $domain = '' ){
|
276 |
$date = gmdate('Y-m-d H:i').'+0000'; // <- forcing UCT
|
277 |
+
$defaults = array (
|
|
|
278 |
'Project-Id-Version' => 'PACKAGE VERSION',
|
279 |
'Report-Msgid-Bugs-To' => '',
|
280 |
+
);
|
281 |
+
$required = array (
|
282 |
'POT-Creation-Date' => $date,
|
283 |
'PO-Revision-Date' => 'YEAR-MO-DA HO:MI+ZONE',
|
284 |
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
|
290 |
'Content-Transfer-Encoding' => '8bit',
|
291 |
'X-Generator' => 'Loco https://localise.biz/',
|
292 |
'X-Loco-Version' => sprintf('%s; wp-%s', loco_plugin_version(), $GLOBALS['wp_version'] ),
|
293 |
+
'X-Domain' => $domain,
|
294 |
);
|
295 |
+
$this->applyHeaders($required,$defaults);
|
296 |
+
return $this->initPot();
|
297 |
+
}
|
298 |
+
|
299 |
+
|
300 |
+
/**
|
301 |
+
* @param string[] Required headers
|
302 |
+
* @param string[] Default headers
|
303 |
+
* @param string[] Custom headers
|
304 |
+
* @return LocoPoHeaders
|
305 |
+
*/
|
306 |
+
private function applyHeaders( array $required = array(), array $defaults = array(), array $custom = array() ){
|
307 |
+
$headers = $this->getHeaders();
|
308 |
+
// only set absent or empty headers from default list
|
309 |
+
foreach( $defaults as $key => $value ){
|
310 |
+
if( ! $headers[$key] ){
|
311 |
+
$headers[$key] = $value;
|
312 |
+
}
|
313 |
+
}
|
314 |
+
// add required headers with custom ones overriding
|
315 |
+
if( $custom ){
|
316 |
+
$required = array_merge( $required, $custom );
|
317 |
+
}
|
318 |
+
// TODO fix ordering weirdness here. required headers seem to get appended wrongly
|
319 |
foreach( $required as $key => $value ){
|
320 |
$headers[$key] = $value;
|
321 |
}
|
322 |
+
return $headers;
|
|
|
323 |
}
|
324 |
|
325 |
|
329 |
* @param Loco_fs_File the file that was originally extracted to (POT)
|
330 |
* @param Loco_fs_File the file that must now target references relative to itself
|
331 |
* @param string vendor name used in header keys
|
332 |
+
* @return bool whether base header was altered
|
333 |
*/
|
334 |
public function rebaseHeader( Loco_fs_File $origin, Loco_fs_File $target, $vendor ){
|
335 |
$base = $target->getParent();
|
353 |
* @return int
|
354 |
*/
|
355 |
public static function parseDate( $podate ){
|
356 |
+
if( method_exists('DateTime','createFromFormat') ){
|
357 |
$objdate = DateTime::createFromFormat('Y-m-d H:iO', $podate);
|
358 |
if( $objdate instanceof DateTime ){
|
359 |
return $objdate->getTimestamp();
|
src/gettext/Extraction.php
CHANGED
@@ -147,7 +147,7 @@ class Loco_gettext_Extraction {
|
|
147 |
*/
|
148 |
public function getTemplate( $domain ){
|
149 |
$data = new Loco_gettext_Data( $this->extracted->filter($domain) );
|
150 |
-
return $data->templatize();
|
151 |
}
|
152 |
|
153 |
|
147 |
*/
|
148 |
public function getTemplate( $domain ){
|
149 |
$data = new Loco_gettext_Data( $this->extracted->filter($domain) );
|
150 |
+
return $data->templatize( $domain );
|
151 |
}
|
152 |
|
153 |
|
src/hooks/AdminHooks.php
CHANGED
@@ -115,7 +115,7 @@ class Loco_hooks_AdminHooks extends Loco_hooks_Hookable {
|
|
115 |
*/
|
116 |
private function purge_wp_cache(){
|
117 |
global $wp_object_cache;
|
118 |
-
if( function_exists('wp_cache_delete') && method_exists($wp_object_cache,'delete') ){
|
119 |
wp_cache_delete('plugins','loco');
|
120 |
}
|
121 |
}
|
115 |
*/
|
116 |
private function purge_wp_cache(){
|
117 |
global $wp_object_cache;
|
118 |
+
if( function_exists('wp_cache_delete') && is_object($wp_object_cache) && method_exists($wp_object_cache,'delete') ){
|
119 |
wp_cache_delete('plugins','loco');
|
120 |
}
|
121 |
}
|
src/hooks/LoadHelper.php
CHANGED
@@ -1,28 +1,104 @@
|
|
1 |
-
<?php
|
|
|
2 |
/**
|
3 |
* Text Domain loading helper.
|
4 |
* Ensures custom translations can be loaded from `wp-content/languages/loco`.
|
5 |
-
* This functionality is optional. You can disable the plugin if you're not loading MO files from languages/loco
|
6 |
*/
|
7 |
class Loco_hooks_LoadHelper extends Loco_hooks_Hookable {
|
8 |
|
9 |
/**
|
10 |
-
*
|
|
|
11 |
*/
|
12 |
private $context;
|
13 |
|
14 |
/**
|
15 |
-
*
|
|
|
16 |
*/
|
17 |
-
private $lock
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
|
20 |
/**
|
21 |
* `theme_locale` filter callback.
|
22 |
* Signals the beginning of a "load_theme_textdomain" process
|
23 |
-
|
|
|
|
|
|
|
24 |
public function filter_theme_locale( $locale, $domain = '' ){
|
25 |
-
$this->context = array( 'themes', $domain, $locale );
|
26 |
unset( $this->lock[$domain] );
|
27 |
return $locale;
|
28 |
}
|
@@ -36,7 +112,7 @@ class Loco_hooks_LoadHelper extends Loco_hooks_Hookable {
|
|
36 |
* @return string
|
37 |
*/
|
38 |
public function filter_plugin_locale( $locale, $domain = '' ){
|
39 |
-
$this->context = array( 'plugins', $domain, $locale );
|
40 |
unset( $this->lock[$domain] );
|
41 |
return $locale;
|
42 |
}
|
@@ -75,53 +151,135 @@ class Loco_hooks_LoadHelper extends Loco_hooks_Hookable {
|
|
75 |
if( isset($this->lock[$domain][$key]) ){
|
76 |
return;
|
77 |
}
|
78 |
-
// language roots
|
79 |
-
$wp_lang_dir = trailingslashit( loco_constant('WP_LANG_DIR') );
|
80 |
-
$lc_lang_dir = trailingslashit( loco_constant('LOCO_LANG_DIR') );
|
81 |
-
|
82 |
// if context is set, then a theme or plugin initialized the loading process properly
|
83 |
if( is_array($this->context) ){
|
84 |
list( $subdir, $_domain, $locale ) = $this->context;
|
85 |
$this->context = null;
|
86 |
-
// It shouldn't be possible to catch a different domain after setting context, but we'd better bail just in case
|
87 |
if( $_domain !== $domain ){
|
88 |
return;
|
89 |
}
|
90 |
-
$mopath = $
|
91 |
}
|
92 |
-
|
93 |
-
// else load_textdomain must have been called directly to bypass locale filters
|
94 |
else {
|
95 |
-
$
|
96 |
-
|
97 |
-
if( substr( dirname($mopath).'/', 0, $snip ) === $wp_lang_dir ){
|
98 |
-
$mopath = substr_replace( $mopath, $lc_lang_dir, 0, $snip );
|
99 |
-
}
|
100 |
-
// else no way to map files from WP_LANG_DIR to LOCO_LANG_DIR
|
101 |
-
else {
|
102 |
return;
|
103 |
}
|
104 |
}
|
105 |
-
|
106 |
// Load our custom translations avoiding recursion back into this hook
|
107 |
$this->lock[$domain][$key] = true;
|
108 |
load_textdomain( $domain, $mopath );
|
109 |
}
|
110 |
|
111 |
|
112 |
-
|
113 |
-
* `
|
114 |
-
*
|
|
|
115 |
* @param string
|
116 |
* @return string
|
117 |
*/
|
118 |
-
public function
|
119 |
-
//
|
120 |
-
|
121 |
-
|
122 |
-
$
|
|
|
|
|
|
|
123 |
}
|
124 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
}
|
126 |
|
127 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php /** @noinspection PhpUnusedParameterInspection */
|
2 |
+
|
3 |
/**
|
4 |
* Text Domain loading helper.
|
5 |
* Ensures custom translations can be loaded from `wp-content/languages/loco`.
|
6 |
+
* This functionality is optional. You can disable the plugin if you're not loading MO or JSON files from languages/loco
|
7 |
*/
|
8 |
class Loco_hooks_LoadHelper extends Loco_hooks_Hookable {
|
9 |
|
10 |
/**
|
11 |
+
* theme/plugin text domain loading context in progress
|
12 |
+
* @var string[] [ $subdir, $domain, $locale ]
|
13 |
*/
|
14 |
private $context;
|
15 |
|
16 |
/**
|
17 |
+
* Protects against recursive calls to load_textdomain()
|
18 |
+
* @var bool[]
|
19 |
*/
|
20 |
+
private $lock;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Custom/safe directory path with trailing slash
|
24 |
+
* @var string
|
25 |
+
*/
|
26 |
+
private $base;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Locations that can be mapped to equivalent paths under custom directory
|
30 |
+
* @var array[]
|
31 |
+
*/
|
32 |
+
private $map;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Deferred JSON files under our custom directory, indexed by script handle
|
36 |
+
* @var string[]
|
37 |
+
*/
|
38 |
+
private $json;
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* {@inheritDoc}
|
43 |
+
*/
|
44 |
+
public function __construct(){
|
45 |
+
parent::__construct();
|
46 |
+
$this->lock = array();
|
47 |
+
$this->json = array();
|
48 |
+
$this->base = trailingslashit( loco_constant('LOCO_LANG_DIR') );
|
49 |
+
// add system locations which have direct equivalent custom/safe locations under LOCO_LANG_DIR
|
50 |
+
// not adding theme paths because as long as load_theme_textdomain is used they will be mapped by context.
|
51 |
+
$this->add('', loco_constant('WP_LANG_DIR') )
|
52 |
+
->add('plugins/', loco_constant('WP_PLUGIN_DIR') )
|
53 |
+
->add('plugins/', loco_constant('WPMU_PLUGIN_DIR') );
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Add a mappable location
|
59 |
+
* @param string
|
60 |
+
* @param string
|
61 |
+
* @return self
|
62 |
+
*/
|
63 |
+
private function add( $subdir, $path ){
|
64 |
+
if( $path ){
|
65 |
+
$path = trailingslashit($path);
|
66 |
+
$this->map[] = array( $subdir, $path, strlen($path) );
|
67 |
+
}
|
68 |
+
return $this;
|
69 |
+
}
|
70 |
+
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Map a file directly from a standard system location to LOCO_LANG_DIR.
|
74 |
+
* - this does not check if file exists, only what the path should be.
|
75 |
+
* - this does not handle filename differences (so won't work with themes)
|
76 |
+
* @param string e.g. {WP_CONTENT_DIR}/languages/plugins/foo or {WP_PLUGIN_DIR}/foo/anything/foo
|
77 |
+
* @return string e.g. {WP_CONTENT_DIR}/languages/loco/plugins/foo
|
78 |
+
*/
|
79 |
+
private function resolve( $path ){
|
80 |
+
foreach( $this->map as $key => $data ){
|
81 |
+
list($subdir,$prefix,$len) = $data;
|
82 |
+
if( substr($path,0,$len) === $prefix ){
|
83 |
+
if( '' === $subdir ){
|
84 |
+
return $this->base.substr($path,$len);
|
85 |
+
}
|
86 |
+
return $this->base.$subdir.basename($path);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
return '';
|
90 |
+
}
|
91 |
|
92 |
|
93 |
/**
|
94 |
* `theme_locale` filter callback.
|
95 |
* Signals the beginning of a "load_theme_textdomain" process
|
96 |
+
* @param string
|
97 |
+
* @param string
|
98 |
+
* @return string
|
99 |
+
*/
|
100 |
public function filter_theme_locale( $locale, $domain = '' ){
|
101 |
+
$this->context = array( 'themes/', $domain, $locale );
|
102 |
unset( $this->lock[$domain] );
|
103 |
return $locale;
|
104 |
}
|
112 |
* @return string
|
113 |
*/
|
114 |
public function filter_plugin_locale( $locale, $domain = '' ){
|
115 |
+
$this->context = array( 'plugins/', $domain, $locale );
|
116 |
unset( $this->lock[$domain] );
|
117 |
return $locale;
|
118 |
}
|
151 |
if( isset($this->lock[$domain][$key]) ){
|
152 |
return;
|
153 |
}
|
|
|
|
|
|
|
|
|
154 |
// if context is set, then a theme or plugin initialized the loading process properly
|
155 |
if( is_array($this->context) ){
|
156 |
list( $subdir, $_domain, $locale ) = $this->context;
|
157 |
$this->context = null;
|
|
|
158 |
if( $_domain !== $domain ){
|
159 |
return;
|
160 |
}
|
161 |
+
$mopath = $this->base.$subdir.$domain.'-'.$locale.'.mo';
|
162 |
}
|
163 |
+
// else load_textdomain must have been called directly, including to load core domain
|
|
|
164 |
else {
|
165 |
+
$mopath = $this->resolve($mopath);
|
166 |
+
if( '' === $mopath ){
|
|
|
|
|
|
|
|
|
|
|
167 |
return;
|
168 |
}
|
169 |
}
|
|
|
170 |
// Load our custom translations avoiding recursion back into this hook
|
171 |
$this->lock[$domain][$key] = true;
|
172 |
load_textdomain( $domain, $mopath );
|
173 |
}
|
174 |
|
175 |
|
176 |
+
/*
|
177 |
+
* `load_script_translation_file` filter callback
|
178 |
+
* Alternative method to merging in `pre_load_script_translations`
|
179 |
+
* @param string|false candidate JSON file (false on final attempt)
|
180 |
* @param string
|
181 |
* @return string
|
182 |
*/
|
183 |
+
public function filter_load_script_translation_file( $path = '', $handle = '' ){
|
184 |
+
// currently handle-based JSONs for author-provided translations will never map.
|
185 |
+
if( is_string($path) && preg_match('/^-[a-f0-9]{32}\\.json$/',substr($path,-38) ) ){
|
186 |
+
$custom = $this->resolve($path);
|
187 |
+
if( $custom && is_readable($custom) ){
|
188 |
+
// Defer until either JSON is resolved or final attempt passes an empty path.
|
189 |
+
$this->json[$handle] = $custom;
|
190 |
+
}
|
191 |
}
|
192 |
+
// If we return an unreadable file, load_script_translations will not fire.
|
193 |
+
// However, we need to allow WordPress to try all files. Last attempt will have empty path
|
194 |
+
else if( false === $path && array_key_exists($handle,$this->json) ){
|
195 |
+
$path = $this->json[$handle];
|
196 |
+
unset( $this->json[$handle] );
|
197 |
+
}
|
198 |
+
return $path;
|
199 |
}
|
200 |
|
201 |
+
|
202 |
+
/**
|
203 |
+
* `load_script_translations` filter callback.
|
204 |
+
* Merges custom translations on top of installed ones, as late as possible.
|
205 |
+
* @param string contents of JSON file that WordPress has read
|
206 |
+
* @param string path relating to given JSON (not used here)
|
207 |
+
* @param string script handle for registered merge
|
208 |
+
* @return string final JSON translations
|
209 |
+
*/
|
210 |
+
public function filter_load_script_translations( $json = '', $path = '', $handle = '' ){
|
211 |
+
if( array_key_exists($handle,$this->json) ){
|
212 |
+
$path = $this->json[$handle];
|
213 |
+
unset( $this->json[$handle] );
|
214 |
+
$json = self::mergeJson( $json, file_get_contents($path) );
|
215 |
+
}
|
216 |
+
return $json;
|
217 |
+
}
|
218 |
+
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Merge two JSON translation files such that custom strings override
|
222 |
+
* @param string Original/fallback JSON
|
223 |
+
* @param string Custom JSON (must exclude empty keys)
|
224 |
+
* @return string Merged JSON
|
225 |
+
*/
|
226 |
+
private static function mergeJson( $json, $custom ){
|
227 |
+
$fallbackJed = json_decode($json,true);
|
228 |
+
$overrideJed = json_decode($custom,true);
|
229 |
+
if( self::jedValid($fallbackJed) && self::jedValid($overrideJed) ){
|
230 |
+
// Original key is probably "messages" instead of domain, but this could change at any time.
|
231 |
+
// Although custom file should have domain key, there's no guarantee JSON wasn't overwritten or key changed.
|
232 |
+
$overrideMessages = current($overrideJed['locale_data']);
|
233 |
+
$fallbackMessages = current($fallbackJed['locale_data']);
|
234 |
+
// We could merge headers, but custom file should be correct
|
235 |
+
// $overrideMessages[''] += $fallbackMessages[''];
|
236 |
+
// Continuing to use "messages" here as per WordPress. Good backward compatibility is likely.
|
237 |
+
// Note that our custom JED is sparse (exported with empty keys absent). This is essential for + operator.
|
238 |
+
$overrideJed['locale_data'] = array (
|
239 |
+
'messages' => $overrideMessages + $fallbackMessages,
|
240 |
+
);
|
241 |
+
// Note that envelope will be the custom one. No functional difference but demonstrates that merge worked.
|
242 |
+
$overrideJed['merged'] = true;
|
243 |
+
$json = json_encode($overrideJed);
|
244 |
+
}
|
245 |
+
// Handle situations where one or neither JSON strings are valid
|
246 |
+
else if( self::jedValid($overrideJed) ){
|
247 |
+
$json = $custom;
|
248 |
+
}
|
249 |
+
else if( ! self::jedValid($fallbackJed) ){
|
250 |
+
$json = '';
|
251 |
+
}
|
252 |
+
return $json;
|
253 |
+
}
|
254 |
+
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Test if unserialized JSON is a valid JED structure
|
258 |
+
* @param array
|
259 |
+
* @return bool
|
260 |
+
*/
|
261 |
+
private static function jedValid( $jed ){
|
262 |
+
return is_array($jed) && array_key_exists('locale_data',$jed) && is_array($jed['locale_data']) && $jed['locale_data'];
|
263 |
+
}
|
264 |
+
|
265 |
+
|
266 |
+
/*
|
267 |
+
* Alternative merging method using `script_loader_tag` filter callback.
|
268 |
+
* We could load two JSONs via two calls to wp.i18n.setLocaleData BUT WordPress closure makes it difficult/unreliable.
|
269 |
+
* @param string candidate JSON file
|
270 |
+
* @param string
|
271 |
+
* @param string
|
272 |
+
* @return string
|
273 |
+
*
|
274 |
+
public function filter_script_loader_tag( $tag = '', $handle = '', $src = '' ){
|
275 |
+
if( array_key_exists($handle,$this->json) ){
|
276 |
+
$json = file_get_contents($this->json[$handle] );
|
277 |
+
unset($this->json[$handle]);
|
278 |
+
// splice custom translations between original ones and the script they're attached to.
|
279 |
+
list( $foo, $bar ) = explode('</script>',$tag,2);
|
280 |
+
$tag = $foo."\n console.log({$json});</script>".$bar;
|
281 |
+
}
|
282 |
+
return $tag;
|
283 |
+
}*/
|
284 |
+
|
285 |
+
}
|
src/js/Strings.php
CHANGED
@@ -53,7 +53,7 @@ class Loco_js_Strings extends Loco_hooks_TranslateBuffer {
|
|
53 |
// xgettext: javascript-format
|
54 |
_n("Translation job aborted with one string remaining","Translation job aborted with %s strings remaining",0,'loco-translate');
|
55 |
|
56 |
-
/* e.g. via Google Translate
|
57 |
* xgettext: javascript-format */
|
58 |
_n("%s string translated via %s","%s strings translated via %s",0,'loco-translate');
|
59 |
|
53 |
// xgettext: javascript-format
|
54 |
_n("Translation job aborted with one string remaining","Translation job aborted with %s strings remaining",0,'loco-translate');
|
55 |
|
56 |
+
/* 1: Number of strings; 2: Service provider; e.g. "50 strings translated via Google Translate"
|
57 |
* xgettext: javascript-format */
|
58 |
_n("%s string translated via %s","%s strings translated via %s",0,'loco-translate');
|
59 |
|
src/mvc/AdminRouter.php
CHANGED
@@ -137,6 +137,8 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
137 |
Loco_error_AdminNotices::add($e);
|
138 |
}
|
139 |
}
|
|
|
|
|
140 |
|
141 |
return $this->ctrl;
|
142 |
}
|
137 |
Loco_error_AdminNotices::add($e);
|
138 |
}
|
139 |
}
|
140 |
+
// WP emoji replacement doesn't inherit .wp-exclude-emoji so we'd have to add it to hundreds of elements.
|
141 |
+
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
142 |
|
143 |
return $this->ctrl;
|
144 |
}
|
src/package/Bundle.php
CHANGED
@@ -79,6 +79,12 @@ abstract class Loco_package_Bundle extends ArrayObject implements JsonSerializab
|
|
79 |
*/
|
80 |
abstract public function getType();
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
/**
|
84 |
* Construct bundle from unique ID containing type and handle
|
79 |
*/
|
80 |
abstract public function getType();
|
81 |
|
82 |
+
/**
|
83 |
+
* Get absolute URL to bundle root, with trailing slash
|
84 |
+
* @return string
|
85 |
+
*/
|
86 |
+
abstract public function getDirectoryUrl();
|
87 |
+
|
88 |
|
89 |
/**
|
90 |
* Construct bundle from unique ID containing type and handle
|
src/package/Core.php
CHANGED
@@ -56,6 +56,14 @@ class Loco_package_Core extends Loco_package_Bundle {
|
|
56 |
}
|
57 |
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
/**
|
60 |
* {@inheritdoc}
|
61 |
* Core bundle is always configured
|
56 |
}
|
57 |
|
58 |
|
59 |
+
/**
|
60 |
+
* {@inheritDoc}
|
61 |
+
*/
|
62 |
+
public function getDirectoryUrl(){
|
63 |
+
return get_site_url(null,'/');
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
/**
|
68 |
* {@inheritdoc}
|
69 |
* Core bundle is always configured
|
src/package/Debugger.php
CHANGED
@@ -183,6 +183,7 @@ class Loco_package_Debugger implements IteratorAggregate {
|
|
183 |
if( isset($realCounts[$domain]) ){
|
184 |
$count = $counts[$domain];
|
185 |
$realCount = $realCounts[$domain];
|
|
|
186 |
$str = _n( 'One string extracted from source code for "%2$s"', '%s strings extracted from source code for "%s"', $realCount, 'loco-translate' );
|
187 |
$this->good( $str.' (%s including metadata)', number_format($realCount), $domain?$domain:'*', number_format($count) );
|
188 |
}
|
183 |
if( isset($realCounts[$domain]) ){
|
184 |
$count = $counts[$domain];
|
185 |
$realCount = $realCounts[$domain];
|
186 |
+
// translators: 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
|
187 |
$str = _n( 'One string extracted from source code for "%2$s"', '%s strings extracted from source code for "%s"', $realCount, 'loco-translate' );
|
188 |
$this->good( $str.' (%s including metadata)', number_format($realCount), $domain?$domain:'*', number_format($count) );
|
189 |
}
|
src/package/Header.php
CHANGED
@@ -4,8 +4,11 @@
|
|
4 |
* Because access to theme and plugin header data via WordPress is a total mess.
|
5 |
*
|
6 |
* @property-read string $Name
|
|
|
7 |
* @property-read string $Author
|
8 |
* @property-read string $AuthorURI
|
|
|
|
|
9 |
* @property-read string $TextDomain
|
10 |
* @property-read string $DomainPath
|
11 |
*/
|
@@ -24,13 +27,17 @@ class Loco_package_Header {
|
|
24 |
|
25 |
|
26 |
/**
|
|
|
27 |
* @return string
|
28 |
*/
|
29 |
public function __get( $prop ){
|
30 |
$wp = $this->wp;
|
31 |
-
// prefer
|
32 |
-
if(
|
33 |
-
|
|
|
|
|
|
|
34 |
}
|
35 |
// may have key directly, e.g. TextDomain in plugin array
|
36 |
if( isset($wp[$prop]) ){
|
@@ -42,10 +49,12 @@ class Loco_package_Header {
|
|
42 |
|
43 |
|
44 |
/**
|
|
|
|
|
45 |
* @codeCoverageIgnore
|
46 |
*/
|
47 |
public function __set( $prop, $value ){
|
48 |
-
throw new
|
49 |
}
|
50 |
|
51 |
|
4 |
* Because access to theme and plugin header data via WordPress is a total mess.
|
5 |
*
|
6 |
* @property-read string $Name
|
7 |
+
* @property-read string $Version
|
8 |
* @property-read string $Author
|
9 |
* @property-read string $AuthorURI
|
10 |
+
* @property-read string $PluginURI
|
11 |
+
* @property-read string $ThemeURI
|
12 |
* @property-read string $TextDomain
|
13 |
* @property-read string $DomainPath
|
14 |
*/
|
27 |
|
28 |
|
29 |
/**
|
30 |
+
* @param string
|
31 |
* @return string
|
32 |
*/
|
33 |
public function __get( $prop ){
|
34 |
$wp = $this->wp;
|
35 |
+
// prefer "get" method to access raw properties (WP_Theme)
|
36 |
+
if( is_object($wp) && method_exists($wp,'get') ){
|
37 |
+
$value = $wp->get($prop);
|
38 |
+
if( is_string($value) && '' !== $value ){
|
39 |
+
return $value;
|
40 |
+
}
|
41 |
}
|
42 |
// may have key directly, e.g. TextDomain in plugin array
|
43 |
if( isset($wp[$prop]) ){
|
49 |
|
50 |
|
51 |
/**
|
52 |
+
* @param string
|
53 |
+
* @param mixed
|
54 |
* @codeCoverageIgnore
|
55 |
*/
|
56 |
public function __set( $prop, $value ){
|
57 |
+
throw new LogicException('Read only');
|
58 |
}
|
59 |
|
60 |
|
src/package/Plugin.php
CHANGED
@@ -32,6 +32,14 @@ class Loco_package_Plugin extends Loco_package_Bundle {
|
|
32 |
}
|
33 |
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
/**
|
36 |
* {@inheritdoc}
|
37 |
*/
|
32 |
}
|
33 |
|
34 |
|
35 |
+
/**
|
36 |
+
* {@inheritDoc}
|
37 |
+
*/
|
38 |
+
public function getDirectoryUrl(){
|
39 |
+
return plugins_url('/',$this->getHandle());
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
/**
|
44 |
* {@inheritdoc}
|
45 |
*/
|
src/package/Project.php
CHANGED
@@ -58,6 +58,12 @@ class Loco_package_Project {
|
|
58 |
* @var Loco_fs_FileList
|
59 |
*/
|
60 |
private $spaths;
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
/**
|
63 |
* File and directory paths to exclude from source file extraction
|
@@ -391,11 +397,7 @@ class Loco_package_Project {
|
|
391 |
private function getSourceFinder(){
|
392 |
if( ! $this->source ){
|
393 |
$source = new Loco_fs_FileFinder;
|
394 |
-
|
395 |
-
$conf = Loco_data_Settings::get();
|
396 |
-
$exts = $conf->php_alias or $exts = array('php');
|
397 |
-
// Only add .js extensions if enabled
|
398 |
-
$exts = array_merge( $exts, (array) $conf->jsx_alias );
|
399 |
$source->setRecursive(true)->groupBy($exts);
|
400 |
/* @var $file Loco_fs_File */
|
401 |
foreach( $this->spaths as $file ){
|
@@ -411,6 +413,22 @@ class Loco_package_Project {
|
|
411 |
}
|
412 |
|
413 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
414 |
/**
|
415 |
* Utility excludes current exclude paths from target finder
|
416 |
* @param Loco_fs_FileFinder
|
58 |
* @var Loco_fs_FileList
|
59 |
*/
|
60 |
private $spaths;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Configured source file extensions, e.g. ["php","js"]
|
64 |
+
* @var string[]
|
65 |
+
*/
|
66 |
+
private $sexts;
|
67 |
|
68 |
/**
|
69 |
* File and directory paths to exclude from source file extraction
|
397 |
private function getSourceFinder(){
|
398 |
if( ! $this->source ){
|
399 |
$source = new Loco_fs_FileFinder;
|
400 |
+
$exts = $this->getSourceExtensions();
|
|
|
|
|
|
|
|
|
401 |
$source->setRecursive(true)->groupBy($exts);
|
402 |
/* @var $file Loco_fs_File */
|
403 |
foreach( $this->spaths as $file ){
|
413 |
}
|
414 |
|
415 |
|
416 |
+
/**
|
417 |
+
* @return string[]
|
418 |
+
*/
|
419 |
+
public function getSourceExtensions(){
|
420 |
+
// TODO source extensions should be moved from plugin settings to project settings
|
421 |
+
$exts = $this->sexts;
|
422 |
+
if( is_null($exts) ){
|
423 |
+
$conf = Loco_data_Settings::get();
|
424 |
+
$exts = (array) $conf->php_alias;
|
425 |
+
$exts = array_merge( $exts, (array) $conf->jsx_alias );
|
426 |
+
}
|
427 |
+
// always ensure we have at least PHP files scanned
|
428 |
+
return array_merge( $exts, array('php') );
|
429 |
+
}
|
430 |
+
|
431 |
+
|
432 |
/**
|
433 |
* Utility excludes current exclude paths from target finder
|
434 |
* @param Loco_fs_FileFinder
|
src/package/Theme.php
CHANGED
@@ -37,6 +37,15 @@ class Loco_package_Theme extends Loco_package_Bundle {
|
|
37 |
}
|
38 |
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* {@inheritdoc}
|
42 |
*/
|
37 |
}
|
38 |
|
39 |
|
40 |
+
/**
|
41 |
+
* {@inheritDoc}
|
42 |
+
*/
|
43 |
+
public function getDirectoryUrl() {
|
44 |
+
$slug = $this->getHandle();
|
45 |
+
return trailingslashit(get_theme_root_uri($slug)).$slug.'/';
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
/**
|
50 |
* {@inheritdoc}
|
51 |
*/
|
src/test/TestCase.php
CHANGED
@@ -19,11 +19,11 @@ abstract class Loco_test_TestCase extends PHPUnit_Framework_TestCase {
|
|
19 |
$dom->normalizeDocument();
|
20 |
$src = $dom->saveXML();
|
21 |
|
22 |
-
return trim( preg_replace( '
|
23 |
}
|
24 |
|
25 |
|
26 |
-
public function assertSameHtml( $expect, $actual, $message =
|
27 |
return $this->assertSame( $this->normalizeHtml($expect), $this->normalizeHtml($actual), $message );
|
28 |
}
|
29 |
|
19 |
$dom->normalizeDocument();
|
20 |
$src = $dom->saveXML();
|
21 |
|
22 |
+
return trim( preg_replace( '/>\\s+</', '><', $src ) );
|
23 |
}
|
24 |
|
25 |
|
26 |
+
public function assertSameHtml( $expect, $actual, $message = '' ){
|
27 |
return $this->assertSame( $this->normalizeHtml($expect), $this->normalizeHtml($actual), $message );
|
28 |
}
|
29 |
|
src/test/WordPressTestCase.php
CHANGED
@@ -93,6 +93,8 @@ abstract class Loco_test_WordPressTestCase extends WP_UnitTestCase {
|
|
93 |
$this->enable_locale('en_US');
|
94 |
$this->assertSame( 'en_US', get_locale(), 'Ensure test site is English to start');
|
95 |
$this->assertSame( 'en_US', get_user_locale(),'Ensure test site is English to start');
|
|
|
|
|
96 |
// ensure test themes are registered and WordPress's cache is valid
|
97 |
register_theme_directory( LOCO_TEST_DATA_ROOT.'/themes' );
|
98 |
$sniff = get_theme_roots();
|
@@ -125,7 +127,7 @@ abstract class Loco_test_WordPressTestCase extends WP_UnitTestCase {
|
|
125 |
$this->enable_network();
|
126 |
}
|
127 |
|
128 |
-
|
129 |
/**
|
130 |
* {@inheritdoc}
|
131 |
*/
|
@@ -447,7 +449,7 @@ abstract class Loco_test_WordPressTestCase extends WP_UnitTestCase {
|
|
447 |
*/
|
448 |
public function assertRedirected( $status = 302, $message = 'Failed to redirect' ){
|
449 |
$raw = $this->redirect;
|
450 |
-
$this->
|
451 |
$this->assertSame( $status, $raw[1], $message );
|
452 |
return $raw[0];
|
453 |
}
|
93 |
$this->enable_locale('en_US');
|
94 |
$this->assertSame( 'en_US', get_locale(), 'Ensure test site is English to start');
|
95 |
$this->assertSame( 'en_US', get_user_locale(),'Ensure test site is English to start');
|
96 |
+
// Any enqueued scripts should be destroyed
|
97 |
+
unset($GLOBALS['wp_scripts']);
|
98 |
// ensure test themes are registered and WordPress's cache is valid
|
99 |
register_theme_directory( LOCO_TEST_DATA_ROOT.'/themes' );
|
100 |
$sniff = get_theme_roots();
|
127 |
$this->enable_network();
|
128 |
}
|
129 |
|
130 |
+
|
131 |
/**
|
132 |
* {@inheritdoc}
|
133 |
*/
|
449 |
*/
|
450 |
public function assertRedirected( $status = 302, $message = 'Failed to redirect' ){
|
451 |
$raw = $this->redirect;
|
452 |
+
$this->assertIsArray( $raw, $message );
|
453 |
$this->assertSame( $status, $raw[1], $message );
|
454 |
return $raw[0];
|
455 |
}
|
tpl/admin/config/settings.php
CHANGED
@@ -4,8 +4,8 @@
|
|
4 |
*/
|
5 |
|
6 |
$this->extend('../layout');
|
7 |
-
$
|
8 |
-
|
9 |
/* @var Loco_data_Settings $opts */
|
10 |
/* @var Loco_data_Settings $dflt */
|
11 |
/* @var Loco_mvc_ViewParams $nonce */
|
@@ -17,29 +17,10 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
17 |
<table class="form-table">
|
18 |
<tbody>
|
19 |
<tr>
|
20 |
-
<th scope="row"
|
21 |
-
|
22 |
-
<
|
23 |
-
|
24 |
-
<span><?php esc_html_e('Compiling MO files','loco-translate')?></span>
|
25 |
-
</legend>
|
26 |
-
<p>
|
27 |
-
<label for="loco--gen-hash">
|
28 |
-
<input type="checkbox" name="opts[gen_hash]" value="1" id="loco--gen-hash"<?php echo $opts->gen_hash?' checked':''?> />
|
29 |
-
<?php esc_html_e('Generate hash tables','loco-translate')?>
|
30 |
-
</label>
|
31 |
-
</p>
|
32 |
-
<p>
|
33 |
-
<label for="loco--use-fuzzy">
|
34 |
-
<input type="checkbox" name="opts[use_fuzzy]" value="1" id="loco--use-fuzzy"<?php echo $opts->use_fuzzy?' checked':''?> />
|
35 |
-
<?php esc_html_e('Include Fuzzy strings','loco-translate')?>
|
36 |
-
</label>
|
37 |
-
</p>
|
38 |
-
</fieldset>
|
39 |
-
</td>
|
40 |
-
</tr>
|
41 |
-
<tr>
|
42 |
-
<th scope="row"><?php esc_html_e('Extracting strings','loco-translate')?></th>
|
43 |
<td>
|
44 |
<fieldset>
|
45 |
<legend class="screen-reader-text">
|
@@ -67,7 +48,10 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
67 |
</td>
|
68 |
</tr>
|
69 |
<tr>
|
70 |
-
<th scope="row"
|
|
|
|
|
|
|
71 |
<td>
|
72 |
<fieldset>
|
73 |
<legend class="screen-reader-text">
|
@@ -77,7 +61,7 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
77 |
<label for="loco--num-backups">
|
78 |
<?php esc_html_e('Number of backups to keep of each file:','loco-translate')?>
|
79 |
</label>
|
80 |
-
<input type="number" min="0" max="99" size="2" name="opts[num_backups]" id="loco--
|
81 |
</p>
|
82 |
<p>
|
83 |
<label for="loco--po-width">
|
@@ -101,7 +85,10 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
101 |
</td>
|
102 |
</tr>
|
103 |
<tr>
|
104 |
-
<th scope="row"
|
|
|
|
|
|
|
105 |
<td>
|
106 |
<fieldset>
|
107 |
<legend class="screen-reader-text">
|
@@ -128,21 +115,61 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
128 |
</fieldset>
|
129 |
</td>
|
130 |
</tr>
|
131 |
-
|
132 |
-
<th scope="row"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
<td>
|
134 |
<fieldset>
|
|
|
|
|
|
|
135 |
<p>
|
136 |
-
<label for="loco--
|
137 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
</label>
|
139 |
-
<input type="text" size="40" name="opts[pot_alias]" id="loco--pot_alias" value="< ?php echo esc_attr( implode(' ',$opts->pot_alias) )? >" />
|
140 |
</p>
|
141 |
</fieldset>
|
142 |
</td>
|
143 |
-
</tr
|
144 |
<tr>
|
145 |
-
<th scope="row"
|
|
|
|
|
|
|
146 |
<td>
|
147 |
<fieldset>
|
148 |
<legend class="screen-reader-text">
|
@@ -175,17 +202,14 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
175 |
<option value="2"<?php echo 2 === $opts->pot_protect?' selected':''?>><?php $verbose->e(2)?></option>
|
176 |
</select>
|
177 |
</p>
|
178 |
-
<p>
|
179 |
-
<span class="description">
|
180 |
-
<a href="<?php self::e($fs_help)?>" target="_blank"><?php
|
181 |
-
esc_html_e('About file system access','loco-translate')?></a>
|
182 |
-
</span>
|
183 |
-
</p>
|
184 |
</fieldset>
|
185 |
</td>
|
186 |
</tr>
|
187 |
<tr>
|
188 |
-
<th scope="row"
|
|
|
|
|
|
|
189 |
<td>
|
190 |
<fieldset>
|
191 |
<legend class="screen-reader-text">
|
@@ -207,6 +231,6 @@ $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/
|
|
207 |
</table>
|
208 |
<p class="submit">
|
209 |
<input type="submit" class="button-primary" value="<?php esc_html_e('Save settings','loco-translate')?>" />
|
210 |
-
<a class="button button-link" href="<?php
|
211 |
</p>
|
212 |
</form>
|
4 |
*/
|
5 |
|
6 |
$this->extend('../layout');
|
7 |
+
$help_url = esc_html( apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/settings') );
|
8 |
+
|
9 |
/* @var Loco_data_Settings $opts */
|
10 |
/* @var Loco_data_Settings $dflt */
|
11 |
/* @var Loco_mvc_ViewParams $nonce */
|
17 |
<table class="form-table">
|
18 |
<tbody>
|
19 |
<tr>
|
20 |
+
<th scope="row">
|
21 |
+
<?php esc_html_e('Extracting strings','loco-translate')?>
|
22 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#xgettext" target="_blank"><span>(?)</span></a>
|
23 |
+
</th>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
<td>
|
25 |
<fieldset>
|
26 |
<legend class="screen-reader-text">
|
48 |
</td>
|
49 |
</tr>
|
50 |
<tr>
|
51 |
+
<th scope="row">
|
52 |
+
<?php esc_html_e('Saving PO/POT files','loco-translate')?>
|
53 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#po" target="_blank"><span>(?)</span></a>
|
54 |
+
</th>
|
55 |
<td>
|
56 |
<fieldset>
|
57 |
<legend class="screen-reader-text">
|
61 |
<label for="loco--num-backups">
|
62 |
<?php esc_html_e('Number of backups to keep of each file:','loco-translate')?>
|
63 |
</label>
|
64 |
+
<input type="number" min="0" max="99" size="2" name="opts[num_backups]" id="loco--num-backups" value="<?php printf('%u',$opts->num_backups)?>" />
|
65 |
</p>
|
66 |
<p>
|
67 |
<label for="loco--po-width">
|
85 |
</td>
|
86 |
</tr>
|
87 |
<tr>
|
88 |
+
<th scope="row">
|
89 |
+
<?php esc_html_e('Syncing PO files','loco-translate')?>
|
90 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#sync" target="_blank"><span>(?)</span></a>
|
91 |
+
</th>
|
92 |
<td>
|
93 |
<fieldset>
|
94 |
<legend class="screen-reader-text">
|
115 |
</fieldset>
|
116 |
</td>
|
117 |
</tr>
|
118 |
+
<tr>
|
119 |
+
<th scope="row">
|
120 |
+
<?php esc_html_e('Compiling MO files','loco-translate')?>
|
121 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#mo" target="_blank"><span>(?)</span></a>
|
122 |
+
</th>
|
123 |
+
<td>
|
124 |
+
<fieldset>
|
125 |
+
<legend class="screen-reader-text">
|
126 |
+
<span><?php esc_html_e('Compiling MO files','loco-translate')?></span>
|
127 |
+
</legend>
|
128 |
+
<p>
|
129 |
+
<label for="loco--gen-hash">
|
130 |
+
<input type="checkbox" name="opts[gen_hash]" value="1" id="loco--gen-hash"<?php echo $opts->gen_hash?' checked':''?> />
|
131 |
+
<?php esc_html_e('Generate hash tables','loco-translate')?>
|
132 |
+
</label>
|
133 |
+
</p>
|
134 |
+
<p>
|
135 |
+
<label for="loco--use-fuzzy">
|
136 |
+
<input type="checkbox" name="opts[use_fuzzy]" value="1" id="loco--use-fuzzy"<?php echo $opts->use_fuzzy?' checked':''?> />
|
137 |
+
<?php esc_html_e('Include Fuzzy strings','loco-translate')?>
|
138 |
+
</label>
|
139 |
+
</p>
|
140 |
+
</fieldset>
|
141 |
+
</td>
|
142 |
+
</tr>
|
143 |
+
<tr>
|
144 |
+
<th scope="row">
|
145 |
+
<?php esc_html_e('Compiling JSON files','loco-translate')?>
|
146 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#json" target="_blank"><span>(?)</span></a>
|
147 |
+
</th>
|
148 |
<td>
|
149 |
<fieldset>
|
150 |
+
<legend class="screen-reader-text">
|
151 |
+
<span><?php esc_html_e('Compiling JSON files','loco-translate')?></span>
|
152 |
+
</legend>
|
153 |
<p>
|
154 |
+
<label for="loco--jed-pretty">
|
155 |
+
<input type="checkbox" name="opts[jed_pretty]" value="1" id="loco--jed-pretty"<?php echo $opts->jed_pretty?' checked':''?> />
|
156 |
+
<?php esc_html_e('Pretty formatting','loco-translate')?>
|
157 |
+
</label>
|
158 |
+
</p>
|
159 |
+
<p>
|
160 |
+
<label for="loco--jed-clean">
|
161 |
+
<input type="checkbox" name="opts[jed_clean]" value="1" id="loco--jed-clean"<?php echo $opts->jed_clean?' checked':''?> />
|
162 |
+
<?php esc_html_e('Delete redundant files','loco-translate')?>
|
163 |
</label>
|
|
|
164 |
</p>
|
165 |
</fieldset>
|
166 |
</td>
|
167 |
+
</tr>
|
168 |
<tr>
|
169 |
+
<th scope="row">
|
170 |
+
<?php esc_html_e('File system access','loco-translate')?>
|
171 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#fs" target="_blank"><span>(?)</span></a>
|
172 |
+
</th>
|
173 |
<td>
|
174 |
<fieldset>
|
175 |
<legend class="screen-reader-text">
|
202 |
<option value="2"<?php echo 2 === $opts->pot_protect?' selected':''?>><?php $verbose->e(2)?></option>
|
203 |
</select>
|
204 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
</fieldset>
|
206 |
</td>
|
207 |
</tr>
|
208 |
<tr>
|
209 |
+
<th scope="row">
|
210 |
+
<?php esc_html_e('Grant access to roles','loco-translate')?>
|
211 |
+
<a class="icon only-icon icon-help" href="<?php echo $help_url?>#roles" target="_blank"><span>(?)</span></a>
|
212 |
+
</th>
|
213 |
<td>
|
214 |
<fieldset>
|
215 |
<legend class="screen-reader-text">
|
231 |
</table>
|
232 |
<p class="submit">
|
233 |
<input type="submit" class="button-primary" value="<?php esc_html_e('Save settings','loco-translate')?>" />
|
234 |
+
<a class="button button-link" href="<?php echo $help_url?>" target="_blank"><?php esc_html_e('Documentation','loco-translate')?></a>
|
235 |
</p>
|
236 |
</form>
|
tpl/admin/config/version.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
*/
|
5 |
$this->extend('../layout');
|
6 |
|
7 |
-
|
8 |
if( $params->has('update') ):?>
|
9 |
<div class="notice inline notice-warning">
|
10 |
<h3 class="has-icon">
|
@@ -14,7 +14,7 @@ $this->extend('../layout');
|
|
14 |
<?php esc_html_e( __('A newer version of Loco Translate is available for download','loco-translate') )?>.
|
15 |
</p>
|
16 |
<p class="submit">
|
17 |
-
<a class="button button-primary" href="<?php echo $update_href?>"><?php self::e(__('Upgrade to %s','loco-translate'),
|
18 |
<a class="button button-link has-icon icon-ext" href="https://wordpress.org/plugins/loco-translate/installation/" target="_blank"><?php esc_html_e( __('Install manually','loco-translate') )?></a>
|
19 |
</p>
|
20 |
</div><?php
|
@@ -39,3 +39,41 @@ $this->extend('../layout');
|
|
39 |
</p>
|
40 |
</div><?php
|
41 |
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
*/
|
5 |
$this->extend('../layout');
|
6 |
|
7 |
+
// Loco Translate version:
|
8 |
if( $params->has('update') ):?>
|
9 |
<div class="notice inline notice-warning">
|
10 |
<h3 class="has-icon">
|
14 |
<?php esc_html_e( __('A newer version of Loco Translate is available for download','loco-translate') )?>.
|
15 |
</p>
|
16 |
<p class="submit">
|
17 |
+
<a class="button button-primary" href="<?php echo $update_href?>" target="_blank"><?php self::e(__('Upgrade to %s','loco-translate'), 'v'.$update )?></a>
|
18 |
<a class="button button-link has-icon icon-ext" href="https://wordpress.org/plugins/loco-translate/installation/" target="_blank"><?php esc_html_e( __('Install manually','loco-translate') )?></a>
|
19 |
</p>
|
20 |
</div><?php
|
39 |
</p>
|
40 |
</div><?php
|
41 |
endif;
|
42 |
+
|
43 |
+
|
44 |
+
// PHP version (warnings only)
|
45 |
+
if( $params->has('phpupdate') ):?>
|
46 |
+
<div class="notice inline notice-warning">
|
47 |
+
<h3 class="has-icon"><?php
|
48 |
+
// translators: Where %s is the full version number of PHP
|
49 |
+
self::e( __('PHP %s','loco-translate'), $phpversion )?>
|
50 |
+
</h3>
|
51 |
+
<p><?php
|
52 |
+
// translators: (1) Name of software, e.g. "WordPress" (2) Version number, e.g. "5.6"
|
53 |
+
esc_html_e( sprintf(__('Your version of %1$s is very old. We recommend you upgrade to at least v%2$s, but preferably to the latest stable version.','loco-translate'),'PHP',$phpupdate) )?>
|
54 |
+
</p>
|
55 |
+
<p class="submit">
|
56 |
+
<a class="button button-primary" href="https://www.php.net/releases/#<?php echo $phpupdate?>" target="_blank">PHP <?php echo $phpupdate?></a>
|
57 |
+
<a class="button" href="https://www.php.net/downloads.php#v7" target="_blank">PHP 7</a>
|
58 |
+
<a class="button" href="https://www.php.net/downloads.php#v8" target="_blank">PHP 8</a>
|
59 |
+
</p>
|
60 |
+
</div><?php
|
61 |
+
endif;
|
62 |
+
|
63 |
+
|
64 |
+
// WordPress version (warnings only)
|
65 |
+
if( $params->has('wpupdate') ):?>
|
66 |
+
<div class="notice inline notice-warning">
|
67 |
+
<h3 class="has-icon"><?php
|
68 |
+
// translators: Where %s is the full version number of WordPress
|
69 |
+
self::e( __('WordPress %s','loco-translate'), $wpversion )?>
|
70 |
+
</h3>
|
71 |
+
<p><?php
|
72 |
+
esc_html_e( sprintf(__('Your version of %1$s is very old. We recommend you upgrade to at least v%2$s, but preferably to the latest stable version.','loco-translate'),'WordPress',$wpupdate) )?>
|
73 |
+
</p>
|
74 |
+
<p class="submit">
|
75 |
+
<a class="button button-primary" href="<?php echo esc_url($wpupdate_href)?>"><?php esc_html_e('Update Now','default')?></a>
|
76 |
+
<a class="button-link has-icon icon-ext" target="_blank" href="https://wordpress.org/download/releases/"><?php esc_html_e( __('Install manually','loco-translate') )?></a>
|
77 |
+
</p>
|
78 |
+
</div><?php
|
79 |
+
endif;
|
tpl/admin/errors/no-tokenizer.php
CHANGED
@@ -12,7 +12,7 @@ $this->extend('../layout');
|
|
12 |
</h3>
|
13 |
<p>
|
14 |
<?php
|
15 |
-
// Translators: change "en" in the URL to your language if it's available at
|
16 |
echo wp_kses(
|
17 |
__('Loco requires the <a href="http://php.net/manual/en/book.tokenizer.php" target="_blank">Tokenizer extension</a> to scan PHP source code for translatable strings','loco-translate'),
|
18 |
array('a'=>array('href'=>true,'target'=>true)), array('http','https')
|
12 |
</h3>
|
13 |
<p>
|
14 |
<?php
|
15 |
+
// Translators: change "en" in the URL to your language if it's available at https://www.php.net/docs.php
|
16 |
echo wp_kses(
|
17 |
__('Loco requires the <a href="http://php.net/manual/en/book.tokenizer.php" target="_blank">Tokenizer extension</a> to scan PHP source code for translatable strings','loco-translate'),
|
18 |
array('a'=>array('href'=>true,'target'=>true)), array('http','https')
|
tpl/admin/file/diff.php
CHANGED
@@ -22,7 +22,7 @@ $dfmt = _x( 'j M @ H:i', 'revision date short format', 'default' );
|
|
22 |
<time><?php $master->date('mtime',$dfmt)?></time><br />
|
23 |
<button type="button" class="button disabled" disabled>Restore</button>
|
24 |
</div><?php
|
25 |
-
/* @var $
|
26 |
foreach( $files as $i => $file ):?>
|
27 |
<div class="diff-meta jshide">
|
28 |
<span><?php $file->e('name')?></span><br />
|
@@ -32,7 +32,7 @@ $dfmt = _x( 'j M @ H:i', 'revision date short format', 'default' );
|
|
32 |
</div><?php
|
33 |
endforeach?>
|
34 |
</div><?php
|
35 |
-
/* @var $hidden
|
36 |
$hidden->_e();?>
|
37 |
</form>
|
38 |
<div class="revisions-diff-frame jsonly">
|
22 |
<time><?php $master->date('mtime',$dfmt)?></time><br />
|
23 |
<button type="button" class="button disabled" disabled>Restore</button>
|
24 |
</div><?php
|
25 |
+
/* @var Loco_mvc_FileParams[] $files */
|
26 |
foreach( $files as $i => $file ):?>
|
27 |
<div class="diff-meta jshide">
|
28 |
<span><?php $file->e('name')?></span><br />
|
32 |
</div><?php
|
33 |
endforeach?>
|
34 |
</div><?php
|
35 |
+
/* @var Loco_mvc_HiddenFields $hidden */
|
36 |
$hidden->_e();?>
|
37 |
</form>
|
38 |
<div class="revisions-diff-frame jsonly">
|
tpl/admin/init/upload.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Generic upload template for installing a file into a translation set.
|
4 |
*/
|
5 |
$this->extend('../layout');
|
6 |
-
/* @var
|
7 |
?>
|
8 |
|
9 |
<form action="" method="post" enctype="multipart/form-data" id="loco-main"><?php
|
@@ -42,10 +42,14 @@ $this->extend('../layout');
|
|
42 |
</div>
|
43 |
<div class="notice inline notice-info">
|
44 |
<h2>
|
45 |
-
Upload PO file
|
46 |
</h2>
|
47 |
-
<p
|
48 |
-
|
|
|
|
|
|
|
|
|
49 |
</p>
|
50 |
<p>
|
51 |
<input type="file" name="f" />
|
3 |
* Generic upload template for installing a file into a translation set.
|
4 |
*/
|
5 |
$this->extend('../layout');
|
6 |
+
/* @var Loco_Locale $locale */
|
7 |
?>
|
8 |
|
9 |
<form action="" method="post" enctype="multipart/form-data" id="loco-main"><?php
|
42 |
</div>
|
43 |
<div class="notice inline notice-info">
|
44 |
<h2>
|
45 |
+
<?php esc_html_e('Upload PO file','loco-translate')?>
|
46 |
</h2>
|
47 |
+
<p><?php
|
48 |
+
// translators: This is HTML formatted. (1) placeholder for language code, (2) Example language code
|
49 |
+
echo wp_kses (
|
50 |
+
sprintf( __('Your file must be named as shown above where %1$s is the language code, e.g. %2$s','loco-translate'), '<code>{locale}</code>', '<code>'.$locale.'</code>' ),
|
51 |
+
array('code'=>array())
|
52 |
+
)?>
|
53 |
</p>
|
54 |
<p>
|
55 |
<input type="file" name="f" />
|