Loco Translate - Version 2.5.0

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 Icon 128x128 Loco Translate
Version 2.5.0
Comparing to
See all releases

Code changes from version 2.4.6 to 2.5.0

Files changed (74) hide show
  1. languages/loco-translate.pot +125 -85
  2. lib/compiled/gettext.php +2 -2
  3. lib/data/locales.php +1 -1
  4. loco.php +5 -3
  5. pub/css/admin.css +1 -1
  6. pub/css/editor.css +1 -1
  7. pub/css/podiff.css +1 -1
  8. pub/css/poview.css +1 -1
  9. pub/css/skins/blue.css +1 -1
  10. pub/css/skins/coffee.css +1 -1
  11. pub/css/skins/ectoplasm.css +1 -1
  12. pub/css/skins/light.css +1 -1
  13. pub/css/skins/midnight.css +1 -1
  14. pub/css/skins/modern.css +1 -1
  15. pub/css/skins/ocean.css +1 -1
  16. pub/css/skins/sunrise.css +1 -1
  17. pub/font/loco.eot +0 -0
  18. pub/font/loco.svg +1 -0
  19. pub/font/loco.ttf +0 -0
  20. pub/font/loco.woff +0 -0
  21. pub/js/min/admin.js +183 -182
  22. pub/js/min/config.js +1 -1
  23. pub/js/min/debug.js +1 -1
  24. pub/js/min/editor.js +1 -1
  25. pub/js/min/podiff.js +1 -1
  26. pub/js/min/poinit.js +1 -1
  27. pub/js/min/potinit.js +1 -1
  28. pub/js/min/poview.js +1 -1
  29. pub/js/min/setup.js +1 -1
  30. readme.txt +10 -3
  31. src/Locale.php +18 -14
  32. src/admin/DebugController.php +2 -1
  33. src/admin/RootController.php +7 -2
  34. src/admin/bundle/BaseController.php +14 -1
  35. src/admin/config/DebugController.php +7 -4
  36. src/admin/config/VersionController.php +35 -11
  37. src/admin/file/BaseController.php +3 -6
  38. src/admin/file/DiffController.php +11 -27
  39. src/admin/file/MoveController.php +6 -1
  40. src/admin/init/InitPoController.php +1 -0
  41. src/ajax/MsginitController.php +8 -14
  42. src/ajax/SaveController.php +25 -78
  43. src/ajax/UploadController.php +10 -28
  44. src/api/WordPressFileSystem.php +2 -2
  45. src/cli/Commands.php +10 -2
  46. src/cli/ExtractCommand.php +9 -3
  47. src/cli/SyncCommand.php +30 -17
  48. src/config/ArrayModel.php +3 -0
  49. src/data/Settings.php +6 -5
  50. src/error/AdminNotices.php +12 -1
  51. src/fs/File.php +14 -9
  52. src/fs/Revisions.php +14 -8
  53. src/fs/Siblings.php +22 -12
  54. src/gettext/Compiler.php +199 -0
  55. src/gettext/Data.php +48 -53
  56. src/gettext/Extraction.php +1 -1
  57. src/hooks/AdminHooks.php +1 -1
  58. src/hooks/LoadHelper.php +192 -34
  59. src/js/Strings.php +1 -1
  60. src/mvc/AdminRouter.php +2 -0
  61. src/package/Bundle.php +6 -0
  62. src/package/Core.php +8 -0
  63. src/package/Debugger.php +1 -0
  64. src/package/Header.php +13 -4
  65. src/package/Plugin.php +8 -0
  66. src/package/Project.php +23 -5
  67. src/package/Theme.php +9 -0
  68. src/test/TestCase.php +2 -2
  69. src/test/WordPressTestCase.php +4 -2
  70. tpl/admin/config/settings.php +67 -43
  71. tpl/admin/config/version.php +40 -2
  72. tpl/admin/errors/no-tokenizer.php +1 -1
  73. tpl/admin/file/diff.php +2 -2
  74. 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.4.6\n"
5
- "Report-Msgid-Bugs-To: \n"
6
- "POT-Creation-Date: 2020-11-20 18:03+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,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.4.6; wp-5.5.3"
 
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:224
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:91
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:97 tpl/admin/file/move.php:26
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:192
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:240
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:20 tpl/admin/config/settings.php:24
 
 
 
 
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:204
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 &lsaquo; Loco"
382
  msgstr ""
383
 
384
- #: src/admin/init/InitPoController.php:215
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:100
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:175 src/admin/file/EditController.php:164
440
- #: src/admin/bundle/LocaleController.php:130 tpl/admin/config/settings.php:210
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:170
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:97
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:42 tpl/admin/config/settings.php:46
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:221
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:61
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:80
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:50
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:145 tpl/admin/config/settings.php:149
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:112
848
  msgid "Fuzzy matching tolerance"
849
  msgstr ""
850
 
851
- #: tpl/admin/config/settings.php:29
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:188
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:35
920
  msgid "Include Fuzzy strings"
921
  msgstr ""
922
 
@@ -942,7 +953,7 @@ msgstr ""
942
  msgid "Installed languages"
943
  msgstr ""
944
 
945
- #: src/Locale.php:320
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 http://php.net/docs.php
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:173
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:140
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:84
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:160
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:101 src/admin/file/MoveController.php:128
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:91 tpl/admin/config/settings.php:155
1182
  msgid "Not recommended"
1183
  msgstr ""
1184
 
@@ -1202,7 +1216,7 @@ msgstr ""
1202
  msgid "Notice"
1203
  msgstr ""
1204
 
1205
- #: tpl/admin/config/settings.php:78
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:84
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
- #: src/package/Debugger.php:186
 
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
- #: src/admin/init/InitPoController.php:196
 
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:95
1277
  msgid "Overview"
1278
  msgstr ""
1279
 
@@ -1281,7 +1297,7 @@ msgstr ""
1281
  msgid "Overwrite existing translations"
1282
  msgstr ""
1283
 
1284
- #: src/mvc/AdminRouter.php:238
1285
  msgid "Page not found"
1286
  msgstr ""
1287
 
@@ -1309,7 +1325,13 @@ msgstr ""
1309
  msgid "Permission denied to update file"
1310
  msgstr ""
1311
 
1312
- #: src/package/Plugin.php:225
 
 
 
 
 
 
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:401
1336
  msgctxt "Plural category"
1337
  msgid "All forms"
1338
  msgstr ""
1339
 
1340
  #. Plural category used in some multi-plural languages
1341
- #: src/Locale.php:415
1342
  msgctxt "Plural category"
1343
  msgid "Few"
1344
  msgstr ""
1345
 
1346
  #. Plural category used in some multi-plural languages
1347
- #: src/Locale.php:417
1348
  msgctxt "Plural category"
1349
  msgid "Many"
1350
  msgstr ""
1351
 
1352
  #. Plural category for singular quantity
1353
- #: src/Locale.php:411
1354
  msgctxt "Plural category"
1355
  msgid "One"
1356
  msgstr ""
1357
 
1358
  #. General plural category not covered by other forms
1359
- #: src/Locale.php:419
1360
  msgctxt "Plural category"
1361
  msgid "Other"
1362
  msgstr ""
1363
 
1364
  #. Plural category used in some multi-plural languages
1365
- #: src/Locale.php:413
1366
  msgctxt "Plural category"
1367
  msgid "Two"
1368
  msgstr ""
1369
 
1370
  #. Plural category for zero quantity
1371
- #: src/Locale.php:409
1372
  msgctxt "Plural category"
1373
  msgid "Zero"
1374
  msgstr ""
@@ -1391,20 +1413,20 @@ msgstr ""
1391
  msgid "PO file missing"
1392
  msgstr ""
1393
 
1394
- #: src/ajax/SaveController.php:96
1395
  msgid "PO file saved and MO file compiled"
1396
  msgstr ""
1397
 
1398
- #: src/ajax/SaveController.php:100
1399
- msgid "PO file saved, but MO file compilation failed"
1400
  msgstr ""
1401
 
1402
- #: src/ajax/SaveController.php:107
1403
- msgid "POT file saved"
1404
  msgstr ""
1405
 
1406
- #: tpl/admin/config/settings.php:132
1407
- msgid "POT template files"
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:97
1427
  msgid "Recommended"
1428
  msgstr ""
1429
 
@@ -1448,7 +1470,7 @@ msgstr ""
1448
  msgid "Restore"
1449
  msgstr ""
1450
 
1451
- #: src/admin/file/DiffController.php:74 src/admin/file/DiffController.php:92
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:154
1475
  msgid "Save credentials in session"
1476
  msgstr ""
1477
 
1478
- #: tpl/admin/config/settings.php:209 tpl/admin/config/apis.php:121
1479
  #: tpl/admin/config/prefs.php:44
1480
  msgid "Save settings"
1481
  msgstr ""
1482
 
1483
- #: tpl/admin/config/settings.php:70 tpl/admin/config/settings.php:74
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:62
1492
  msgid "Scan JavaScript files with extensions:"
1493
  msgstr ""
1494
 
1495
- #: tpl/admin/config/settings.php:56
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
- #: src/data/Settings.php:174 tpl/ajax/modal-apis-empty.php:15
1536
- #: src/admin/file/EditController.php:163 tpl/admin/common/inc-fsconn.php:18
1537
- #: tpl/admin/common/inc-fsconn.php:43 tpl/admin/errors/no-backups.php:24
1538
  msgid "Settings"
1539
  msgstr ""
1540
 
@@ -1544,7 +1566,7 @@ msgstr ""
1544
  msgid "Settings saved"
1545
  msgstr ""
1546
 
1547
- #: src/admin/bundle/BaseController.php:96
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:50
1569
  msgid "Skip PHP files larger than:"
1570
  msgstr ""
1571
 
1572
- #: src/admin/init/InitPoController.php:230
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:120
1621
  msgid "Sync with source when template missing"
1622
  msgstr ""
1623
 
1624
- #: tpl/admin/config/settings.php:104 tpl/admin/config/settings.php:108
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:77 src/admin/file/InfoController.php:136
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:54
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:83
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:318 tpl/admin/file/info.php:113
2008
  msgid "What's this?"
2009
  msgstr ""
2010
 
@@ -2012,7 +2038,13 @@ msgstr ""
2012
  msgid "WordPress"
2013
  msgstr ""
2014
 
2015
- #: src/package/Core.php:79 src/admin/bundle/LocaleController.php:136
 
 
 
 
 
 
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:72
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 &lsaquo; 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 ); if( 0 === $this->z ){ $h = $this->po[0]; } else { $h = array( 'source' => '' ); } $h['target'] = (string) $this->getHeaders(); $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 exportRefs( $grep = '' ){ $a = array(); if( '' === $grep ) { $grep = '/(\\S+):\\d+/'; } else { $grep = '/(\\S*'.$grep.'):\\d+/'; } foreach( $this as $message ){ if( preg_match_all( $grep, (string) $message->refs, $r ) ){ foreach( $r[1] as $ref ) { $a[$ref][] = $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 ); }
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=>'অসমীয়া'),'az'=>array(0=>'Azerbaijani',1=>'Azərbaycan dili'),'azb'=>array(0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'),'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_DE'=>array(0=>'German',1=>'Deutsch'),'de_DE_formal'=>array(0=>'German (Formal)',1=>'Deutsch (Sie)'),'de_CH_informal'=>array(0=>'German (Switzerland, Informal)',1=>'Deutsch (Schweiz, Du)'),'de_CH'=>array(0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'),'dzo'=>array(0=>'Dzongkha',1=>'རྫོང་ཁ'),'el'=>array(0=>'Greek',1=>'Ελληνικά'),'en_NZ'=>array(0=>'English (New Zealand)',1=>'English (New Zealand)'),'en_ZA'=>array(0=>'English (South Africa)',1=>'English (South Africa)'),'en_GB'=>array(0=>'English (UK)',1=>'English (UK)'),'en_CA'=>array(0=>'English (Canada)',1=>'English (Canada)'),'en_AU'=>array(0=>'English (Australia)',1=>'English (Australia)'),'eo'=>array(0=>'Esperanto',1=>'Esperanto'),'es_CO'=>array(0=>'Spanish (Colombia)',1=>'Español de Colombia'),'es_AR'=>array(0=>'Spanish (Argentina)',1=>'Español de Argentina'),'es_VE'=>array(0=>'Spanish (Venezuela)',1=>'Español de Venezuela'),'es_MX'=>array(0=>'Spanish (Mexico)',1=>'Español de México'),'es_ES'=>array(0=>'Spanish (Spain)',1=>'Español'),'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_GT'=>array(0=>'Spanish (Guatemala)',1=>'Español de Guatemala'),'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_FR'=>array(0=>'French (France)',1=>'Français'),'fr_CA'=>array(0=>'French (Canada)',1=>'Français du Canada'),'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_BE'=>array(0=>'Dutch (Belgium)',1=>'Nederlands (België)'),'nl_NL_formal'=>array(0=>'Dutch (Formal)',1=>'Nederlands (Formeel)'),'nl_NL'=>array(0=>'Dutch',1=>'Nederlands'),'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_BR'=>array(0=>'Portuguese (Brazil)',1=>'Português do Brasil'),'pt_PT'=>array(0=>'Portuguese (Portugal)',1=>'Português'),'pt_PT_ao90'=>array(0=>'Portuguese (Portugal, AO90)',1=>'Português (AO90)'),'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_CN'=>array(0=>'Chinese (China)',1=>'简体中文'),'zh_TW'=>array(0=>'Chinese (Taiwan)',1=>'繁體中文'),'zh_HK'=>array(0=>'Chinese (Hong Kong)',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.4.6
 
 
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.4.6';
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( 'loco_autoload', false );
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.4.6) 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}
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.4.6) 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}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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.4.6) 0 0 no-repeat !important}
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="&#xf326;" 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="&#x1f40d;" 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="&#x1f426;" 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="&#x1f5cc;" 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="&#x1f6e1;" 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="&#x1f916;" 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="&#xf326;" 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="&#x1f40d;" 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="&#x1f426;" 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="&#x1f50d;" 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="&#x1f5cc;" 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="&#x1f6e1;" 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="&#x1f916;" 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 g(e){throw Error("Failed to require "+e);}var e={};return{register:function(g,l){e[g]=l},require:function(h,l){return e[h]||g(l)},include:function(h,l,d){return e[h]||(d?g(l):null)}}}();m.register("$1",function(g,e,h){function l(d){var c=typeof d;if("string"===c)if(/[^ <>!=()%^&|?:n0-9]/.test(d))console.error("Invalid plural: "+d);else return new Function("n","return "+d);"function"!==c&&(d=function(b){return 1!=b});return d}g.init=function(d){function c(a,
2
- f,c){return(a=b[a])&&a[c]?a[c]:f||""}d=l(d);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,n){n=Number(d(n));isNaN(n)&&(n=0);return c(a,n?b:a,n)},load:function(a){b=a||{};return this},pluraleq:function(a){d=l(a);return this}}};return g}({},v,x));m.register("$2",function(g,e,h){g.ie=function(){var l=!1,d=0;e.attachEvent&&e.navigator&&/MSIE (\d+)\./.exec(String(navigator.appVersion))&&(d=Number(RegExp.$1),l=11>d);return function(){return l}}();
3
- g.init=function(){return g};return g}({},v,x));m.register("$3",function(g,e,h){Number.prototype.format=function(e){e=Math.pow(10,e||0);var d=Math.round(e*this)/e;e=[];var d=String(d),c=d.split("."),d=c[0],c=c[1],b=d.length;do e.unshift(d.substring(b-3,b));while(0<(b-=3));d=e.join(",");if(e=c){e=c;for(var a,c=e.length;"0"===e.charAt(--c);)a=c;a&&(e=e.substring(0,a));e=c=e}e&&(d+="."+c);return d};Number.prototype.percent=function(e){var d=0,c=this&&e?100*(this/e):0;if(0===c)return"0";if(100===c)return"100";
4
- if(99<c)c=Math.min(c,99.9),e=c.format(++d);else if(0.5>c){c=Math.max(c,1E-4);do e=c.format(++d);while("0"===e&&4>d);e=e.substr(1)}else e=c.format(0);return e};return g}({},v,x));m.register("$4",function(g,e,h){Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(null==this)throw new TypeError;var d,c=Object(this),b=c.length>>>0;if(0===b)return-1;d=0;1<arguments.length&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&Infinity!=d&&-Infinity!=d&&(d=(0<d||-1)*Math.floor(Math.abs(d))));if(d>=b)return-1;
5
- for(d=0<=d?d:Math.max(b-Math.abs(d),0);d<b;d++)if(d in c&&c[d]===e)return d;return-1});return g}({},v,x));m.register("$5",function(g,e,m){e.JSON||(e.JSON={parse:h.parseJSON,stringify:null});return g=e.JSON}({},v,x));m.register("$6",function(g,e,h){g.trim=function(e,d){for(d||(d=" \n");e&&-1!==d.indexOf(e.substr(0,1));)e=e.substr(1);for(;e&&-1!==d.indexOf(e.substr(-1));)e=e.substr(0,e.length-1);return e};g.sprintf=function(e){var d=0,c,b=[].slice.call(arguments,1);return e.replace(/%([sud%])/g,function(a,
6
- f){if("%"===f)return"%";c=b[d++];return String(c)||""})};return g}({},v,x));m.register("$21",function(g,e,h){function l(d){return function(c,b){for(var a=c[d]||0;(c=c.offsetParent)&&c!==(b||h.body);)a+=c[d]||0;return a}}g.top=l("offsetTop");g.left=l("offsetLeft");g.el=function(d,c){var b=h.createElement(d||"div");c&&(b.className=c);return b};g.txt=function(d){return h.createTextNode(d||"")};return g}({},v,x));m.register("$7",function(g,e,E){function l(a,b,c){function s(){f();w=setTimeout(b,c)}function f(){w&&
7
- clearTimeout(w);w=null}var w;s();h(a).mouseenter(f).mouseleave(s);return{die:function(){f();h(a).off("mouseenter mouseleave")}}}function d(a,b){a.fadeTo(b,0,function(){a.slideUp(b,function(){a.remove();h(e).triggerHandler("resize")})});return a}function c(a,b){function c(b){r[w]=null;d(h(a),250);f&&f.die();var s;if(s=b)b.stopPropagation(),b.preventDefault(),s=!1;return s}function s(b){f&&f.die();return f=l(a,c,b)}var f,w,n,k=h(a),q=k.find("button");0===q.length&&(k.addClass("is-dismissible"),q=h('<button type="button" class="notice-dismiss"> </a>').appendTo(k));
8
- q.off("click").click(c);h(e).triggerHandler("resize");z();w=r.length;r.push(c);b&&(f=s(b));return{link:function(b,w){var f=w||b,s=h(a).find("nav"),f=h("<nav></nav>").append(h("<a></a>").attr("href",b).text(f));n?(n.push(f.html()),s.html(n.join("<span> | </span>"))):(n=[f.html()],h(a).addClass("has-nav").append(f));return this},stick:function(){f&&f.die();f=null;r[w]=null;return this},slow:function(a){s(a||1E4);return this}}}function b(a,b,f){var s=m.require("$21","dom.js").el;a=h('<div class="notice notice-'+
9
- a+' loco-notice inline"></div>').prependTo(h("#loco-notices"));var c=h(s("p"));f=h(s("span")).text(f);b=h(s("strong","has-icon")).text(b+": ");c.append(b).append(f).appendTo(a);return a}function a(a,f,s,n){a=b(s,f,a).css("opacity","0").fadeTo(500,1);h(e).triggerHandler("resize");return c(a,n)}function f(b){return a(b,q,"warning")}function n(){h("#loco-notices").find("div.notice").each(function(a,b){if(-1===b.className.indexOf("jshide")){var f=-1===b.className.indexOf("notice-success")?null:5E3;c(b,
10
- f)}})}var r=[],k=e.console||{log:function(){}},z=Date.now||function(){return(new Date).getTime()},A,q,s,B;g.error=function(b){return a(b,A,"error")};g.warn=f;g.info=function(b){return a(b,s,"info")};g.success=function(b){return a(b,B,"success",5E3)};g.warning=f;g.log=function(){k.log.apply(k,arguments)};g.debug=function(a,b){(k.error||k.log)("Loco: "+a);b&&k.log(b)};g.clear=function(){for(var a=-1,b,f=r,s=f.length;++a<s;)(b=f[a])&&b.call&&b();r=[];return g};g.create=b;g.raise=function(a){(g[a.type]||
11
- g.error).call(g,a.message)};g.convert=c;g.init=function(a){A=a._("Error");q=a._("Warning");s=a._("Notice");B=a._("OK");setTimeout(n,1E3);return g};return g}({},v,x));m.register("$8",function(g,e,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 d(a){return(a=a.split(/[\r\n]/)[0])?(a=a.replace(/ +in +\S+ on line \d+/,""),a=a.replace(/^[()! ]+Fatal error:\s*/,
12
- "")):t._("Server returned invalid data")}function c(a){e.console&&console.error&&console.error('No nonce for "'+a+'"');return""}function b(a,b,f){a[b]=f}function a(a,b,f){a.push({name:b,value:f})}function f(a,b,f){a.append(b,f)}function n(a,b,f,c){function n(b,c,w){if("abort"!==c){var s=k||{_:function(a){return a}},y=b.status||0,e=b.responseText,p=l(e),g=b.getResponseHeader("Content-Type")||"Unknown type",A=b.getResponseHeader("Content-Length")||e.length;"success"===c&&w?r.error(w):(r.error(d(p)+
13
- ".\n"+s._("Check console output for debugging information")),r.debug("Ajax failure for "+a,{status:y,error:c,message:w,output:e}),"parsererror"===c&&(w="Response not JSON"),r.log([s._("Provide the following text when reporting a problem")+":","----","Status "+y+' "'+(w||s._("Unknown error"))+'" ('+g+" "+A+" bytes)",p,"===="].join("\n")));f&&f.call&&f(b,c,w);z=b}}c.url=A;c.dataType="json";var r=m.require("$7","notices.js").clear();z=null;return h.ajax(c).fail(n).done(function(a,f,w){var c=a&&a.data,
14
- k=a&&a.notices,d=k&&k.length;for(!c||a.error?n(w,f,a&&a.error&&a.error.message):b&&b(c,f,w);d--;)r.raise(k[d])})}var r={},k,z,A=e.ajaxurl||"/wp-admin/admin-ajax.php";g.init=function(a){r=a.nonces||r;return g};g.localise=function(a){k=a;return g};g.xhr=function(){return z};g.strip=l;g.parse=d;g.submit=function(a,b,f){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 r(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 d=h(a),z=d.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")})(d);return n(a.route.value,function(a,f,c){r(d);b&&b(a,f,c)},function(a,b,c){r(d);f&&f(a,b,c)},{type:a.method,data:z})};g.post=function(k,s,d,z){var y=
16
- !0,G=s||{},C=r[k]||c(k);e.FormData&&G instanceof FormData?(y=!1,s=f):s=Array.isArray(G)?a:b;s(G,"action","loco_json");s(G,"route",k);s(G,"loco-nonce",C);return n(k,d,z,{type:"post",data:G,processData:y,contentType:y?"application/x-www-form-urlencoded; charset=UTF-8":!1})};g.get=function(a,b,f,k){b=b||{};var d=r[a]||c(a);b.action="loco_json";b.route=a;b["loco-nonce"]=d;return n(a,f,k,{type:"get",data:b})};g.setNonce=function(a,b){r[a]=b;return g};return g}({},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(g,e,h){function l(){}var d,c=m.require("$22","rtl.json");g.init=function(){return new l};g.cast=function(b){return b instanceof l?b:"string"===typeof b?g.parse(b):g.clone(b)};g.clone=function(b){var a,f=new l;for(a in b)f[a]=b[a];return f};g.parse=function(b){if(!(d||
18
- (d=/^([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};e=l.prototype;e.isValid=function(){return!!this.lang};e.isKnown=function(){var b=this.lang;return!(!b||"zxx"===b)};e.toString=function(b){b=b||"_";var a,f=this.lang||"zxx";if(a=this.region)f+=b+a;if(a=this.variant)f+=b+a;return f};e.getIcon=function(){for(var b=3,a,f,c=["variant",
19
- "region","lang"],d=[];0!==b--;)if(a=c[b],f=this[a])d.push(a),d.push(a+"-"+f.toLowerCase());return d.join(" ")};e.isRTL=function(){return!!c[String(this.lang).toLowerCase()]};e=null;return g}({},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,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(g,e,h){g.init=function(){function e(a){return k[a]||a}function d(a,b,f,c){b=a.split(b);for(var n=b.length;0!==n--;)(a=b[n])&&null==c[a]&&(f.push(a),c[a]=!0);return f}function c(a){return d(String(a||"").toLowerCase().replace(n,e),r,[],{})}function b(a,b){for(var c=[],s={},k,
32
- p=b.length,y=r;0!==p--;)(k=b[p])&&d(String(k||"").toLowerCase().replace(n,e),y,c,s);f[a]=c}function a(a,b){var c=[],s=-1,n=f,k=n.length,d,r,e,u,w,F,g=a.length,l=b?!0:!1;a:for(;++s<k;)if(e=n[s],null!=e&&(u=e.length)){w=0;b:for(;w<g;w++){F=a[w];for(d=0;d<u;d++)if(r=e[d],0===r.indexOf(F))continue b;continue a}c.push(l?b[s]:s)}return c}var f=[],n=/[^a-z0-9]/g,r=/[\-_\s.?!;:,*^+=~`"(){}<>\[\]\/\\\u00a0\u1680\u180e\u2000-\u206f\u2e00-\u2e7f\u3000-\u303f]+/,k=m.require("$23","flatten.json");return{split:c,
33
- pull:function(b,f){return a(b,f)},find:function(b,f){return a(c(b),f)},add:function(a,b){f[a]=c(b)},push:function(a){b(f.length,a)},index:function(a,f){b(a,f)},size:function(){return f.length},clear:function(){f=[]},remove:function(a){f[a]=null}}};return g}({},v,x));m.register("$11",function(g,e,m){g.listen=function(g,d){function c(){q[n?"show":"hide"]()}function b(a){A&&g.setAttribute("size",2+a.length);n=a;c();return a}function a(){r=null;d(n)}function f(){var f=g.value;z&&f===z&&(f="");f!==n&&
34
- (r&&clearTimeout(r),b(f),k?r=setTimeout(a,k):a())}g instanceof jQuery&&(g=g[0]);var n,r,k=150,z=e.attachEvent&&g.getAttribute("placeholder"),A=1===Number(g.size),q=h('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').click(function(){g.value="";f();return!1});b(g.value);h(g).on("input blur focus",function(){f();return!0}).after(q);c();return{delay:function(a){k=a},ping:function(c){c?(r&&clearTimeout(r),c=g.value,z&&c===z&&(c=""),b(c),a(),c=void 0):c=f();return c},val:function(a){if(null==
35
- a)return n;r&&clearTimeout(r);g.value=b(a);c()},el:function(){return g},blur:function(a){return h(g).on("blur",a)},destroy:function(){r&&clearTimeout(r)}}};return g}({},v,x));m.register("$12",function(g,e,m){function l(b,a){this.$element=h(b);this.options=a;this.enabled=!0;this.fixTitle()}g.init=function(b,a){var f={fade:!0,offset:5,delayIn:d,delayOut:c,anchor:b.attr("data-anchor"),gravity:b.attr("data-gravity")||"s"};a&&(f=h.extend({},f,a));b.tipsy(f)};g.delays=function(b,a){d=b||150;c=a||100};g.kill=
36
- function(){h("div.tipsy").remove()};g.text=function(b,a){a.data("tipsy").setTitle(b)};var d,c;g.delays();h(m.body).on("overlayOpened overlayClosing",function(b){g.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}),f=a[0].offsetWidth,c=a[0].offsetHeight,d="function"==typeof this.options.gravity?this.options.gravity.call(this.$element[0]):this.options.gravity,k;switch(d.charAt(0)){case "n":k={top:b.top+b.height+this.options.offset,left:b.left+b.width/2-f/2};break;case "s":k={top:b.top-c-this.options.offset,left:b.left+b.width/2-f/2};break;case "e":k={top:b.top+b.height/2-c/2,left:b.left-f-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
- d.length&&("w"==d.charAt(1)?k.left=b.left+b.width/2-15:k.left=b.left+b.width/2-f+15);a.css(k).addClass("tipsy-"+d);a.find(".tipsy-arrow")[0].className="tipsy-arrow tipsy-arrow-"+d.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,f=this.options;this.fixTitle();"string"==typeof f.title?b=a.attr("title"==f.title?"original-title":f.title):"function"==typeof f.title&&(b=f.title.call(a[0]));return(b=(""+b).replace(/(^\s*|\s*$)/,""))||f.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 f=
41
- h.data(a,"tipsy");f||(f=new l(a,h.fn.tipsy.elementOptions(a,b)),h.data(a,"tipsy",f));return f}function f(){var f=a(this),c=b.delayIn;f.hoverState="in";0==c?f.show():(f.fixTitle(),setTimeout(function(){"in"==f.hoverState&&f.show()},c))}function c(){var f=a(this),n=b.delayOut;f.hoverState="out";0==n?f.hide():(f.tip().removeClass("in"),setTimeout(function(){"out"==f.hoverState&&f.hide()},n))}b=h.extend({},h.fn.tipsy.defaults,b);b.live||this.each(function(){a(this)});if("manual"!=b.trigger){var d=b.live?
42
- "live":"bind",k="hover"==b.trigger?"mouseleave":"blur";this[d]("hover"==b.trigger?"mouseenter":"focus",f)[d](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(e).height()/2?"s":"n"};h.fn.tipsy.autoWE=
43
- function(){return h(this).offset().left>h(m).scrollLeft()+h(e).width()/2?"e":"w"};h.fn.tipsy.autoBounds=function(b,a){return function(){var f=a[0],c=1<a.length?a[1]:!1,d=h(m).scrollTop()+b,k=h(m).scrollLeft()+b,z=h(this);z.offset().top<d&&(f="n");z.offset().left<k&&(c="w");h(e).width()+h(m).scrollLeft()-z.offset().left<b&&(c="e");h(e).height()+h(m).scrollTop()-z.offset().top<b&&(f="s");return f+(c?c:"")}};return g}({},v,x));m.register("$36",function(g,e,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")});g.html=function(){function e(){b=/[<>&]/g;a=/(\r\n|\n|\r)/g;f=/(?:https?):\/\/(\S+)/ig;n=location.hostname;e=null}function d(a){return"&#"+a.charCodeAt(0)+";"}function c(a,b){return'<a href="'+a+'" target="'+(b.indexOf(n)?"_blank":"_top")+'">'+b+"</a>"}var b,a,f,n;return function(n,k){e&&e();var z=n.replace(b,d);k&&(z=z.replace(f,c).replace(a,"<br />"));return z}}();return g}({},
45
- v,x));m.register("$37",function(g,e,h){function l(){}var d,c,b=m.require("$22","rtl.json");g.init=function(){return new l};g.cast=function(a){return a instanceof l?a:"string"===typeof a?g.parse(a):g.clone(a)};g.clone=function(a){var b,c=new l;for(b in a)c[b]=a[b];return c};g.parse=function(a){d||(c=/[-_+]/,d=/^([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(!d.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};e=l.prototype;e.isValid=function(){return!!this.lang};e.isKnown=function(){var a=this.lang;return!(!a||"zxx"===a)};e.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
- e.getIcon=function(){for(var a=4,b,c,d=["variant","region","script","lang"],k=[];0!==a--;)if(b=d[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(" ")};e.isRTL=function(){return!!b[String(this.script||this.lang).toLowerCase()]};e=null;return g}({},v,x));m.register("$38",function(g,e,h){function l(a){e.console&&console.error&&console.error(a)}function d(){l("Method not implemented")}function c(){}function b(a){}c.prototype.toString=
48
- function(){return"[Undefined]"};b.prototype._validate=function(a){var b,n,e=!0;for(b in this)n=this[b],n===d?(l(a+"."+b+"() must be implemented"),e=!1):n instanceof c&&(l(a+"."+b+" must be defined"),e=!1);return e};g.init=function(a,f){var n,e=new b;if(a)for(n=a.length;0!==n--;)e[a[n]]=d;if(f)for(n=f.length;0!==n--;)e[f[n]]=new c;return e};g.validate=function(a){var b=/function (\w+)\(/.exec(a.toString())?RegExp.$1:"";a.prototype._validate(b||"Object")};return g}({},v,x));m.register("$49",function(g,
49
- e,h){var l=e.requestAnimationFrame,d=e.cancelAnimationFrame,c=0;if(!l||!d)for(var b in{ms:1,moz:1,webkit:1,o:1})if(l=e[b+"RequestAnimationFrame"])if(d=e[b+"CancelAnimationFrame"]||e[b+"CancelRequestAnimationFrame"])break;l&&d||(l=function(b){var d=a();timeToCall=Math.max(0,16-(d-c));nextTime=d+timeToCall;timerId=e.setTimeout(function(){b(nextTime)},timeToCall);c=nextTime;return timerId},d=function(a){clearTimeout(a)});var a=Date.now||function(){return(new Date).getTime()};g.loop=function(a,b){function c(){e=
50
- l(c,b);a(k++)}var k=0,e;c();return{stop:function(){e&&d(e);e=null}}};return g}({},v,x));m.register("$46",function(g,e,h){function l(a,c,f,d){if(b){var k=f;f=function(a){if((a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType)return k(a)}}a.addEventListener(c,f,d);return{unbind:function(){a.removeEventListener(c,f,d)}}}function d(a){a.preventDefault();a.stopPropagation();return!1}var c,b=!!e.navigator.msPointerEnabled,a=b?"MSPointerDown":"touchstart",f=b?"MSPointerMove":"touchmove",n=b?"MSPointerUp":
51
- "touchend";g.ok=function(a){null==c&&(c="function"===typeof h.body.addEventListener);c&&a&&a(g);return c};g.ms=function(){return b};g.dragger=function(b,c){function k(a){b.addEventListener(a,e[a],!1)}function s(a){b.removeEventListener(a,e[a],!1)}var e={};e[a]=function(b){r(b,function(f,d){d.type=a;c(b,d,g)});k(f);k(n);return!0};e[n]=function(a){s(f);s(n);r(a,function(b,f){f.type=n;c(a,f,g)});return!0};e[f]=function(a){r(a,function(b,d){d.type=f;c(a,d,g)});return d(a)};k(a);var g={kill:function(){s(a);
52
- s(f);s(n);b=g=c=null}};return g};g.swiper=function(c,e,g){function s(a){c.addEventListener(a,u[a],!1)}function B(a){c.removeEventListener(a,u[a],!1)}function p(){y&&y.stop();y=null}var y,G,C,u={},w=[],F=[],h=[];u[a]=function(a){G=!1;p();var b=k();r(a,function(a,c){w[a]=b;F[a]=c.clientX;h[a]=c.clientY});C=c.scrollLeft;return!0};u[n]=function(a){r(a,function(a,b){var c=k()-w[a],f=F[a]-b.clientX,c=Math.abs(f)/c;e(c,f?0>f?-1:1:0)});C=null;return!0};u[f]=function(a){var b,f;null==C||r(a,function(a,c){b=
53
- F[a]-c.clientX;f=h[a]-c.clientY});if(f&&Math.abs(f)>Math.abs(b))return G=!0;b&&(G=!0,c.scrollLeft=Math.max(0,C+b));return d(a)};if(!b||g)s(a),s(f),s(n),b&&(c.className+=" mstouch");return{kill:function(){B(a);B(f);B(n);p()},swiped:function(){return G},ms:function(){return b},snap:function(a){b&&!g&&(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,f){p();var w=c.scrollLeft,d=a>w?
54
- 1:-1,k=Math[1===d?"min":"max"],e=Math.round(16*b*d);return y=m.require("$49","fps.js").loop(function(b){b&&(w=Math.max(0,k(a,w+e)),c.scrollLeft=w,a===w&&(p(),f&&f(w)))},c)}}};g.start=function(b,c){return l(b,a,c,!1)};g.move=function(a,b){return l(a,f,b,!1)};g.end=function(a,b){return l(a,n,b,!1)};var r=g.each=function(a,c){if(b)(a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType&&c(0,a);else for(var f=-1,d=(a.originalEvent||a).changedTouches||[];++f<d.length;)c(f,d[f])},k=Date.now||function(){return(new Date).getTime()};
55
- return g}({},v,x));m.register("$50",function(g,e,m){g.init=function(e){function d(){f.style.top=String(-e.scrollTop)+"px";return!0}function c(){var a=f;a.textContent=e.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=e.parentNode,f=a.insertBefore(m.createElement("div"),e);h(e).on("input",c).on("scroll",d);
56
- h(a).addClass("has-mirror");f.className="ta-mirror";var n=e.offsetWidth-e.clientWidth;2<n&&(f.style.marginRight=String(n-2)+"px");c();d();return{kill:function(){h(e).off("input",c).off("scroll",d);a.removeChild(f);f=null;h(a).removeClass("has-mirror")}}};return g}({},v,x));m.register("$29",function(g,e,h){function l(b,a){for(var c=0,n=-1,r=a&&e[a],k=d[b]||[],g=k.length;++n<g;)callback=k[n],"function"===typeof callback&&(callback(r),c++);return c}var d={},c;g.load=function(b,a,c){function n(){g&&(clearTimeout(g),
57
- g=null);A&&(A.onreadystatechange=null,A=A=A.onload=null);b&&(delete d[b],b=null)}function r(a,d){var k=A&&A.readyState;if(d||!k||"loaded"===k||"complete"===k)d||l(b,c),n()}function k(){if(0===l(b))throw Error('Failed to load "'+(c||b)+'"');n()}if(c&&e[c])"function"===typeof a&&a(e[c]);else if(null!=d[b])d[b].push(a);else{d[b]=[a];var g=setTimeout(k,4E3),A=h.createElement("script");A.setAttribute("src",b);A.setAttribute("async","true");A.onreadystatechange=r;A.onload=r;A.onerror=k;A.onabort=n;h.getElementsByTagName("head")[0].appendChild(A)}};
58
- g.stat=function(b){var a;if(!(a=c)){for(var f,d,e=h.getElementsByTagName("script"),k=-1,g=e.length;++k<g;)if(a=e[k].getAttribute("src"))if(f=a.indexOf("/lib/vendor"),-1!==f){d=a.substr(0,f);break}a=c=d||"/static"}return a+b};return g}({},v,x));m.register("$16",function(g,e,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 d(a){a.off("change");a.off("focus");a.off("blur")}
59
- function c(a){d(a);a.setReadOnly(!0);a.setHighlightGutterLine(!1);a.setHighlightActiveLine(!1)}function b(b,c){function f(){this.HighlightRules=d}var d=a(c),e=b.require,n=e("ace/lib/oop");n.inherits(d,e("ace/mode/text_highlight_rules").TextHighlightRules);n.inherits(f,e("ace/mode/text").Mode);return new f}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=f(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 f(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 r:return n||"%%"}}var n,r="auto";g.init=function(a,f,n){var g,s=!1,B=n||r,p=a.parentNode,y=p.appendChild(E.createElement("div"));h(p).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(d){if(y){if(!d)throw Error("Failed to load code editor");g=d.edit(y);var e=g.session,n=g.renderer;g.$blockScrolling=Infinity;g.setShowInvisibles(s);g.setWrapBehavioursEnabled(!1);g.setBehavioursEnabled(!1);g.setHighlightActiveLine(!1);e.setUseSoftTabs(!1);n.setShowGutter(!0);n.setPadding(10);n.setScrollMargin(8);e.setMode(b(d,B));g.setValue(a.value,-1);e.setUseWrapMode(!0);f?l(g,f):c(g)}},"ace");return{kill:function(){g&&(d(g),g.destroy(),g=null);y&&(p.removeChild(y),h(p).removeClass("has-proxy has-ace"),
65
- y=null);return this},disable:function(){g&&c(g);f=null;return this},enable:function(a){f=a;g&&l(g,a);return this},resize:function(){g&&g.resize();return this},val:function(a){g&&a!==g.getValue()&&g.setValue(a,-1);return this},invs:function(a){a=a||!1;s!==a&&(s=a,g&&g.setShowInvisibles(a));return this},strf:function(a){a=a||r;a!==B&&(B=a,g&&g.session.setMode(b(e.ace,a)));return this},focus:function(){return this}}};g.strf=function(a,b){r=a;n=b;return g};return g}({},v,x));m.register("$51",function(g,
66
- e,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 d(a){a.off("input");a.off("change");a.off("focus");a.off("blur")}function c(a){d(a);a.setMode("readonly")}var b=0;g.load=function(a){var b=m.require("$29","remote.js");b.load(b.stat("/lib/tinymce.min.js"),a,"tinymce");return g};g.init=function(a,f){function e(a){A=a;q="<p>"===a.substr(0,3)&&
67
- "</p>"===a.substr(-4);return a.replace(/(<\/?)script/ig,"$1loco:script")}function r(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(e(a),b)};f?(l(a,f),f.reset()):c(a);h(p).removeClass("loading")}var k,z=!1,A="",q=!1,
68
- s=a.parentNode,B=s.parentNode,p=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(p).addClass("mce-content-body loading").html(e(a.value));g.load(function(a){if(!a)throw Error("Failed to load HTML editor");p&&a.init({inline:!0,target:p,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:r})});return{val:function(b){b=e(b);null==k?(a.value=b,h(p).html(b)):k.getContent()!==b&&k.setContent(b);f&&f.val(b);return this},kill:function(){k&&(f&&f.val(k.getContent()),d(k),k.destroy(),k=null);p&&(s.removeChild(p),h(s).removeClass("has-proxy has-mce"),p=null);y&&(B.removeChild(y),y=null);return this},enable:function(a){f=a;k&&l(k,a);return this},disable:function(){k&&c(k);f=null;return this},
71
- focus:function(){k&&f&&k.focus();return this},invs:function(a){a=a||!1;z!==a&&(z=a,h(s)[a?"addClass":"removeClass"]("show-invs"));return this}}};return g}({},v,x));m.register("$47",function(g,e,E){function l(b){function a(){g&&(l.off("input",f),g=!1)}function f(){var a=b.value;a!==s&&(l.trigger("changing",[a,s]),s=a)}function d(){f();g&&B!==s&&l.trigger("changed",[s])}function e(){c=b;B=s;g||(l.on("input",f),g=!0);l.trigger("editFocus");q.addClass("has-focus");return!0}function k(){c===b&&(c=null);
72
- l.trigger("editBlur");q.removeClass("has-focus");g&&(d(),a());return!0}var g=!1,l=h(b),q=h(b.parentNode),s=b.value,B;l.blur(k).focus(e);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",e)},fire:function(){s=null;f()},ping:d,blur:k,focus:e,reset:function(){B=s=b.value}}}function d(b){this.e=b}var c;g._new=function(b){return new d(b)};g.init=function(b){var a=new d(b);b.disabled?(b.removeAttribute("disabled"),a.disable()):
73
- b.readOnly?a.disable():a.enable();return a};TextAreaPrototype=d.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,d=this.p;d&&d.val(b);c&&c.val(b);c||a.value===b||(a.value=b,h(a).triggerHandler("input"));return this};
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};TextAreaPrototype.editable=
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);return this};TextAreaPrototype.setInvs=
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,f=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,this.l):null,this.setInvs(f,
77
- !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 g}({},v,x));m.register("$48",function(g,e,m){function l(a){var b=e.console;b&&b.error&&b.error(a)}
78
- function d(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,f=c.$index;null==f&&"DIV"!==c.nodeName&&(c=c.parentElement);)f=c.$index;null!=f&&(b.stopImmediatePropagation(),a.select(f));return!0}}function a(a){return function(){a.redrawDirty()&&a.redraw();return!0}}function f(a){return function(b){var c;c=b.keyCode;if(40===c)c=1;else if(38===c)c=-1;else return!0;if(b.shiftKey||
79
- b.ctrlKey||b.metaKey||b.altKey)return!0;a.selectNext(c);b.stopPropagation();b.preventDefault();return!1}}function n(a,b,c){function f(a){l("row["+a+"] disappeared");return{cellVal:function(){return""}}}return function(d){var e=b||0,k=c?-1:1,w=a.rows||[];d.sort(function(a,b){return k*(w[a]||f(a)).cellVal(e).localeCompare((w[b]||f(b)).cellVal(e))})}}function r(a){this.w=a}function k(a){this.t=a;this.length=0}function z(a,b,c){var f=m.createElement("div");f.className=c||"";this._=f;this.d=b||[];this.i=
80
- a||0;this.length=b.length}function A(a){this.live=a;this.rows=[]}g.create=function(a){return new r(a)};var q=r.prototype;q.init=function(e){var k=this.w,n=k.id,g=k.splity(n+"-thead",n+"-tbody"),r=g[0],g=g[1],C=[],u=[],w=[],F=[];if(e)this.ds=e,this.idxs=u,this._idxs=null;else if(!(e=this.ds))throw Error("No datasource");r.css.push("wg-thead");g.css.push("wg-tbody");e.eachCol(function(a,b,c){w[a]=n+"-col-"+b;F[a]=c||b});for(var N=d(),q=-1,l=w.length,m=d("wg-cols"),A=r.splitx.apply(r,w);++q<l;)A[q].header(F[q]),
81
- m.appendChild(N.cloneNode(!1)).setAttribute("for",w[q]);e.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=g.body;this.head=r;r.redraw=c(this);r=g.fixed=A[0].bodyY()||20;k.lock().resize(r,g);k.css.push("is-table");k.restyle();this.sc?this._re_sort(l):e.sort&&e.sort(u);this.redrawDirty();this.render();h(N).attr("tabindex","-1").on("keydown",f(this)).on("mousedown",b(this)).on("scroll",a(this));return this};q.clear=function(){for(var a=this.pages||
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=[],f=this.rows||[],d=-1,e,k=this.idxs,w=k.length,n=this.idxr={},g=this.r,r=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));e=k[d];n[e]=d;a=f[e];if(null==a)throw Error("Render error, no data at ["+e+"]");a.page=b;b.rows.push(a)}b&&100!==b.size()&&b.sleepH(22);this.pages=c;this.mx=this.mn=null;
83
- this.redrawDirty();this.redraw();null==g?null!=r&&(a=f[r])&&a.page&&(delete this._r,this.select(r,!0)):(a=f[g])&&a.page?this.select(g,!0):(this.deselect(),this._r=g);return this};q.resize=function(){var a=-1,b=this.ww||(this.ww=[]),c=this.w,f=c.cells[0],d=f.body.childNodes,e=d.length,k=this.pages||[],w=k.length;for(c.redraw.call(f);++a<e;)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=function(){var a=!1,b=this.root,c=
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,f=null,d=this.ww,e=this.sy,k=this.vh,w=this.mn,n=this.mx,g=Math.max(0,e-100),e=k+e+100,r=this.pages||[],h=r.length;++b<h&&!(a>e);)k=r[b],a+=k.height(),a<g||(null===c&&(c=b),f=b,k.rendered||k.render(d));if(w!==c){if(null!==w&&c>w)for(b=w;b<c;b++){k=r[b];if(!k)throw Error("Shit!");k.rendered&&k.sleep()}this.mn=c}if(n!==f){if(null!==n&&f<n)for(b=n;b>f;b--)k=r[b],
85
- k.rendered&&k.sleep();this.mx=f}};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 f=this.idxs,d=f.length,e=(this.idxr||{})[c];for(c=e;c!==(e+=a)&&!(0<=e&&d>e);)if(b&&d)e=1===a?-1:d,b=!1;else return null;c=f[e];return null==c||null==this.rows[c]?
86
- (l("Bad next: ["+e+"] 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],f=c&&c.page;if(!f)return this.deselect(!1),l("Row is filtered out"),this;this.deselect(!0);var d,e=
87
- this.w.cells[1];f.rendered||(d=f.top(),e.scrollY(d),this.redrawDirty()&&this.redraw());if(!c.rendered)return f.rendered||l("Failed to render page"),l("Row ["+c.i+"] not rendered"),this;f=c.cells();h(f).addClass("selected");this.r=a;b||(d=e.scrollY(),h(this.root).focus(),d!==e.scrollY()&&e.scrollY(d));e.scrollTo(f[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};q.filter=
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,f=this.rows||[],d=this.idxs||[],e=d.length;++c<e;)b=d[c],a(f[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,f=c.active;for(this.sc=c=new k(this);++b<a;)c.add(b);f&&(b=this.head.indexOf(f.id),-1===b&&(b=Math.min(f.idx,a-1)),this.sort(b,f.desc));return this};q._sort=
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,n(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,!this[a].desc).clear().render();
90
- return this};q.activate=function(a,b){var c,f;c=this.active;var d=this[a],e=this.t.head.cells;c&&(f=e[c.idx])&&(f.removeClass(c.css),c!==d&&f.restyle());(f=e[a])?(d.desc=b,this.active=d,c="wg-"+(b?"desc":"asc"),f.addClass(c).restyle(),d.css=c):this.active=null;return this};q=null;q=z.prototype;q.render=function(a){var b,c=[],f=this._,d=this.length;if(f){for(this.c=c;0!==d--;)b=f.cloneNode(!1),c[d]=this.update(d,b),b.$index=this.i,a[d].appendChild(b);this._=null}else for(c=this.c;0!==d--;)a[d].appendChild(c[d]);
91
- this.rendered=!0;return this};q.update=function(a,b){var c=b||this.c[a]||{},f=(this.d[a]||function(){})()||"\u00a0";null==f.innerHTML?c.textContent=f:c.innerHTML=f.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;q.size=function(){return this.rows.length};
92
- q.insert=function(a){var b=this.h,c=d("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,f=this.rows,d=f.length,e=this.dead,k=this.live,w=k.childNodes;++c<d;)b=f[c],b.rendered||b.render(w);d=a.length;for(c=0;c<
93
- d;c++)w[c].style.width=a[c];e.parentNode.replaceChild(k,e);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!==c--;)b[c].style.width=a[c];return this};
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 g}({},v,x));m.register("$39",function(g,e,E){function l(a,b){var c=a.id,f=c&&s[c],d=f&&f.parent();if(!f||!d)return null;var e=d.dir===q,c=e?"X":"Y",k="page"+c,e=e?A:z,n=e(d.el),c=b["offset"+c],g=d.el,r=g.className;null==c&&(c=b[k]-e(a));c&&(n+=c);g.className=r+" is-resizing";return{done:function(){g.className=r},move:function(a){d.resize(a[k]-n,
95
- f);return!0}}}function d(a,c){function f(){h(E).off("mousemove",d);p&&(p.done(),p=null);return!0}function d(a){p?p.move(a):f();return!0}if(p)return!0;p=l(a.target,a);if(!p)return!0;h(E).one("mouseup",f).on("mousemove",d);return b(a)}function c(a,b){var c=b.type;"touchmove"===c?p&&p.move(b):"touchstart"===c?p=l(a.target,b):"touchend"===c&&p&&(p.done(),p=null)}function b(a){a.stopPropagation();a.preventDefault();return!1}function a(a){var b=B;b&&b.redraw();a&&a.redraw();return B=a}function f(b,c){var f=
96
- h(c).on("editFocus",function(){f.trigger("wgFocus",[a(b)])}).on("editBlur",function(){f.trigger("wgBlur",[a(null)])})}function n(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 r=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,p=!1;g.init=function(a){var b=new n(a);b.redraw();m.require("$46","touch.js").ok(function(b){b.dragger(a,c)});h(a).mousedown(d);
97
- return b};e=n.prototype;e.fire=function(a,b){var c=h.Event(a);c.cell=this;h(this.el).trigger(c,b);return this};e.each=function(a){for(var b=-1,c=this.cells,f=c.length;++b<f;)a(c[b],b);return this};e.indexOf=function(a){return(a=s[a.id||String(a)])&&a.pid===this.id?a.index:-1};e.on=function(){return this.$("on",arguments)};e.off=function(){return this.$("off",arguments)};e.find=function(a){return h(this.el).find(a)};e.$=function(a,b){h.fn[a].apply(h(this.el),b);return this};e.addClass=function(a){this.css.push(a);
98
- return this};e.removeClass=function(a){a=this.css.indexOf(a);-1!==a&&this.css.splice(a,1);return this};e.parent=function(){return this.pid&&s[this.pid]};e.splitx=function(){return this._split(q,arguments)};e.splity=function(){return this._split(2,arguments)};e._split=function(a,b){(this.length||this.field)&&this.clear();for(var c=-1,f,d=b.length,e=1/d,g=0;++c<d;){f=k.el();this.body.appendChild(f);for(var r=f,h=b[c],z=h,q=1;s[h];)h=z+"-"+ ++q;r.id=h;f=new n(f);f.index=c;f.pid=this.id;f._locale(this.lang,
99
- this.rtl);f.pos=g;g+=e;this.cells.push(f);this.length++}this.dir=a;this.redraw();return this.cells};e.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};e.exists=function(){return this===s[this.id]};e.clear=function(){for(var a=this.el,b=this.cells,c=this.field,f=this.body,d=this.nav,e=this.length||0;0!==e--;)delete s[b[e].destroy().id];this.cells=[];this.length=0;d&&(a.removeChild(d),this.nav=null);f&&(c&&
100
- (r.ie()&&h(f).triggerHandler("blur"),c.destroy(),this.field=null),this.table&&(this.table=null),a===f.parentNode&&a.removeChild(f));this.body=a.appendChild(k.el("","wg-body"));this._h=null;return this};e.resize=function(a,b){if(!b&&(b=this.cells[1],!b))return;var c=b.index,f=this.cells,d=h(this.el)[this.dir===q?"width":"height"](),e=f[c+1],c=f[c-1];pad=(b.body||b.el.firstChild).offsetTop||0;max=(e?e.pos*d:d)-pad;min=c?c.pos*d:0;b.pos=Math.min(max,Math.max(min,a))/d;this.redraw();return this};e.distribute=
101
- function(a){for(var b=-1,c=0,f,d=this.cells,e=a.length;++b<e&&(f=d[++c]);)f.pos=Math.max(0,Math.min(1,a[b]));this.redraw();return this};e.distribution=function(){for(var a=[],b=0,c=this.cells,f=c.length-1;b<f;)a[b]=c[++b].pos;return a};e.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&&a.push("has-nav");this.field&&(a.push("is-field"),
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};e.redraw=function(a){this.restyle();var b=this.el,c=this.body,f=this.field;if(c){var d,e=b.clientWidth||0,k=b.clientHeight||0,n=c.offsetTop||0,k=n>k?0:k-n;this._h!==k&&(this._h=k,c.style.height=String(k)+"px",d=f);this._w!==e&&(this._w=e,d=f);d&&d.redraw()}c=this.length;e=1;k=this.nav;for(n=2===this.dir?"height":"width";0!==c--;)f=this.cells[c],k?d=1:(f.fixed&&
103
- (f.pos=f.fixed/h(b)[n]()),d=e-f.pos,e=f.pos),f.el.style[n]=String(100*d)+"%",f.redraw(a);return this};e.contents=function(a,b){var c=this.el,f=this.body;if(null==a)return f.innerHTML;this.length?this.clear():f&&(c.removeChild(f),f=null);f||(this.body=f=c.appendChild(k.el("",b||"wg-content")),this._h=null,(c=this.lang)&&this._locale(c,this.rtl,!0));"string"===typeof a?h(f)._html(a):a&&this.append(a);this.redraw();return this};e.textarea=function(a,b){var c=this.field;if(c){var d=c.editable();c.reload(a,
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"](),f(this,d),this.field=c,this.restyle();this.lang||this.locale("en");return c};e.locale=function(a){a=m.require("$37","locale.js").cast(a);return this._locale(String(a),a.isRTL())};e._locale=function(a,b,c){var f=this.body;if(c||a!==this.lang)this.lang=a,f&&f.setAttribute("lang",a);if(c||b!==this.rtl)this.rtl=
105
- b,f&&f.setAttribute("dir",b?"RTL":"LTR");return this};e.editable=function(){var a=this.field;if(a)return a.editable()?a:null;var b=this.cells,c=b.length,f=this.navigated();if(null!=f)return b[f].editable();for(;++f<c;){for(f=0;f<c;c++);if(a=b[f].editable())return a}};e.eachTextarea=function(a){var b=this.field;b?a(b):this.each(function(b){b.eachTextarea(a)});return this};e.append=function(a){a&&(a.nodeType?r.init(this.body.appendChild(a)):r.init(h(a).appendTo(this.body)));return this};e.prepend=function(a){var b=
106
- this.body;if(a.nodeType){var c=b.firstChild;r.init(c?b.insertBefore(a,c):b.appendChild(a))}else r.init(h(a).prependTo(b));return this};e.before=function(a){var b=this.body;a.nodeType?r.init(this.el.insertBefore(a,b)):r.init(h(a).insertBefore(b));return this};e.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};e.title=function(a){var b=this.t;if(b)return b.nodeValue=
107
- a||"",b;this.header(a);return this.t};e.titled=function(){var a=this.t;return a&&a.nodeValue};e.bodyY=function(){return z(this.body,this.el)};e.scrollY=function(a){if(J===a)return this.body.scrollTop;this.body.scrollTop=a};e.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};e.lock=function(){this.body.className+=" locked";return this};e.scrollTo=function(a,b){var c,f=this.body;c=f.scrollTop;var d=z(a,f);if(c>d)c=d;else{var e=
108
- f.clientHeight,d=d+h(a).outerHeight();if(e+c<d)c=d-e;else return}b?f.scrollTop=c:h(f).stop(!0).animate({scrollTop:c},250)};e.navigize=function(a,c){function f(a){var b=e[a],c=r[a],d=h(b.el).show();c.addClass("active");g=a;z.data("idx",a);b.fire("wgTabSelect",[a]);return d}var d=this,e=d.cells,n=d.nav,g,r=[];n&&d.el.removeChild(n);var n=d.nav=d.el.insertBefore(k.el("nav","wg-tabs"),d.body),z=h(n).on("click",function(a){var c=h(a.target).data("idx");if(null==c)return!0;if(null!=g){var k=r[g];h(e[g].el).hide();
109
- k.removeClass("active")}f(c);d.redraw();return b(a)});null==c&&(c=z.data("idx")||0);d.each(function(b,c){r[c]=h('<a href="#'+b.id+'"></a>').data("idx",c).text(a[c]).appendTo(z);b.pos=0;h(b.el).hide()});f(e[c]?c:0);d.lock();d.redraw();return d};e.navigated=function(){var a=this.nav;if(a)return h(a).data("idx")};e=null;return g}({},v,x));m.register("$24",function(g,e,E){function l(a){var b=[];a&&(a.saved()||b.push("po-unsaved"),a.fuzzy()?b.push("po-fuzzy"):a.flagged()&&b.push("po-flagged"),a.translation()||
110
- b.push("po-empty"),a.comment()&&b.push("po-comment"));return b.join(" ")}function d(a,b,c){b=h(a.title(b).parentNode);var f=b.find("span.lang");c?(c=m.require("$37","locale.js").cast(c),f.length||(f=h("<span></span>").prependTo(b)),f.attr("lang",c.lang).attr("class",c.getIcon()||"lang region region-"+(c.region||"zz").toLowerCase())):(f.remove(),c="en");a.locale(c);return b}function c(a,b,c){b.click(function(b){var f=a.fire(c,[b.target]);f||b.preventDefault();return f})}function b(){this.dirty=0}m.require("$3",
111
- "number.js");var a="poUpdate",f="changing",n="changed",r=0,k=1,z=2,A=3,q=4,s=5,B,p,y=m.require("$36","string.js").html,v=m.require("$6","string.js").sprintf;g.extend=function(a){return a.prototype=new b};g.localise=function(a){p=a;return g};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","getListHeadings","getListEntry"],["editable","t"]);
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=p||m.require("$1","t.js").init());var b=[];b[r]=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","Editor");b[8]=a._x("Toggle Fuzzy","Editor");b[9]=
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(e).on("resize",b);this.redraw=b;h(a).on("wgFocus wgBlur",function(a,b){a.stopPropagation();B=b});this.destroy=function(){c.destroy();h(e).off("resize",b)};this.rootDiv=a;return c};u.$=function(){return h(this.rootDiv)};u.setListCell=function(a){var b=this;b.listCell=a;a.on("wgRowSelect",function(a,c){b.loadMessage(b.po.row(c));
114
- return!0}).on("wgRowDeselect",function(a,c,f){f||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 f=this.listTable,d=f.selected(),e=d,k,n=this.po;null!=(d=f.next(a,c,d));){if(e===d){d=null;break}if(b&&(k=n.row(d),k.translated(0)))continue;break}null!=d&&f.select(d,!0);return d};u.current=function(a){var b=this.active;if(null==a)return b;a?a.is(b)?this.reloadMessage(a):this.loadMessage(a):this.unloadActive();
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()};u.getFirstEditable=function(){return this.getTargetEditable()||this.getSourceEditable()||
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,f=this.dict;for(f.clear();++a<c;)f.add(a,b[a].toText())};u.filtered=function(){return this.lastSearch||""};u.filter=function(a,b){var c,f=this.listTable,d=this.lastFound,e=this.lastSearch;if(a){if(e===a)return d||0;if(e&&!d&&0===a.indexOf(e))return 0;c=this.dict.find(a)}this.lastSearch=e=a;this.lastFound=d=c?c.length:
117
- this.po.length;c?f.filter(c):f.unfilter();b||this.fire("poFilter",[e,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;a=c.replace(/(?:^| +)po-[a-z]+/g,"")+" "+l(a);a!==c&&h(b).attr("class",a)}};u.save=function(a){var b=
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};u.reload=function(){var a=this,b,c=a.listCell,f=a.listTable,d=a.po,e=d&&d.locale(),k=e&&e.isRTL(),
119
- n=d&&d.length||0;if(!d||!d.row)return c&&c.clear().header("Error").contents("Invalid messages list"),!1;a.targetLocale=e;a.lastSearch&&(a.lastSearch="",a.lastFound=n,a.fire("poFilter",["",n]));f&&(b=f.thead().distribution());a.listTable=f=c.tabulate({eachCol:function(b){var c,f,d=a.getListColumns(),e=a.getListHeadings();for(f in d)c=d[f],b(c,f,e[c])},eachRow:function(b){d.each(function(c,f){b(f.idx,a.getListEntry(f),l(f))})},sort:a.getSorter()});var g,c=a.getListColumns();for(g in c)f.sortable(c[g]);
120
- b&&f.thead().distribute(b);f.tbody().$(k?"addClass":"removeClass",["is-rtl"]);a.fire("poLoad");return!!n};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())}),b=this.targetCell)&&(c=0,b.eachTextarea(function(b){b.val(a.translation(c++))}));
121
- this.updateListCell(a,"source");this.updateListCell(a,"target");return this};u.reloadMessage=function(a){var b=this.sourceCell,c=this.targetCell,f;this.pasteMessage(a);b&&this.setSrcMeta(a,b)&&b.redraw();c&&(f=c.navigated()||0,f=this.setTrgMeta(a,f,c),!b&&this.setSrcMeta(a,c)&&(f=!0),f&&c.redraw());return this};u.setStatus=function(){return null};u.setSrcMeta=function(a,b){var f=[],d,e=!1,k=this.$smeta,n=this.labels,g=[],r=a.tags(),z=r&&r.length;if(d=a.context())g.push("<span>"+y(n[q])+"</span>"),
122
- g.push("<mark>"+y(d)+"</mark>");if(z&&this.getTag)for(g.push("<span>Tagged:</span>");0<=--z;)(d=this.getTag(r[z]))&&g.push('<mark class="tag">'+y(d.mod_name)+"</mark>");g.length&&f.push(g.join(" "));if(this.getMono()&&(d=a.refs())&&(r=d.split(/\s/),z=r.length)){for(g=[];0<=--z;)d=r[z],g.push("<code>"+y(d)+"</code>");f.push('<p class="has-icon icon-file">'+g.join(" ")+"</p>")}(d=a.notes())&&f.push('<p class="has-icon icon-info">'+y(d,!0)+"</p>");f.length?(k||(k=b.find("div.meta"),k.length||(k=h('<div class="meta"></div>').insertAfter(b.header())),
123
- c(this,k,"poMeta"),this.$smeta=k),k.html(f.join("\n")).show(),e=!0):k&&k.text()&&(k.text("").hide(),e=!0);return e};u.setTrgMeta=function(a,b,c){var f=[],d=!1,e=this.$tmeta;b=(a=a.errors(b))&&a.length;var k;if(b)for(k=0;k<b;k++)f.push('<p class="has-icon icon-warn">'+y(a[k],!0)+".</p>");f.length?(e||(e=c.find("div.meta"),e.length||(e=h('<div class="meta"></div>').insertAfter(c.header())),this.$tmeta=e),e.html(f.join("\n")).show(),d=!0):e&&e.text()&&(e.text("").hide(),d=!0);return d};u.loadMessage=
124
- function(b){function c(a,b){var f=b?a.split(" "):a.split(" ",1);a=f[0];"="===a.charAt(0)&&(a=a.substr(1),a=["zero","one","two"][Number(a)]||a);f[0]=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();return f.join(" ")}function e(a,f){var n=J,h=L[r];a.off();a.titled()!==h&&d(a,h,f||"en");h=!1;p.setSrcMeta(b,a)&&(h=!0);if(b.plural()){var h=-1,q=[],l=[],s=a.id+"-",m=b.sourceForms()||f&&f.plurals||["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]=
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),n).setStrf(D).setMode(y).setInvs(C)});a.lock();n&&a.each(function(a,b){g(a,b)})}else h&&a.redraw(),a.textarea(b.source(),n).setStrf(D).setMode(y).setInvs(C),n&&g(a,0)}function g(c,d){c.on(f,function(a,c){b.source(c,d);0===d&&p.updateListCell(b,"source");p.unsave(b,d)}).on(n,function(){0===d&&p.po.reIndex(b);p.dict&&p.rebuildSearch();p.fire(a,[b])})}function h(a,f,e){M&&
126
- a.eachTextarea(function(a){a.ping()});a.off();var k=f.isKnown()&&f.label||"Target",k=v(L[A],k);a.titled()!==k&&d(a,k,f);k=!1;!this.sourceCell&&p.setSrcMeta(b,a)&&(k=!0);p.setTrgMeta(b,e,a)&&(k=!0);p.setStatus(b,e);if(b.pluralized()){var n=[],g=[],r=a.id+"-",z=b.targetForms()||f.plurals||["One","Other"],k=z.length,q=function(a){var b=z[a];g.push(b?c(b,!0):"Form "+a);n.push(r+String(a))};for(b.each(q);(f=n.length)<k;)q(f);a.splitx.apply(a,n);a.each(function(a,c){var f=M&&!b.disabled(c);a.textarea(b.translation(c),
127
- f).setStrf(D).setMode(y).setInvs(C);M&&l(a,c)});a.navigize(g,e||null).on("wgTabSelect",function(c,f){var d=M&&c.cell.editable();d&&d.focus();p.setTrgMeta(b,f,a);p.setStatus(b,f);p.fire("poTab",[f])})}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(f,function(a,c,f){b.translate(c,d);0===d&&p.updateListCell(b,"target");b.fuzzy(d)?p.fuzzy(!1,b,d):p.unsave(b,d);""===c?(p.fire("poEmpty",[!0,b,d]),p.setStatus(b,d)):""===f&&
128
- (p.fire("poEmpty",[!1,b,d]),p.setStatus(b,d))}).on(n,function(){p.dict&&p.rebuildSearch();p.fire(a,[b])})}function m(c){c.off();var e=L[q];c.titled()!==e&&(d(c,e),p.setStatus(null));c.textarea(b.context(),!0).setMode(y).setInvs(C);X&&c.on(f,function(a,c){b.context(c);p.updateListCell(b,"source");p.unsave(b,O)}).on(n,function(){p.po.reIndex(b);p.dict&&p.rebuildSearch();p.fire(a,[b])})}function u(a){var c=L[s];a.titled()!==c&&d(a,c);a.off().on(f,function(a,c){b.comment(c);p.fire("poComment",[b,c]);
129
- p.unsave(b,O)}).textarea(b.comment(),!0)}var p=this,y=p.mode,E=b.isHTML(),C=p.inv||!1,x=this.fmt||null,D=b.format()||null,I=b.is(p.active),O=0,T=p.sourceCell,S=p.targetCell,U=p.contextCell,V=p.commentCell,M=p.editable.target,J=p.editable.source,X=p.editable.context,P=B,Y=p.sourceLocale,W=p.targetLocale,L=p.labels;p.html!==E&&(p.html=E,"code"!==p.mode&&(y=E?"html":"",p.setMode(y)));p.active=b;T&&e(T,Y);U&&m(U);S&&W&&(O=S.navigated()||0,h(S,W,O));V&&u(V);P&&(P.exists()||(P=P.parent()),(E=P.editable())&&
130
- E.focus());x!==D&&(this.fmt=D);I||p.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=this.t,c=this.mode||"",f=this.inv||!1,d=this.fmt;this.unloadActive();this.setStatus(null);(a=this.commentCell)&&
131
- a.textarea("",!1);if(a=this.sourceCell)a.textarea("",!1).setStrf(d).setMode(c).setInvs(f),a.title(b._x("Source text not loaded","Editor")+":");if(a=this.contextCell)a.textarea("",!1).setMode(c).setInvs(f),a.title(b._x("Context not loaded","Editor")+":");if(a=this.targetCell)a.textarea("",!1).setStrf(d).setMode(c).setInvs(f),a.title(b._x("Translation not loaded","Editor")+":");this.fire("poSelected",[null])};u.updateListCell=function(a,b){var c=this.getListColumns()[b],f=this.po.indexOf(a);(f=this.listTable.row(f))&&
132
- f.rendered&&f.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 f=b.fuzzy(c);!0!==a||f?!1===a&&f&&this.flag(0,b,c)&&this.fire("poFuzzy",[b,!1,c]):this.flag(4,b,c)&&this.fire("poFuzzy",[b,!0,c]);return f};u.flag=function(b,c,f){if(!c){c=this.active;f=this.getTargetOffset();if(null==f)return null;f&&c.targetForms()&&(f=0)}var d=c.flagged(f);if(null==b)return d;if(d===b||b&&!c.translated(f)||!this.fire("poFlag",
133
- [b,d,c,f]))return!1;c.flag(b,f);this.fire(a,[c])&&this.unsave(c,f);this.setStatus(c,f);return!0};u.add=function(b,c){var f,d=this.po.get(b,c);d?f=this.po.indexOf(d):(f=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(f);return d};u.del=function(b){if(b=b||this.active){var c=this.lastSearch,f=this.po.del(b);null!=f&&(this.unsave(b),this.fire("poDel",[b]),this.fire(a,[b]),this.reload(),this.dict&&
134
- this.rebuildSearch(),this.active&&this.active.equals(b)&&this.unloadActive(),this.po.length&&(c&&this.filter(c),this.active||(f=Math.min(f,this.po.length-1),this.listTable.select(f))))}};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=this.sourceCell;b&&b.refs()&&c&&this.setSrcMeta(b,c)&&c.redraw()}return this};u.getMono=function(){return"code"===this.mode};
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();a&&a.focus();return this};u=null;return g}({},v,x));m.register("$13",function(g,e,E){function l(){this.init()._validate();
136
- this.sourceLocale={lang:"en",label:"English",plurals:["One","Other"]}}function d(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 d("cloud").attr("title",a.labels[8]+" (Ctrl-U)").click(function(b){b.preventDefault();a.focus().fuzzy(!a.fuzzy())})}function b(a){return d("robot").attr("title",a.labels[9]+" (Ctrl-J)").click(function(b){b.preventDefault();a.fire("poHint")})}e=m.require("$24",
137
- "base.js");g.init=function(a){var b=new l;a=b.setRootCell(a);var c=a.splity("po-list","po-edit"),d=c[0],e=c[1],c=e.splitx("po-trans","po-comment"),g=c[0],h=c[1].header("Loading.."),c=g.splity("po-source","po-target"),g=c[0].header("Loading.."),c=c[1].header("Loading..");a.distribute([0.34]);e.distribute([0.8]);b.setListCell(d);b.setSourceCell(g);b.setTargetCell(c);b.commentCell=h;b.editable.source=!1;return b};e=l.prototype=e.extend(l);e.getListHeadings=function(){var a=this.t||{_x:function(a){return a}},
138
- b=[a._x("Source text","Editor")];this.targetLocale&&(b[1]=a._x("Translation","Editor"));return b};e.getListColumns=function(){var a={source:0};this.targetLocale&&(a.target=1);return a};e.getListEntry=function(a){var b=this.cellText,c=[function(){var c,d=b(a.source()||""),e=a.context();return e?(c=E.createElement("p"),c.appendChild(E.createElement("mark")).innerText=e,c.appendChild(E.createTextNode("\u00a0"+d)),c):d}];this.targetLocale&&(c[1]=function(){return b(a.translation()||"")});return c};e.stats=
139
- function(){var a=this.po,b=a.length,c=0,d=0,e=0;a.each(function(a,b){b.fuzzy()?e++:b.translated()?c++:d++});return{t:b,p:c.percent(b)+"%",f:e,u:d}};e.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",[!1])),this.active&&this.loadMessage(this.active))};e.lock=function(){var a=this._unlocked;
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))};e.locked=function(){return!this._unlocked};e.setStatus=function(a){var f=this.$tnav;if(null==a)f&&(f.remove(),this.$tnav=null);else{f||(this.$tnav=f=h("<nav></nav>").append(c(this)).append(b(this)).appendTo(this.targetCell.header()));var d=
141
- [];a.translated()?a.fuzzy()&&d.push("po-fuzzy"):d.push("po-empty");f.attr("class",d.join(" "))}};e.getSorter=function(){function a(a,c){var d=a.weight(),e=c.weight();return d===e?b(a,c):d>e?-1:1}function b(a,c){return a.hash().localeCompare(c.hash())}var c=this;return function(d){var e=c.po,g=c.locked()?a:b;d.sort(function(a,b){return g(e.row(a),e.row(b))})}};return g}({},v,x));m.register("$14",function(g,e,m){var l={copy:66,clear:75,save:83,fuzzy:85,next:40,prev:38,enter:13,invis:73,hint:74},d={38:!0,
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;a.setInvs(!a.getInvs())}};g.init=function(b,a){function f(a){if(a.isDefaultPrevented()||
143
- !a.metaKey&&!a.ctrlKey)return!0;var f=a.which;if(!g[f])return!0;var e=c[f];if(!e)throw Error("command undefined #"+f);if(a.altKey||a.shiftKey&&!d[f]||!1===e(a,b))return!0;a.stopPropagation();a.preventDefault();return!1}var g={};h(a||e).on("keydown",f);return{add:function(a,b){c[l[a]]=b;return this},enable:function(){var a,b;for(b in arguments)a=l[arguments[b]],g[a]=!0;return this},disable:function(){h(a||e).off("keydown",f);b=a=g=null}}};return g}({},v,x));m.register("$25",function(g,e,h){function l(){this.reIndex([])}
144
- g.init=function(){return new l};e=l.prototype;e.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};e.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};e.indexOf=function(d){d=this.ords[d];return null==d?-1:d};e.add=function(d,c){var b=this.ords[d];null==b&&(this.keys[this.length]=d,b=this.ords[d]=
145
- this.length++);this[b]=c;return b};e.get=function(d){return this[this.ords[d]]};e.has=function(d){return null!=this.ords[d]};e.del=function(d){this.cut(this.ords[d],1)};e.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};e.each=function(d){for(var c=-1,b=this.keys,a=this.length;++c<a;)d(b[c],this[c],c);return this};e.sort=function(d){for(var c=-1,b=this.length,a,f=this.keys,e=this.ords,g=[];++c<b;)g[c]=[this[c],f[c]];g.sort(function(a,
146
- b){return d(a[0],b[0])});for(c=0;c<b;c++)a=g[c],this[c]=a[0],a=a[1],f[c]=a,e[a]=c;return this};e.join=function(d){return[].join.call(this,d)};e=null;return g}({},v,x));m.register("$26",function(g,e,h){function l(d,c){var b=RegExp("^.{0,"+(d-1)+"}["+c+"]"),a=RegExp("^[^"+c+"]+");return function(c,e){for(var g=c.length,k;g>d;){k=b.exec(c)||a.exec(c);if(null==k)break;k=k[0];e.push(k);k=k.length;g-=k;c=c.substr(k)}0!==g&&e.push(c);return e}}g.create=function(d){function c(a){return k[a]||"\\"+a}var b,
147
- a,f=/(?:\r\n|[\r\n\v\f\u2028\u2029])/g,e=/[ \r\n]+/g,g=/[\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,e){if(!e)return b+' ""';e=e.replace(g,c);var k=0;e=e.replace(f,function(){k++;return"\\n\n"});if(!(k||d&&d<e.length+b.length+3))return b+' "'+e+'"';var n=[b+' "'],h=e.split("\n");if(a)for(var l=-1,m=h.length;++l<m;)a(h[l],n);else n=n.concat(h);
148
- return n.join('"\n"')+'"'},prefix:function(a,b){var c=a.split(f);return b+c.join("\n"+b)},refs:function(a){a=a.replace(e," ",a);b&&(a=b(a,[]).join("\n#: "));return"#: "+a}}};return g}({},v,x));m.register("$40",function(g,e,h){function l(){this.length=0}g.init=function(){return new l};e=l.prototype;e.push=function(d){this[this.length++]=d;return this};e.sort=function(d){[].sort.call(this,d);return this};e.each=function(d){for(var c=-1,b=this.length;++c<b;)d(c,this[c]);return this};return g}({},v,x));
149
- m.register("$27",function(g,e,h){function l(){}g.extend=function(d){return d.prototype=new l};e=l.prototype=m.require("$38","abstract.js").init(["add","load"]);e.row=function(d){return this.rows[d]};e.lock=function(d){return this.locale(d||{lang:"zxx",label:"Unknown",nplurals:1,pluraleq:"n!=1"})};e.unlock=function(){var d=this.loc;this.loc=null;return d};e.locale=function(d){null==d?d=this.loc:this.loc=d=m.require("$37","locale.js").cast(d);return d};e.each=function(d){this.rows.each(d);return this};
150
- e.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};e.get=function(d){return this.rows&&this.rows.get(d)};e.has=function(d){return this.rows&&this.rows.has(d)};e.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}};e.reIndex=function(d,c){var b=this.indexOf(d),a=d.hash(),f=this.rows.indexOf(a);return f===
151
- b?b:-1!==f?(c=(c||0)+1,d.source("Error, duplicate "+String(c)+": "+d.source()),this.reIndex(d,c)):this.rows.key(b,a)};e.sort=function(d){this.rows.sort(d);return this};e["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};e=null;return g}({},v,x));m.register("$28",function(g,e,h){function l(c,b,a){if(null==a)return c[b]||"";c[b]=a||"";return c}function d(){this._id=this.id=""}g.extend=function(c){return c.prototype=new d};e=d.prototype;
152
- e.flag=function(c,b){var a=this.flg||(this.flg=[]);if(null!=b)a[b]=c;else for(var f=Math.max(a.length,this.src.length,this.msg.length);0!==f--;)a[f]=c;return this};e.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};e.flags=function(){for(var c,b={},a=[],f=this.flg||[],d=f.length;0!==d--;)c=f[d],b[c]||(b[c]=!0,a.push(c));return a};e.flaggedAs=function(c,b){var a=this.flg||[];if(null!=b)return c===a[b]||0;for(var f=a.length;0!==f--;)if(a[f]===
153
- c)return!0;return!1};e.fuzzy=function(c,b){var a=this.flaggedAs(4,c);null!=b&&this.flag(b?4:0,c);return a};e.source=function(c,b){if(null==c)return this.src[b||0]||"";this.src[b||0]=c;return this};e.plural=function(c,b){if(null==c)return this.src[b||1]||"";this.src[b||1]=c||"";return this};e.sourceForms=function(){return this.srcF};e.targetForms=function(){return this.msgF};e.each=function(c){for(var b=-1,a=this.src,f=this.msg,d=Math.max(a.length,f.length);++b<d;)c(b,a[b],f[b]);return this};e.count=
154
- function(){return Math.max(this.src.length,this.msg.length)};e.pluralized=function(){return 1<this.src.length||1<this.msg.length};e.translate=function(c,b){this.msg[b||0]=c||"";return this};e.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};e.translation=function(c){return this.msg[c||0]||""};e.errors=function(c){return this.err&&this.err[c||0]||[]};e.translated=function(c){if(null!=c)return!!this.msg[c];var b=this.msg,a=b.length;
155
- for(c=0;c<a;c++)if(!b[c])return!1;return!0};e.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};e.comment=function(c){return l(this,"cmt",c)};e.notes=function(c){return l(this,"xcmt",c)};e.refs=function(c){return l(this,"rf",c)};e.format=function(c){return l(this,"fmt",c)};e.context=function(c){return l(this,"ctx",c)};e.tags=function(){return this.tg};e.toString=e.toText=function(){return this.src.concat(this.msg,this.id,this.ctx).join(" ")};
156
- e.weight=function(){var c=0;this.translation()||(c+=2);this.fuzzy()&&(c+=1);return c};e.equals=function(c){return this===c||this.hash()===c.hash()};e.hash=function(){return this.id};e.normalize=function(){for(var c=this.msg.length;0!==c--;)this.msg[c]=this.src[c]||""};e.disabled=function(c){return!!(this.lck||[])[c||0]};e.disable=function(c){(this.lck||(this.lck=[]))[c||0]=!0;return this};e.saved=function(c){var b=this.drt;if(null==b)return!0;if(null!=c)return!b[c];for(c=b.length;0!==c--;)if(b[c])return!1;
157
- return!0};e.unsave=function(c){(this.drt||(this.drt=[]))[c||0]=!0;return this};e.save=function(c){null==c?this.drt=null:(this.drt||(this.drt=[]))[c]=!1;return this};e.is=function(c){return c&&(c===this||c.idx===this.idx)};e.isHTML=function(c){if(null==c)return this.htm||!1;this.htm=c};e=null;return g}({},v,x));m.register("$15",function(g,e,h){function l(a){return{"Project-Id-Version":"PACKAGE VERSION","Report-Msgid-Bugs-To":"","POT-Creation-Date":a||"","PO-Revision-Date":a||"","Last-Translator":"",
158
- "Language-Team":"",Language:"","Plural-Forms":"","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit"}}function d(a,b){var c=a||"";b&&(c+="\x00"+b);return c}function c(a){var b=e.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 f(a,b){this.src=[a||""];this.msg=[b||""]}g.create=function(b){return new a(b)};h=m.require("$27",
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 f=String(b);f.length<c;)f="0"+f;return f}var b=new Date,c=b.getUTCFullYear(),f=b.getUTCMonth()+1,d=b.getUTCDate(),e=b.getUTCHours(),b=b.getUTCMinutes();return a(c,4)+"-"+a(f,2)+"-"+a(d,2)+" "+a(e,2)+":"+a(b,2)+"+0000"};h.header=function(a,b){var c=this.head||(this.head={});if(null==b)return this.headers()[a]||"";c[a]=b||"";return this};h.headers=
160
- function(a){var b,c=this.now(),f=this.head||(this.head=l(c));if(null!=a){for(b in a)f[b]=a[b];return this}var d=this.locale();a={};for(b in f)a[b]=String(f[b]);d?(a.Language=String(d)||"zxx",a["Language-Team"]=d.label||a.Language,a["Plural-Forms"]="nplurals="+(d.nplurals||"2")+"; plural="+(d.pluraleq||"n!=1")+";",b="PO-Revision-Date"):(a.Language="",a["Plural-Forms"]="nplurals=INTEGER; plural=EXPRESSION;",a["PO-Revision-Date"]="YEAR-MO-DA HO:MI+ZONE",b="POT-Creation-Date");a[b]||(a[b]=c);a["X-Generator"]=
161
- "Loco https://localise.biz/";return a};h.get=function(a,b){var c=d(a,b);return this.rows.get(c)};h.add=function(a,b){a instanceof f||(a=new f(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,e,g,h,l,m,p=(g=this.locale())&&g.nplurals||2,y=[];++b<a.length;)d=a[b],null==d.parent?(e=d.source||d.id,g=d.target||"",h=d.context,e||h?(l=new f(e,g),l._id=d._id,
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 g&&(this.head=g,this.headcmt=d.comment)):y.push(d);for(b=-1;++b<y.length;)try{d=y[b];e=d.source||d.id;l=a[d.parent]&&a[d.parent].message;if(!l)throw Error("parent missing for plural "+e);m=d.plural;1===
163
- m&&l.plural(e);m>=p||(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=[],e=[],g=this.headers(),h=!c,l=c&&c.nplurals||2,m=this.fmtr||b();g[c?"PO-Revision-Date":"POT-Creation-Date"]=this.now();for(a in g)e.push(a+": "+g[a]);e=new f("",e.join("\n"));e.comment(this.headcmt||"");h&&e.fuzzy(0,!0);d.push(e.toString());d.push("");this.rows.each(function(a,
164
- b){a&&(d.push(b.cat(m,h,l)),d.push(""))});return d.join("\n")};h=m.require("$28","message.js").extend(f);h.prev=function(a,b){this._src=[a||""];this._ctx=b};h.hash=function(){return d(this.source(),this.context())};h.toString=function(){return this.cat(b())};h.cat=function(a,b,c){var d,f=[],e;(e=this.cmt)&&f.push(a.prefix(e,"# "));(e=this.xcmt)&&f.push(a.prefix(e,"#. "));d=this.rf;if(e=this._id)d+=(d?" ":"")+"loco:"+e;d&&/\S/.test(d)&&f.push(a.refs(d));!b&&this.fuzzy()&&f.push("#, fuzzy");(e=this.fmt)&&
165
- f.push("#, "+e+"-format");(e=this._ctx)&&f.push(a.prefix(a.pair("msgctxt",e),"#| "));if(e=this._src)e[0]&&f.push(a.prefix(a.pair("msgid",e[0]),"#| ")),e[1]&&f.push(a.prefix(a.pair("msgid_plural",e[1]),"#| "));(e=this.ctx)&&f.push(a.pair("msgctxt",e));f.push(a.pair("msgid",this.src[0]));if(null==this.src[1])f.push(a.pair("msgstr",b?"":this.msg[0]));else for(d=-1,f.push(a.pair("msgid_plural",this.src[1])),e=this.msg||["",""],c=c||e.length;++d<c;)f.push(a.pair("msgstr["+d+"]",b?"":e[d]||""));return f.join("\n")};
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 f,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 g}({},v,x));m.register("$17",function(g,e,m){g.init=function(e,d){function c(){return g||(g=h('<div id="loco-po-ref"></div>').dialog({dialogClass:"loco-modal loco-modal-wide",
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,f=b.length,e=h("<ol></ol>").attr("class",a.type);++d<f;)h("<li></li>").html(b[d]).appendTo(e);e.find("li").eq(a.line-1).attr("class","highlighted");c().dialog("close").html("").dialog("option","title",a.path+":"+a.line).append(e).dialog("open")}}function f(a){a=
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 g;return{load:function(g){c().html('<div class="loco-loading"></div>').dialog("option","title","Loading..").off("dialogopen").dialog("open").on("dialogopen",f);g=h.extend({ref:g,path:d.popath},d.project||{});e.ajax.post("fsReference",g,a,b)}}};return g}({},v,x));m.register("$30",function(g,e,h){function l(d){this.api=d;this.chars=0}g.create=function(d){return new l(d)};e=
169
- l.prototype;e.init=function(d,c){function b(a){var b={length:0,html:a.html,sources:[]};m.push(b);return s[a.html?1:0]=b}function a(a,d){var m=a.source(null,d);if(m&&(a.untranslated(d)||c)){var q=l[m];if(q)q.push(a);else{var q=m.length,v=f.isHtml(m),v=s[v?1:0],u=v.sources;if(v.length+q>h||u.length===k)v=b(v),u=v.sources;u.push(m);l[m]=[a];v.length+=q;e+=q;g+=1}}}var f=this.api,e=0,g=0,k=50,h=5E3,l={},m=[],s=[];b({html:!1});b({html:!0});d.each(function(b,c){a(c,0);a(c,1)});s=null;this.map=l;this.chars=
170
- e;this.length=g;this.batches=m;this.locale=d.locale()};e.abort=function(){this.state="abort";return this};e.dispatch=function(){function d(a,b){function d(c,e,g){b!==g&&(a===e||1<c&&f.source(null,1)===a)&&(f.translate(b,c),n++,y++);return n}if(!c())return!1;if(!b)return!0;var f,e=l[a]||[],k=e.length,h=-1,n;for(v++;++h<k;)if(f=e[h])n=0,f.each(d),n&&g("each",[f]);return!0}function c(){return"abort"===k.state?(h&&(h.abort(),e()),!1):!0}function b(){var b=m.shift(),c;b?(c=b.sources)&&c.length?h.batch(c,
171
- s,b.html,d).fail(a).always(f):f():e()}function a(){k.abort();e()}function f(){p++;g("prog",[p,C]);c()&&b()}function e(){h=m=null;g("done")}function g(a,b){for(var c=u[a]||[],d=c.length;0<=--d;)c[d].apply(null,b)}var k=this,h=k.api,l=k.map,m=k.batches||[],s=k.locale,v=0,p=0,y=0,x=k.length,C=m.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);return this},stat:function(){return{todo:function(){return Math.max(x-
172
- v,0)},did:function(){return v}}}}};return g}({},v,x));m.register("$41",{nn:["no"]});m.register("$31",function(g,e,h){function l(){}g.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,b,a,d){function e(a){for(var g=c.length,k=-1;++k<g&&!1!==d(c[k],a[k]||
173
- "",b););}var g=this;a=a?"html":"plain";var k=this.mapLang(b,m.require("$41","yandex.json"));return g._call({url:"https://translate.yandex.net/api/v1.5/tr.json/translate?format="+a+"&lang=en-"+k,method:"POST",traditional:!0,data:{key:g.key(),text:c}}).done(function(a,b,c){a&&200===a.code?e(a.text||[]):(g.stderr(g.parseError(a)||g.httpError(c)),e([]))}).fail(function(){e([])})};return new l};return g}({},v,x));m.register("$42",{zh:["zh","zh-CN","zh-TW"],he:["iw"],jv:["jw"]});m.register("$32",function(g,
174
- e,h){function l(){}g.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,e=-1;++e<d;)b.push(a[e].message||"");return"Error "+c.error.code+": "+b.join(";")}return""};d.batch=function(c,b,a,d){function e(a){for(var g=c.length,k=-1,h;++k<g&&(h=a[k]||{},!1!==d(c[k],h.translatedText||"",b)););}
175
- var g=this;a=a?"html":"text";var k=g.mapLang(b,m.require("$42","google.json"));return g._call({url:"https://translation.googleapis.com/language/translate/v2?source=en&target="+k+"&format="+a,method:"POST",traditional:!0,data:{key:g.key(),q:c}}).done(function(a,b,c){a.data?e(a.data.translations||[]):(g.stderr(g.parseError(a)||g.httpError(c)),e([]))}).fail(function(){e([])})};return new l};return g}({},v,x));m.register("$43",{nn:["no"],pt:["pt","pt-pt"],sr:["sr-Cyrl","sr-Latn"],sr_RS:["sr-Cyrl"],tlh:["tlh-Latn",
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(g,e,h){function l(){}g.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:""};d.batch=function(c,b,a,d){function e(a){for(var g=-1,k;++g<h&&(k=
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(),"Ocp-Apim-Subscription-Region":g.param("region")||
178
- "global"}}).done(function(a,b,c){a&&a.length?e(a):(g.stderr(g.parseError(a)||g.httpError(c)),e([]))}).fail(function(){e([])})};return new l};return g}({},v,x));m.register("$44",{pt:["pt-PT","pt-BR"]});m.register("$34",function(g,e,h){function l(){}g.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};d.batch=function(c,b,a,d){function e(a){for(var g=
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?e(a.translations):(g.stderr(g.parseError(a)||g.httpError(c)),e([]))}).fail(function(){e([])})};return new l};return g}({},v,x));m.register("$35",function(g,
180
- e,m){function l(){}g.create=function(d){(l.prototype=new d).batch=function(c,b,a,d){function g(a){for(var e=c.length,k=-1;++k<e&&!1!==d(c[k],a[k],b););}var l=e.loco.ajax;a={hook:this.getId(),type:a?"html":"text",locale:String(b),sources:c};var k=h.Deferred();this.abortable(l.post("apis",a,function(a){g(a&&a.targets||[]);k.resolve()},function(){g([]);k.reject()}));return k.promise()};return new l};return g}({},v,x));m.register("$18",function(g,e,v){function l(){this.inf={}}function d(){var a=v.createElement("p"),
181
- b=/&(#\d+|#x[0-9a-f]|[a-z]+);/i,c=/<[a-z]+\s/i,d,e;return{sniff:function(g){if(g===d)return e;d=g;if(b.test(g)||c.test(g))if(a.innerHTML=g,a.textContent!==g)return e=!0;return e=!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")||this.getId()};c.stderr=function(a){var b=
182
- (e.loco||{}).notices||e.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,e=b[c]||b[d]||[],g=e.length;if(0===g)return d;if(1<g)for(var c=c.toLowerCase(),d=-1,h;++d<g;)if(h=e[d],h.toLowerCase().replace("-","_")===c)return h;return e[0]};c.translate=function(a,b,c){return this.batch([a],b,this.isHtml(a),
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 e=a.responseText,g=e&&m.require("$5","json.js").parse(e);d=g&&b.parseError(g)||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=function(a){return(b||(b=d())).sniff(a)};
184
- c.createJob=function(){return m.require("$30","job.js").create(this)};g.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};g.suggest=function(a,b,c,d){var e,g,h=a.length;for(e=0;e<h;e++)g=a[e],g.translate(b,c,d)};var b;return g}({},v,x));m.register("$19",
185
- function(g,e,m){g.init=function(g){function d(){H||(I.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(p)),R=!1);if(C&&J){var a=J,c=h(Q);c.find("span.loco-msg").text(a);K||(c.removeClass("jshide").hide().fadeIn(500),K=
186
- !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(g).find('button[type="submit"]').attr("disabled",!1),h(e).triggerHandler("resize"),B&&B(!0),!0;w&&H?(R||(h(p).removeClass("jshide").hide().fadeIn(500),R=!0),K&&(b(h(Q)),K=!1)):c();h(g).find('input[type="submit"]').attr("disabled",!0);B&&B(!1);return!1}function f(a){var b,c,d=s||{};for(b in d)d.hasOwnProperty(b)&&(c=d[b],a[b]?a[b].value=c:h('<input type="hidden" />').attr("name",
187
- b).appendTo(a).val(c))}function n(a){a.preventDefault();a=h(a.target).serializeArray();q(a);D=!0;return!1}function r(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(p).find("span.loco-msg").text(b.message||"Something went wrong.");J=b.warning||"";b.notice&&u.notices.info(b.notice);if(C)"direct"!==y&&(s=b.creds,f(g),D&&b.success&&u.notices.success(b.success)),
188
- a();else if(b.reason)u.notices.info(b.reason);else if(b=b.prompt){var c=d();c.html(b).find("form").submit(n);c.dialog("option","title",c.find("h2").remove().text());c.find("button.cancel-button").show().click(r);c.find('input[type="submit"]').addClass("button-primary");a();h(e).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",N).post("fsConnect",a,v,x);return a}var s,B,p=
189
- g,y=null,D=!1,C=!1,u=e.loco,w=g.path.value,F=g.auth.value,N=g["loco-nonce"].value,I=h(p).find("button.button-primary"),Q=m.getElementById(p.id+"-warn"),R=!1,K=!1,J="",H;u.notices.convert(Q).stick();g.connection_type?(s={},s.connection_type=g.connection_type.value,C=!0):w&&F&&q({path:w,auth:F});a();return{applyCreds:function(a){if(a.nodeType)f(a);else{var b,c=s||{};for(b in c)c.hasOwnProperty(b)&&(a[b]=c[b])}return this},setForm:function(b){g=b;a();f(b);return this},connect:function(){w=g.path.value;
190
- F=g.auth.value;q(h(g).serializeArray());return this},listen:function(a){B=a;C&&a(!0);return this},authed:function(){return C}}};return g}({},v,x));m.register("$20",function(g,e,v){function l(e,g,h,k){g="n"===h?c(g):b(g);k&&(g=a(g));return d([].sort,[g])(e)}function d(a,b){return function(c){a.apply(c,b);return c}}function c(a){return function(b,c){var d=b&&b[a]||0,e=c&&c[a]||0;return d===e?0:d>e?1:-1}}function b(a){return function(b,c){return(b&&b[a]||"").localeCompare(c&&c[a]||"")}}function a(a){return function(b,
191
- c){return-1*a(b,c)}}g.init=function(a){function b(a){var c=-1,d=a.length;for(h("tr",p).remove();++c<d;)p.appendChild(a[c].$)}function c(a){q=a?x.find(a,d):d.slice(0);v&&(a=e[v],q=l(q,v,a.type,a.desc));b(q)}var d=[],e=[],g=0,q,s,v,p=a.getElementsByTagName("tbody")[0],y=a.getElementsByTagName("thead")[0],x=m.require("$10","fulltext.js").init();y&&p&&(h("th",y).each(function(a,c){var f=c.getAttribute("data-sort-type");f&&(a=g,h(c).addClass("loco-sort").click(function(c){c.preventDefault();c=a;var f=
192
- e[c],g=f.type,m=!(f.desc=!f.desc);q=l(q||d.slice(0),c,g,m);b(q);s&&s.removeClass("loco-desc loco-asc");s=h(f.$).addClass(m?"loco-desc":"loco-asc").removeClass(m?"loco-asc":"loco-desc");v=c;return!1}),e[g]={$:c,type:f});c.hasAttribute("colspan")?g+=Number(c.getAttribute("colspan")):g++}),h("tr",p).each(function(a,b){var c,f,g,h=[],l={_:a,$:b},m=b.getElementsByTagName("td");for(f in e){c=m[f];(g=c.textContent.replace(/(^\s+|\s+$)/g,""))&&h.push(g);c.hasAttribute("data-sort-value")&&(g=c.getAttribute("data-sort-value"));
193
- switch(e[f].type){case "n":g=Number(g)}l[f]=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 g}({},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(g){return I.$v[g||0]};m.require("$2","html.js");m.require("$3","number.js");m.require("$4","array.js");
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"),init:m.require("$15","po.js").create,
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(g,e){m.require("$20","tables.js").init(e)});D.validate=function(g){return"2.4.6"!==(/^\d+\.\d+\.\d+/.exec(g&&g[0]||"")&&RegExp.lastMatch)?(D.notices.warn("admin.js is the wrong version (2.4.6). Please empty all relevant caches and reload this page."),!1):!0}})(window,document,window.jQuery);
 
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,e,c){function o(){var n=c("#loco-conf > div"),e=n.eq(0).clone(),o=n.length,t="["+o+"]";function i(n,e){var o=e.name.replace("[0]",t);c(e).attr("name",o).val("")}e.attr("id","loco-conf-"+o),e.find("input").each(i),e.find("textarea").each(i),e.find("h2").eq(0).html("New set <span>(untitled)</span>"),e.insertBefore("#loco-form-foot"),f(e.find("a.icon-del"),o),e.hide().slideDown(500),c("html, body").animate({scrollTop:function(n,e){for(var o=n.offsetTop;(n=n.offsetParent)&&n!==e;)o+=n.offsetTop;return o}(e[0])},500)}function f(n,e){return n.click(function(n){return n.preventDefault(),function(n){var e=c("#loco-conf-"+n);e.find('input[name="conf['+n+'][removed]"]').val("1"),e.slideUp(500,function(){c(this).hide().find("table").remove()})}(e),!1})}c("#loco-conf > div").each(function(n,e){f(c(e).find("a.icon-del"),n)}),c("#loco-add-butt").attr("disabled",!1).click(function(n){return n.preventDefault(),o(),!1})}(window,document,jQuery);
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(n,r){var e=n.conf,o=r("#loco-utf8-check")[0].textContent;function t(e,o,a){"success"!==o&&(a=n.ajax.parse(n.ajax.strip(e.responseText))),r("#loco-ajax-check").text("FAILED: "+a).addClass("loco-danger")}1===o.length&&10003===o.charCodeAt(0)||n.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("; ")),n.ajax.post("ping",{echo:"ΟΚ ✓"},function(e,o,a){e&&e.ping?r("#loco-ajax-check").text(e.ping):t(a,o,e&&e.error&&e.error.message)},t);var a,i=e.apis,c=i.length,s=-1,l=n.locale.parse("fr");function u(e,o){return r("#loco-api-"+e).text(o)}function d(e){var a=e.getId();e.key()?e.translate("OK",l,function(e,o){o?u(a,"OK ✓"):u(a,"FAILED").addClass("loco-danger")}):u(a,"No API key")}if(n.apis)for(;++s<c;){a=i[s];try{d(n.apis.create(a))}catch(e){u(a.id,String(e))}}else n.notices.error("admin.js is out of date. Please empty your browser cache.")}(window.loco,window.jQuery);
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(function(e){return e.preventDefault(),b(a+1),!1}).parent().removeClass("jshide"),u(p).click(function(e){return e.preventDefault(),b(a-1),!1}).parent().removeClass("jshide")),b(0)}(window,document,jQuery);
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,n,c){var i,e,a,l,o,r,u,s=t.loco,f=n.getElementById("loco-fs"),d=n.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).focus(p).closest("fieldset").click(p)[0],u=c(l).focus(x).closest("fieldset").click(x)[0],c(o).change(m),m(),s.watchtext(l,function(t){c(l.form).triggerHandler("change")}),{val:function(){var t=b();return t?s.locale.parse(t):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 t=c(h()?a:l).serializeArray();return t[0]&&t[0].value||""}function m(){return y(h()),!0}function y(t){l.disabled=t,a.disabled=!t,u.className=t?"disabled":"active",r.className=t?"active":"disabled",I()}var z,A=(z=d["select-path"],{val:function(){var t=k("path");return t&&t.value},txt:function(){var t=k("path");return t&&c(t.parentNode).find("code.path").text()}});function k(t){var n=function(){var t=c(z).serializeArray()[0];return t&&t.value||null}();return n&&d[t+"["+n+"]"]}function w(e){c(d).find("button.button-primary").each(function(t,n){n.disabled=e})}function I(){var t=g&&g.val(),n=t&&t.isValid()&&"zxx"!==t.lang,e=A&&A.val(),a=n&&e;if(j(t),w(!0),a){var c=A.txt();c!==i?(i=c,f.path.value=i,v.listen(N).connect()):w(!1)}}function N(t){w(!t)}function j(e){var t=c(d),n=e&&e.toString("_")||"",a=n?"zxx"===n?"{locale}":n:"{invalid}";t.find("code.path span").each(function(t,n){n.textContent=a}),t.find("span.lang").each(function(t,n){!function(t,n){n&&"zxx"!==n.lang?(t.setAttribute("lang",n.lang),t.setAttribute("class",n.getIcon())):(t.setAttribute("lang",""),t.setAttribute("class","lang nolang"))}(n,e)})}function B(t){var n=t&&t.redirect;n&&location.assign(n)}c(d).change(I).submit(function(t){return t.preventDefault(),v.applyCreds(d),s.ajax.submit(t.target,B),!1}),j(g.val())}(window,document,jQuery);
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,n){var o=t.loco,i=e.getElementById("loco-fs"),r=e.getElementById("loco-potinit");function c(t){var e=t&&t.redirect;e&&location.assign(e)}n(r).submit(function(t){return t.preventDefault(),o.ajax.submit(t.target,c),!1}),i&&o.fs.init(i).setForm(r)}(window,document,jQuery);
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(function(t){var n=t.target;if(n.hasAttribute("href"))return t.preventDefault(),h.load(n.textContent),!1})}(window,document,window.jQuery);
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.debug(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"]').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"]').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);
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.5.3
7
- Stable tag: 2.4.6
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.4.6 =
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
- * Get stored name in current display language.
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
- if( is_string($name) && '' !== $name ){
189
- // use canonical native name only when current language matches
190
- // deliberately not matching whole tag such that fr_CA would show native name of fr_FR
191
- if( $_name = $this->getNativeName() ){
192
- $locale = self::parse( function_exists('get_user_locale') ? get_user_locale() : get_locale() );
193
- if( $this->lang === $locale->lang ){
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
- if( $locale = $api->getLocale($tag) ){
286
- $this->setName( $locale->getName(), $locale->getNativeName() );
 
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
- public function getProject(){
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::add( new Loco_error_Debug('You have "magic_quotes_gpc" enabled. We recommend you disable this in PHP') );
156
  }
157
  if( get_magic_quotes_runtime() ){
158
- Loco_error_AdminNotices::add( new Loco_error_Debug('You have "magic_quotes_runtime" enabled. We recommend you disable this in PHP') );
 
 
 
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->setUpdate($latest);
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
- // $this->setUpdate('2.0.1-debug');
47
- return $this->view('admin/config/version', compact('breadcrumb','version') );
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
49
 
50
 
51
-
52
  /**
53
  * @param string version
54
- * @return void
55
  */
56
- private function setUpdate( $version ){
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 is valid
122
- try {
123
- $project = $this->getProject();
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( $action );
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( $path = $post->backup ){
 
30
  $target = new Loco_fs_File( $path );
31
  $target->normalize( loco_constant('WP_CONTENT_DIR') );
32
- // parse PO. we'll need it for MO compile anyway
33
- $source = $target->getContents();
34
- $data = Loco_gettext_Data::fromSource( $source );
35
- // backup current master before restoring
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( $path = $post->delete ){
 
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, *.po or *.pot only');
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
- $posize = $pofile->putContents( $data->msgcat() );
117
- $mosize = $mofile->putContents( $data->msgfmt() );
118
- //$jssize = $jsfile && ( $sub = $data->splitJs() ) ? $jsfile->putContents($data->jedize($domain,$sub)) : 0;
119
 
120
- // set debug response data
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
- // TODO push project and locale file
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
- // force the use of remote file system when configured from front end
44
- $api = new Loco_api_WordPressFileSystem;
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
- $api->authorizeSave( $pofile );
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( $bundle )->persist();
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 unless saving template
90
  if( $locale ){
91
- try {
92
- $mofile = $pofile->cloneExtension('mo');
93
- $api->authorizeSave( $mofile );
94
- $bytes = $mofile->putContents( $data->msgfmt() );
95
- $this->set( 'mobytes', $bytes );
96
- Loco_error_AdminNotices::success( __('PO file saved and MO file compiled','loco-translate') );
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
- // single JSON file containing all .js ref from this file
137
- if( $messages = $data->splitJs() ){
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
- $api = new Loco_api_WordPressFileSystem;
69
- // PO may exist already. If not we need to auth create instead of update
70
- if( $pofile->exists() ){
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( $fs = $this->fs ){
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(' %u bytes written to %s',$bytes, $potfile->getRelativePath($content_dir) );
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( $project->getBundle()->getDirectoryPath() );
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
- // file is different so make a backup before overwriting
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
- $bytes = $pofile->putContents( $po->msgcat() );
 
117
  Loco_cli_Utils::debug('+ %u bytes written to %s',$bytes, $pofile->basename());
118
  $updated++;
119
  // compile MO
120
- $bytes = $mofile->putContents( $po->msgfmt() );
121
- Loco_cli_Utils::debug('+ %u bytes written to %s',$bytes, $mofile->basename());
122
- // Done PO/MO pair
 
 
 
 
 
 
 
 
 
 
 
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' => 1,
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.4.' === substr($new,0,4) && '2.4.' !== substr($old,0,4) ){
173
- Loco_error_AdminNotices::info( __('Loco Translate 2.4 supports third party translation providers. Set up your API keys in the plugin settings!','loco-translate') )
174
- ->addLink( Loco_mvc_AdminRouter::generate('config-apis'), __('Settings','loco-translate') )
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 ! $this->extension();
461
  }
462
 
463
 
@@ -575,14 +575,19 @@ class Loco_fs_File {
575
  * @return Loco_fs_File
576
  */
577
  public function cloneExtension( $ext ){
578
- $snip = strlen( $this->extension() );
 
 
 
 
 
 
 
 
 
 
579
  $file = clone $this;
580
- if( $snip ){
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 bool whether rotation
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($this->master);
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 false;
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
- $name = $this->po->filename();
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 LocoPoMessage[] pre-compiled messages
170
  * @return string
171
- *
172
- public function jedize( $domain, array $po ){
173
  $head = $this->getHeaders();
174
- // start locale_data with JED header
175
- $data = array( '' => array (
176
- 'domain' => $domain,
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['po-revision-date'],
191
- 'generator' => $head['x-generator'],
 
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 array custom headers
242
  * @return Loco_gettext_Data
243
  */
244
- public function localize( Loco_Locale $locale, array $custom = null ){
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
- // only set absent or empty headers from default list
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
- $headers = $this->getHeaders();
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 alterered
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', 'createFromFormat') ){
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
- * @var array [ $subdir, $domain, $locale ]
 
11
  */
12
  private $context;
13
 
14
  /**
15
- * @var array
 
16
  */
17
- private $lock = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = $lc_lang_dir.$subdir.'/'.$domain.'-'.$locale.'.mo';
91
  }
92
-
93
- // else load_textdomain must have been called directly to bypass locale filters
94
  else {
95
- $snip = strlen($wp_lang_dir);
96
- // direct file loads must be under WP_LANG_DIR if we are to map them
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
- * `load_textdomain_mofile` filter callback
114
- * @param string
 
115
  * @param string
116
  * @return string
117
  */
118
- public function filter_load_textdomain_mofile( $mopath, $domain ){
119
- // 2.0.14 changed text domain from "loco" to "loco-translate"
120
- // so if file doesn't exist, there's no harm in trying the legacy file name
121
- if( 'loco-translate' === $domain && ! file_exists($mopath) ){
122
- $mopath = str_replace('/loco-translate-','/loco-',$mopath);
 
 
 
123
  }
124
- return $mopath;
 
 
 
 
 
 
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 require "get" method to access raw properties (WP_Theme)
32
- if( method_exists($wp, 'get') && ( $value = $wp->get($prop) ) ){
33
- return $value;
 
 
 
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 RuntimeException('Read only');
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
- // .php extensions configured in plugin options
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( '/>\s+</', '><', $src ) );
23
  }
24
 
25
 
26
- public function assertSameHtml( $expect, $actual, $message = null ){
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->assertInternalType('array', $raw, $message );
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
- $help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/settings');
8
- $fs_help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/manual/filesystem');
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"><?php esc_html_e('Compiling MO files','loco-translate')?></th>
21
- <td>
22
- <fieldset>
23
- <legend class="screen-reader-text">
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"><?php esc_html_e('Saving PO/POT files','loco-translate')?></th>
 
 
 
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--num_backups" value="<?php printf('%u',$opts->num_backups)?>" />
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"><?php esc_html_e('Syncing PO files','loco-translate')?></th>
 
 
 
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
- <!--tr>
132
- <th scope="row"><?php esc_html_e('POT template files','loco-translate')?></th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  <td>
134
  <fieldset>
 
 
 
135
  <p>
136
- <label for="loco--pot_alias">
137
- < ?php esc_html_e('Look for non-standard names:','loco-translate')? >
 
 
 
 
 
 
 
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"><?php esc_html_e('File system access','loco-translate')?></th>
 
 
 
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"><?php esc_html_e('Grant access to roles','loco-translate')?></th>
 
 
 
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 self::e($help)?>" target="_blank"><?php esc_html_e('Documentation','loco-translate')?></a>
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'), $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,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 http://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')
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 $file Loco_mvc_FileParams */
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 Loco_mvc_HiddenFields */
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 Loco_mvc_ViewParams $params */
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
- Your file must be named as shown above where <code>{locale}</code> is the language code, e.g. <code><?php $params->e('locale')?></code>.
 
 
 
 
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" />